Моей супруге понадобился форум, и уж очень ей хотелось, что бы была возможность отправлять сообщения от нескольких пользователей без прелогинивания. Я если честно с phpbb работал не много, и не знаю, насколько грамотно реализовал данную функцию, но реализовал. И так. первое, что мы делаем, это добавляем в таблице _users(у меня phpbb_users) новую колонку —
В этой колонке мы будем указывать 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, ищем —
и добавляем
и внизу этой функции добавляем:
$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'); }
в начале файла, там где описываются переменные перед
добавляем
FROM ‘ . USERS_TABLE . «
WHERE user_id = ‘» .$current_id. «‘»;
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
$current_new_name = $row[‘username’];
}
в этом же файле ищем функцию
и добавляем в начале:
в этой функции ишем
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 ищем
в начале функции добавляем
и меняем в этой функции
на
в этом же массиве
на
в этой же функции находим
и меняем на
и еще одно
заменить
Вот и все.