General > Русский (ru)
Посетитель проигнорировал приглашение и оно было закрыто автоматически
(1/1)
asales:
"Посетитель проигнорировал приглашение и оно было закрыто автоматически"
То что мы узнаем, что посетитель не проигнорировал никак, это круто. Но как бы сделать, чтобы окно не мозолило глаза?
Надо бы, чтобы после этого сообщения окно автоматически закрылось секунд через 5-10.
Знаю про правило "1 вопрос - 1 тема", но вопрос смежный.
У нас на сайте 2000 человек в день(уникальных). Одновременно 50-100. Если разослать всем приглашения, то окон становится очень много и сложно по ним ориентироваться, если кто то принял приглашение, то это окно не найти быстро...
asales:
Решение:
Изменяете в БД
--- Code: ---Посетитель проигнорировал приглашение и оно было закрыто автоматически
--- End code ---
на
--- Code: ---Посетитель проигнорировал приглашение и оно было закрыто автоматически<script type="text/javascript">window.close();</script>
--- End code ---
и
--- Code: ---Посетитель отклонил приглашение
--- End code ---
на
--- Code: ---Посетитель отклонил приглашение<script type="text/javascript">window.close();</script>
--- End code ---
В /libs/common/string.php заменить всё на
--- Code: ---<?php
/*
* This file is a part of Mibew Messenger.
*
* Copyright 2005-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
function unicode_urldecode($url)
{
preg_match_all('/%u([[:alnum:]]{4})/', $url, $a);
foreach ($a[1] as $uniord) {
$dec = hexdec($uniord);
$utf = '';
if ($dec < 128) {
$utf = chr($dec);
} elseif ($dec < 2048) {
$utf = chr(192 + (($dec - ($dec % 64)) / 64));
$utf .= chr(128 + ($dec % 64));
} else {
$utf = chr(224 + (($dec - ($dec % 4096)) / 4096));
$utf .= chr(128 + ((($dec % 4096) - ($dec % 64)) / 64));
$utf .= chr(128 + ($dec % 64));
}
$url = str_replace('%u' . $uniord, $utf, $url);
}
return urldecode($url);
}
function cut_string($string, $length = 75, $ellipsis = '')
{
$result = '';
if (strlen($string) > $length) {
$splitstring = explode("[__cut__]", wordwrap($string, $length, "[__cut__]", true));
$result = $splitstring[0] . $ellipsis;
} else {
$result = $string;
}
return $result;
}
/**
* Simple HTML sanitation.
*
* Includes some code from the PHP StripAttributes Class For XML and HTML.
*
* @param string $string Target string
* @param string $tags_level Sanitation level for tags. Available values are
* "high", "moderate" and "low".
* @param string $attr_level Sanitation level for attributes. Available values
* are "high", "moderate" and "low".
* @return string Sanitized string with stripped dangerous tags and attributes.
*
* @author David (semlabs.co.uk)
* @copyright (c) 2009, David (semlabs.co.uk)
* @license MIT
* @link http://semlabs.co.uk/journal/php-strip-attributes-class-for-xml-and-html
*/
function sanitize_string($string, $tags_level = 'high', $attr_level = 'high')
{
if ($string !== 'Посетитель отклонил приглашение<script type="text/javascript">window.close();</script>' and $string !== 'Посетитель проигнорировал приглашение и оно было закрыто автоматически<script type="text/javascript">window.close();</script>'){
$sanitize_tags = array(
'high' => '',
'moderate' => '<span><em><strong><b><i><br>',
'low' => '<span><em><strong><b><i><br><p><ul><ol><li><a><font><style>',
);
$sanitize_attributes = array(
'high' => array(),
'moderate' => array('class', 'href', 'rel', 'id'),
'low' => false,
);
$tags_level = array_key_exists($tags_level, $sanitize_tags) ? $tags_level : 'high';
$string = strip_tags($string, $sanitize_tags[$tags_level]);
$attr_level = array_key_exists($attr_level, $sanitize_attributes) ? $attr_level : 'high';
if ($sanitize_attributes[$attr_level]) {
preg_match_all("/<([^ !\/\>\n]+)([^>]*)>/i", $string, $elements);
foreach ($elements[1] as $key => $element) {
if ($elements[2][$key]) {
$new_attributes = '';
preg_match_all(
"/([^ =]+)\s*=\s*[\"|']{0,1}([^\"']*)[\"|']{0,1}/i",
$elements[2][$key],
$attributes
);
if ($attributes[1]) {
foreach ($attributes[1] as $attr_key => $attr) {
if (in_array($attributes[1][$attr_key], $sanitize_attributes[$attr_level])) {
$new_attributes .= ' ' . $attributes[1][$attr_key]
. '="' . $attributes[2][$attr_key] . '"';
}
}
}
$replacement = '<' . $elements[1][$key] . $new_attributes . '>';
$string = preg_replace(
'/' . sanitize_reg_escape($elements[0][$key]) . '/',
$replacement,
$string
);
}
}
}
}
return $string;
}
/**
* Remove dangerous characters from regular expression.
*
* @param string $string Target regular expression
* @return string Sanitized reqular expression
*/
function sanitize_reg_escape($string)
{
$conversions = array(
"^" => "\^",
"[" => "\[",
"." => "\.",
"$" => "\$",
"{" => "\{",
"*" => "\*",
"(" => "\(",
"\\" => "\\\\",
"/" => "\/",
"+" => "\+",
")" => "\)",
"|" => "\|",
"?" => "\?",
"<" => "\<",
">" => "\>",
);
return strtr($string, $conversions);
}
/**
* Wrapper for htmlspecialchars with single quotes conversion enabled by default
*
* @param string $string Target string
* @return string Escaped string
*/
function safe_htmlspecialchars($string)
{
$string = preg_replace('/[\x00-\x08\x0b\x0c\x0e-\x1f]/', '', $string);
return htmlspecialchars($string, ENT_QUOTES);
}
--- End code ---
P.S. Как хорошо, когда пользователи сами находят решение, да?
faf:
--- Quote ---P.S. Как хорошо, когда пользователи сами находят решение, да?
--- End quote ---
Такое? Нет, совсем не хорошо. Искренне надеюсь, что им никто не воспользуется, т.к. это не решение, а грубый костыль. Неочевидный и ломающий возможность будущих обновлений системы.
Я бы посоветовал написать плагин, использующий соответствующие события. Но для этого нужно разбираться, тратить время, а Вам же нужно быстрое решение, вне зависимости от степени его кривизны, да?
Есть такая замечательная аббревиатура, ССЗБ... :-\
N.B.: Вам никто ничего не должен. Не забывайте об этом, пожалуйста.
asales:
--- Quote from: faf on December 21, 2016, 03:22:20 PM ---
--- Quote ---P.S. Как хорошо, когда пользователи сами находят решение, да?
--- End quote ---
Такое? Нет, совсем не хорошо. Искренне надеюсь, что им никто не воспользуется, т.к. это не решение, а грубый костыль. Неочевидный и ломающий возможность будущих обновлений системы.
Я бы посоветовал написать плагин, использующий соответствующие события. Но для этого нужно разбираться, тратить время, а Вам же нужно быстрое решение, вне зависимости от степени его кривизны, да?
Есть такая замечательная аббревиатура, ССЗБ... :-\
N.B.: Вам никто ничего не должен. Не забывайте об этом, пожалуйста.
--- End quote ---
Видимо, было бы лучше, если бы я не публиковал свое решение? Ок, учту на будущее.
Я вижу, полно желающих и без меня, исправлять недостатки системы.
faf:
1. Ещё раз. Предложенные Вами изменения Mibew Messenger (aka "уродливый костыль") приводят к тому, что систему невозможно нормально обновить. Изменения делаются один раз, дальше забываются, и дальше либо систему никто не обновляет (даже если выходят обновления безопасности), либо возникает ситуация "караул, у нас после обновления всё сломалось". Первый вариант, конечно, встречается чаще. В Сети до сих пор полно старых и дырявых установок Mibew 1.6.3 и 1.6.4, например, в т.ч. и потому, что их модифицировали подобным образом.
2. "Недостатки системы" (а в данном случае - отсутствие нужной Вам фичи) можно исправлять по-разному.
Правильный путь - это либо сделать форк проекта на Github-е, что-то исправить и отправить pull request, либо посмотреть документацию, задать правильные вопросы и написать свой плагин.
Ваш путь - это как в анекдоте, когда королю предсказали, что его дочь в 18 лет уколет палец и уснёт, после чего он приказал отрубить ей все пальцы.
Честно говоря, мне безразлична судьба Вашей системы. Но при этом я считаю необходимым предупредить других пользователей об опасности и нежелательности Вашего подхода к реализации данного, требовавшегося Вам функционала.
Navigation
[0] Message Index
Go to full version