Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

[3.2] Миграция уведомлений

Форум для авторов расширений для phpBB. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16313
Стаж: 17 лет 10 месяцев
Откуда: Красноярск
Благодарил (а): 533 раза
Поблагодарили: 2119 раз
Контактная информация:

[3.2] Миграция уведомлений

Сообщение rxu »

Создание уведомлений расширениями для phpBB 3.1 описано в теме Создание уведомлений в расширениях.
В phpBB 3.2 система уведомлений претерпела некоторые изменения, сделавшие расширения для phpBB 3.1, в которых используется система уведомлений, несовместимыми.
Для того, чтобы расширение для phpBB 3.1, использующее систему уведомлений, работало в phpBB 3.2, необходимо сделать следующее.
1) Внести изменения в определение сервиса уведомления в services.yml:
Вместо

Код: Выделить всё

        arguments:
            - @user_loader
            - @dbal.conn
            - @cache.driver
            - @user
            - @auth
            - @config
            - %core.root_path%
            - %core.php_ext%
            - %tables.notification_types%
            - %tables.notifications%
            - %tables.user_notifications%
задать

Код: Выделить всё

        parent: notification.type.base
        calls:
            - [set_user_loader, [@user_loader]]
Непосредственно в файле класса уведомления добавить объявление переменной класса и новую функцию (необходимо для сохранения отображения аватары):

Код: Выделить всё

	/** @var \phpbb\user_loader */
	protected $user_loader;

	public function set_user_loader(\phpbb\user_loader $user_loader)
	{
		$this->user_loader = $user_loader;
	}
Также изменилось использование функций find_users_for_notification и create_insert_array:

Код: Выделить всё

public function find_users_for_notification($data, $options = array())
{
    ...
    // phpBB 3.1:
    $users[$row['user_id']] = array('');

    // phpBB 3.2:
    $users[$row['user_id']] = $this->notification_manager->get_default_methods();
    ...
}
 

Код: Выделить всё

public function create_insert_array($data, $pre_create_data = array())
{
    ...
    // phpBB 3.1:
    return parent::create_insert_array($data, $pre_create_data);
   
    // phpBB 3.2:
    parent::create_insert_array($data, $pre_create_data);
}
 
Пример расширения для phpBB 3.2 с уведомлениями: Thanks for posts.
Патч, которым уведомления для phpBB 3.1 изменены для работы в phpBB 3.2: #032814387.

На этом всё. как видим, процесс миграции несложен. Дерзайте.
Изображение
Аватара пользователя
saturn-z
phpBB 2.0.0
Сообщения: 241
Стаж: 11 лет 4 месяца
Откуда: РФ, Тюмень
Благодарил (а): 13 раз
Поблагодарили: 93 раза
Контактная информация:

Re: [3.2] Миграция уведомлений

Сообщение saturn-z »

rxu, о как раз вовремя, я уже собирался просить чтоб написали мануал. А он уже готов :D

Отправлено спустя 43 секунды:
Так, что-то не совсем понятно. В 3.1 это тоже будет работать?
Немало нужно знания, чтобы уметь скрыть перед другими свое незнание.
Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 12372
Стаж: 12 лет 7 месяцев
Благодарил (а): 223 раза
Поблагодарили: 3517 раз
Контактная информация:

Re: [3.2] Миграция уведомлений

Сообщение Татьяна5 »

saturn-z,
rxu писал(а):Создание уведомлений расширениями для phpBB 3.1 описано в теме Создание уведомлений в расширениях.
Аватара пользователя
saturn-z
phpBB 2.0.0
Сообщения: 241
Стаж: 11 лет 4 месяца
Откуда: РФ, Тюмень
Благодарил (а): 13 раз
Поблагодарили: 93 раза
Контактная информация:

Re: [3.2] Миграция уведомлений

Сообщение saturn-z »

Татьяна5, это я знаю, в 3.1 у меня всё работает. Вопрос в том, что если я переделаю код под 3.2 то в 3.1 он перестанет работать?
Немало нужно знания, чтобы уметь скрыть перед другими свое незнание.
Аватара пользователя
Pazh
Former team member
Сообщения: 2317
Стаж: 14 лет 4 месяца
Благодарил (а): 43 раза
Поблагодарили: 506 раз
Контактная информация:

Re: [3.2] Миграция уведомлений

Сообщение Pazh »

Дополнение к первому посту (взято отсюда, т.к. уведомления - это тоже сервис):

Устаревшие области (scope) и введение общих (shared) сервисов
Предупреждение!
Ниже перечислены необходимые изменения для версий phpBB 3.2 и более поздних версий. Они не совместимы с phpBB 3.1. Расширения, делающие это изменение, должны выпустить новую основную версию, без поддержки 3.1.


По-умолчанию, все сервисы являются shared сервисами. Это означает, что класс создается один раз и используется каждый раз, когда вы запрашиваете его из контейнера сервиса.

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

В phpBB 3.1 это было определено в services.yml, установив опцию scope в prototype:

Код: Выделить всё

vendor.package.class:
   class: vendor\package\classname
   scope: prototype
Для phpBB 3.2 вместо scope теперь необходимо настроить share опцию и установить ее в значение false, чтобы получить тот же результат, что и в предыдущей области прототипа:

Код: Выделить всё

vendor.package.class:
   class: vendor\package\classname
   shared: false
Помощь в ЛС/email только за WM или ЮMoney
Аватара пользователя
Nekstati
Поддержка
Поддержка
Сообщения: 3335
Стаж: 15 лет
Благодарил (а): 35 раз
Поблагодарили: 1434 раза

Re: [3.2] Миграция уведомлений

Сообщение Nekstati »

rxu, есть ошибка в этой статье и в оф. документации тоже.

Код: Выделить всё

    public function find_users_for_notification($data, $options = array())
    {
        ...
        // phpBB 3.1:
        $users[$row['user_id']] = array('');
     
        // phpBB 3.2:
        $users[$row['user_id']] = $this->notification_manager->get_default_methods();
        ...
    }
При таком использовании уведомления рассылаются всем пользователям, их личные настройки игнорируются. Тут вместо get_default_methods() должно быть check_user_notification_options(), т.е. изменения по сравнению с phpBB 3.1 не нужны.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16313
Стаж: 17 лет 10 месяцев
Откуда: Красноярск
Благодарил (а): 533 раза
Поблагодарили: 2119 раз
Контактная информация:

Re: [3.2] Миграция уведомлений

Сообщение rxu »

Судя по коду, оно вообще ни на что не влияет, так как результат присвоения $users[$row['user_id']] = $this->notification_manager->get_default_methods(); нигде не используется.
Изображение
Ответить

Вернуться в «Для разработчиков»