File: /home/posscale/subdomains/xibo/lib/Widget/LocalVideo.php
<?php
/*
* Xibo - Digital Signage - http://www.xibo.org.uk
* Copyright (C) 2012-15 Daniel Garner
*
* 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\Widget;
use InvalidArgumentException;
use Respect\Validation\Validator as v;
class LocalVideo extends ModuleWidget
{
/**
* Validate
*/
public function validate()
{
// Validate
if (!v::string()->notEmpty()->validate(urldecode($this->getOption('uri'))))
throw new InvalidArgumentException(__('Please enter a full path name giving the location of this video on the client'));
if ($this->getUseDuration() == 1 && !v::int()->min(1)->validate($this->getDuration()))
throw new InvalidArgumentException(__('You must enter a duration.'));
}
/**
* Adds a Local Video Widget
* @SWG\Post(
* path="/playlist/widget/localVideo/{playlistId}",
* operationId="WidgetLocalVideoAdd",
* tags={"widget"},
* summary="Add a Local Video Widget",
* description="Add a new Local Video Widget to the specified playlist",
* @SWG\Parameter(
* name="playlistId",
* in="path",
* description="The playlist ID to add a Widget to",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="duration",
* in="formData",
* description="The Widget Duration",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="useDuration",
* in="formData",
* description="(0, 1) Select 1 only if you will provide duration parameter as well",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="uri",
* in="formData",
* description="A local file path or URL to the video. This can be RTSP stream.",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="scaleTypeId",
* in="formData",
* description="How should the video be scaled, available options: aspect, stretch",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="mute",
* in="formData",
* description="Flag (0, 1) Should the video be muted?",
* type="integer",
* required=false
* ),
* @SWG\Response(
* response=201,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/Widget"),
* @SWG\Header(
* header="Location",
* description="Location of the new widget",
* type="string"
* )
* )
* )
*/
public function add()
{
// Set some options
$this->setDuration($this->getSanitizer()->getInt('duration', $this->getDuration()));
$this->setUseDuration($this->getSanitizer()->getCheckbox('useDuration'));
$this->setOption('uri', urlencode($this->getSanitizer()->getString('uri')));
$this->setOption('scaleType', $this->getSanitizer()->getString('scaleTypeId', 'aspect'));
$this->setOption('mute', $this->getSanitizer()->getCheckbox('mute'));
$this->validate();
// Save the widget
$this->saveWidget();
}
/**
* Edit Media in the Database
*/
public function edit()
{
// Set some options
$this->setDuration($this->getSanitizer()->getInt('duration', $this->getDuration()));
$this->setUseDuration($this->getSanitizer()->getCheckbox('useDuration'));
$this->setOption('uri', urlencode($this->getSanitizer()->getString('uri')));
$this->setOption('scaleType', $this->getSanitizer()->getString('scaleTypeId', 'aspect'));
$this->setOption('mute', $this->getSanitizer()->getCheckbox('mute'));
$this->validate();
// Save the widget
$this->saveWidget();
}
public function isValid()
{
// Client dependant
return 2;
}
/**
* Override previewAsClient
* @param float $width
* @param float $height
* @param int $scaleOverride
* @return string
*/
public function previewAsClient($width, $height, $scaleOverride = 0)
{
return $this->previewIcon();
}
}