Виникла необхідність обмежити кількість повідомлень, які розміщують певні користувачі на форумі phpBB 3.0.7. Віднайшов рішення цієї задачі!
Створюємо файл modinstall.php наступного вмісту:
session_begin(); $auth->acl($user->data); $user->setup(); include($phpbb_root_path . 'includes/acp/auth.' . $phpEx); $auth_admin = new auth_admin(); $result = $auth_admin->acl_add_option(array( 'local' => array('u_limit_posts_per_day'), 'global' => array('u_limit_posts_per_day') )); print ('Permissions install ' . ($result ? 'completed successfully' : 'failed')); ?>
Встановлюємо на файл всі необхідні прав та виконуємо в браузері. Після, файл видаляємо!
Наступне, відкриваємо файл language/en/common.php (та для усіх решта інстальованих мов) і в самому кінці, перед ?> прописуємо:
//-- mod: LimitPostsPerDay ------------------------------------------------------------ $lang = array_merge($lang, array( 'acl_u_limit_posts_per_day' => array('lang' => 'Only allowed to make a limited number of posts per day', 'cat' => 'post'), 'POST_PER_DAY_LIMIT_REACHED' => 'You have reached your daily post limit. You are allowed to make %d posts per %d-hour period.
Please try again later.' )); //-- end: LimitPostsPerDay ------------------------------------------------------------
В кінці іншого файлу includes/functions.php прописуємо:
//-- mod: LimitPostsPerDay ------------------------------------------------------------ /* Check to see whether daily post limit has been reached */ define('DAILY_POST_LIMIT_TIMESPAN', 24); // 24 hours define('DAILY_POST_LIMIT', 10); // 10 posts per day function LimitPostsPerDay($forum_id) { global $LimitPostsPerDay, $db, $auth, $user; // Have we run this check already? No sense in doing it twice. if (isset($LimitPostsPerDay)) { return $LimitPostsPerDay; } // Do we have the "limited post" permission set? if ($auth->acl_get('u_limit_posts_per_day', $forum_id)) { $sql = 'SELECT count(post_id) as post_count FROM ' . POSTS_TABLE . ' WHERE post_time > ' . (time() - 3600 * DAILY_POST_LIMIT_TIMESPAN) . ' AND poster_id = ' . $user->data['user_id']; $row = $db->sql_fetchrow($db->sql_query($sql)); if ($row['post_count'] >= DAILY_POST_LIMIT) { return true; // Limit posts. We've made all we're allowed. } } return false; // We haven't hit our limit (or we haven't been set as a limited user). Woohoo! No limits! } //-- end: LimitPostsPerDay ------------------------------------------------------------
У файлі viewforum.php знаходимо стрічку:
'S_DISPLAY_POST_INFO' => ($forum_data['forum_type'] == FORUM_POST && ($auth->acl_get('f_post', $forum_id) || $user->data['user_id'] == ANONYMOUS)) ? true : false,
Замінюємо на:
//-- mod: LimitPostsPerDay ------------------------------------------------------------ /* 'S_DISPLAY_POST_INFO' => ($forum_data['forum_type'] == FORUM_POST && ($auth->acl_get('f_post', $forum_id) || $user->data['user_id'] == ANONYMOUS)) ? true : false, */ 'S_DISPLAY_POST_INFO' => ($forum_data['forum_type'] == FORUM_POST && (($auth->acl_get('f_post', $forum_id) && !LimitPostsPerDay($forum_id)) || $user->data['user_id'] == ANONYMOUS)) ? true : false, //-- end: LimitPostsPerDay ------------------------------------------------------------
У файлі viewtopic.php знаходимо стрічку:
'S_DISPLAY_POST_INFO' => ($topic_data['forum_type'] == FORUM_POST && ($auth->acl_get('f_post', $forum_id) || $user->data['user_id'] == ANONYMOUS)) ? true : false, 'S_DISPLAY_REPLY_INFO' => ($topic_data['forum_type'] == FORUM_POST && ($auth->acl_get('f_reply', $forum_id) || $user->data['user_id'] == ANONYMOUS)) ? true : false,
Замінюємо на:
//-- mod: LimitPostsPerDay ------------------------------------------------------------ /* 'S_DISPLAY_POST_INFO' => ($topic_data['forum_type'] == FORUM_POST && ($auth->acl_get('f_post', $forum_id) || $user->data['user_id'] == ANONYMOUS)) ? true : false, 'S_DISPLAY_REPLY_INFO' => ($topic_data['forum_type'] == FORUM_POST && ($auth->acl_get('f_reply', $forum_id) || $user->data['user_id'] == ANONYMOUS)) ? true : false, */ 'S_DISPLAY_POST_INFO' => ($topic_data['forum_type'] == FORUM_POST && (($auth->acl_get('f_post', $forum_id) && !LimitPostsPerDay($forum_id)) || $user->data['user_id'] == ANONYMOUS)) ? true : false, 'S_DISPLAY_REPLY_INFO' => ($topic_data['forum_type'] == FORUM_POST && (($auth->acl_get('f_post', $forum_id) && !LimitPostsPerDay($forum_id)) || $user->data['user_id'] == ANONYMOUS)) ? true : false, //-- end: LimitPostsPerDay ------------------------------------------------------------
У файлі posting.php знаходимо стрічку:
$error[] = $user->lang['FLOOD_ERROR']; } }
Після додаємо:
//-- mod: LimitPostsPerDay ------------------------------------------------------------ if ($mode != 'edit' && !$preview && !$refresh && LimitPostsPerDay($forum_id)) { $error[] = sprintf($user->lang['POST_PER_DAY_LIMIT_REACHED'], DAILY_POST_LIMIT); } //-- end: LimitPostsPerDay ------------------------------------------------------------
Це все! Тепер ми можемо зайти в панель адміністратора, обрати користувача і встановити йому відповідне обмеження:
Буду знать, большое спасибо за помощь в этом вопросе.