phpbb 3.0.X отправка, редактирование, удаление сообщений от нескольких пользователей

Моей супруге понадобился форум, и уж очень ей хотелось, что бы была возможность отправлять сообщения от нескольких пользователей без прелогинивания. Я если честно с phpbb работал не много, и не знаю, насколько грамотно реализовал данную функцию, но реализовал. И так. первое, что мы делаем, это добавляем в таблице _users(у меня phpbb_users) новую колонку —

ALTER TABLE `phpbb_users` ADD `user_id_sec` INT( 14 ) NOT NULL DEFAULT ‘0’ AFTER `user_id`

В этой колонке мы будем указывать id пользователя из профиля которого будет возможность работать от лица данного профиля. Как пример, у нас есть пользователь Admin, его id = 1, и есть пользователь Edd, мы хотим, дать возможность пользователю Admin работать от лица пользователя Edd, для этого в столбце user_id_sec напротив пользователя Edd ставится 1.

user_id		user_id_sec	username
2		     0		 Admin
3		     2		  Edd	

Теперь, открываем файл include/functions_display.php, ищем —

function display_custom_bbcodes()

и добавляем 

global $config;

и внизу этой функции добавляем:

$current = request_var($config['cookie_name'] . '_u', '', false, true);
if ($current){
$template->assign_block_vars('custom_name_me', array(
'NAME_ME_VALUE' => $current,
'NAME_ME_TITLE' => 'Текущий',
'NAME_ME_SELECT' => 'selected="selected"'
));
$sql = 'SELECT user_id,username
FROM ' . USERS_TABLE . "
WHERE user_id_sec = '" .$current. "'";

$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
$template->assign_block_vars('custom_name_me', array(
'NAME_ME_VALUE' => $row['user_id'],
'NAME_ME_TITLE' => $row['username'],
'NAME_ME_SELECT' => ''
));
}
}

Дальше открываем posting_buttons.html вашего стиля и в самом низу перед

</div>
<!-- ENDIF -->

вставляем

<br />
<select name="change_me"  title="Change me">
<!-- BEGIN custom_name_me -->
<option {custom_name_me.NAME_ME_SELECT} value="{custom_name_me.NAME_ME_VALUE}">{custom_name_me.NAME_ME_TITLE}</option>
<!-- END custom_name_me -->
</select>

Дальше, открываем viewtopic.php, ищем

$edit_allowed = ($user->data['is_registered'] && ($auth->acl_get('m_edit', $forum_id) || (
$user->data['user_id'] == $poster_id  &&
$auth->acl_get('f_edit', $forum_id) &&
!$row['post_edit_locked'] &&
($row['post_time'] > time() - ($config['edit_time'] * 60) || !$config['edit_time'])
)));

//echo $user->data['user_id'];
$delete_allowed = ($user->data['is_registered'] && ($auth->acl_get('m_delete', $forum_id) || (
$user->data['user_id'] == $poster_id &&
$auth->acl_get('f_delete', $forum_id) &&
$topic_data['topic_last_post_id'] == $row['post_id'] &&
($row['post_time'] > time() - ($config['delete_time'] * 60) || !$config['delete_time']) &&
// we do not want to allow removal of the last post if a moderator locked it!
!$row['post_edit_locked']
)));

и меняем на:

$sql_sec_id = 'SELECT user_id,username
FROM ' . USERS_TABLE . "
WHERE user_id_sec = '" .$user->data['user_id']. "'";

$result_sec_id = $db->sql_query($sql_sec_id);
$sec_id_user = array();
while ($row_sec_id = $db->sql_fetchrow($result_sec_id))
{
$sec_id_user[] = $row_sec_id['user_id'];
}

$edit_allowed = ($user->data['is_registered'] && ($auth->acl_get('m_edit', $forum_id) || (
($user->data['user_id'] == $poster_id || in_array($poster_id,$sec_id_user)) &&
$auth->acl_get('f_edit', $forum_id) &&
!$row['post_edit_locked'] &&
($row['post_time'] > time() - ($config['edit_time'] * 60) || !$config['edit_time'])
)));

//echo $user->data['user_id'];
$delete_allowed = ($user->data['is_registered'] && ($auth->acl_get('m_delete', $forum_id) || (
($user->data['user_id'] == $poster_id || in_array($poster_id,$sec_id_user)) &&
$auth->acl_get('f_delete', $forum_id) &&
$topic_data['topic_last_post_id'] == $row['post_id'] &&
($row['post_time'] > time() - ($config['delete_time'] * 60) || !$config['delete_time']) &&
// we do not want to allow removal of the last post if a moderator locked it!
!$row['post_edit_locked']
)));

Далее идем в posting.php, ищем:

if ($mode == 'edit' && !$auth->acl_get('m_edit', $forum_id))
{
if ($user->data['user_id'] != $post_data['poster_id'])

и меняем на

$sql_sec_id = 'SELECT user_id,username
FROM ' . USERS_TABLE . "
WHERE user_id_sec = '" .$user->data['user_id']. "'";

$result_sec_id = $db->sql_query($sql_sec_id);
$sec_id_user = array();
while ($row_sec_id = $db->sql_fetchrow($result_sec_id))
{
$sec_id_user[] = $row_sec_id['user_id'];
}

if ($mode == 'edit' && !$auth->acl_get('m_edit', $forum_id))
{
if ($user->data['user_id'] != $post_data['poster_id'] && !in_array($post_data['poster_id'],$sec_id_user))
{
trigger_error('USER_CANNOT_EDIT');
}

в начале файла, там где описываются переменные перед

$submit = (isset($_POST[‘post’])) ? true : false;

добавляем

$current_id = $_POST[‘change_me’];
$sql = ‘SELECT user_id,username
FROM ‘ . USERS_TABLE . «
WHERE user_id = ‘» .$current_id. «‘»;

$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
$current_new_name = $row[‘username’];
}

в этом же файле ищем функцию

function handle_post_delete

и добавляем в начале:

global $sec_id_user;

в этой функции ишем

if ($auth->acl_get('m_delete', $forum_id) || 
($post_data['poster_id'] == $user->data['user_id'] && $user->data['is_registered'] && 
$auth->acl_get('f_delete', $forum_id) && $post_id == $post_data['topic_last_post_id'] && 
!$post_data['post_edit_locked'] && 
($post_data['post_time'] > time() - ($config['delete_time'] * 60) || !$config['delete_time'])))

и меняем на

if ($auth->acl_get('m_delete', $forum_id) || 
(($post_data['poster_id'] == $user->data['user_id'] || in_array($post_data['poster_id'],$sec_id_user)) 
&& $user->data['is_registered'] && $auth->acl_get('f_delete', $forum_id) && 
$post_id == $post_data['topic_last_post_id'] && !$post_data['post_edit_locked'] && 
($post_data['post_time'] > time() - ($config['delete_time'] * 60) || !$config['delete_time'])))

Финальный штрих, в файле include/function_posting.php ищем

function submit_post

в начале функции добавляем

global $current_id, $current_new_name;

и меняем в этой функции

‘poster_id’ => (int) $user->data[‘user_id’],

на

‘poster_id’ => (int)$current_id,

в этом же массиве

‘post_username’ => (!$user->data[‘is_registered’]) ? $username : »,

на

‘post_username’ => (!$user->data[‘is_registered’]) ? $current_new_name : »,

в этой же функции находим

‘topic_first_poster_name’ => (!$user->data[‘is_registered’] && $username) ? $username : (($user->data[‘user_id’] != ANONYMOUS) ? $user->data[‘username’] : »),

и меняем на

‘topic_first_poster_name’ => (!$user->data[‘is_registered’] && $username) ? $username : (($user->data[‘user_id’] != ANONYMOUS) ? $current_new_name : »),

и еще одно

‘topic_last_poster_name’ => (!$user->data[‘is_registered’] && $username) ? $username : (($user->data[‘user_id’] != ANONYMOUS) ? $user->data[‘username’] : »),

заменить

‘topic_last_poster_name’ => (!$user->data[‘is_registered’] && $username) ? $username : (($user->data[‘user_id’] != ANONYMOUS) ? $current_new_name : »),

Вот и все.