51

Re: [Релиз] AnyCode Tool (1.0.0 Beta)

Спасибо за наглядные примеры!

Правда, расширением не пользуюсь, загоняю в манифест и наслаждаюсь.

Поделиться

52 (02.02.2009 20:56 отредактировано knyshow)

Re: [Релиз] AnyCode Tool (1.0.0 Beta)

решение - today_users
хук - in_info_end

//************************************************************************
// knyshow
// список юзеров за сегодня
//************************************************************************
$todays_users = array();
$query = array(
    'SELECT'    =>    'id, username',
    'FROM'       =>    'users',
    'WHERE'    =>    'last_visit>"'.strtotime(gmdate("M d Y")).'"',
    'ORDER BY'   =>    'username'
);
$result = $forum_db->query_build($query) or error(__FILE__, __LINE__);

while(list($id, $username) = $forum_db->fetch_row($result))
{
 if (!$forum_user['is_guest'])
 {
  $todays_users[] = '<a href="'.forum_link($forum_url['user'], $id).'">'.forum_htmlencode($username).'</a>';
 }
 else
 {
  $todays_users[] = forum_htmlencode($username);
 }
}
if (!empty($todays_users))
{
?>
    <div id="brd-todayonline" class="gen-content">
        <h3 class="hn"><span>
<?
 echo $lang_index['Today online'] . implode(', ', $todays_users);
?>
        </span></h3>
    </div>
<?
}

Поделиться

53

Re: [Релиз] AnyCode Tool (1.0.0 Beta)

расширение однозначно мастхэв. Список хукуов кроме как в сорцах посмотреть негде?

Сайт private_joker

Поделиться

54

Re: [Релиз] AnyCode Tool (1.0.0 Beta)

knyshow пишет:

обратите внимание на название таблицы в строке
SELECT id,username FROM users WHERE...
иногда таблица называется pun_users

Лучше строить запросы при помощи штатного query-builder, во-первых запросы становятся совместимыми со всеми поддерживаемыми движком типами БД, во-вторых отпадает проблема префиксов таблиц.

Захочешь — найдешь время, не захочешь — найдешь причину.

Поделиться

55 (02.02.2009 16:25 отредактировано knyshow)

Re: [Релиз] AnyCode Tool (1.0.0 Beta)

Список хукуов кроме как в сорцах посмотреть негде?

вроде бы есть то ли хук эксплорер, то ли... но в сорцах проще имхо - находишь куда нужно вставить, а по близости находишь хук.

при помощи штатного query-builder

а вот с этим еще не разобрался...

UPD: кажется, уже разобрался... код в предыдущем посте изменил.
hcs, если Вам не трудно - пробегитесь глазами плиз - об этом шла речь?

Поделиться

56

Re: [Релиз] AnyCode Tool (1.0.0 Beta)

Да, об этом. Так намного лучше smile

Захочешь — найдешь время, не захочешь — найдешь причину.

Поделиться

57

Re: [Релиз] AnyCode Tool (1.0.0 Beta)

knyshow, просто огромное, человеческое спасибо! smile Просто спас меня smile

Две ложечки дёгтя. Выдает перед списком пользователей:

Notice: Undefined index: Today online in /var/www/vhosts/arsamania.ru/httpdocs/forum/index.php(347) : eval()'d code on line 40

И второе - если я захожу как гость - ники пишутся просто текстом, а если из под аккаунта, то ссылками.

Добавлено спустя 2 минуты 23 секунды:

Ой, мля, с нотисом, сорри, эт я сам тупанул, надо же было язык добавить tongue

PunBB.Ru ☭

Сайт nobody

Поделиться

58 (02.02.2009 20:55 отредактировано knyshow)

Re: [Релиз] AnyCode Tool (1.0.0 Beta)

Да, сорри что не предупредил - у меня форум двуязычный, поэтому внес в ланг-пак параметр 'Today online' == 'Сегодня были замечены:'.

И второе - если я захожу как гость - ники пишутся просто текстом

да, это тоже как бы фишка - могласно моим настройкам форума гости не могут просматривать профайл пользователя. Пока рассматривать набор прав стандартными средствами даже не представляю как и поэтому прописал жестко - если ты гость - наблюдаешь просто ники, без ссылок под ними. Если такое поведение для Вас не логично - используйте такой код хука:

//************************************************************************
// knyshow
// список юзеров за сегодня
//************************************************************************
$todays_users = array();
$query = array(
    'SELECT'    =>    'id, username',
    'FROM'       =>    'users',
    'WHERE'    =>    'last_visit>"'.strtotime(gmdate("M d Y")).'"',
    'ORDER BY'   =>    'username'
);
$result = $forum_db->query_build($query) or error(__FILE__, __LINE__);

while(list($id, $username) = $forum_db->fetch_row($result))
{
  $todays_users[] = '<a href="'.forum_link($forum_url['user'], $id).'">'.forum_htmlencode($username).'</a>';
}
if (!empty($todays_users))
{
?>
    <div id="brd-todayonline" class="gen-content">
        <h3 class="hn"><span>
<?
 echo $lang_index['Today online'] . implode(', ', $todays_users);
?>
        </span></h3>
    </div>
<?
}

просто огромное, человеческое спасибо!

да мне-то за что? код свиснут у (Please log in or register to see this URL), подправлен hcs и вставлен в его же расширение smile
кстати, на информере мне тоже что-то пишут, но я не понимать sad
(Please log in or register to see this URL)

Поделиться

59

Re: [Релиз] AnyCode Tool (1.0.0 Beta)

knyshow, ну теперь спасибо окончательное и бесповоротное!!! wink

PunBB.Ru ☭

Сайт nobody

Поделиться

60

Re: [Релиз] AnyCode Tool (1.0.0 Beta)

Надо немного обезопасить код, в частности вывод ника экранировать, ибо может содержать xss.

Добавлено спустя 1 минуту 44 секунды:

зы заменить $username на  forum_htmlencode($username)

Захочешь — найдешь время, не захочешь — найдешь причину.

Поделиться

61 (02.02.2009 20:54 отредактировано knyshow)

Re: [Релиз] AnyCode Tool (1.0.0 Beta)

спасибо, заменил в обоих случаях.

Поделиться

62

Re: [Релиз] AnyCode Tool (1.0.0 Beta)

Хорошее решение. Теперь ему не хватает цветовой раскраски по группам smile

Захочешь — найдешь время, не захочешь — найдешь причину.

Поделиться

63

Re: [Релиз] AnyCode Tool (1.0.0 Beta)

а ракраски по группам я так и не нашел... м.б. что-то на информере проскакивало, но по незнанию языка...
кароче, такого, чтобы сделать админов-гадов голубыми никами, злых модераторов - желтыми... не нашел.

Поделиться

64

Re: [Релиз] AnyCode Tool (1.0.0 Beta)

yikes Все работало, и вдруг исчезло! Никаких нотисов, никаких ошибок, просто как будто нет этого решения и все! Ничего не менял, не пойму в чем причина... Заметил только, что личное сообщение пришло одно, еще постов немного оставил после установки решения... Даже не поюзал толком (( Буду разбираться.

Добавлено спустя 18 минут 1 секунду:

Грубая вставка в index.php тоже не дает результата sad

PunBB.Ru ☭

Сайт nobody

Поделиться

65

Re: [Релиз] AnyCode Tool (1.0.0 Beta)

Оу, огромное спасибо, сильно облегчает мне жизнь.

Поделиться

66

Re: [Релиз] AnyCode Tool (1.0.0 Beta)

nobody пишет:

yikes Все работало, и вдруг исчезло! Никаких нотисов, никаких ошибок, просто как будто нет этого решения и все! Ничего не менял, не пойму в чем причина...

Аналогичная картина. Куда всё пропало?:o

Захочешь — найдешь время, не захочешь — найдешь причину.

Поделиться

67 (03.02.2009 10:24 отредактировано knyshow)

Re: [Релиз] AnyCode Tool (1.0.0 Beta)

повторить пока не получается hmm
и насколько я понимаю - вариант один - пустой результат запроса к базе...

а пока предлагаю потестить (Please log in or register to see this URL)

Поделиться

68

Re: [Релиз] AnyCode Tool (1.0.0 Beta)

Ничего не трогал, список появился. Поведение весьма странное

Добавлено спустя 6 минут 45 секунд:

Я так понимаю решение работает с зоной сервера, без учёта зоны посетителя.

Захочешь — найдешь время, не захочешь — найдешь причину.

Поделиться

69 (03.02.2009 21:24 отредактировано knyshow)

Re: [Релиз] AnyCode Tool (1.0.0 Beta)

Пока что основываясь на функции format_time() из functions.php пришел вот к такому коду:

//************************************************************************
$todays_users = array();

$todays_users_diff = ($forum_user['timezone'] + ($forum_user['dst']-1)) * 3600;
$todays_users_now = time();

$query = array(
    'SELECT'    =>    'id, username',
    'FROM'        =>    'users',
    'WHERE'    =>    'last_visit>"'.strtotime(gmdate('M d Y', $todays_users_now + $todays_users_diff)).'"',
    'ORDER BY'    =>    'username'
);
$result = $forum_db->query_build($query) or error(__FILE__, __LINE__);

while(list($id, $username) = $forum_db->fetch_row($result))
{
  $todays_users[] = '<a href="'.forum_link($forum_url['user'], $id).'">'.forum_htmlencode($username).'</a>';
}
if (!empty($todays_users))
{
?>
    <div id="brd-online" class="gen-content">
        <h3 class="hn"><span>
<?
 echo $lang_index['Today online'] . implode(', ', $todays_users);
?>
        </span></h3>
    </div>
<?
}
//************************************************************************

Поставил расширение от Garciat не отключая свой хук.
изменил для себя в таблице users поле timezone на -99 и увидел всех пользователей за 2+ суток, а блок от Garciat и дальше показывает пользователей за сегодня.

т.е. все-таки временные пояса.

Поделиться

70

Re: [Релиз] AnyCode Tool (1.0.0 Beta)

knyshow пишет:

Пока что основываясь на функции format_time() из functions.php пришел вот к такому коду

Тьфу-тьфу, вроде работает. А расширение от Garciat ведет себя так же, как первые варианты решений - сначала показывало список, а теперь нет.

Добавлено спустя 55 секунд:

А возможно ли отсортировать по времени последнего визита? Сейчас, как я понял, по алфавиту.

PunBB.Ru ☭

Сайт nobody

Поделиться

71 (03.02.2009 23:45 отредактировано knyshow)

Re: [Релиз] AnyCode Tool (1.0.0 Beta)

nobody, заменить строку

'ORDER BY'    =>    'username'

для сортировки в виде: первым сегодня зашел - первый в строке:

'ORDER BY'    =>    'last_visit ASC'

наоборот:

'ORDER BY'    =>    'last_visit DESC'

Поделиться

72

Re: [Релиз] AnyCode Tool (1.0.0 Beta)

Спасиб, туплю big_smile

PunBB.Ru ☭

Сайт nobody

Поделиться

73

Re: [Релиз] AnyCode Tool (1.0.0 Beta)

решение - generate_country_flag_icon_from_ip
хук - vt_row_pre_post_contacts_merge

//************************************************************************
// knyshow
// определение страны автора сообщения и вывод флага страны в список контактов
//************************************************************************
$ipnum = sprintf("%u", ip2long($cur_post['poster_ip']));


$query = array(
    'SELECT'    =>    'cc, cn',
    'FROM'        =>    'geo_ip',
    'JOINS'        =>    array(
        array(
            'LEFT JOIN'    => 'geo_cc',
            'ON'    => 'geo_ip.ci = geo_cc.ci'
        ),
    ),
    'WHERE'    =>    $ipnum . ' BETWEEN start AND end'
);


$country_info_result = $forum_db->query_build($query) or error(__FILE__, __LINE__);

if ($forum_db->num_rows($country_info_result))
{
 list($cc, $cn) = $forum_db->fetch_row($country_info_result);
 $forum_page['post_contacts']['CFlag'] = '<img src="'.FORUM_ROOT.'/img/flags/'.strtolower($cc).'.gif" title="'.forum_htmlencode($cn).'">';
}

Для определения соотвествия ip-страна используются две вспомогательные таблицы: geo_ip и geo_cc.
Таблицы сформированы на основании данных проекта (Please log in or register to see this URL) согласно ими же написанному (Please log in or register to see this URL).
Эти таблицы необходимо восстановить из дампа, который находится в архиве.

Для отображения флагов использованы (Please log in or register to see this URL).
Папку с иконками необходимо распаковать в каталог FORUM_ROOT/img/flags

Архив с дампом таблиц и иконками (Please log in or register to see this URL).

http://s52.radikal.ru/i136/0902/22/302e251cfbe9.gif

Поделиться

74

Re: [Релиз] AnyCode Tool (1.0.0 Beta)

Имхо дергать страну по ип каждый раз, для каждого в топике  очень накладно.
Я бы сделал немного по другому. При регистрации проверяется страна и в дополнительное поле таблицы users прописывается имя флага. Соответственно в профиле можно только подставить нужное значение в путь к иконке. Сделать инсталлер, который при установке пробежит всех юзеров и определит их страну.

Захочешь — найдешь время, не захочешь — найдешь причину.

Поделиться

75 (06.02.2009 15:14 отредактировано knyshow)

Re: [Релиз] AnyCode Tool (1.0.0 Beta)

Есть еще второй момент, почему сделано именно так - сообщения могут быть оставлены с разных айпи/стран. Так же решение актуально для выявления акк-шаринга.

Отчасти эти моменты и побудили создать расширение в этом виде - опирающееся на айпи, с которого было оставлено сообщение, а не на айпи регистрации.

конечно, вариант добавить поле в таблицу posts с кодом страны и дергать картинку оттуда, но пока не разберусь с движком - туда не полезу sad

Поделиться