Initial Upload

This commit is contained in:
Matt Batchelder
2025-12-02 10:32:59 -05:00
commit 05ce0da296
2240 changed files with 467811 additions and 0 deletions

View 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();
}
}
}

View 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())
]);
}
}
}

View 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]);
}
}
}
}