Ища в this question я придумал следующее решение, которое вызывается из canDelete()
в качестве расширения File
:Найти, если признакам изображение на странице изменилось
protected function isFileInUse()
{
$owner = $this->getOwner();
$dataObjectSubClasses = ClassInfo::subclassesFor('DataObject');
$classesWithFileHasOne = [];
foreach ($dataObjectSubClasses as $subClass) {
$hasOnes = array_flip($subClass::create()->hasOne());
if (array_key_exists($owner->class, $hasOnes)) {
$classesWithFileHasOne[$subClass] = $hasOnes[$owner->class];
}
}
$threshold = (Director::get_current_page()->class == 'AssetAdmin') ? 1 : 2;
$uses = 0;
foreach ($classesWithFileHasOne as $class => $relation) {
$uses += count($class::get()->filter("{$relation}ID", $this->owner->ID));
if ($uses >= $threshold) {
return true;
}
}
return false;
}
Существует один крайний случай я не могу получить вокруг, хотя. Если, скажем, выбранное изображение изменяется в сообщении в блоге, тогда, если есть одно другое использование одного и того же изображения, то при таком подходе он все равно позволит его удалить. Это происходит потому, что до тех пор, пока страница не будет сохранена, текущее изменение не учитывает использование изображения.
Порог установлен по-разному на страницах CMS и Media Manager, чтобы позволить удалять изображение с той страницы, которая его использует.
Есть ли способ, с помощью которого я могу получить доступ к содержащейся странице (или другому элементу - мы используем Elemental) из моего расширения файла, чтобы узнать, изменилось ли связанное с ним изображение?