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

Переименование расширения

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

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

Переименование расширения

Сообщение rxu »

По разным причинам, может возникнуть необходимость переименовать расширение, при этом не удаляя данные расширения со старым именем.
Условно:
старое название: vendor name
новое название: newvendor newname

Для этого требуется:
  1. Переименовать структуру папок в соответствии с новыми именами newvendor и newname
  2. Изменить в файлах расширения все вхождения vendor и name на newvendor и newname:
    • Изменить имя расширения в composer.json - значение поля name на newvendor/newname
    • Изменить в namespace в файлах все вхождения vendor\name на newvendor\newname
    • Изменить название расширения во всех местах, где обращение к нему жестко прописано, с vendor\name на newvendor\newname
    • Изменить в именах сервисов и маршрутов все сочетания vendor.name на newvendor.newname в файлах конфигурации
    • Изменить в путях к классам сервисов все сочетания vendor\name на newvendor\newname в файлах конфигурации
    • Изменить вхождения имени расширения в info файлах модулей администраторского, модераторского, личного разделов, добавляемых расширением (если они есть), в том числе ключи 'filename' и 'auth'
    • Изменить вхождения имени расширения в пути классов миграций-зависимостей в функции depends_on() в файлах миграций
    • Изменить вхождения @vendor_extname в PHP скриптах (в определениях шаблонов и языковых файлов) и в файлах стилей (если они есть)
    • Изменить имена событий (либо добавить такие же, но с новыми именами, а старые события пометить как @deprecated)

      Чтобы это сделать, надо заменить все вхождения во всех файлах:
      • vendor.name на newvendor.newname
      • vendor/name на newvendor/newname
      • vendor\name на newvendor\newname
      • vendor_name на newvendor_newname
  3. Заменить имя расширения в таблицах notification_types, ext, modules и migrations. Прототип функции для файла ext.php (использовать в функции enable_step(), пример использования):

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

    	/**
    	* Rename extension
    	*
    	* @param string Old vendor/name
    	* @param string New vendor/name
    	* @return null
    	*/
    	function rename_extension($old_name, $new_name)
    	{
    		// For some fields vendor\name is used instead of vendor/name
    		$old_name_revert_separator = str_replace('/', '\\', $old_name);
    		$new_name_revert_separator = str_replace('/', '\\', $new_name);
    
    		$db = $this->container->get('dbal.conn');
    
    		$db->sql_transaction('begin');
    
    		$sql_migrations = 'UPDATE ' . MIGRATIONS_TABLE . " SET
    			migration_name = REPLACE(migration_name, '" . $db->sql_escape($old_name_revert_separator) . "', '" .  $db->sql_escape($new_name_revert_separator) . "'),
    			migration_depends_on = REPLACE(migration_depends_on, '" . $db->sql_escape($old_name_revert_separator) . "', '" .  $db->sql_escape($new_name_revert_separator) . "')";
    		$db->sql_query($sql_migrations);
    
    		$sql_modules = 'UPDATE ' . MODULES_TABLE . " SET
    			module_basename = REPLACE(module_basename, '" . $db->sql_escape($old_name_revert_separator) . "', '" .  $db->sql_escape($new_name_revert_separator) . "'),
    			module_auth = REPLACE(module_auth, '" . $db->sql_escape($old_name) . "', '" .  $db->sql_escape($new_name) . "')";
    		$db->sql_query($sql_modules);
    
    		$sql_ext = 'UPDATE ' . EXT_TABLE . " SET
    			ext_name = REPLACE(ext_name, '" . $db->sql_escape($old_name) . "', '" .  $db->sql_escape($new_name) . "')";
    		$db->sql_query($sql_ext);
    
    		$sql_notification_types = 'UPDATE ' . NOTIFICATION_TYPES_TABLE . " SET
    			notification_type_name = REPLACE(notification_type_name, '" . $db->sql_escape(str_replace('/', '.', $old_name)) . "', '" .  $db->sql_escape(str_replace('/', '.', $new_name)) . "')";
    		$db->sql_query($sql_notification_types);
    
    		$db->sql_transaction('commit');
    
    		$cache = $this->container->get('cache');
    		$cache->purge();
    	}
    
Затем загрузить переименованное расширение, включить его, удалить с сервера папку со старым расширением.

Замечания и дополнения приветствуются.
Изображение
Аватара пользователя
LavIgor
Former team member
Сообщения: 3468
Стаж: 9 лет 11 месяцев
Благодарил (а): 41 раз
Поблагодарили: 932 раза

Re: Переименование расширения

Сообщение LavIgor »

rxu писал(а): 13.01.2018 23:49Изменить вхождения @vendor_extname в файлах стилей (если они есть)
В PHP-файлах иногда тоже может использоваться (как раз, когда шаблоны стилей/email подключаются).
Плюс в функциях add_lang.
И дополнительно, если где-то в файлах вдруг жёстко прописано название (жалко, что нет удобной функции по извлечению названия текущего расширения и надо об этом заботиться каждый раз самому).

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

Re: Переименование расширения

Сообщение rxu »

Обновил инструкцию.
Еще же есть уведомления, совсем забыл. Надо еще и таблицу типов уведомлений обновлять.
Изображение
Ответить

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