51

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

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

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

Поделиться

52 (02.02.2009 08: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 04: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 08: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>
<?
}

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

да мне-то за что? код свиснут у Garciat, подправлен hcs и вставлен в его же расширение smile
кстати, на информере мне тоже что-то пишут, но я не понимать sad
http://punbb.informer.com/forums/topic/ … ine-today/

Поделиться

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 08: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 (02.02.2009 22:24 отредактировано knyshow)

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

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

а пока предлагаю потестить http://punbb.informer.com/forums/topic/ … ine-today/

Поделиться

68

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

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

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

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

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

Поделиться

69 (03.02.2009 09: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 11: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.
Таблицы сформированы на основании данных проекта GeoLite Country согласно ими же написанному мануалу.
Эти таблицы необходимо восстановить из дампа, который находится в архиве.

Для отображения флагов использованы иконки студии FamFamFam.
Папку с иконками необходимо распаковать в каталог FORUM_ROOT/img/flags

Архив с дампом таблиц и иконками тут.

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

Поделиться

74

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

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

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

Поделиться

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

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

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

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

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

Поделиться