Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

[3.3] New Topic/Post Reply Limit Per Day

У вас есть идея для расширения функциональности phpBB? Расскажите о ней здесь!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
artplat17
phpBB 1.0.0
Сообщения: 4
Стаж: 1 год 6 месяцев

[3.3] New Topic/Post Reply Limit Per Day

Сообщение artplat17 »

Хотелось бы ограничить количество топиков и реплаев, которые юзер может запостить в течении 24 часов. Например Юзер может создать не более 2 новых топиков и 5 ответов. Находил подобный функционал только для старых версий, может есть возможность всем форумом оптимизировать код чтобы он работал сейчас?

Первый вариант:

Код: Выделить всё

##########################################################################
## MOD Title:		Topics\posts Limit
## MOD Author: 		Codeblight (codeblight@mail.ru)
## MOD Description:	Adds Topics\posts per day limits for registred user
## MOD Version:		1.0.0
##
## Installation Level:	Easy
## Installation Time:	5 Minutes
##	
##
## Files To Edit:	5
##			posting.php
##			admin/admin_board.php
##			templates/subSilver/admin/board_config_body.tpl
##			language/lang_english/lang_main.php
##			language/lang_english/lang_admin.php
##
## Included Files:	none
##
## License: http://opensource.org/licenses/gpl-license.php GNU General Public License v2
##
##########################################################################
 
##########################################################################
## Installation/Author Notes:
## First always backup the files that you're going to edit.
##
## This mod adds a new column to your 'users' table.  If you are not happy
## making changes to your SQL database this mod is not for you!
##
## Tested on phpBB 2.0.19 with subSilver and my own template
##########################################################################
 
##########################################################################
## MOD History:
##
##  28.03.2006 - Version 1.0.0 First Release
##########################################################################
 
##########################################################################
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD
##########################################################################
 
##########################################################################
#
#-----[ SQL ]--------------------------------------------------------------------------------
#
 
INSERT INTO phpbb_config (config_name, config_value) VALUES ('posts_per_day_limit', '50');
INSERT INTO phpbb_config (config_name, config_value) VALUES ('topics_per_day_limit', '10');
 
#
#-----[ OPEN ]-------------------------------------------------------------------------------
#
 
language/lang_english/lang_admin.php
 
#
#-----[ FIND ]-------------------------------------------------------------------------------
#
 
$lang['Flood_Interval'] = 'Flood Interval';
$lang['Flood_Interval_explain'] = 'Number of seconds a user must wait between posts'; 
 
#
#-----[ AFTER, ADD ]-------------------------------------------------------------------------
#
 
$lang['MaxPostsPerDay'] = 'Maximum posts per day';
$lang['MaxPostsPerDayComment'] = 'Maximum posts per day limit for one user (0 - unlimited). This feature don\'t work with guest users.';
$lang['MaxTopicsPerDay'] = 'Maximum new topics per day';
$lang['MaxTopicsPerDayComment'] = 'Maximum new topics per day limit for one user (0 - unlimited). This feature don\'t work with guest users.';
 
#
#-----[ OPEN ]-------------------------------------------------------------------------------
#
 
language/lang_english/lang_main.php
 
#
#-----[ FIND ]-------------------------------------------------------------------------------
#
 
?>
 
#
#-----[ BEFORE, ADD ]-------------------------------------------------------------------------
#
 
$lang['PostsPerDayExceeded'] = 'Your daily limit of %d messages was exceeded, please try again later.';
$lang['TopicsPerDayExceeded'] = 'Your daily limit of %d new topics was exceeded, please try again later.';
 
#
#-----[ OPEN ]-------------------------------------------------------------------------------
#
 
language/lang_russian/lang_admin.php
 
#
#-----[ FIND ]-------------------------------------------------------------------------------
#
 
$lang['Flood_Interval'] = 'Задержка «флуда»';
$lang['Flood_Interval_explain'] = 'Время (в секундах), которое должно пройти между двумя сообщениями пользователя.';
 
#
#-----[ AFTER, ADD ]-------------------------------------------------------------------------
#
 
$lang['MaxPostsPerDay'] = 'Максимум сообщений в день';
$lang['MaxPostsPerDayComment'] = 'Ограничение на число сообщений в день на одного пользователя (0 - не ограничено). Эта опция не работает с гостями.';
$lang['MaxTopicsPerDay'] = 'Максимум новых тем в день';
$lang['MaxTopicsPerDayComment'] = 'Ограничение на число новых тем в день на одного пользователя (0 - не ограничено). Эта опция не работает с гостями.';
 
#
#-----[ OPEN ]--------------------------------------------------------------------------------
#
 
language/lang_russian/lang_main.php
 
#
#-----[ FIND ]--------------------------------------------------------------------------------
#
 
?>
 
#
#-----[ BEFORE, ADD ]--------------------------------------------------------------------------
#
 
$lang['PostsPerDayExceeded'] = 'Ваш лимит из %d сообщений в день был исчерпан, пожалуйста попробуйте позже.';
$lang['TopicsPerDayExceeded'] = 'Ваш лимит из %d новых тем в день был исчерпан, пожалуйста попробуйте позже.';
 
#
#-----[ OPEN ]---------------------------------------------------------------------------------
#
 
admin/admin_board.php
 
#
#-----[ FIND ]---------------------------------------------------------------------------------
#
 
"L_FLOOD_INTERVAL" => $lang['Flood_Interval'],
"L_FLOOD_INTERVAL_EXPLAIN" => $lang['Flood_Interval_explain'], 
 
#
#-----[ AFTER, ADD ]---------------------------------------------------------------------------
#
 
"L_MAX_POSTS_PER_DAY" => $lang['MaxPostsPerDay'], 
"L_MAX_POSTS_PER_DAY_COMMENT" => $lang['MaxPostsPerDayComment'], 
"L_MAX_TOPICS_PER_DAY" => $lang['MaxTopicsPerDay'], 
"L_MAX_TOPICS_PER_DAY_COMMENT" => $lang['MaxTopicsPerDayComment'], 
 
#
#-----[ FIND ]---------------------------------------------------------------------------------
#
 
"FLOOD_INTERVAL" => $new['flood_interval'],
 
#
#-----[ AFTER, ADD ]---------------------------------------------------------------------------
#
 
"POST_PER_DAY_LIMIT" => $new['posts_per_day_limit'],
"TOPIC_PER_DAY_LIMIT" => $new['topics_per_day_limit'],
 
#
#-----[ OPEN ]---------------------------------------------------------------------------------
#
 
templates/subSilver/admin/board_config_body.tpl
 
#
#-----[ FIND ]---------------------------------------------------------------------------------
#
 
<tr>
	<td class="row1">{L_FLOOD_INTERVAL} <br /><span class="gensmall">{L_FLOOD_INTERVAL_EXPLAIN}</span></td>
	<td class="row2"><input class="post" type="text" size="3" maxlength="4" name="flood_interval" value="{FLOOD_INTERVAL}" /></td>
</tr>
 
#
#-----[ AFTER, ADD ]---------------------------------------------------------------------------
#
 
<tr>
	<td class="row1">{L_MAX_POSTS_PER_DAY} <br /><span class="gensmall">{L_MAX_POSTS_PER_DAY_COMMENT}</span></td>
	<td class="row2"><input class="post" type="text" size="3" maxlength="4" name="posts_per_day_limit" value="{POST_PER_DAY_LIMIT}" /></td>
</tr>
<tr>
	<td class="row1">{L_MAX_TOPICS_PER_DAY} <br /><span class="gensmall">{L_MAX_TOPICS_PER_DAY_COMMENT}</span></td>
	<td class="row2"><input class="post" type="text" size="3" maxlength="4" name="topics_per_day_limit" value="{TOPIC_PER_DAY_LIMIT}" /></td>
</tr>
 
#
#-----[ OPEN ]----------------------------------------------------------------------------------
#
 
posting.php
 
#
#-----[ FIND ]----------------------------------------------------------------------------------
#
 
if ( $mode == 'editpost' || $mode == 'delete' || $mode == 'poll_delete' )
 
#
#-----[ BEFORE, ADD ]---------------------------------------------------------------------------
#
 
	if (!$userdata['session_admin'])
	{
		$poster_id = $userdata['user_id'];
		$current_time = time();
 
		switch ( $mode )
		{
		case 'reply':
			// проверка на число новых постов
			$sql = "SELECT " . $current_time . " - post_time FROM " . POSTS_TABLE . " WHERE poster_id = " . $poster_id . " AND " . $current_time . " - post_time < 86400";
			if (!$result = $db->sql_query($sql))
			{
				message_die(GENERAL_ERROR, 'Could not obtain forums information', '', __LINE__, __FILE__, $sql);
			}
 
			if ($db->sql_numfields($result))
			{
				$rowcount = $db->sql_numrows($result);
				if ($rowcount > 0)
				{
					$posts_lim = intval($board_config['posts_per_day_limit']);
					if ($posts_lim > 0)
					{
						if ($posts_lim <= $rowcount)
						{
							message_die(GENERAL_MESSAGE, sprintf($lang['PostsPerDayExceeded'], $board_config['posts_per_day_limit'])); 
						}
					}
				}
			}
			$db->sql_freeresult($result);
			break;
 
        	case 'newtopic':
			// проверка на число топиков
			$sql = "SELECT " . $current_time . " - topic_time FROM " . TOPICS_TABLE . " WHERE topic_poster = " . $poster_id . " AND " . $current_time . " - topic_time < 86400";
 
			if (!$result = $db->sql_query($sql))
			{
				message_die(GENERAL_ERROR, 'Could not obtain forums information', '', __LINE__, __FILE__, $sql);
			}
			if ($db->sql_numfields($result))
			{
				$rowcount = $db->sql_numrows($result);
				if ($rowcount > 0)
				{
					$topics_lim = intval($board_config['topics_per_day_limit']);
					if ($topics_lim > 0)
					{
						if ($topics_lim <= $rowcount)
						{
							message_die(GENERAL_MESSAGE, sprintf($lang['TopicsPerDayExceeded'], $board_config['topics_per_day_limit'])); 
						}
					}
				}
			}
			$db->sql_freeresult($result);
			break;
		}
	}
 
 
#
#-----[ SAVE/CLOSE ALL FILES ]-----------------------------------------------------------------------
#
# EoM
Второй вариант:

Код: Выделить всё

1. NEW TOPICS: Limit users to starting 3 new topics per 24 hours

if ($mode == 'newtopic') //Only in these cases
{
  if ($userdata['user_level'] <= USER) //Do not limit MODS and ADMINS in any way
  {
     $time_span = time() - 24*3600; //24 hours
     $topic_limit = 3; // 3 topics per day 
     $error_msg = 'Sorry, you have already started your maximum number of topics today. Please try again later!";
     $sql = "SELECT count(topic_id) as topic_count 
        FROM " . TOPICS_TABLE . " 
        WHERE topic_time > $time_span 
        AND topic_poster = " . $userdata['user_id']; 
     if ( $result = $db->sql_query($sql) )
     {
        $row = $db->sql_fetchrow($result);           
        $topic_count = $row['topic_count'];
        if ($topic_count >= $topic_limit) message_die(GENERAL_MESSAGE, $error_msg);
     }          
  }
}

7. NEW POSTS: Limit a user to 4 messages per day overall

if ($mode == 'reply' || $mode == 'quote' || $mode == 'newtopic') //Only in these cases 
{ 
  if ($userdata['user_level'] <= USER) //Do not limit MODS and ADMINS in any way 
  { 
    $time_span = time() - 24*3600; //24 hours 
    $post_limit = 4; //Max messages per time 
    $error_msg = 'Sorry, your maximum amount of posts for today has been reached. Please try again later!'; 
    $sql = "SELECT count(post_id) as post_count
      FROM " . POSTS_TABLE . " 
      WHERE poster_id = ".$userdata['user_id'] . "
      AND post_time > $time_span"; 
    if ($result = $db->sql_query($sql)) 
    { 
      $row = $db->sql_fetchrow($result); 
      $post_count = $row['post_count']; 
      if ($post_count >= $post_limit)  message_die(GENERAL_MESSAGE, $error_msg); 
    }
  } 
}
Всех неравнодушных благодарю от всего сердца за любые попытки помочь мне в этом нелёгком вопросе! :oops:

Вернуться в «Запросы расширений для phpBB»