Немногое profile phpbb group.

21.06.2020

Рассмотрим стандартную задачу - на сайт с уже существующими пользователями нужно добавить форум. При этом не писать новый модуль самому, но поставить готовое популярное решение типа 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 3.0 содержит шесть предустановленных групп: администраторы, боты, супермодераторы, гости, зарегистрированные пользователи и зарегистрированные пользователи COPPA.


3.6.1. Типы групп

Имеется два типа групп: предустановленные и пользовательские.

Предустановленные группы
Эти группы по умолчанию устанавливаются вместе с phpBB 3.0, и их нельзя удалить напрямую, поскольку они нужны конференции для выполнения различных функций. Но вы можете добавлять в эти группы новых пользователей, изменять атрибуты групп (описание, цвет, звание, аватару и так далее), и добавлять руководителей групп. Пользователи, регистрирующиеся на конференции, автоматически добавляются в группу «Зарегистрированные пользователи». Не пробуйте удалять их вручную через базу данных, иначе ваша конференция больше не будет работать корректно.


  • Администраторы
    В этой группе находятся все администраторы конференции. Все пользователи со статусом «Основатель» являются администраторами, но не все администраторы являются основателями. С помощью этой группы вы можете управлять тем, что могут делать администраторы.
  • Боты
    Эта группа предназначена для поисковых ботов. phpBB 3.0 имеет возможности предотвращения общих проблем, связанных с индексацией поисковыми ботами страниц конференции. Для получения более подробной информации о ботах, их управлении и настройке, смотрите раздел «Пауки и боты».
  • Супермодераторы
    Супермодераторы - это модераторы, которые имеют модераторские права во всех доступных им форумах конференции. Вы можете изменять права супермодераторов с помощью этой группы.
  • Гости
    Гости - это незарегистрированные посетители конференции. Вы можете ограничивать права гостей с помощью этой группы.
  • Зарегистрированные пользователи
    Зарегистрированные пользователи - это основная и самая большая часть конференции. С помощью этой группы вы можете управлять тем, что могут делать зарегистрированные пользователи.
  • Зарегистрированные пользователи COPPA
    Зарегистрированные пользователи COPPA - это те же зарегистрированные пользователи, за исключением того, что они подпадают под COPPA (закон о защите личных сведений детей в интернете). Этот закон не имеет отношения к пользователям, живущим вне США.

Пользовательские группы
Эти группы созданы вами или другими администраторами конференции. Эти группы подобны группам в phpBB 2.0. Вы можете создать их, сколько захотите, удалять их, устанавливать руководителей, и изменять их атрибуты (описание, цвет, звание, аватару и так далее).

Страница «Управление группами» в панели администрирования отображает отдельные списки предустановленных и пользовательских групп.


3.6.2. Атрибуты групп

Ниже перечислен список атрибутов, которые может иметь группа:

  • Название группы
    Название группы.
  • Описание группы
    Описание группы, отображающееся в списке групп.
  • Управляется только основателем
    Ограничить управление этой группой только основателями. Пользователи, имеющие групповые права доступа, смогут видеть данную группу и её участников.
  • Отображать группу в легенде
    Эта опция включает отображение группы в легенде в списке «Кто сейчас на конференции». Примечание: данная опция имеет смысл, только если указан цвет группы.
  • Группа может получать личные сообщения
    Эта опция разрешает отправку личных сообщений пользователям этой группы. Имейте в виду, что разрешение этой опции, например, для группы «Зарегистрированные пользователи», может быть небезопасным. Нет никакого права доступа, которое могло бы запретить отправку личных сообщений группам пользователей, поэтому любой, кто может отправлять личные сообщения, сможет отправить личное сообщение этой группе! Примечание: скрытые группы не могут получать личных сообщений, независимо от состояния данной опции.
  • Лимит личных сообщений в каждой папке
    Эта настройка отменит общий для пользователей лимит сообщений. Значение 0 означает, что будет использоваться пользовательский лимит по умолчанию. Смотрите раздел пользовательских настроек относительно настройки личных сообщений.
  • Цвет группы
    Имена пользователей, для которых настраиваемая группа является группой по умолчанию (смотрите раздел 3.6.3, «Группы по умолчанию»), будут отображаться на страницах конференции указанным здесь цветом. При включении опции «Отображать группу в легенде» элемент легенды с этим цветом появится ниже списка «Кто сейчас на конференции».
  • Звание группы
    Пользователи, для которых эта группа является группой по умолчанию (смотрите раздел 3.6.3, «Группы по умолчанию») будут иметь это звание ниже своего имени. Вы можете изменить звание конкретного пользователя на любое другое, которое отменит для него звание, указанное для группы, являющейся для него группой по умолчанию. Для получения более подробной информации смотрите раздел «Звания».
  • Аватара группы
    Пользователи, для которых эта группа является группой по умолчанию (смотрите раздел 3.6.3, «Группы по умолчанию») будут иметь эту аватару. Пользователь сам сможет изменить свою аватару, если имеет на это необходимые права. Для получения более подробных сведений о настройке аватар смотрите раздел «Аватары».


3.6.3. Группы по умолчанию

Поскольку появилась возможность назначения атрибутов, таких, как цвета или аватары группы (смотрите раздел 3.6.2, «Атрибуты групп»), и пользователь может быть членом двух и более групп, имеющих различные аватары и другие атрибуты. Какая аватара будет применена к пользователю?

Для преодоления этой проблемы вы можете назначить пользователю одну «группу по умолчанию», и к пользователю будут применяться атрибуты этой группы. Обратите внимание на то, что нет возможности объединять и смешивать атрибуты различных групп: если одна группа имеет звание, но не имеет аватары, а другая группа имеет только аватару, то нет возможности отобразить аватару из одной группы, а звание из другой.

Важное примечание
Группы по умолчанию не имеют никакого воздействия на права доступа. Дополнительных прав для группы по умолчанию не назначается и не добавляется. Поэтому пользовательские права останутся неизменными, независимо от того, к какой группе по умолчанию он принадлежит.

Изменить группу по умолчанию можно двумя способами. Во-первых, вы можете сделать это с помощью управления пользователями (смотрите раздел 3.5 «Управление пользователями»), или непосредственно со страницы управления группой. Будьте осторожны со второй опцией, изменяя группу по умолчанию с помощью страницы управления группой, поскольку это действие может изменить группу по умолчанию для всех её членов и перезаписать их старые группы по умолчанию. Так, если вы изменяете группу по умолчанию для группы «Зарегистрированные пользователи» с помощью ссылки «Сделать группой по умолчанию для каждого её участника», то все участники конференции будут иметь эту группу в качестве группы по умолчанию, включая администраторов и модераторов, поскольку они также являются членами группы «Зарегистрированные пользователи».

Важное примечание
Если вы назначаете группу по умолчанию, которая имеет звание и аватару, то старая аватара пользователя и звание будет перезаписано атрибутами этой группы.

Ну что же, начнем давать маленькие советы по оптимизации и продвижении сайтов (форумов) на phpBB. В данном случае мы проведем небольшой хак, который поможет избавиться от внешней ссылки вида "Powered by phpBB © ...". В данной публикации мы рассмотрим 2 способа, с помощью которых можно это сделать - прием для phpBB 3.x.x .

Удаляем внешнюю ссылку Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group и Русская поддержка phpBB

Первый способ удаления внешней ссылки с надписью Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group . И так, самый легкий способ - удалить с помощью панели администратора. Заходим в административную панель, переходим в пункт меню "Стили", слева видим панель, где расположен блок в меню, нас интересует блок "Компоненты стилей", а в нем "Шаблоны". По стандарту в предложенном окне мы увидим следующие: prosilver и subsilver2, хотя моуг быть и другие, если Вы их устанавливали. В общем не суть. Из преложенного набора выбираем используемый по умолчанию. Нажимаем на кнопку "изменить" рядом с шаблоном. Далее появляется окно с предложением "Выбрать файл шаблона". Далее выбираем "Файл шаблона" - "overall_footer.html". Ниже появляется HTML редактор. Находим следующий код: "Powered by phpBB 2000, 2002, 2005, 2007 phpBB Group " и просто удалем, хотя можно и установить свою ссылку и надпись. "
{TRANSLATION_INFO}
" (который находится ниже, также можно удалить) - это код отвечает за локализацию например внешнюю ссылку с надписью "Русская поддержка phpBB".

Второй способ удаления внешней ссылки с надписью Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group . Этот способ аналогичен, но мы подключаемся к сайту по пратаколу ftp. Переходим по следующему пути styles/имя_шаблона/template/overall_footer.html. И редактируем тот же код, который редактировали мы выше. Если будете изменять код, то не забудьте установить кодировку UTF - так на месте анкоров могут появится "кракозяблы" (квадратики, и другие непонятные символы).

В одном из комментариев к моей статье , меня попросили рассказать — как убрать поле копирайта создателей движка 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 »


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