В первую очередь, добавляем новое поле в БД. Для этого через 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'))