Увольнительной profile phpbb group

Рассмотрим стандартную задачу - на сайт с уже существующими пользователями нужно добавить форум. При этом не писать новый модуль самому, но поставить готовое популярное решение типа phpbb3 и синхронизировать регистрацию/авторизацию/профили пользователей сайта с форумом. Минимально нужно, чтобы пользователи сайта стали пользователями форума, и чтобы авторизованный пользователь сайта автоматически становился авторизованным пользователем форума и наоборот, а так же происходила синхронизация при изменении профиля.

В сети есть плагины для синхронизации phpbb и wordpress (WP-United) и универсальные руководства ( ,), но последние, как правило, начинаются словами «скопипастить эти… дцать функций из functions.php» и «вставить в эти 3 таблицы вот такие данные».

Другой метод интеграции - начать использовать таблицы пользователей и методы к ним из phpbb на остальном сайте, но это обычно требует значительных модификаций системы.

Расскажу про свой способ, который тормознее обычных, но зато требует минимальных изменений файлов сайта и форума (по 10 строчек на каждом для подключения файла с классом-синхронизатором в 5кб).

Идея

Проще некуда. Логинимся на сайте - в случае успеха делаем соответствующий запрос к форуму и проставляем куки из ответа. Все. Осталось подсмотреть нужные запросы (с помощью firebug или LiveHTTPHeaders) и найти места для инклудов.

Синхронизатор состоит из двух файлов: сайт->форум (инклудится в файлы сайта) и форум->сайт (инклудится в phpbb). Они содержат статические классы ForumSync и SiteSync соответственно. В каждом классе - 2 паблик-метода: checkToken и sync.

Для моего сайта синхронизатор сайт->форум - forumsync.class.php, форум->сайт - functions_sitesync.php. Эти файлы, а так же файлы, в которые потребовалось внести изменения, выложил . Еще используется класс req для выполнения серий запросов, он лежит .

Тонкости

1. Во многие формы phpbb добавляет защитные переменные creation_time и form_token. Их проверка находится в forum/includes/functions.php->check_form_key(), и она должна быть выключена при запросе синхронизатора. В классе синхронизатора определим секретный ключ, у меня это

Md5("lala".date("Ymd"))

И в начало check_form_key добавим проверку на соответствие ему некоторой переменной $_REQUEST (проверка делается в методе SiteSync::checkToken()).

2. Чтобы избежать зацикливания (логин на сайте запрашивает логин на форуме, который запрашивает логин на сайте итд), до отсылки запроса будем проверять SiteSync::checkToken(), если он есть, значит этот запрос делает синхронизатор, и запускать синхронизацию снова уже не нужно.

Подробности

Сайт у каждого свой, поэтому опишу только изменения, которые нужно сделать в файлах phpbb. Это не исчерпывающее пошаговое руководство, но лишь общий принцип. Классы ForumSync и SiteSync все равно нужно менять индивидуально под каждый сайт.

Регистрация: для простоты выключим регистрацию юзеров на phpbb (через админку). Регистрация будет только на сайте. В случае успеха регистрации на сайте вызовем ForumSync::sync(«signup»). В phpbb разрешим регистрацию для синхронизатора, для этого изменим строку в начале forum/includes/ucp/ucp_register.php->ucp_register->main() (где проверка на USER_ACTIVATION_DISABLE):

If ($config["require_activation"] == USER_ACTIVATION_DISABLE && !SiteSync::checkToken())
trigger_error("UCP_REGISTER_DISABLE");

Кроме этого, хорошо бы было получать id нового юзера. В html-коде страницы, отдаваемой в случае успешной регистрации, id пользователя нигде не указан. Поэтому ниже строки $user_id = user_add(...) добавим

If (SiteSync::checkToken()) { echo "\n"; }

SiteSync::sync("signin",array("username"=>$username,"password"=>$password,"autologin"=>$autologin)).

Выход: для синхронизации форум->сайт в forum/ucp.php case "logout": добавить строку SiteSync::sync("signout").
Изменение пароля и профиля: индивидуально, зависит от того, какая информация в каких таблицах у профилей пользователей на сайте. И какие существуют формы редактирования профиля. Нужные экшены находятся в forum/includes/ucp/ucp_profile.php->ucp_profile->main(), в конце соответствующих кейсов нужно добавить SiteSync::sync.

Слабые стороны

Основной минус - отсутствие транзакций и хотя бы примитивного api. Любые ошибки, возникающие при запросах синхронизатора к phpbb, приходится искать в html-коде. Они зависят от локализации.

В моей системе поддерживаются транзакции, но в phpbb я не нашел стандартного механизма. Если, к примеру, на сайте минимальная длина пароля 6 а на phpbb - 5, и пользователь в phpbb вводит 5-ти символьный пароль, phpbb меняет пароль, сайт отдает ошибку. Нужно делать откат, но это уже не только «дописать одну строчку». Пока что моя система в таких случаях обламывается, поэтому я внимательно проследил, чтобы требования на все синхронизируемые поля совпадали.

В профиле пользователей форумов phpBB есть поле "Сайт", где можно поставить активную гиперссылку на свой домашний сайт. Часто этим пользуются спамеры тысячами регистрируя новых пользователей исключительно ради этой ссылки. Современные программы для спама помимо автоматической регистрации еще и оставляют на форуме пару не особо осмысленных сообщений, чтобы профиль (и ссылка) побыстрее проиндексировалась.

С этим можно бороться по-разному. Можно просто в файле robots.txt закрыть все профили форума от индексации директивой noindex. Однако, если ваш форум попал в спам-базу с десятком тысяч таких же форумов, надежды на то, что спамеры исключат ваш ресурс из автоматической регистрации мало.

Можно просто отключить возможность редактировать поле "Сайт" пользователем. Для этого нужно найти файл в шаблоне. Обычно это ucp_profile_profile_info.html , находящийся в директории - styles/имя_шаблона/template/

Нам надо найти код подобный этому:

Код может отличаться, поэтому ориентируйтесь на ключевые слова "WEBSITE". Можно просто удалить этот кусок кода, а можно поступить изощренней. Просто заменив код

ваш_сайт

Вы сделаете так, что это поле будет нередактируемым и кроме как ссылки на ваш_сайт у него значений больше быть не сможет)

Как заменить все ссылки в профилях пользователей phpBB

Допустим, вы отключили пользователям возможность устанавливать поле "Сайт" в профиле. Однако, ранее зарегистрированные спам-пользователи будут отображаться с уже проставленными ссылками. Можно, конечно, залезть в базу данных форума и поменять там все поля ч/з SQL-запрос, но можно сделать проще.

На этот раз нам нужен файл memberlist_view.html из той же директории. Находим строчку:

и заменяем следующую за ней строку (выводящую ссылки) на

Бинго! Теперь в профилях всех пользователей стоит ссылка на ваш сайт вне зависимости от того, какую они указывали в профиле.

А раз нет ссылок в профилях, то и спамерам вы не нужны.

В одном из комментариев к моей статье , меня попросили рассказать — как убрать поле копирайта создателей движка phpBB: «Создано на основе phpBB». Так как эта информация может быть полезна и другим посетителям, я решил написать об этом данную статью.

Зачем удалять это поле? Многие из вас могут высказать негодование, мол, удаление этого поля будет расценено как несоблюдение авторских прав. Однако это не совсем так – phpBB является бесплатным веб-форумом со свободным исходным кодом. Поэтому любые изменения, сделанные вами, предполагают, что авторскими правами конкретно на ваш продукт полностью обладаете вы. Другими словами, после создания форума на этом движке, он становиться вашей интеллектуальной собственностью. Авторы phpBB написали механизм, инструмент для создания форумов, а не готовый продукт. В таком случае, если вы удалите надпись копирайта в футере форума – это не будет нарушением авторских прав. С другой стороны, если вы все-таки оставите эту надпись – это будет являться знаком благодарности и поддержки разработчиков, что однозначно хорошо!

Итак, если вы решили все же избавиться от этой надписи, то первым шагом нам необходимо узнать, где находиться параметр, отвечающий за вывод информации о копирайте. Для этого нам необходимо открыть любую страницу форума, где виден форум, в одном из браузеров, которые поддерживают функцию просмотра кода страницы (Opera, Google Chrome, Firefox и т.д.), и, клацнув правой кнопкой по самой надписи, выбрать из выпадающего меню опцию просмотра кода (Inspect element) .

После открытия код-инспектора мы сможем увидеть, что блок, который нас интересует, называется «copyright » . В нем и необходимо делать изменения, чтобы отредактировать, спрятать или удалить информацию.

Вторым шагом будет поиск файла, в котором содержится блок «copyright». Так как название файла нам не известно, то поиск вручную займет очень много времени. Поэтому мы воспользуемся удобной функцией — поиск по содержимому, которой обладает мой любимый менеджер файлов – Total Commander, далее ТС (существуют другие способы поиска по содержимому, но в данной статье они рассматриваться не будут). В менеджере файлов открываем папку, в которую установлен форум на локальном сервере или на FTP-сервере вашего хостера. Для облегчения поиска, мы откроем сразу папку, в которой хранится файлы выбранного по умолчанию стиля. Далее выбираем поиск файлов в меню «Команды » или просто нажимаем Alt+F7 . В появившемся окне поиска мы оставляем без внимания поле «Искать файлы «, так как название файла нам неизвестно. В поле «Место поиска » должен быть указан путь в папку с установленным движком форума, по умолчанию ТС подхватывает путь автоматически, если окно поиска было вызвано из активной части, где вы просматриваете содержимое папок. Далее ставим галочку рядом с полем «С текстом » и вводим в строку поиска «copyright», после чего смело жмем кнопку «Начать поиск » и ждем вывода результатов.


Поиск выдал нам несколько файлов, по идее их должно быть 5, в которых упоминается название блока копирайта. Из всех выданных файлов мы четко видим, что нас интересует файл с названием «overall_footer.html » так как блок находится в футере страницы, а слово overall подсказывает, что в этом файле хранятся глобальные настройки, то есть для всего форума. Теперь у нас есть 2 варианта как отредактировать нужный нам файл – через встроенный редактор шаблонов phpBB или с использованием стороннего редактора. Первым мы рассмотрим вариант редактирования через родной интерфейс phpBB.
Нам необходимо зайти «Центр администрирования » и перейти во вкладку «Стили «. В разделе управления стилями мы смотрим, какой стиль установлен по умолчанию, на это указывает звездочка после названия стиля. В примере установлен всего один, базовый стиль – prosilve, но у вас их может быть несколько.

Далее в разделе управления компонентами стилей мы переходим в подраздел «Шаблоны » и выбираем пункт «Изменить » рядом с нашей активной темой.


Теперь нам необходимо выбрать из выпадающего списка интересующий нас файл под названием «overall_footer.html »


В появившейся области редактирования мы идем в самый низ страницы и находим строку: