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

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

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 14403
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 344 раза
Поблагодарили: 1514 раз
Контактная информация:

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

Сообщение rxu » 17.12.2015 18:04

Создание уведомлений расширениями для 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
Зарегистрирован: 10.11.2012 23:49
Откуда: РФ, Тюмень
Благодарил (а): 13 раз
Поблагодарили: 93 раза
Контактная информация:

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

Сообщение saturn-z » 17.12.2015 20:44

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

Отправлено спустя 43 секунды:
Так, что-то не совсем понятно. В 3.1 это тоже будет работать?
Немало нужно знания, чтобы уметь скрыть перед другими свое незнание.

Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 9641
Зарегистрирован: 08.08.2011 2:02
Благодарил (а): 173 раза
Поблагодарили: 2672 раза
Контактная информация:

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

Сообщение Татьяна5 » 18.12.2015 15:06

saturn-z,
rxu писал(а):Создание уведомлений расширениями для phpBB 3.1 описано в теме Создание уведомлений в расширениях.

Аватара пользователя
saturn-z
phpBB 2.0.0
Сообщения: 241
Зарегистрирован: 10.11.2012 23:49
Откуда: РФ, Тюмень
Благодарил (а): 13 раз
Поблагодарили: 93 раза
Контактная информация:

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

Сообщение saturn-z » 18.12.2015 20:38

Татьяна5, это я знаю, в 3.1 у меня всё работает. Вопрос в том, что если я переделаю код под 3.2 то в 3.1 он перестанет работать?
Немало нужно знания, чтобы уметь скрыть перед другими свое незнание.

Аватара пользователя
Татьяна5
Поддержка
Поддержка
Сообщения: 9641
Зарегистрирован: 08.08.2011 2:02
Благодарил (а): 173 раза
Поблагодарили: 2672 раза
Контактная информация:

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

Сообщение Татьяна5 » 19.12.2015 17:33

saturn-z, конечно

Аватара пользователя
Pazh
Former team member
Сообщения: 2194
Зарегистрирован: 09.11.2009 17:46
Благодарил (а): 41 раз
Поблагодарили: 453 раза
Контактная информация:

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

Сообщение Pazh » 26.09.2017 10:06

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

Устаревшие области (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 или ЯД

Аватара пользователя
Nekstati
Поддержка
Поддержка
Сообщения: 2758
Зарегистрирован: 19.03.2009 17:43
Благодарил (а): 22 раза
Поблагодарили: 968 раз

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

Сообщение Nekstati » 08.10.2019 17:48

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
Сообщения: 14403
Зарегистрирован: 12.05.2006 18:16
Откуда: Красноярск
Благодарил (а): 344 раза
Поблагодарили: 1514 раз
Контактная информация:

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

Сообщение rxu » 08.10.2019 18:11

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

Ответить

Вернуться в «Для авторов»