ANDROID
Advanced Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Название хака: Предотвращение даблпостинга Версия хака: 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 файл
---------- О нас помнят, пока мы мешаем другим... |
| Всего записей: 1853 | Зарегистр. 02-11-2003 | Отправлено: 19:27 08-05-2006 | Исправлено: ANDROID, 19:30 08-05-2006 |
|