Удаление модуля привело к удалению настроек других модулей и тем

Главные вкладки

Аватар пользователя sysname@drupal.org sysname@drupal.org 21 июля 2009 в 16:09

Впервую очередь это для тех кто использует Acidfree и планирует его сносить...

Drupal, ver 6.13
модуль Acidfree, ver 6.x-1.x-dev

Сегодня на своем сайте отключил модуль, потом сделал uninstall и в результате получил полетевшие настройки по всем модулям и темам.
После повторного включения модуля, отключения и удаления симптомы повторились. Полез посмотреть на acidfree_uninstall в acidfree.install, насторожила строчка - db_query("DELETE FROM {variable} WHERE name LIKE '%%s%'", 'acidfree');. Почитав таблицу {variable} убедился что все параметры содержащие в имени букву "s" имели значения по умолчанию.
Настройки восстановил из бекапа - загрузил бекап {variable} в другую таблицу, update существующих ключей, потом insert отсутствующих.

Вот собственно и все о чем хотел рассказать. Недаром update.php говорит

    1. Back up your database. This process will change your database values and in case of emergency you may need to revert to a backup.
    2. Back up your code. Hint: when backing up module code, do not leave that backup in the 'modules' or 'sites/*/modules' directories as this may confuse Drupal's auto-discovery mechanism.

    p.s. прошу не тыкать мне что это dev версия - я в курсе ))

Комментарии

Аватар пользователя dimedrol dimedrol 21 июля 2009 в 22:01

Жесть.

Вместо:
<?phpdb_query("DELETE FROM {variable} WHERE name LIKE '%%s%'", 'acidfree');?>

нужно было написать:
<?phpdb_query("DELETE FROM {variable} WHERE name LIKE '%%%s%%'", 'acidfree');?>

sysname@drupal.org, зарегистрируйте для этого модуля issue c приоритетом critical. Вы имеете на это моральное право!

Аватар пользователя sysname@drupal.org sysname@drupal.org 22 июля 2009 в 10:19

dimedrol wrote:
Жесть.

нужно было написать:
<?phpdb_query("DELETE FROM {variable} WHERE name LIKE '%%%s%%'", 'acidfree');?>

sysname@drupal.org, зарегистрируйте для этого модуля issue c приоритетом critical. Вы имеете на это моральное право!

Глядя на другие модули надо писать или variable_del() для каждой переменной
или как module feedburner

function feedburner_uninstall() {
  drupal_uninstall_schema('feedburner');

  // Remove variables.
  drupal_load('module', 'feedburner');
  $variables = array_keys(feedburner_variables());
  foreach ($variables as $variable) {
    variable_del($variable);
  }
}