. */ namespace Xibo\Middleware; use Psr\Http\Message\ResponseInterface as Response; use Psr\Http\Message\ServerRequestInterface as Request; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Server\RequestHandlerInterface as RequestHandler; use Slim\App; use Xibo\Event\CommandDeleteEvent; use Xibo\Event\DependencyFileSizeEvent; use Xibo\Event\DisplayGroupLoadEvent; use Xibo\Event\FolderMovingEvent; use Xibo\Event\MediaDeleteEvent; use Xibo\Event\MediaFullLoadEvent; use Xibo\Event\ParsePermissionEntityEvent; use Xibo\Event\PlaylistMaxNumberChangedEvent; use Xibo\Event\SystemUserChangedEvent; use Xibo\Event\UserDeleteEvent; use Xibo\Listener\CampaignListener; use Xibo\Listener\DataSetDataProviderListener; use Xibo\Listener\DisplayGroupListener; use Xibo\Listener\LayoutListener; use Xibo\Listener\MediaListener; use Xibo\Listener\MenuBoardProviderListener; use Xibo\Listener\ModuleTemplateListener; use Xibo\Listener\NotificationDataProviderListener; use Xibo\Listener\PlaylistListener; use Xibo\Listener\SyncGroupListener; use Xibo\Listener\TaskListener; use Xibo\Listener\WidgetListener; use Xibo\Xmds\Listeners\XmdsAssetsListener; use Xibo\Xmds\Listeners\XmdsDataConnectorListener; use Xibo\Xmds\Listeners\XmdsFontsListener; use Xibo\Xmds\Listeners\XmdsPlayerBundleListener; use Xibo\Xmds\Listeners\XmdsPlayerVersionListener; /** * This middleware is used to register listeners against the dispatcher */ class ListenersMiddleware implements MiddlewareInterface { /* @var App $app */ private $app; public function __construct($app) { $this->app = $app; } /** * @param Request $request * @param RequestHandler $handler * @return Response */ public function process(Request $request, RequestHandler $handler): Response { $app = $this->app; // Set connectors self::setListeners($app); // Next middleware return $handler->handle($request); } /** * Set listeners * @param \Slim\App $app * @return void */ public static function setListeners(App $app) { $c = $app->getContainer(); $dispatcher = $c->get('dispatcher'); // Register listeners // ------------------ // Listen for events that affect campaigns (new CampaignListener( $c->get('campaignFactory'), $c->get('store') )) ->useLogger($c->get('logger')) ->registerWithDispatcher($dispatcher); // Listen for events that affect Layouts (new LayoutListener( $c->get('layoutFactory'), $c->get('store'), $c->get('permissionFactory'), )) ->useLogger($c->get('logger')) ->registerWithDispatcher($dispatcher); // Listen for event that affect Display Groups (new DisplayGroupListener( $c->get('displayGroupFactory'), $c->get('displayFactory'), $c->get('store') )) ->useLogger($c->get('logger')) ->registerWithDispatcher($dispatcher); // Listen for event that affect Media (new MediaListener( $c->get('mediaFactory'), $c->get('store') )) ->useLogger($c->get('logger')) ->registerWithDispatcher($dispatcher); // Listen for events that affect ModuleTemplates (new ModuleTemplateListener( $c->get('moduleTemplateFactory'), )) ->useLogger($c->get('logger')) ->registerWithDispatcher($dispatcher); // Listen for event that affect Playlist (new PlaylistListener( $c->get('playlistFactory'), $c->get('store') )) ->useLogger($c->get('logger')) ->registerWithDispatcher($dispatcher); // Listen for event that affect Sync Group (new SyncGroupListener( $c->get('syncGroupFactory'), $c->get('store') )) ->useLogger($c->get('logger')) ->registerWithDispatcher($dispatcher); // Listen for event that affect Task (new TaskListener( $c->get('taskFactory'), $c->get('configService'), $c->get('pool') )) ->useLogger($c->get('logger')) ->registerWithDispatcher($dispatcher); // Media Delete Events $dispatcher->addListener(MediaDeleteEvent::$NAME, (new \Xibo\Listener\OnMediaDelete\MenuBoardListener( $c->get('menuBoardCategoryFactory') ))); $dispatcher->addListener(MediaDeleteEvent::$NAME, (new \Xibo\Listener\OnMediaDelete\WidgetListener( $c->get('store'), $c->get('widgetFactory'), $c->get('moduleFactory') ))); $dispatcher->addListener(MediaDeleteEvent::$NAME, (new \Xibo\Listener\OnMediaDelete\PurgeListListener( $c->get('store'), $c->get('configService') ))); // User Delete Events $dispatcher->addListener(UserDeleteEvent::$NAME, (new \Xibo\Listener\OnUserDelete\ActionListener( $c->get('store'), $c->get('actionFactory') ))->useLogger($c->get('logger'))); $dispatcher->addListener(UserDeleteEvent::$NAME, (new \Xibo\Listener\OnUserDelete\CommandListener( $c->get('store'), $c->get('commandFactory') ))->useLogger($c->get('logger'))); $dispatcher->addListener(UserDeleteEvent::$NAME, (new \Xibo\Listener\OnUserDelete\DataSetListener( $c->get('store'), $c->get('dataSetFactory') ))->useLogger($c->get('logger'))); $dispatcher->addListener(UserDeleteEvent::$NAME, (new \Xibo\Listener\OnUserDelete\DayPartListener( $c->get('store'), $c->get('dayPartFactory'), $c->get('scheduleFactory'), $c->get('displayNotifyService') ))->useLogger($c->get('logger'))); $dispatcher->addListener(UserDeleteEvent::$NAME, (new \Xibo\Listener\OnUserDelete\DisplayProfileListener( $c->get('store'), $c->get('displayProfileFactory') ))->useLogger($c->get('logger'))); $dispatcher->addListener(UserDeleteEvent::$NAME, (new \Xibo\Listener\OnUserDelete\MenuBoardListener( $c->get('store'), $c->get('menuBoardFactory') ))->useLogger($c->get('logger'))); $dispatcher->addListener(UserDeleteEvent::$NAME, (new \Xibo\Listener\OnUserDelete\NotificationListener( $c->get('notificationFactory') ))->useLogger($c->get('logger'))); $dispatcher->addListener(UserDeleteEvent::$NAME, (new \Xibo\Listener\OnUserDelete\OnUserDelete( $c->get('store') ))->useLogger($c->get('logger'))); $dispatcher->addListener(UserDeleteEvent::$NAME, (new \Xibo\Listener\OnUserDelete\RegionListener( $c->get('regionFactory') ))->useLogger($c->get('logger')), -1); $dispatcher->addListener(UserDeleteEvent::$NAME, (new \Xibo\Listener\OnUserDelete\ReportScheduleListener( $c->get('store'), $c->get('reportScheduleFactory') ))->useLogger($c->get('logger'))); $dispatcher->addListener(UserDeleteEvent::$NAME, (new \Xibo\Listener\OnUserDelete\ResolutionListener( $c->get('store'), $c->get('resolutionFactory') ))->useLogger($c->get('logger'))); $dispatcher->addListener(UserDeleteEvent::$NAME, (new \Xibo\Listener\OnUserDelete\SavedReportListener( $c->get('store'), $c->get('savedReportFactory') ))->useLogger($c->get('logger'))); $dispatcher->addListener(UserDeleteEvent::$NAME, (new \Xibo\Listener\OnUserDelete\ScheduleListener( $c->get('store'), $c->get('scheduleFactory') ))->useLogger($c->get('logger'))); $dispatcher->addListener(UserDeleteEvent::$NAME, (new \Xibo\Listener\OnUserDelete\WidgetListener( $c->get('widgetFactory') ))->useLogger($c->get('logger')), -2); // Display Group Load events $dispatcher->addListener(DisplayGroupLoadEvent::$NAME, (new \Xibo\Listener\OnDisplayGroupLoad\DisplayGroupDisplayListener( $c->get('displayFactory') ))); $dispatcher->addListener(DisplayGroupLoadEvent::$NAME, (new \Xibo\Listener\OnDisplayGroupLoad\DisplayGroupScheduleListener( $c->get('scheduleFactory') ))); // Media full load events $dispatcher->addListener(MediaFullLoadEvent::$NAME, (new \Xibo\Listener\OnMediaLoad\WidgetListener( $c->get('widgetFactory') ))); // Parse Permissions Event Listeners $dispatcher->addListener(ParsePermissionEntityEvent::$NAME . 'command', (new \Xibo\Listener\OnParsePermissions\PermissionsCommandListener( $c->get('commandFactory') ))); $dispatcher->addListener(ParsePermissionEntityEvent::$NAME . 'dataSet', (new \Xibo\Listener\OnParsePermissions\PermissionsDataSetListener( $c->get('dataSetFactory') ))); $dispatcher->addListener(ParsePermissionEntityEvent::$NAME . 'dayPart', (new \Xibo\Listener\OnParsePermissions\PermissionsDayPartListener( $c->get('dayPartFactory') ))); $dispatcher->addListener(ParsePermissionEntityEvent::$NAME . 'folder', (new \Xibo\Listener\OnParsePermissions\PermissionsFolderListener( $c->get('folderFactory') ))); $dispatcher->addListener(ParsePermissionEntityEvent::$NAME . 'menuBoard', (new \Xibo\Listener\OnParsePermissions\PermissionsMenuBoardListener( $c->get('menuBoardFactory') ))); $dispatcher->addListener(ParsePermissionEntityEvent::$NAME . 'notification', (new \Xibo\Listener\OnParsePermissions\PermissionsNotificationListener( $c->get('notificationFactory') ))); $dispatcher->addListener(ParsePermissionEntityEvent::$NAME . 'region', (new \Xibo\Listener\OnParsePermissions\PermissionsRegionListener( $c->get('regionFactory') ))); $dispatcher->addListener(ParsePermissionEntityEvent::$NAME . 'widget', (new \Xibo\Listener\OnParsePermissions\PermissionsWidgetListener( $c->get('widgetFactory') ))); // On Command delete event listener $dispatcher->addListener(CommandDeleteEvent::$NAME, (new \Xibo\Listener\OnCommandDelete( $c->get('displayProfileFactory') ))); // On System User change event listener $dispatcher->addListener(SystemUserChangedEvent::$NAME, (new \Xibo\Listener\OnSystemUserChange( $c->get('store') ))); // On Playlist Max Number of Items limit change listener $dispatcher->addListener(PlaylistMaxNumberChangedEvent::$NAME, (new \Xibo\Listener\OnPlaylistMaxNumberChange( $c->get('store') ))); // On Folder moving listeners $dispatcher->addListener(FolderMovingEvent::$NAME, (new \Xibo\Listener\OnFolderMoving\DataSetListener( $c->get('dataSetFactory') ))); $dispatcher->addListener(FolderMovingEvent::$NAME, (new \Xibo\Listener\OnFolderMoving\FolderListener( $c->get('folderFactory') )), -1); $dispatcher->addListener(FolderMovingEvent::$NAME, (new \Xibo\Listener\OnFolderMoving\MenuBoardListener( $c->get('menuBoardFactory') ))); $dispatcher->addListener(FolderMovingEvent::$NAME, (new \Xibo\Listener\OnFolderMoving\UserListener( $c->get('userFactory'), $c->get('store') ))); // dependencies file size $dispatcher->addListener(DependencyFileSizeEvent::$NAME, (new \Xibo\Listener\OnGettingDependencyFileSize\FontsListener( $c->get('fontFactory') ))); $dispatcher->addListener(DependencyFileSizeEvent::$NAME, (new \Xibo\Listener\OnGettingDependencyFileSize\PlayerVersionListener( $c->get('playerVersionFactory') ))); $dispatcher->addListener(DependencyFileSizeEvent::$NAME, (new \Xibo\Listener\OnGettingDependencyFileSize\SavedReportListener( $c->get('savedReportFactory') ))); // Widget related listeners for getting core data (new DataSetDataProviderListener( $c->get('store'), $c->get('configService'), $c->get('dataSetFactory'), $c->get('displayFactory') )) ->useLogger($c->get('logger')) ->registerWithDispatcher($dispatcher); (new NotificationDataProviderListener( $c->get('configService'), $c->get('notificationFactory'), $c->get('user') )) ->useLogger($c->get('logger')) ->registerWithDispatcher($dispatcher); (new WidgetListener( $c->get('playlistFactory'), $c->get('moduleFactory'), $c->get('widgetFactory'), $c->get('store'), $c->get('configService') )) ->useLogger($c->get('logger')) ->registerWithDispatcher($dispatcher); (new MenuBoardProviderListener( $c->get('menuBoardFactory'), $c->get('menuBoardCategoryFactory'), )) ->useLogger($c->get('logger')) ->registerWithDispatcher($dispatcher); } /** * Set XMDS specific listeners * @param App $app * @return void */ public static function setXmdsListeners(App $app) { $c = $app->getContainer(); $dispatcher = $c->get('dispatcher'); $playerBundleListener = new XmdsPlayerBundleListener(); $playerBundleListener ->useLogger($c->get('logger')) ->useConfig($c->get('configService')); $fontsListener = new XmdsFontsListener($c->get('fontFactory')); $fontsListener ->useLogger($c->get('logger')) ->useConfig($c->get('configService')); $playerVersionListner = new XmdsPlayerVersionListener($c->get('playerVersionFactory')); $playerVersionListner->useLogger($c->get('logger')); $assetsListener = new XmdsAssetsListener( $c->get('moduleFactory'), $c->get('moduleTemplateFactory') ); $assetsListener ->useLogger($c->get('logger')) ->useConfig($c->get('configService')); $dataConnectorListener = new XmdsDataConnectorListener(); $dataConnectorListener ->useLogger($c->get('logger')) ->useConfig($c->get('configService')); $dispatcher->addListener('xmds.dependency.list', [$playerBundleListener, 'onDependencyList']); $dispatcher->addListener('xmds.dependency.request', [$playerBundleListener, 'onDependencyRequest']); $dispatcher->addListener('xmds.dependency.list', [$fontsListener, 'onDependencyList']); $dispatcher->addListener('xmds.dependency.request', [$fontsListener, 'onDependencyRequest']); $dispatcher->addListener('xmds.dependency.list', [$playerVersionListner, 'onDependencyList']); $dispatcher->addListener('xmds.dependency.request', [$playerVersionListner, 'onDependencyRequest']); $dispatcher->addListener('xmds.dependency.request', [$assetsListener, 'onDependencyRequest']); $dispatcher->addListener('xmds.dependency.request', [$dataConnectorListener, 'onDependencyRequest']); } }