Виникла необхідність обмежити кількість повідомлень, які розміщують певні користувачі на форумі 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 ------------------------------------------------------------
Це все! Тепер ми можемо зайти в панель адміністратора, обрати користувача і встановити йому відповідне обмеження:

Буду знать, большое спасибо за помощь в этом вопросе.