芝麻web文件管理V1.00
编辑当前文件:/home/mgatv524/public_html/avenida/lib/Factory/RegionFactory.php
. */ namespace Xibo\Factory; use Xibo\Entity\Region; use Xibo\Exception\NotFoundException; use Xibo\Service\DateServiceInterface; use Xibo\Service\LogServiceInterface; use Xibo\Service\SanitizerServiceInterface; use Xibo\Storage\StorageServiceInterface; /** * Class RegionFactory * @package Xibo\Factory */ class RegionFactory extends BaseFactory { /** @var DateServiceInterface */ private $dateService; /** * @var RegionOptionFactory */ private $regionOptionFactory; /** * @var PermissionFactory */ private $permissionFactory; /** * @var PlaylistFactory */ private $playlistFactory; /** * Construct a factory * @param StorageServiceInterface $store * @param LogServiceInterface $log * @param SanitizerServiceInterface $sanitizerService * @param DateServiceInterface $date * @param PermissionFactory $permissionFactory * @param RegionOptionFactory $regionOptionFactory * @param PlaylistFactory $playlistFactory */ public function __construct($store, $log, $sanitizerService, $date, $permissionFactory, $regionOptionFactory, $playlistFactory) { $this->setCommonDependencies($store, $log, $sanitizerService); $this->dateService = $date; $this->permissionFactory = $permissionFactory; $this->regionOptionFactory = $regionOptionFactory; $this->playlistFactory = $playlistFactory; } /** * @return Region */ public function createEmpty() { return new Region( $this->getStore(), $this->getLog(), $this->dateService, $this, $this->permissionFactory, $this->regionOptionFactory, $this->playlistFactory ); } /** * Create a new region * @param int $ownerId; * @param string $name * @param int $width * @param int $height * @param int $top * @param int $left * @param int $zIndex * @return Region */ public function create($ownerId, $name, $width, $height, $top, $left, $zIndex = 0) { // Validation if (!is_numeric($width) || !is_numeric($height) || !is_numeric($top) || !is_numeric($left)) throw new \InvalidArgumentException(__('Size and coordinates must be generic')); if ($width <= 0) throw new \InvalidArgumentException(__('Width must be greater than 0')); if ($height <= 0) throw new \InvalidArgumentException(__('Height must be greater than 0')); $region = $this->createEmpty(); $region->ownerId = $ownerId; $region->name = $name; $region->width = $width; $region->height = $height; $region->top = $top; $region->left = $left; $region->zIndex = $zIndex; // Create a Playlist for this region // many to many relationship $playlist = $this->playlistFactory->create($name, $ownerId); $region->assignPlaylist($playlist); return $region; } /** * Get the regions for a layout * @param int $layoutId * @return array[\Xibo\Entity\Region] */ public function getByLayoutId($layoutId) { // Get all regions for this layout return $this->query(array(), array('disableUserCheck' => 1, 'layoutId' => $layoutId)); } /** * Get the regions for a playlist * @param int $playlistId * @return array[\Xibo\Entity\Region] */ public function getByPlaylistId($playlistId) { // Get all regions for this layout return $this->query(array(), array('disableUserCheck' => 1, 'playlistId' => $playlistId)); } /** * Load a region * @param int $regionId * @return Region */ public function loadByRegionId($regionId) { $region = $this->getById($regionId); $region->load(); return $region; } /** * Get by RegionId * @param int $regionId * @return Region * @throws NotFoundException */ public function getById($regionId) { // Get a region by its ID $regions = $this->query(array(), array('disableUserCheck' => 1, 'regionId' => $regionId)); if (count($regions) <= 0) throw new NotFoundException(__('Region not found')); return $regions[0]; } /** * @param array $sortOrder * @param array $filterBy * @return array[Region] */ public function query($sortOrder = array(), $filterBy = array()) { $entries = array(); $params = array(); $sql = ' SELECT `region`.regionId, `region`.layoutId, `region`.ownerId, `region`.name, `region`.width, `region`.height, `region`.top, `region`.left, `region`.zIndex, `region`.duration '; if ($this->getSanitizer()->getInt('playlistId', $filterBy) !== null) { $sql .= ', `lkregionplaylist`.displayOrder '; } $sql .= ' FROM `region` '; if ($this->getSanitizer()->getInt('playlistId', $filterBy) !== null) { // Restrict to assigned playlists $sql .= ' INNER JOIN `lkregionplaylist` ON `lkregionplaylist`.regionId = `region`.regionId AND `lkregionplaylist`.playlistId = :playlistId '; $params['playlistId'] = $this->getSanitizer()->getInt('playlistId', $filterBy); } $sql .= ' WHERE 1 = 1 '; if ($this->getSanitizer()->getInt('regionId', $filterBy) != 0) { $sql .= ' AND regionId = :regionId '; $params['regionId'] = $this->getSanitizer()->getInt('regionId', $filterBy); } if ($this->getSanitizer()->getInt('layoutId', $filterBy) != 0) { $sql .= ' AND layoutId = :layoutId '; $params['layoutId'] = $this->getSanitizer()->getInt('layoutId', $filterBy); } foreach ($this->getStore()->select($sql, $params) as $row) { $entries[] = $this->createEmpty()->hydrate($row, ['intProperties' => ['zIndex']]); } return $entries; } }