Initial Upload
This commit is contained in:
60
lib/Listener/OnMediaDelete/MenuBoardListener.php
Normal file
60
lib/Listener/OnMediaDelete/MenuBoardListener.php
Normal file
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright (C) 2021 Xibo Signage Ltd
|
||||
*
|
||||
* Xibo - Digital Signage - http://www.xibo.org.uk
|
||||
*
|
||||
* This file is part of Xibo.
|
||||
*
|
||||
* Xibo is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* any later version.
|
||||
*
|
||||
* Xibo is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with Xibo. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
namespace Xibo\Listener\OnMediaDelete;
|
||||
|
||||
use Xibo\Event\MediaDeleteEvent;
|
||||
use Xibo\Factory\MenuBoardCategoryFactory;
|
||||
use Xibo\Listener\ListenerLoggerTrait;
|
||||
use Xibo\Support\Exception\InvalidArgumentException;
|
||||
|
||||
class MenuBoardListener
|
||||
{
|
||||
use ListenerLoggerTrait;
|
||||
|
||||
/** @var MenuBoardCategoryFactory */
|
||||
private $menuBoardCategoryFactory;
|
||||
|
||||
public function __construct($menuBoardCategoryFactory)
|
||||
{
|
||||
$this->menuBoardCategoryFactory = $menuBoardCategoryFactory;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param MediaDeleteEvent $event
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function __invoke(MediaDeleteEvent $event)
|
||||
{
|
||||
$media = $event->getMedia();
|
||||
|
||||
foreach ($this->menuBoardCategoryFactory->query(null, ['mediaId' => $media->mediaId]) as $category) {
|
||||
$category->mediaId = null;
|
||||
$category->save();
|
||||
}
|
||||
|
||||
foreach ($this->menuBoardCategoryFactory->getProductData(null, ['mediaId' => $media->mediaId]) as $product) {
|
||||
$product->mediaId = null;
|
||||
$product->save();
|
||||
}
|
||||
}
|
||||
}
|
||||
62
lib/Listener/OnMediaDelete/PurgeListListener.php
Normal file
62
lib/Listener/OnMediaDelete/PurgeListListener.php
Normal file
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
/**
|
||||
* Copyright (C) 2021 Xibo Signage Ltd
|
||||
*
|
||||
* Xibo - Digital Signage - http://www.xibo.org.uk
|
||||
*
|
||||
* This file is part of Xibo.
|
||||
*
|
||||
* Xibo is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* any later version.
|
||||
*
|
||||
* Xibo is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with Xibo. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
namespace Xibo\Listener\OnMediaDelete;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Xibo\Event\MediaDeleteEvent;
|
||||
use Xibo\Helper\DateFormatHelper;
|
||||
use Xibo\Listener\ListenerLoggerTrait;
|
||||
use Xibo\Service\ConfigServiceInterface;
|
||||
use Xibo\Storage\StorageServiceInterface;
|
||||
|
||||
class PurgeListListener
|
||||
{
|
||||
use ListenerLoggerTrait;
|
||||
|
||||
/**
|
||||
* @var StorageServiceInterface
|
||||
*/
|
||||
private $store;
|
||||
/**
|
||||
* @var ConfigServiceInterface
|
||||
*/
|
||||
private $configService;
|
||||
|
||||
public function __construct(StorageServiceInterface $store, ConfigServiceInterface $configService)
|
||||
{
|
||||
$this->store = $store;
|
||||
$this->configService = $configService;
|
||||
}
|
||||
|
||||
public function __invoke(MediaDeleteEvent $event)
|
||||
{
|
||||
// storedAs
|
||||
if ($event->isSetToPurge()) {
|
||||
$this->store->insert('INSERT INTO `purge_list` (mediaId, storedAs, expiryDate) VALUES (:mediaId, :storedAs, :expiryDate)', [
|
||||
'mediaId' => $event->getMedia()->mediaId,
|
||||
'storedAs' => $event->getMedia()->storedAs,
|
||||
'expiryDate' => Carbon::now()->addDays($this->configService->getSetting('DEFAULT_PURGE_LIST_TTL'))->format(DateFormatHelper::getSystemFormat())
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
97
lib/Listener/OnMediaDelete/WidgetListener.php
Normal file
97
lib/Listener/OnMediaDelete/WidgetListener.php
Normal file
@@ -0,0 +1,97 @@
|
||||
<?php
|
||||
/*
|
||||
* Copyright (C) 2023 Xibo Signage Ltd
|
||||
*
|
||||
* Xibo - Digital Signage - http://www.xibo.org.uk
|
||||
*
|
||||
* This file is part of Xibo.
|
||||
*
|
||||
* Xibo is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* any later version.
|
||||
*
|
||||
* Xibo is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with Xibo. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
namespace Xibo\Listener\OnMediaDelete;
|
||||
|
||||
use Xibo\Event\MediaDeleteEvent;
|
||||
use Xibo\Factory\ModuleFactory;
|
||||
use Xibo\Factory\WidgetFactory;
|
||||
use Xibo\Listener\ListenerLoggerTrait;
|
||||
use Xibo\Storage\StorageServiceInterface;
|
||||
|
||||
class WidgetListener
|
||||
{
|
||||
use ListenerLoggerTrait;
|
||||
|
||||
/** @var WidgetFactory */
|
||||
private $widgetFactory;
|
||||
|
||||
/** @var \Xibo\Factory\ModuleFactory */
|
||||
private $moduleFactory;
|
||||
|
||||
/** @var StorageServiceInterface */
|
||||
private $storageService;
|
||||
|
||||
public function __construct(
|
||||
StorageServiceInterface $storageService,
|
||||
WidgetFactory $widgetFactory,
|
||||
ModuleFactory $moduleFactory
|
||||
) {
|
||||
$this->storageService = $storageService;
|
||||
$this->widgetFactory = $widgetFactory;
|
||||
$this->moduleFactory = $moduleFactory;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param MediaDeleteEvent $event
|
||||
* @throws \Xibo\Support\Exception\GeneralException
|
||||
*/
|
||||
public function __invoke(MediaDeleteEvent $event)
|
||||
{
|
||||
$media = $event->getMedia();
|
||||
$parentMedia = $event->getParentMedia();
|
||||
|
||||
foreach ($this->widgetFactory->getByMediaId($media->mediaId) as $widget) {
|
||||
$widget->unassignMedia($media->mediaId);
|
||||
|
||||
if ($parentMedia != null) {
|
||||
// Assign the parent media to the widget instead
|
||||
$widget->assignMedia($parentMedia->mediaId);
|
||||
|
||||
// Swap any audio nodes over to this new widget media assignment.
|
||||
$this->storageService->update('
|
||||
UPDATE `lkwidgetaudio` SET mediaId = :mediaId WHERE widgetId = :widgetId AND mediaId = :oldMediaId
|
||||
', [
|
||||
'mediaId' => $parentMedia->mediaId,
|
||||
'widgetId' => $widget->widgetId,
|
||||
'oldMediaId' => $media->mediaId
|
||||
]);
|
||||
} else {
|
||||
// Also delete the `lkwidgetaudio`
|
||||
foreach ($widget->audio as $audio) {
|
||||
$widget->unassignAudioById($audio->mediaId);
|
||||
$audio->delete();
|
||||
}
|
||||
}
|
||||
|
||||
// This action might result in us deleting a widget (unless we are a temporary file with an expiry date)
|
||||
if ($media->mediaType != 'module'
|
||||
&& $this->moduleFactory->getByType($widget->type)->regionSpecific === 0
|
||||
&& count($widget->mediaIds) <= 0
|
||||
) {
|
||||
$widget->delete();
|
||||
} else {
|
||||
$widget->save(['saveWidgetOptions' => false]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user