В первую очередь, добавляем новое поле в БД. Для этого через phpmyadmin или STK нужно выполнить SQL-запрос:
Код: Выделить всё
INSERT INTO `phpbb_acl_options` (`auth_option_id`, `auth_option`, `is_global`, `is_local`, `founder_only`) VALUES (NULL, 'u_time_edit', '1', '0', '0');u_time_edit вы можете дать праву своё собственное имя. Единица после имени указывает, что право будет глобальное и не может быть использовано на уровне отдельных форумов. Если вам нужно форумное (локальное) право, то вместо единицы поставьте 0, а на месте следующего по порядку нуля выставьте единицу, и также у вас поменяется префикс в имени права. Пример:
Код: Выделить всё
INSERT INTO `phpbb_acl_options` (`auth_option_id`, `auth_option`, `is_global`, `is_local`, `founder_only`) VALUES (NULL, 'f_time_edit', '0', '1', '0');f_ в имени означает форумное (локальное) право, u_ - глобальное пользовательское право, a_ - глобальное администраторское, m_ - глобальное модераторское.После выполнения запроса следует очистить кеш конференции на главной странице админ-раздела.
Далее добавляем языковое описание для
u_time_edit (или для того имени, которое будет нужно вам):language/ru/acp/permissions_phpbb.php
Найти:
Код: Выделить всё
'acl_u_pm_flash' => array('lang' => 'Может использовать тег [flash] в ЛС', 'cat' => 'pm'),Код: Выделить всё
'acl_u_time_edit' => array('lang' => 'Может игнорировать ограничение времени на редактирование', 'cat' => 'post'),'cat' => 'post' - это означает, что в системе управления правами доступа вашу опцию можно будет изменить на вкладке "Размещение сообщений". Если её нужно поместить на вкладку "Разное", то следует использовать 'cat' => 'misc'. Чтобы узнать имена остальных категорий, откройте файл движка language/ru/acp/permissions_phpbb.php и посмотрите в нём следующий массив:Код: Выделить всё
// Define categories and permission types
$lang = array_merge($lang, array(
'permission_cat' => array(
'actions' => 'Действия',
'content' => 'Содержимое',
'forums' => 'Форумы',
'misc' => 'Разное',
'permissions' => 'Права доступа',
'pm' => 'Личные сообщения',
'polls' => 'Опросы',
'post' => 'Размещение сообщений',
'post_actions' => 'Действия с сообщениями',
'posting' => 'Сообщения',
'profile' => 'Профиль',
'settings' => 'Установки',
'topic_actions' => 'Действия с темами',
'user_group' => 'Пользователи',
),$auth->acl_get('имя_вашей_опции')Перед использованием убедитесь, что в скрипте определена глобальная переменная
$auth. Для этого нужно, чтобы в самом начале изменяемой вами функции phpBB присутствовало global $auth - если этого нет, то добавьте. Для локального права нужно ещё определить (если не определён) и указать ID форума, например: $auth->acl_get('f_list', $row['forum_id'])Можно проверять и сразу несколько прав при помощи функции
acl_gets, например:$auth->acl_gets('f_edit', 'm_edit', $forum_id) - эта конструкция проверяет наличие одного ИЛИ другого права.Какие файлы и коды изменять дальше - целиком и полностью зависит от стоящей перед вами задачи. В данном случае решается вопрос по редактированию сообщений независимо от временного ограничения, и инструкции для него будут такие:
posting.php
Найти:
Код: Выделить всё
if (!($post_data['post_time'] > time() - ($config['edit_time'] * 60) || !$config['edit_time']))Код: Выделить всё
if (!($post_data['post_time'] > time() - ($config['edit_time'] * 60) || !$config['edit_time'] || $auth->acl_get('u_time_edit')))Найти:
Код: Выделить всё
($row['post_time'] > time() - ($config['edit_time'] * 60) || !$config['edit_time'])Код: Выделить всё
($row['post_time'] > time() - ($config['edit_time'] * 60) || !$config['edit_time'] || $auth->acl_get('u_time_edit'))