芝麻web文件管理V1.00
编辑当前文件:/home/mgatv524/public_html/fmd/lib/Factory/WidgetFactory.php
. */ namespace Xibo\Factory; use Xibo\Entity\User; use Xibo\Entity\Widget; use Xibo\Exception\NotFoundException; use Xibo\Service\DateServiceInterface; use Xibo\Service\LogServiceInterface; use Xibo\Service\SanitizerServiceInterface; use Xibo\Storage\StorageServiceInterface; /** * Class WidgetFactory * @package Xibo\Factory */ class WidgetFactory extends BaseFactory { /** @var DateServiceInterface */ private $dateService; /** * @var WidgetOptionFactory */ private $widgetOptionFactory; /** * @var WidgetMediaFactory */ private $widgetMediaFactory; /** @var WidgetAudioFactory */ private $widgetAudioFactory; /** * @var PermissionFactory */ private $permissionFactory; /** @var DisplayFactory */ private $displayFactory; /** * Construct a factory * @param StorageServiceInterface $store * @param LogServiceInterface $log * @param SanitizerServiceInterface $sanitizerService * @param User $user * @param UserFactory $userFactory * @param DateServiceInterface $date * @param WidgetOptionFactory $widgetOptionFactory * @param WidgetMediaFactory $widgetMediaFactory * @param WidgetAudioFactory $widgetAudioFactory * @param PermissionFactory $permissionFactory * @param DisplayFactory $displayFactory * */ public function __construct($store, $log, $sanitizerService, $user, $userFactory, $date, $widgetOptionFactory, $widgetMediaFactory, $widgetAudioFactory, $permissionFactory, $displayFactory) { $this->setCommonDependencies($store, $log, $sanitizerService); $this->setAclDependencies($user, $userFactory); $this->dateService = $date; $this->widgetOptionFactory = $widgetOptionFactory; $this->widgetMediaFactory = $widgetMediaFactory; $this->widgetAudioFactory = $widgetAudioFactory; $this->permissionFactory = $permissionFactory; $this->displayFactory = $displayFactory; } /** * Create Empty * @return Widget */ public function createEmpty() { return new Widget( $this->getStore(), $this->getLog(), $this->dateService, $this->widgetOptionFactory, $this->widgetMediaFactory, $this->widgetAudioFactory, $this->permissionFactory, $this->displayFactory ); } /** * Load widgets by Playlist ID * @param int $playlistId * @return array[Widget] */ public function getByPlaylistId($playlistId) { return $this->query(null, array('disableUserCheck' => 1, 'playlistId' => $playlistId)); } /** * Load widgets by MediaId * @param int $mediaId * @return array[Widget] */ public function getByMediaId($mediaId) { return $this->query(null, array('disableUserCheck' => 1, 'mediaId' => $mediaId)); } /** * Get widget by widget id * @param $widgetId * @return Widget */ public function getById($widgetId) { $widgets = $this->query(null, array('disableUserCheck' => 1, 'widgetId' => $widgetId)); return $widgets[0]; } /** * Load widget by widget id * @param $widgetId * @return Widget * @throws NotFoundException */ public function loadByWidgetId($widgetId) { $widgets = $this->query(null, array('disableUserCheck' => 1, 'widgetId' => $widgetId)); if (count($widgets) <= 0) throw new NotFoundException(__('Widget not found')); $widget = $widgets[0]; /* @var Widget $widget */ $widget->load(); return $widget; } /** * Create a new widget * @param int $ownerId * @param int $playlistId * @param string $type * @param int $duration * @return Widget */ public function create($ownerId, $playlistId, $type, $duration) { $widget = $this->createEmpty(); $widget->ownerId = $ownerId; $widget->playlistId = $playlistId; $widget->type = $type; $widget->duration = $duration; $widget->displayOrder = 1; return $widget; } public function query($sortOrder = null, $filterBy = []) { if ($sortOrder == null) $sortOrder = array('displayOrder'); $entries = array(); $params = array(); $select = ' SELECT widget.widgetId, widget.playlistId, widget.ownerId, widget.type, widget.duration, widget.displayOrder, `widget`.useDuration, `widget`.calculatedDuration '; if (DBVERSION >= 139) { $select .= ' , createdDt, modifiedDt '; } $body = ' FROM `widget` '; if ($this->getSanitizer()->getInt('mediaId', $filterBy) !== null) { $body .= ' INNER JOIN `lkwidgetmedia` ON `lkwidgetmedia`.widgetId = widget.widgetId AND `lkwidgetmedia`.mediaId = :mediaId '; $params['mediaId'] = $this->getSanitizer()->getInt('mediaId', $filterBy); } $body .= ' WHERE 1 = 1 '; // Permissions $this->viewPermissionSql('Xibo\Entity\Widget', $body, $params, 'widget.widgetId', 'widget.ownerId', $filterBy); if ($this->getSanitizer()->getInt('playlistId', $filterBy) !== null) { $body .= ' AND playlistId = :playlistId'; $params['playlistId'] = $this->getSanitizer()->getInt('playlistId', $filterBy); } if ($this->getSanitizer()->getInt('widgetId', $filterBy) !== null) { $body .= ' AND widgetId = :widgetId'; $params['widgetId'] = $this->getSanitizer()->getInt('widgetId', $filterBy); } // Sorting? $order = ''; if (is_array($sortOrder)) $order .= ' ORDER BY ' . implode(',', $sortOrder); $limit = ''; // Paging if ($filterBy !== null && $this->getSanitizer()->getInt('start', $filterBy) !== null && $this->getSanitizer()->getInt('length', $filterBy) !== null) { $limit = ' LIMIT ' . intval($this->getSanitizer()->getInt('start', $filterBy), 0) . ', ' . $this->getSanitizer()->getInt('length', 10, $filterBy); } // The final statements $sql = $select . $body . $order . $limit; foreach ($this->getStore()->select($sql, $params) as $row) { $entries[] = $this->createEmpty()->hydrate($row, ['intProperties' => ['duration', 'createdDt', 'modifiedDt']]); } // Paging if ($limit != '' && count($entries) > 0) { $results = $this->getStore()->select('SELECT COUNT(*) AS total ' . $body, $params); $this->_countLast = intval($results[0]['total']); } return $entries; } }