Удаляющий узел Drupal 7 не удаляет все связанные файлы - PullRequest
1 голос
/ 03 ноября 2011

Один файл загружается при создании узла через стандартный Drupal.

Позже, 2 файла добавляются к узлу через:

file_save(std Class)
file_usage_add(std Class, 'module', 'node', $node_id)

В конце я получаю 3 записи в file_managed и file_usage.

Проблема: когда я удаляю узел через стандартный Drupal, файл, который был добавлен во время первоначального создания узла, удаляется, но не тот, который был добавлен позже. Эти файлы остаются в обеих таблицах и физически на диске.

Есть ли какой-нибудь флаг, который устанавливается для сохранения файлов, даже если узел удален? Если да, где находится этот флаг и как его правильно установить (чтобы он был удален вместе с узлом)?

Ответы [ 2 ]

2 голосов
/ 04 ноября 2011

Ответ находится в функции file_delete(), см. Этот комментарий:

// Если какой-либо модуль все еще имеет запись об использовании в таблице file_usage, файл
// не будет удален

Поскольку ваш модуль объявил интерес к файлу с помощью file_usage_add(), он не будет удален, если ваш модуль явно не скажет, что это нормально.

Вы можете удалить вызов на file_usage_add() или внедрить hook_file_delete() и использовать file_usage_delete(), чтобы обеспечить удаление файла:

function mymodule_file_delete($file) {
  file_usage_delete($file, 'mymodule');
}
1 голос
/ 11 июля 2013

Вы можете принудительно удалить файл.

file_delete($old_file, TRUE);

Но убедитесь, что этот файл не используется в других узлах, используя:

file_usage_list($file);
...