Народ кто юзал [more=хак]Название хака: Предотвращение даблпостинга
Версия хака: 1.1
Автор хака: Stefan 'Xenon' Kaeser (доработано AnTekapb'ем)
Релиз: 20 сентября 2005 года
Последнее обновление: ----
Описание: Этот хак предотвращает даблпостинг путём "склеивания" нового и последнего написанного постов темы, если их
написал один и тот же пользователь, и если последний пост не был написан не позднее указанного Вами срока.
Этот хак очень полезен для линейного вида просмотра тем.
Если новое сообщение имеет какие-нибудь вложения, то они будут добавлены к старому посту
С помощью изменения параметра timespan в массиве настроек $dp_settings, Вы сможете определить время, на
протяжение которого размещение новых постов будет считаться даблпостингом.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++++++ редактирование файла includes/functions_newpost.php ++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
найдите: (в функции build_new_post)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$id = $dataman->save();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
замените это на:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ########### Хак предотвращения даблпостинга #########
$dp_settings = array(
'timespan' => 3600 * 24, //сколько секунд отсчитывать с последнего поста, чтобы защитать даблпостинг
'spacer' => "\n\nДобавлено через ",
'sec' => 0,
'min' => 0,
'hour' => 0,
'timetonewpost' => 0,
'strsec' => ' секунд',
'strmin' => ' минут ',
'strhour' => ' часов ',
);
$isdoublepost = false;
$oldmsg = $post['message'];
if ($type != 'thread'
AND $threadinfo['lastpost'] > TIMENOW - $dp_settings['timespan']
AND $threadinfo['lastpost'] < TIMENOW
AND $threadinfo['lastposter'] == $vbulletin->userinfo['username'])
{
$doublepost = $vbulletin->db->query_first("
SELECT post.*
FROM " . TABLE_PREFIX . "post AS post
LEFT JOIN " . TABLE_PREFIX . "deletionlog AS deletionlog ON(deletionlog.primaryid = post.postid AND type = 'post')
WHERE threadid = $threadinfo[threadid]
AND dateline > " . (TIMENOW - $dp_settings['timespan']) . "
AND visible = 1 AND deletionlog.primaryid IS NULL
ORDER BY dateline DESC
LIMIT 1
");
$dp_settings['hour'] = bcdiv((TIMENOW - $threadinfo['lastpost']) , 3600 , 0);
$dp_settings['min'] = bcdiv((TIMENOW - $threadinfo['lastpost']) , 60 , 0) - 60 * $dp_settings['hour'];
$dp_settings['sec'] = (TIMENOW - $threadinfo['lastpost']) - 60 * 60 * $dp_settings['hour'] - 60 * $dp_settings['min'];
if ((bcdiv($dp_settings['hour'] , 100 , 2) - bcdiv($dp_settings['hour'] , 100 , 0)) * 100 > 10 AND (bcdiv($dp_settings['hour'] , 100 , 2) - bcdiv($dp_settings['hour'] , 100 , 0)) * 100 < 20)
{
$dp_settings['strhour'] = ' часов ';
}
elseif (bcdiv($dp_settings['hour'] , 10 , 1) * 10 - bcdiv($dp_settings['hour'] , 100 , 1) * 100 == 1)
{
$dp_settings['strhour'] = ' час ';
}
elseif (bcdiv($dp_settings['hour'] , 10 , 1) * 10 - bcdiv($dp_settings['hour'] , 100 , 1) * 100 > 1 AND bcdiv($dp_settings['hour'] , 10 , 1) * 10 - bcdiv($dp_settings['hour'] , 100 , 1) * 100 < 5)
{
$dp_settings['strhour'] = ' часа ';
}
else
{
$dp_settings['strhour'] = ' часов ';
}
if ((bcdiv($dp_settings['min'] , 100 , 2) - bcdiv($dp_settings['min'] , 100 , 0)) * 100 > 10 AND (bcdiv($dp_settings['min'] , 100 , 2) - bcdiv($dp_settings['min'] , 100 , 0)) * 100 < 20)
{
$dp_settings['strmin'] = ' минут ';
}
elseif (bcdiv($dp_settings['min'] , 10 , 1) * 10 - bcdiv($dp_settings['min'] , 100 , 1) * 100 == 1)
{
$dp_settings['strmin'] = ' минуту ';
}
elseif (bcdiv($dp_settings['min'] , 10 , 1) * 10 - bcdiv($dp_settings['min'] , 100 , 1) * 100 > 1 AND bcdiv($dp_settings['min'] , 10 , 1) * 10 - bcdiv($dp_settings['min'] , 100 , 1) * 100 < 5)
{
$dp_settings['strmin'] = ' минуты ';
}
else
{
$dp_settings['strmin'] = ' минут ';
}
if ((bcdiv($dp_settings['sec'] , 100 , 2) - bcdiv($dp_settings['sec'] , 100 , 0)) * 100 > 10 AND (bcdiv($dp_settings['sec'] , 100 , 2) - bcdiv($dp_settings['sec'] , 100 , 0)) * 100 < 20)
{
$dp_settings['strsec'] = ' секунд ';
}
elseif (bcdiv($dp_settings['sec'] , 10 , 1) * 10 - bcdiv($dp_settings['sec'] , 100 , 1) * 100 == 1)
{
$dp_settings['strsec'] = ' секунду ';
}
elseif (bcdiv($dp_settings['sec'] , 10 , 1) * 10 - bcdiv($dp_settings['sec'] , 100 , 1) * 100 > 1 AND bcdiv($dp_settings['sec'] , 10 , 1) * 10 - bcdiv($dp_settings['sec'] , 100 , 1) * 100 < 5)
{
$dp_settings['strsec'] = ' секунды ';
}
else
{
$dp_settings['strsec'] = ' секунд ';
}
if ($dp_settings['hour'] <> 0)
{
$dp_settings['spacer'] = $dp_settings['spacer'] . $dp_settings['hour'] . $dp_settings['strhour'];
}
if ($dp_settings['min'] <> 0 or $dp_settings['hour'] <> 0)
{
$dp_settings['spacer'] = $dp_settings['spacer'] . $dp_settings['min'] . $dp_settings['strmin'];
}
$dp_settings['spacer'] = "
" . $dp_settings['spacer'] . $dp_settings['sec'] . $dp_settings['strsec'] . "\n";
if ($doublepost['userid'] == $vbulletin->userinfo['userid'])
{
$dataman2 =& datamanager_init('Post', $vbulletin, ERRTYPE_ARRAY, 'threadpost');
$dataman2->set_existing($doublepost);
$post['message'] = $doublepost['pagetext'] . $dp_settings['spacer'] . $post['message'];
$dataman2->set_info('preview', $post['preview']);
$dataman2->set_info('parseurl', $post['parseurl']);
$dataman2->set_info('posthash', $post['posthash']);
$dataman2->set_info('forum', $foruminfo);
$dataman2->set_info('thread', $threadinfo);
$dataman2->setr('showsignature', $post['signature']);
$dataman2->setr('allowsmilie', $post['enablesmilies']);
$dataman2->setr('pagetext', $post['message']);
$dataman2->setr('iconid', $post['iconid']);
$dataman2->pre_save();
if (!$dataman2->errors)
{
$isdoublepost = true;
unset($dataman);
$dataman =& $dataman2;
$post['postid'] = $doublepost['postid'];
}
else
{
$isdoublepost = false;
}
}
}
if ($isdoublepost)
{
$id = $doublepost['postid'];
$dataman->save();
}
else
{
$post['message'] = $oldmsg;
$id = $dataman->save();
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Это всё, мы изменили всего 1 файл
[/more] от даблпостинга версии 1.1? У меня вместо надписи, что мол сообщение добавлено x минут спустя одни знаки вопроса.., подскажите как быть.