getState()->template = 'library-form-copy';
$this->getState()->setData([
'media' => $media,
'help' => $this->getHelp()->link('Media', 'Copy'),
'tags' => $tags
]);
}
/**
* Copies a Media
*
* @SWG\Post(
* path="/library/copy/{mediaId}",
* operationId="mediaCopy",
* tags={"library"},
* summary="Copy Media",
* description="Copy a Media, providing a new name and tags if applicable",
* @SWG\Parameter(
* name="mediaId",
* in="path",
* description="The media ID to Copy",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="name",
* in="formData",
* description="The name for the new Media",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="tags",
* in="formData",
* description="The Optional tags for new Media",
* type="string",
* required=false
* ),
* @SWG\Response(
* response=201,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/Media"),
* @SWG\Header(
* header="Location",
* description="Location of the new record",
* type="string"
* )
* )
* )
*
* @param int $mediaId
*
* @throws NotFoundException
* @throws XiboException
*/
public function copy($mediaId)
{
// Get the Media
$media = $this->mediaFactory->getById($mediaId);
// Check Permissions
if (!$this->getUser()->checkViewable($media))
throw new AccessDeniedException();
// Load the media for Copy
$media->load();
$media = clone $media;
// Set new Name and tags
$media->name = $this->getSanitizer()->getString('name');
$media->replaceTags($this->tagFactory->tagsFromString($this->getSanitizer()->getString('tags')));
// Set the Owner to user making the Copy
$media->setOwner($this->getUser()->userId);
// Set from global setting
if ($media->enableStat == null) {
$media->enableStat = $this->getConfig()->getSetting('MEDIA_STATS_ENABLED_DEFAULT');
}
// Save the new Media
$media->save();
// Return
$this->getState()->hydrate([
'httpStatus' => 201,
'message' => sprintf(__('Copied as %s'), $media->name),
'id' => $media->mediaId,
'data' => $media
]);
}
/**
* @SWG\Get(
* path="/library/{mediaId}/isused/",
* operationId="mediaIsUsed",
* tags={"library"},
* summary="Media usage check",
* description="Checks if a Media is being used",
* @SWG\Parameter(
* name="mediaId",
* in="path",
* description="The Media Id",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=200,
* description="successful operation"
* )
* )
*
* @param int $mediaId
* @throws NotFoundException
*/
public function isUsed($mediaId)
{
// Get the Media
$media = $this->mediaFactory->getById($mediaId);
$media->setChildObjectDependencies($this->layoutFactory, $this->widgetFactory, $this->displayGroupFactory, $this->displayFactory, $this->scheduleFactory, $this->playerVersionFactory);
// Check Permissions
if (!$this->getUser()->checkViewable($media))
throw new AccessDeniedException();
// Get count, being the number of times the media needs to appear to be true ( or use the default 0)
$count = $this->getSanitizer()->getInt('count', 0);
// Check and return result
$this->getState()->setData([
'isUsed' => $media->isUsed($count)
]);
}
public function uploadFromUrlForm()
{
$this->getState()->template = 'library-form-uploadFromUrl';
$this->getState()->setData([
'uploadSizeMessage' => sprintf(__('This form accepts files up to a maximum size of %s'), Environment::getMaxUploadSize())
]);
}
/**
* Upload Media via URL
*
* @SWG\Post(
* path="/library/uploadUrl",
* operationId="uploadFromUrl",
* tags={"library"},
* summary="Upload Media from URL",
* description="Upload Media to CMS library from an external URL",
* @SWG\Parameter(
* name="url",
* in="formData",
* description="The URL to the media",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="type",
* in="formData",
* description="The type of the media, image, video etc",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="extension",
* in="formData",
* description="Optional extension of the media, jpg, png etc. If not set in the request it will be retrieved from the headers",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="enableStat",
* in="formData",
* description="The option to enable the collection of Media Proof of Play statistics, On, Off or Inherit.",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="optionalName",
* in="formData",
* description="An optional name for this media file, if left empty it will default to the file name",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="expires",
* in="formData",
* description="Date in Y-m-d H:i:s format, will set expiration date on the Media item",
* type="string",
* required=false
* ),
* @SWG\Response(
* response=201,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/Media"),
* @SWG\Header(
* header="Location",
* description="Location of the new record",
* type="string"
* )
* )
* )
*
* @throws InvalidArgumentException
* @throws LibraryFullException
* @throws NotFoundException
* @throws ConfigurationException
*/
public function uploadFromUrl()
{
$libraryFolder = $this->getConfig()->getSetting('LIBRARY_LOCATION');
// Make sure the library exists
self::ensureLibraryExists($libraryFolder);
$url = $this->getSanitizer()->getString('url');
$type = $this->getSanitizer()->getString('type');
$optionalName = $this->getSanitizer()->getString('optionalName');
$extension = $this->getSanitizer()->getString('extension');
$enableStat = $this->getSanitizer()->getString('enableStat', $this->getConfig()->getSetting('MEDIA_STATS_ENABLED_DEFAULT'));
if ($this->getSanitizer()->getDate('expires') != null ) {
if ($this->getSanitizer()->getDate('expires')->format('U') > time()) {
$expires = $this->getSanitizer()->getDate('expires')->format('U');
} else {
throw new InvalidArgumentException(__('Cannot set Expiry date in the past'), 'expires');
}
} else {
$expires = 0;
}
// Validate the URL
if (!v::url()->notEmpty()->validate(urldecode($url)) || !filter_var($url, FILTER_VALIDATE_URL)) {
throw new InvalidArgumentException(__('Provided URL is invalid'), 'url');
}
$librarySizeLimit = $this->getConfig()->getSetting('LIBRARY_SIZE_LIMIT_KB') * 1024;
$librarySizeLimitMB = round(($librarySizeLimit / 1024) / 1024, 2);
if ($librarySizeLimit > 0 && $this->libraryUsage() > $librarySizeLimit) {
throw new InvalidArgumentException(sprintf(__('Your library is full. Library Limit: %s MB'), $librarySizeLimitMB), 'libraryLimit');
}
// remote file size
$size = $this->getRemoteFileSize($url);
if (ByteFormatter::toBytes(Environment::getMaxUploadSize()) < $size) {
throw new InvalidArgumentException(sprintf(__('This file size exceeds your environment Max Upload Size %s'), Environment::getMaxUploadSize()), 'size');
}
$this->getUser()->isQuotaFullByUser();
// check if we have extension provided in the request (available via API), if not get it from the headers
if (!empty($extension)) {
$ext = $extension;
} else {
$ext = $this->getRemoteFileExtension($url);
}
// check if we have type provided in the request (available via API), if not get the module type from the extension
if (!empty($type)) {
$module = $this->getModuleFactory()->create($type);
} else {
$module = $this->getModuleFactory()->getByExtension($ext);
$module = $this->getModuleFactory()->create($module->type);
}
// if we were provided with optional Media name set it here, otherwise get it from pathinfo
if (isset($optionalName)) {
$name = $optionalName;
} else {
// get the media name from pathinfo
$name = pathinfo(parse_url($url, PHP_URL_PATH), PATHINFO_FILENAME);
}
// double check that provided Module Type and Extension are valid
$moduleCheck = $this->getModuleFactory()->query(null, ['extension' => $ext, 'type' => $module->getModuleType()]);
if (count($moduleCheck) <= 0) {
throw new NotFoundException(sprintf(__('Invalid Module type or extension. Module type %s does not allow for %s extension'), $module->getModuleType(), $ext));
}
// add our media to queueDownload and process the downloads
$this->mediaFactory->queueDownload($name, str_replace(' ', '%20', htmlspecialchars_decode($url)), $expires, ['fileType' => strtolower($module->getModuleType()), 'duration' => $module->determineDuration(), 'extension' => $ext, 'enableStat' => $enableStat]);
$this->mediaFactory->processDownloads(function($media) {
// Success
$this->getLog()->debug('Successfully uploaded Media from URL, Media Id is ' . $media->mediaId);
});
// get our uploaded media
$media = $this->mediaFactory->getByName($name);
// Return
$this->getState()->hydrate([
'httpStatus' => 201,
'message' => sprintf(__('Media upload from URL was successful')),
'id' => $media->mediaId,
'data' => $media
]);
}
/**
* @param $url
* @return int
* @throws InvalidArgumentException
*/
private function getRemoteFileSize($url)
{
$size = -1;
$guzzle = new Client($this->getConfig()->getGuzzleProxy());
try {
$head = $guzzle->head($url);
$contentLength = $head->getHeader('Content-Length');
foreach ($contentLength as $value) {
$size = $value;
}
} catch (RequestException $e) {
$this->getLog()->debug('Upload from url failed for URL ' . $url . ' with following message ' . $e->getMessage());
throw new InvalidArgumentException(('File not found'), 'url');
}
if ($size <= 0) {
throw new InvalidArgumentException(('Cannot determine the file size'), 'size');
}
return (int)$size;
}
/**
* @param $url
* @return string
* @throws InvalidArgumentException
*/
private function getRemoteFileExtension($url)
{
// first try to get the extension from pathinfo
$extension = pathinfo(parse_url($url, PHP_URL_PATH), PATHINFO_EXTENSION);
// failing that get the extension from Content-Type header via Guzzle
if ($extension == '') {
$guzzle = new Client($this->getConfig()->getGuzzleProxy());
$head = $guzzle->head($url);
$contentType = $head->getHeaderLine('Content-Type');
$extension = $contentType;
if ($contentType === 'binary/octet-stream' && $head->hasHeader('x-amz-meta-filetype')) {
$amazonContentType = $head->getHeaderLine('x-amz-meta-filetype');
$extension = $amazonContentType;
}
// get the extension corresponding to the mime type
$mimeTypes = new MimeTypes();
$extension = $mimeTypes->getExtension($extension);
}
// if we could not determine the file extension at this point, throw an error
if ($extension == '') {
throw new InvalidArgumentException(('Cannot determine the file extension'), 'extension');
}
return $extension;
}
}
Applications.php 0000644 00000035612 14716415766 0007733 0 ustar 00 .
*/
namespace Xibo\Controller;
use League\OAuth2\Server\AuthorizationServer;
use League\OAuth2\Server\Grant\AuthCodeGrant;
use League\OAuth2\Server\Util\RedirectUri;
use Xibo\Entity\Application;
use Xibo\Entity\ApplicationScope;
use Xibo\Exception\AccessDeniedException;
use Xibo\Exception\InvalidArgumentException;
use Xibo\Factory\ApplicationFactory;
use Xibo\Factory\ApplicationRedirectUriFactory;
use Xibo\Factory\ApplicationScopeFactory;
use Xibo\Factory\UserFactory;
use Xibo\Helper\Session;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
use Xibo\Storage\ApiAccessTokenStorage;
use Xibo\Storage\ApiAuthCodeStorage;
use Xibo\Storage\ApiClientStorage;
use Xibo\Storage\ApiScopeStorage;
use Xibo\Storage\ApiSessionStorage;
use Xibo\Storage\StorageServiceInterface;
/**
* Class Applications
* @package Xibo\Controller
*/
class Applications extends Base
{
/**
* @var Session
*/
private $session;
/** @var StorageServiceInterface */
private $store;
/**
* @var ApplicationFactory
*/
private $applicationFactory;
/**
* @var ApplicationRedirectUriFactory
*/
private $applicationRedirectUriFactory;
/** @var ApplicationScopeFactory */
private $applicationScopeFactory;
/** @var UserFactory */
private $userFactory;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param Session $session
* @param StorageServiceInterface $store
* @param ApplicationFactory $applicationFactory
* @param ApplicationRedirectUriFactory $applicationRedirectUriFactory
* @param UserFactory $userFactory
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $session, $store, $applicationFactory, $applicationRedirectUriFactory, $applicationScopeFactory, $userFactory)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->session = $session;
$this->store = $store;
$this->applicationFactory = $applicationFactory;
$this->applicationRedirectUriFactory = $applicationRedirectUriFactory;
$this->applicationScopeFactory = $applicationScopeFactory;
$this->userFactory = $userFactory;
}
/**
* Display Page
*/
public function displayPage()
{
$this->getState()->template = 'applications-page';
}
/**
* Display page grid
*/
public function grid()
{
$this->getState()->template = 'grid';
$applications = $this->applicationFactory->query($this->gridRenderSort(), $this->gridRenderFilter());
foreach ($applications as $application) {
/* @var Application $application */
if ($this->isApi())
return;
// Include the buttons property
$application->includeProperty('buttons');
// Add an Edit button (edit form also exposes the secret - not possible to get through the API)
$application->buttons = [];
if ($application->userId == $this->getUser()->userId || $this->getUser()->getUserTypeId() == 1) {
// Edit
$application->buttons[] = [
'id' => 'application_edit_button',
'url' => $this->urlFor('application.edit.form', ['id' => $application->key]),
'text' => __('Edit')
];
// Delete
$application->buttons[] = [
'id' => 'application_delete_button',
'url' => $this->urlFor('application.delete.form', ['id' => $application->key]),
'text' => __('Delete')
];
}
}
$this->getState()->setData($applications);
$this->getState()->recordsTotal = $this->applicationFactory->countLast();
}
/**
* Display the Authorize form.
*/
public function authorizeRequest()
{
// Pull authorize params from our session
if (!$authParams = $this->session->get('authParams'))
throw new \InvalidArgumentException(__('Authorisation Parameters missing from session.'));
// Get, show page
$this->getState()->template = 'applications-authorize-page';
$this->getState()->setData([
'authParams' => $authParams
]);
}
/**
* Authorize an oAuth request
* @throws \League\OAuth2\Server\Exception\InvalidGrantException
*/
public function authorize()
{
// Pull authorize params from our session
if (!$authParams = $this->session->get('authParams'))
throw new \InvalidArgumentException(__('Authorisation Parameters missing from session.'));
// We are authorized
if ($this->getSanitizer()->getString('authorization') === 'Approve') {
// Create a server
$server = new AuthorizationServer();
$server->setSessionStorage(new ApiSessionStorage($this->store));
$server->setAccessTokenStorage(new ApiAccessTokenStorage($this->store));
$server->setClientStorage(new ApiClientStorage($this->store));
$server->setScopeStorage(new ApiScopeStorage($this->store));
$server->setAuthCodeStorage(new ApiAuthCodeStorage($this->store));
$authCodeGrant = new AuthCodeGrant();
$server->addGrantType($authCodeGrant);
// TODO: Add scopes element to $authParams based on the selections granted in the form
// Authorize the request
$redirectUri = $server->getGrantType('authorization_code')->newAuthorizeRequest('user', $this->getUser()->userId, $authParams);
}
else {
$error = new \League\OAuth2\Server\Exception\AccessDeniedException();
$error->redirectUri = $authParams['redirect_uri'];
$redirectUri = RedirectUri::make($authParams['redirect_uri'], [
'error' => $error->errorType,
'message' => $error->getMessage()
]);
}
$this->getLog()->debug('Redirect URL is %s', $redirectUri);
$this->getApp()->redirect($redirectUri, 302);
}
/**
* Form to register a new application.
*/
public function addForm()
{
$this->getState()->template = 'applications-form-add';
$this->getState()->setData([
'help' => $this->getHelp()->link('Services', 'Register')
]);
}
/**
* Edit Application
* @param $clientId
* @throws \Xibo\Exception\NotFoundException
*/
public function editForm($clientId)
{
// Get the client
$client = $this->applicationFactory->getById($clientId);
if ($client->userId != $this->getUser()->userId && $this->getUser()->getUserTypeId() != 1)
throw new AccessDeniedException();
// Load this clients details.
$client->load();
$scopes = $this->applicationScopeFactory->query();
foreach ($scopes as $scope) {
/** @var ApplicationScope $scope */
$found = false;
foreach ($client->scopes as $checked) {
if ($checked->id == $scope->id) {
$found = true;
break;
}
}
$scope->selected = $found ? 1 : 0;
}
// Render the view
$this->getState()->template = 'applications-form-edit';
$this->getState()->setData([
'client' => $client,
'scopes' => $scopes,
'users' => $this->userFactory->query(),
'help' => $this->getHelp()->link('Services', 'Register')
]);
}
/**
* Delete Application Form
* @param $clientId
*/
public function deleteForm($clientId)
{
// Get the client
$client = $this->applicationFactory->getById($clientId);
if ($client->userId != $this->getUser()->userId && $this->getUser()->getUserTypeId() != 1)
throw new AccessDeniedException();
$this->getState()->template = 'applications-form-delete';
$this->getState()->setData([
'client' => $client,
'help' => $this->getHelp()->link('Services', 'Register')
]);
}
/**
* Register a new application with OAuth
* @throws InvalidArgumentException
*/
public function add()
{
$application = $this->applicationFactory->create();
$application->name = $this->getSanitizer()->getString('name');
if ($application->name == '' ) {
throw new InvalidArgumentException(__('Please enter Application name'), 'name');
}
$application->save();
// Return
$this->getState()->hydrate([
'message' => sprintf(__('Added %s'), $application->name),
'data' => $application,
'id' => $application->key
]);
}
/**
* Form to register a new application for Advertisement.
*/
public function addDoohForm()
{
$this->getState()->template = 'applications-form-add-dooh';
$this->getState()->setData([
'help' => $this->getHelp()->link('Services', 'Register')
]);
}
/**
* Register a new application with OAuth
* @throws InvalidArgumentException
* @throws \Xibo\Exception\NotFoundException
*/
public function addDooh()
{
$application = $this->applicationFactory->create();
$application->name = $this->getSanitizer()->getString('name');
$application->userId = $this->getSanitizer()->getInt('userId');
if ($application->name == '' ) {
throw new InvalidArgumentException(__('Please enter Application name'), 'name');
}
if ($application->userId == null ) {
throw new InvalidArgumentException(__('Please select user'), 'userId');
}
if ($this->userFactory->getById($application->userId)->userTypeId != 4 ) {
throw new InvalidArgumentException(__('Invalid user type'), 'userTypeId');
}
$application->save();
// Return
$this->getState()->hydrate([
'message' => sprintf(__('Added %s'), $application->name),
'data' => $application,
'id' => $application->key
]);
}
/**
* Edit Application
* @param $clientId
* @throws \Xibo\Exception\XiboException
*/
public function edit($clientId)
{
$this->getLog()->debug('Editing ' . $clientId);
// Get the client
$client = $this->applicationFactory->getById($clientId);
if ($client->userId != $this->getUser()->userId && $this->getUser()->getUserTypeId() != 1)
throw new AccessDeniedException();
$client->name = $this->getSanitizer()->getString('name');
$client->authCode = $this->getSanitizer()->getCheckbox('authCode');
$client->clientCredentials = $this->getSanitizer()->getCheckbox('clientCredentials');
if ($this->getSanitizer()->getCheckbox('resetKeys') == 1) {
$client->resetKeys();
}
// Delete all the redirect urls and add them again
$client->load();
foreach ($client->redirectUris as $uri) {
/* @var \Xibo\Entity\ApplicationRedirectUri $uri */
$uri->delete();
}
$client->redirectUris = [];
// Do we have a redirect?
$redirectUris = $this->getSanitizer()->getStringArray('redirectUri');
foreach ($redirectUris as $redirectUri) {
if ($redirectUri == '')
continue;
$redirect = $this->applicationRedirectUriFactory->create();
$redirect->redirectUri = $redirectUri;
$client->assignRedirectUri($redirect);
}
// API Scopes
foreach ($this->applicationScopeFactory->query() as $scope) {
/** @var ApplicationScope $scope */
// See if this has been checked this time
$checked = $this->getSanitizer()->getCheckbox('scope_' . $scope->id);
// Does this scope already exist?
$found = false;
foreach ($client->scopes as $existingScope) {
/** @var ApplicationScope $existingScope */
if ($scope->id == $existingScope->id) {
$found = true;
break;
}
}
// Assign or unassign as necessary
if ($checked && !$found)
$client->assignScope($scope);
else if (!$checked && $found)
$client->unassignScope($scope);
}
// Change the ownership?
if ($this->getSanitizer()->getInt('userId') !== null) {
// Check we have permissions to view this user
$user = $this->userFactory->getById($this->getSanitizer()->getInt('userId'));
$this->getLog()->debug('Attempting to change ownership to ' . $user->userId . ' - ' . $user->userName);
if (!$this->getUser()->checkViewable($user))
throw new InvalidArgumentException('You do not have permission to assign this user', 'userId');
$client->userId = $user->userId;
}
$client->save();
// Return
$this->getState()->hydrate([
'message' => sprintf(__('Edited %s'), $client->name),
'data' => $client,
'id' => $client->key
]);
}
/**
* Delete application
* @param $clientId
*/
public function delete($clientId)
{
// Get the client
$client = $this->applicationFactory->getById($clientId);
if ($client->userId != $this->getUser()->userId && $this->getUser()->getUserTypeId() != 1)
throw new AccessDeniedException();
$client->delete();
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Deleted %s'), $client->name)
]);
}
}
Playlist.php 0000644 00000145273 14716415766 0007113 0 ustar 00 setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->playlistFactory = $playlistFactory;
$this->regionFactory = $regionFactory;
$this->mediaFactory = $mediaFactory;
$this->permissionFactory = $permissionFactory;
$this->transitionFactory = $transitionFactory;
$this->widgetFactory = $widgetFactory;
$this->moduleFactory = $moduleFactory;
$this->userGroupFactory = $userGroupFactory;
$this->userFactory = $userFactory;
$this->tagFactory = $tagFactory;
$this->layoutFactory = $layoutFactory;
$this->displayFactory = $displayFactory;
$this->scheduleFactory = $scheduleFactory;
}
/**
* Display Page
*/
public function displayPage()
{
$moduleFactory = $this->moduleFactory;
// Call to render the template
$this->getState()->template = 'playlist-page';
$this->getState()->setData([
'users' => $this->userFactory->query(),
'groups' => $this->userGroupFactory->query(),
'modules' => array_map(function($element) use ($moduleFactory) {
$module = $moduleFactory->createForInstall($element->class);
$module->setModule($element);
return $module;
}, $moduleFactory->getAssignableModules())
]);
}
/**
* Playlist Search
*
* @SWG\Get(
* path="/playlist",
* operationId="playlistSearch",
* tags={"playlist"},
* summary="Search Playlists",
* description="Search for Playlists viewable by this user",
* @SWG\Parameter(
* name="playlistId",
* in="query",
* description="Filter by Playlist Id",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="name",
* in="query",
* description="Filter by partial Playlist name",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="userId",
* in="query",
* description="Filter by user Id",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="tags",
* in="query",
* description="Filter by tags",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="exactTags",
* in="query",
* description="A flag indicating whether to treat the tags filter as an exact match",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="ownerUserGroupId",
* in="query",
* description="Filter by users in this UserGroupId",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="embed",
* in="query",
* description="Embed related data such as regions, widgets, permissions, tags",
* type="string",
* required=false
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(
* type="array",
* @SWG\Items(ref="#/definitions/Playlist")
* )
* )
* )
*
*/
public function grid()
{
$this->getState()->template = 'grid';
// Embed?
$embed = ($this->getSanitizer()->getString('embed') != null) ? explode(',', $this->getSanitizer()->getString('embed')) : [];
// Playlists
$playlists = $this->playlistFactory->query($this->gridRenderSort(), $this->gridRenderFilter([
'name' => $this->getSanitizer()->getString('name'),
'useRegexForName' => $this->getSanitizer()->getCheckbox('useRegexForName'),
'userId' => $this->getSanitizer()->getInt('userId'),
'tags' => $this->getSanitizer()->getString('tags'),
'exactTags' => $this->getSanitizer()->getCheckbox('exactTags'),
'playlistId' => $this->getSanitizer()->getInt('playlistId'),
'ownerUserGroupId' => $this->getSanitizer()->getInt('ownerUserGroupId'),
'mediaLike' => $this->getSanitizer()->getString('mediaLike'),
'regionSpecific' => $this->getSanitizer()->getInt('regionSpecific', 0)
]));
foreach ($playlists as $playlist) {
// Handle embeds
if (in_array('widgets', $embed)) {
$loadPermissions = in_array('permissions', $embed);
$loadTags = in_array('tags', $embed);
$playlist->load([
'loadPermissions' => $loadPermissions,
'loadWidgets' => true,
'loadTags' => $loadTags
]);
foreach ($playlist->widgets as $widget) {
/* @var Widget $widget */
$widget->module = $this->moduleFactory->createWithWidget($widget);
// Embed the name of this widget
$widget->name = $widget->module->getName();
// Augment with tags?
if ($loadTags) {
$widget->tags = $widget->module->getMediaTags();
}
// Add widget module type name
$widget->moduleName = $widget->module->getModuleName();
// Permissions?
if ($loadPermissions) {
// Augment with editable flag
$widget->isEditable = $this->getUser()->checkEditable($widget);
// Augment with deletable flag
$widget->isDeletable = $this->getUser()->checkDeleteable($widget);
// Augment with permissions flag
$widget->isPermissionsModifiable = $this->getUser()->checkPermissionsModifyable($widget);
}
}
}
if ($this->isApi())
continue;
$playlist->includeProperty('buttons');
switch ($playlist->enableStat) {
case 'On':
$playlist->enableStatDescription = __('This Playlist has enable stat collection set to ON');
break;
case 'Off':
$playlist->enableStatDescription = __('This Playlist has enable stat collection set to OFF');
break;
default:
$playlist->enableStatDescription = __('This Playlist has enable stat collection set to INHERIT');
}
// Only proceed if we have edit permissions
if ($this->getUser()->checkEditable($playlist)) {
if ($playlist->isDynamic === 0) {
// Timeline edit
$playlist->buttons[] = array(
'id' => 'playlist_timeline_button_edit',
'class' => 'XiboCustomFormButton',
'url' => $this->urlFor('playlist.timeline.form', ['id' => $playlist->playlistId]),
'text' => __('Timeline')
);
$playlist->buttons[] = ['divider' => true];
}
// Edit Button
$playlist->buttons[] = array(
'id' => 'playlist_button_edit',
'url' => $this->urlFor('playlist.edit.form', ['id' => $playlist->playlistId]),
'text' => __('Edit')
);
// Copy Button
$playlist->buttons[] = array(
'id' => 'playlist_button_copy',
'url' => $this->urlFor('playlist.copy.form', ['id' => $playlist->playlistId]),
'text' => __('Copy')
);
// Set Enable Stat
$playlist->buttons[] = array(
'id' => 'playlist_button_setenablestat',
'url' => $this->urlFor('playlist.setenablestat.form', ['id' => $playlist->playlistId]),
'text' => __('Enable stats collection?'),
'multi-select' => true,
'dataAttributes' => array(
array('name' => 'commit-url', 'value' => $this->urlFor('playlist.setenablestat', ['id' => $playlist->playlistId])),
array('name' => 'commit-method', 'value' => 'put'),
array('name' => 'id', 'value' => 'playlist_button_setenablestat'),
array('name' => 'text', 'value' => __('Enable stats collection?')),
array('name' => 'rowtitle', 'value' => $playlist->name),
['name' => 'form-callback', 'value' => 'setEnableStatMultiSelectFormOpen']
)
);
$playlist->buttons[] = ['divider' => true];
}
// Extra buttons if have delete permissions
if ($this->getUser()->checkDeleteable($playlist)) {
// Delete Button
$playlist->buttons[] = array(
'id' => 'playlist_button_delete',
'url' => $this->urlFor('playlist.delete.form', ['id' => $playlist->playlistId]),
'text' => __('Delete'),
'multi-select' => true,
'dataAttributes' => array(
array('name' => 'commit-url', 'value' => $this->urlFor('playlist.delete', ['id' => $playlist->playlistId])),
array('name' => 'commit-method', 'value' => 'delete'),
array('name' => 'id', 'value' => 'playlist_button_delete'),
array('name' => 'text', 'value' => __('Delete')),
array('name' => 'rowtitle', 'value' => $playlist->name)
)
);
$playlist->buttons[] = ['divider' => true];
}
// Extra buttons if we have modify permissions
if ($this->getUser()->checkPermissionsModifyable($playlist)) {
// Permissions button
$playlist->buttons[] = array(
'id' => 'playlist_button_permissions',
'url' => $this->urlFor('user.permissions.form', ['entity' => 'Playlist', 'id' => $playlist->playlistId]),
'text' => __('Permissions')
);
}
$playlist->buttons[] = ['divider' => true];
$playlist->buttons[] = array(
'id' => 'usage_report_button',
'url' => $this->urlFor('playlist.usage.form', ['id' => $playlist->playlistId]),
'text' => __('Usage Report')
);
}
$this->getState()->recordsTotal = $this->playlistFactory->countLast();
$this->getState()->setData($playlists);
}
//
/**
* Add Form
*/
public function addForm()
{
$this->getState()->template = 'playlist-form-add';
}
/**
* Add
*
* @SWG\Post(
* path="/playlist",
* operationId="playlistAdd",
* tags={"playlist"},
* summary="Add a Playlist",
* description="Add a new Playlist",
* @SWG\Parameter(
* name="name",
* in="formData",
* description="The Name for this Playlist",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="tags",
* in="formData",
* description="Tags",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="isDynamic",
* in="formData",
* description="Is this Playlist Dynamic?",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="filterMediaName",
* in="formData",
* description="Add Library Media matching the name filter provided",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="filterMediaTag",
* in="formData",
* description="Add Library Media matching the tag filter provided",
* type="string",
* required=false
* ),
* @SWG\Response(
* response=201,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/Playlist"),
* @SWG\Header(
* header="Location",
* description="Location of the new record",
* type="string"
* )
* )
* )
*
* @throws XiboException
*/
public function add()
{
if ($this->getSanitizer()->getString('name') == '') {
throw new InvalidArgumentException(__('Please enter playlist name'), 'name');
}
$playlist = $this->playlistFactory->create($this->getSanitizer()->getString('name'), $this->getUser()->getId());
$playlist->isDynamic = $this->getSanitizer()->getCheckbox('isDynamic');
$playlist->enableStat = $this->getSanitizer()->getString('enableStat');
$playlist->replaceTags($this->tagFactory->tagsFromString($this->getSanitizer()->getString('tags')));
// Do we have a tag or name filter?
$nameFilter = $this->getSanitizer()->getString('filterMediaName');
$tagFilter = $this->getSanitizer()->getString('filterMediaTag');
// Capture these as dynamic filter criteria
if ($playlist->isDynamic === 1) {
$playlist->filterMediaName = $nameFilter;
$playlist->filterMediaTags = $tagFilter;
}
$playlist->save();
// Default permissions
foreach ($this->permissionFactory->createForNewEntity($this->getUser(), get_class($playlist), $playlist->getId(), $this->getConfig()->getSetting('LAYOUT_DEFAULT'), $this->userGroupFactory) as $permission) {
/* @var Permission $permission */
$permission->save();
}
// Should we assign any existing media
if (!empty($nameFilter) || !empty($tagFilter)) {
$media = $this->mediaFactory->query(null, ['name' => $nameFilter, 'tags' => $tagFilter, 'assignable' => 1]);
if (count($media) > 0) {
$widgets = [];
foreach ($media as $item) {
// Create a module
$module = $this->moduleFactory->create($item->mediaType);
// Determine the duration
$itemDuration = ($item->duration == 0) ? $module->determineDuration() : $item->duration;
// Create a widget
$widget = $this->widgetFactory->create($this->getUser()->userId, $playlist->playlistId, $item->mediaType, $itemDuration);
$widget->assignMedia($item->mediaId);
// Assign the widget to the module
$module->setWidget($widget);
// Set default options (this sets options on the widget)
$module->setDefaultWidgetOptions();
// Calculate the duration
$widget->calculateDuration($module);
// Assign the widget to the playlist
$playlist->assignWidget($widget);
// Add to a list of new widgets
$widgets[] = $widget;
}
// Save the playlist
$playlist->save();
// Handle permissions
foreach ($widgets as $widget) {
/* @var Widget $widget */
if ($this->getConfig()->getSetting('INHERIT_PARENT_PERMISSIONS') == 1) {
// Apply permissions from the Parent
foreach ($playlist->permissions as $permission) {
/* @var Permission $permission */
$permission = $this->permissionFactory->create($permission->groupId, get_class($widget), $widget->getId(), $permission->view, $permission->edit, $permission->delete);
$permission->save();
}
} else {
foreach ($this->permissionFactory->createForNewEntity($this->getUser(), get_class($widget), $widget->getId(), $this->getConfig()->getSetting('LAYOUT_DEFAULT'), $this->userGroupFactory) as $permission) {
/* @var Permission $permission */
$permission->save();
}
}
}
}
}
// Success
$this->getState()->hydrate([
'httpStatus' => 201,
'message' => sprintf(__('Added %s'), $playlist->name),
'id' => $playlist->playlistId,
'data' => $playlist
]);
}
/**
* @param $playlistId
* @throws \Xibo\Exception\NotFoundException
*/
public function editForm($playlistId)
{
$playlist = $this->playlistFactory->getById($playlistId);
$tags = '';
$arrayOfTags = array_filter(explode(',', $playlist->tags));
$arrayOfTagValues = array_filter(explode(',', $playlist->tagValues));
for ($i=0; $igetUser()->checkEditable($playlist))
throw new AccessDeniedException();
$this->getState()->template = 'playlist-form-edit';
$this->getState()->setData([
'playlist' => $playlist,
'tags' => $tags
]);
}
/**
* Edit
*
* @SWG\Put(
* path="/playlist/{playlistId}",
* operationId="playlistEdit",
* tags={"playlist"},
* summary="Edit a Playlist",
* description="Edit a Playlist",
* @SWG\Parameter(
* name="playlistId",
* in="path",
* description="The PlaylistId to Edit",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="name",
* in="formData",
* description="The Name for this Playlist",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="tags",
* in="formData",
* description="Tags",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="isDynamic",
* in="formData",
* description="Is this Playlist Dynamic?",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="filterMediaName",
* in="formData",
* description="Add Library Media matching the name filter provided",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="filterMediaTag",
* in="formData",
* description="Add Library Media matching the tag filter provided",
* type="string",
* required=false
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*
* @param int $playlistId
* @throws XiboException
*/
public function edit($playlistId)
{
$playlist = $this->playlistFactory->getById($playlistId);
if (!$this->getUser()->checkEditable($playlist))
throw new AccessDeniedException();
$playlist->name = $this->getSanitizer()->getString('name');
$playlist->isDynamic = $this->getSanitizer()->getCheckbox('isDynamic');
$playlist->enableStat = $this->getSanitizer()->getString('enableStat');
$playlist->replaceTags($this->tagFactory->tagsFromString($this->getSanitizer()->getString('tags')));
// Do we have a tag or name filter?
// Capture these as dynamic filter criteria
if ($playlist->isDynamic === 1) {
$playlist->filterMediaName = $this->getSanitizer()->getString('filterMediaName');
$playlist->filterMediaTags = $this->getSanitizer()->getString('filterMediaTag');
}
$playlist->save();
// Success
$this->getState()->hydrate([
'httpStatus' => 200,
'message' => sprintf(__('Edited %s'), $playlist->name),
'id' => $playlist->playlistId,
'data' => $playlist
]);
}
/**
* @param $playlistId
* @throws \Xibo\Exception\NotFoundException
*/
public function deleteForm($playlistId)
{
$playlist = $this->playlistFactory->getById($playlistId);
if (!$this->getUser()->checkDeleteable($playlist))
throw new AccessDeniedException();
$this->getState()->template = 'playlist-form-delete';
$this->getState()->setData([
'playlist' => $playlist
]);
}
/**
* Delete
* @param $playlistId
* @throws \Xibo\Exception\XiboException
*/
public function delete($playlistId)
{
$playlist = $this->playlistFactory->getById($playlistId);
if (!$this->getUser()->checkDeleteable($playlist))
throw new AccessDeniedException();
// Issue the delete
$playlist->delete();
// Success
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Deleted %s'), $playlist->name)
]);
}
/**
* Copy playlist form
* @param int $playlistId
* @throws NotFoundException
*/
public function copyForm($playlistId)
{
// Get the playlist
$playlist = $this->playlistFactory->getById($playlistId);
// Check Permissions
if (!$this->getUser()->checkViewable($playlist))
throw new AccessDeniedException();
$this->getState()->template = 'playlist-form-copy';
$this->getState()->setData([
'playlist' => $playlist
]);
}
/**
* Copies a playlist
* @param int $playlistId
*
* @SWG\Post(
* path="/playlist/copy/{playlistId}",
* operationId="playlistCopy",
* tags={"playlist"},
* summary="Copy Playlist",
* description="Copy a Playlist, providing a new name if applicable",
* @SWG\Parameter(
* name="playlistId",
* in="path",
* description="The Playlist ID to Copy",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="name",
* in="formData",
* description="The name for the new Playlist",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="copyMediaFiles",
* in="formData",
* description="Flag indicating whether to make new Copies of all Media Files assigned to the Playlist being Copied",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=201,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/Playlist"),
* @SWG\Header(
* header="Location",
* description="Location of the new record",
* type="string"
* )
* )
* )
* @throws XiboException
*/
public function copy($playlistId)
{
// Get the playlist
$originalPlaylist = $this->playlistFactory->getById($playlistId);
// Check Permissions
if (!$this->getUser()->checkViewable($originalPlaylist))
throw new AccessDeniedException();
// Load the playlist for Copy
$originalPlaylist->load(['loadTags' => false]);
// Clone the original
$playlist = clone $originalPlaylist;
$playlist->name = $this->getSanitizer()->getString('name');
$playlist->setOwner($this->getUser()->userId);
// Copy the media on the playlist and change the assignments.
if ($this->getSanitizer()->getCheckbox('copyMediaFiles') == 1) {
foreach ($playlist->widgets as $widget) {
// Copy the media
$oldMedia = $this->mediaFactory->getById($widget->getPrimaryMediaId());
$media = clone $oldMedia;
$media->setOwner($this->getUser()->userId);
$media->save();
$widget->unassignMedia($oldMedia->mediaId);
$widget->assignMedia($media->mediaId);
// Update the widget option with the new ID
$widget->setOptionValue('uri', 'attrib', $media->storedAs);
}
}
// Handle tags
$tags = '';
$arrayOfTags = array_filter(explode(',', $playlist->tags));
$arrayOfTagValues = array_filter(explode(',', $playlist->tagValues));
for ($i=0; $ireplaceTags($this->tagFactory->tagsFromString($tags));
// Set from global setting
if ($playlist->enableStat == null) {
$playlist->enableStat = $this->getConfig()->getSetting('PLAYLIST_STATS_ENABLED_DEFAULT');
}
// Save the new playlist
$playlist->save();
// Permissions
foreach ($this->permissionFactory->createForNewEntity($this->getUser(), get_class($playlist), $playlist->getId(), $this->getConfig()->getSetting('LAYOUT_DEFAULT'), $this->userGroupFactory) as $permission) {
/* @var Permission $permission */
$permission->save();
}
foreach ($playlist->widgets as $widget) {
/* @var Widget $widget */
foreach ($this->permissionFactory->createForNewEntity($this->getUser(), get_class($widget), $widget->getId(), $this->getConfig()->getSetting('LAYOUT_DEFAULT'), $this->userGroupFactory) as $permission) {
/* @var Permission $permission */
$permission->save();
}
}
// Clone the closure table for the original playlist
$originalPlaylist->cloneClosureTable($playlist->getId());
// Return
$this->getState()->hydrate([
'httpStatus' => 201,
'message' => sprintf(__('Copied as %s'), $playlist->name),
'id' => $playlist->playlistId,
'data' => $playlist
]);
}
//
/**
* Timeline Form
* @param int $playlistId
* @throws XiboException
*/
public function timelineForm($playlistId)
{
// Get a complex object of playlists and widgets
$playlist = $this->playlistFactory->getById($playlistId);
if (!$this->getUser()->checkEditable($playlist))
throw new AccessDeniedException();
// Pass to view
$this->getState()->template = 'region-form-timeline';
$this->getState()->setData([
'playlist' => $playlist,
'help' => $this->getHelp()->link('Layout', 'RegionOptions')
]);
}
/**
* Widget Grid
*
* @SWG\Get(
* path="/playlist/widget",
* operationId="playlistWidgetSearch",
* tags={"playlist"},
* summary="Playlist Widget Search",
* description="Search widgets on a Playlist",
* @SWG\Parameter(
* name="playlistId",
* in="query",
* description="The Playlist ID to Search",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="widgetId",
* in="query",
* description="The Widget ID to Search",
* type="integer",
* required=false
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(
* type="array",
* @SWG\Items(ref="#/definitions/Widget")
* )
* )
* )
*
* This is not used by the WEB app - remains here for API usage only
* TODO: deprecate
*/
public function widgetGrid()
{
$this->getState()->template = 'grid';
$widgets = $this->widgetFactory->query($this->gridRenderSort(), $this->gridRenderFilter([
'playlistId' => $this->getSanitizer()->getInt('playlistId'),
'widgetId' => $this->getSanitizer()->getInt('widgetId')
]));
foreach ($widgets as $widget) {
/* @var Widget $widget */
$widget->load();
$widget->module = $this->moduleFactory->createWithWidget($widget);
// Add property for name
$widget->name = $widget->module->getName();
// Add property for transition
$widget->transition = sprintf('%s / %s', $widget->module->getTransition('in'), $widget->module->getTransition('out'));
if ($this->isApi()) {
$widget->createdDt = $this->getDate()->getLocalDate($widget->createdDt);
$widget->modifiedDt = $this->getDate()->getLocalDate($widget->modifiedDt);
$widget->fromDt = $this->getDate()->getLocalDate($widget->fromDt);
$widget->toDt = $this->getDate()->getLocalDate($widget->toDt);
}
}
// Store the table rows
$this->getState()->recordsTotal = $this->widgetFactory->countLast();
$this->getState()->setData($widgets);
}
/**
* Add Library items to a Playlist
* @param int $playlistId
*
* @SWG\Post(
* path="/playlist/library/assign/{playlistId}",
* operationId="playlistLibraryAssign",
* tags={"playlist"},
* summary="Assign Library Items",
* description="Assign Media from the Library to this Playlist",
* @SWG\Parameter(
* name="playlistId",
* in="path",
* description="The Playlist ID to assign to",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="media",
* in="formData",
* description="Array of Media IDs to assign",
* type="array",
* required=true,
* @SWG\Items(type="integer")
* ),
* @SWG\Parameter(
* name="duration",
* in="formData",
* description="Optional duration for all Media in this assignment to use on the Widget",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="useDuration",
* in="formData",
* description="Optional flag indicating whether to enable the useDuration field",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="displayOrder",
* in="formData",
* description="Optional integer to say which position this assignment should occupy in the list. If more than one media item is being added, this will be the position of the first one.",
* type="integer",
* required=false
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/Playlist")
* )
* )
*
* @throws XiboException
*/
public function libraryAssign($playlistId)
{
$playlist = $this->playlistFactory->getById($playlistId);
if (!$this->getUser()->checkEditable($playlist))
throw new AccessDeniedException();
// If we are a region Playlist, we need to check whether the owning Layout is a draft or editable
if (!$playlist->isEditable())
throw new InvalidArgumentException(__('This Layout is not a Draft, please checkout.'), 'layoutId');
if ($playlist->isDynamic === 1)
throw new InvalidArgumentException(__('This Playlist is dynamically managed so cannot accept manual assignments.'), 'isDynamic');
// Expect a list of mediaIds
$media = $this->getSanitizer()->getIntArray('media');
if (count($media) <= 0)
throw new InvalidArgumentException(__('Please provide Media to Assign'), 'media');
// Optional Duration
$duration = ($this->getSanitizer()->getInt('duration'));
// Optional displayOrder
$displayOrder = $this->getSanitizer()->getInt('displayOrder');
$newWidgets = [];
// Loop through all the media
foreach ($media as $mediaId) {
/* @var int $mediaId */
$item = $this->mediaFactory->getById($mediaId);
if (!$this->getUser()->checkViewable($item))
throw new AccessDeniedException(__('You do not have permissions to use this media'));
if ($item->mediaType == 'genericfile' || $item->mediaType == 'font')
throw new InvalidArgumentException(sprintf(__('You cannot assign file type %s to a playlist'), $item->mediaType), 'mediaType');
// Create a module
$module = $this->moduleFactory->create($item->mediaType);
// Determine the duration
// if we have a duration provided, then use it, otherwise use the duration recorded on the library item already
$itemDuration = ($duration !== null) ? $duration : $item->duration;
// If the library item duration (or provided duration) is 0, then call the module to determine what the
// duration should be.
// in most cases calling the module will return the Module Default Duration as configured in settings.
$itemDuration = ($itemDuration == 0) ? $module->determineDuration() : $itemDuration;
// Create a widget
$widget = $this->widgetFactory->create($this->getUser()->userId, $playlistId, $item->mediaType, $itemDuration);
$widget->assignMedia($item->mediaId);
// Assign the widget to the module
$module->setWidget($widget);
// Set default options (this sets options on the widget)
$module->setDefaultWidgetOptions();
// If a duration has been provided, then we want to use it, so set useDuration to 1.
if ($duration !== null || $this->getSanitizer()->getCheckbox('useDuration') == 1) {
$widget->useDuration = 1;
$widget->duration = $itemDuration;
}
// Calculate the duration
$widget->calculateDuration($module);
// Assign the widget to the playlist
$playlist->assignWidget($widget, $displayOrder);
// If we have one provided we should bump the display order by 1 so that if we have more than one
// media to assign, we don't put the second one in the same place as the first one.
if ($displayOrder !== null) {
$displayOrder++;
}
// Add to a list of new widgets
$newWidgets[] = $widget;
}
// Save the playlist
$playlist->save(['saveTags' => false]);
// Handle permissions
foreach ($newWidgets as $widget) {
/* @var Widget $widget */
if ($this->getConfig()->getSetting('INHERIT_PARENT_PERMISSIONS') == 1) {
// Apply permissions from the Parent
foreach ($playlist->permissions as $permission) {
/* @var Permission $permission */
$permission = $this->permissionFactory->create($permission->groupId, get_class($widget), $widget->getId(), $permission->view, $permission->edit, $permission->delete);
$permission->save();
}
} else {
foreach ($this->permissionFactory->createForNewEntity($this->getUser(), get_class($widget), $widget->getId(), $this->getConfig()->getSetting('LAYOUT_DEFAULT'), $this->userGroupFactory) as $permission) {
/* @var Permission $permission */
$permission->save();
}
}
}
// Add new widgets to playlist for return values
$playlist->newWidgets = $newWidgets;
// Success
$this->getState()->hydrate([
'message' => __('Media Assigned'),
'data' => $playlist
]);
}
/**
* @SWG\Definition(
* definition="PlaylistWidgetList",
* @SWG\Property(
* property="widgetId",
* type="integer",
* description="Widget ID"
* ),
* @SWG\Property(
* property="position",
* type="integer",
* description="The position in the Playlist"
* )
* )
*/
/**
* Order a playlist and its widgets
* @param int $playlistId
*
* @SWG\Post(
* path="/playlist/order/{playlistId}",
* operationId="playlistOrder",
* tags={"playlist"},
* summary="Order Widgets",
* description="Set the order of widgets in the Playlist",
* @SWG\Parameter(
* name="playlistId",
* in="path",
* description="The Playlist ID to Order",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="widgets",
* in="formData",
* description="Array of widgetIds and positions - all widgetIds present in the playlist need to be passed in the call with their positions",
* type="array",
* required=true,
* @SWG\Items(
* ref="#/definitions/PlaylistWidgetList"
* )
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/Playlist")
* )
* )
*
* @throws XiboException
*/
function order($playlistId)
{
$playlist = $this->playlistFactory->getById($playlistId);
if (!$this->getUser()->checkEditable($playlist))
throw new AccessDeniedException();
// If we are a region Playlist, we need to check whether the owning Layout is a draft or editable
if (!$playlist->isEditable())
throw new InvalidArgumentException(__('This Layout is not a Draft, please checkout.'), 'layoutId');
// Load the widgets
$playlist->load();
// Get our list of widget orders
$widgets = $this->getSanitizer()->getParam('widgets', null);
if ($widgets == null)
throw new InvalidArgumentException(__('Cannot Save empty region playlist. Please add widgets'), 'widgets');
// Go through each one and move it
foreach ($widgets as $widgetId => $position) {
// Find this item in the existing list and add it to our new order
foreach ($playlist->widgets as $widget) {
/* @var \Xibo\Entity\Widget $widget */
if ($widget->getId() == $widgetId) {
$this->getLog()->debug('Setting Display Order ' . $position . ' on widgetId ' . $widgetId);
$widget->displayOrder = $position;
break;
}
}
}
$playlist->save(['saveTags' => false]);
// Success
$this->getState()->hydrate([
'message' => __('Order Changed'),
'data' => $playlist
]);
}
/**
* Playlist Usage Report Form
* @param int $playlistId
*/
public function usageForm($playlistId)
{
$playlist = $this->playlistFactory->getById($playlistId);
if (!$this->getUser()->checkViewable($playlist))
throw new AccessDeniedException();
$this->getState()->template = 'playlist-form-usage';
$this->getState()->setData([
'playlist' => $playlist
]);
}
/**
* @SWG\Get(
* path="/playlist/usage/{playlistId}",
* operationId="playlistUsageReport",
* tags={"playlist"},
* summary="Get Playlist Item Usage Report",
* description="Get the records for the playlist item usage report",
* @SWG\Parameter(
* name="playlistId",
* in="path",
* description="The Playlist Id",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=200,
* description="successful operation"
* )
* )
*
* @param int $playlistId
* @throws NotFoundException
*/
public function usage($playlistId)
{
$playlist = $this->playlistFactory->getById($playlistId);
if (!$this->getUser()->checkViewable($playlist))
throw new AccessDeniedException();
// Get a list of displays that this playlistId is used on
$displays = [];
$displayIds = [];
// have we been provided with a date/time to restrict the scheduled events to?
$playlistDate = $this->getSanitizer()->getDate('playlistEventDate');
if ($playlistDate !== null) {
// Get a list of scheduled events that this playlistId is used on, based on the date provided
$toDate = $playlistDate->copy()->addDay();
$events = $this->scheduleFactory->query(null, [
'futureSchedulesFrom' => $playlistDate->format('U'),
'futureSchedulesTo' => $toDate->format('U'),
'playlistId' => $playlistId
]);
} else {
// All scheduled events for this playlistId
$events = $this->scheduleFactory->query(null, [
'playlistId' => $playlistId
]);
}
// Total records returned from the schedules query
$totalRecords = $this->scheduleFactory->countLast();
foreach ($events as $row) {
/* @var \Xibo\Entity\Schedule $row */
// Generate this event
// Assess the date?
if ($playlistDate !== null) {
try {
$scheduleEvents = $row->getEvents($playlistDate, $toDate);
} catch (XiboException $e) {
$this->getLog()->error('Unable to getEvents for ' . $row->eventId);
continue;
}
// Skip events that do not fall within the specified days
if (count($scheduleEvents) <= 0)
continue;
$this->getLog()->debug('EventId ' . $row->eventId . ' as events: ' . json_encode($scheduleEvents));
}
// Load the display groups
$row->load();
foreach ($row->displayGroups as $displayGroup) {
foreach ($this->displayFactory->getByDisplayGroupId($displayGroup->displayGroupId) as $display) {
if (in_array($display->displayId, $displayIds)) {
continue;
}
$displays[] = $display;
$displayIds = $display->displayId;
}
}
}
if ($this->isApi() && $displays == []) {
$displays = [
'data' =>__('Specified Playlist item is not in use.')];
}
$this->getState()->template = 'grid';
$this->getState()->recordsTotal = $totalRecords;
$this->getState()->setData($displays);
}
/**
* @SWG\Get(
* path="/playlist/usage/layouts/{playlistId}",
* operationId="playlistUsageLayoutsReport",
* tags={"playlist"},
* summary="Get Playlist Item Usage Report for Layouts",
* description="Get the records for the playlist item usage report for Layouts",
* @SWG\Parameter(
* name="playlistId",
* in="path",
* description="The Playlist Id",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=200,
* description="successful operation"
* )
* )
*
* @param int $playlistId
* @throws NotFoundException
*/
public function usageLayouts($playlistId)
{
$playlist = $this->playlistFactory->getById($playlistId);
if (!$this->getUser()->checkViewable($playlist))
throw new AccessDeniedException();
$layouts = $this->layoutFactory->query(null, ['playlistId' => $playlistId]);
if (!$this->isApi()) {
foreach ($layouts as $layout) {
$layout->includeProperty('buttons');
// Add some buttons for this row
if ($this->getUser()->checkEditable($layout)) {
// Design Button
$layout->buttons[] = array(
'id' => 'layout_button_design',
'linkType' => '_self', 'external' => true,
'url' => $this->urlFor('layout.designer', array('id' => $layout->layoutId)),
'text' => __('Design')
);
}
// Preview
$layout->buttons[] = array(
'id' => 'layout_button_preview',
'linkType' => '_blank',
'external' => true,
'url' => $this->urlFor('layout.preview', ['id' => $layout->layoutId]),
'text' => __('Preview Layout')
);
}
}
if ($this->isApi() && $layouts == []) {
$layouts = [
'data' =>__('Specified Playlist item is not in use.')
];
}
$this->getState()->template = 'grid';
$this->getState()->recordsTotal = $this->layoutFactory->countLast();
$this->getState()->setData($layouts);
}
/**
* Set Enable Stats Collection of a Playlist
* @param int $playlistId
*
* @SWG\Put(
* path="/playlist/setenablestat/{playlistId}",
* operationId="playlistSetEnableStat",
* tags={"playlist"},
* summary="Enable Stats Collection",
* description="Set Enable Stats Collection? to use for the collection of Proof of Play statistics for a Playlist.",
* @SWG\Parameter(
* name="playlistId",
* in="path",
* description="The Playlist ID",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="enableStat",
* in="formData",
* description="The option to enable the collection of Media Proof of Play statistics, On, Off or Inherit.",
* type="string",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*
* @throws XiboException
*/
function setEnableStat($playlistId)
{
// Get the Playlist
$playlist = $this->playlistFactory->getById($playlistId);
// Check Permissions
if (!$this->getUser()->checkViewable($playlist))
throw new AccessDeniedException();
$enableStat = $this->getSanitizer()->getString('enableStat');
$playlist->enableStat = $enableStat;
$playlist->save(['saveTags' => false]);
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('For Playlist %s Enable Stats Collection is set to %s'), $playlist->name, __($playlist->enableStat))
]);
}
/**
* Set Enable Stat Form
* @param int $playlistId
* @throws XiboException
*/
public function setEnableStatForm($playlistId)
{
// Get the Playlist
$playlist = $this->playlistFactory->getById($playlistId);
// Check Permissions
if (!$this->getUser()->checkViewable($playlist))
throw new AccessDeniedException();
$data = [
'playlist' => $playlist,
'help' => $this->getHelp()->link('Playlist', 'EnableStat')
];
$this->getState()->template = 'playlist-form-setenablestat';
$this->getState()->setData($data);
}
} Login.php 0000644 00000053660 14716415766 0006360 0 ustar 00 .
*/
namespace Xibo\Controller;
use Xibo\Entity\User;
use Xibo\Exception\AccessDeniedException;
use Xibo\Exception\ConfigurationException;
use Xibo\Exception\InvalidArgumentException;
use Xibo\Exception\NotFoundException;
use Xibo\Exception\XiboException;
use Xibo\Factory\UserFactory;
use Xibo\Helper\Environment;
use Xibo\Helper\HttpsDetect;
use Xibo\Helper\Random;
use Xibo\Helper\Session;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
use Xibo\Storage\StorageServiceInterface;
use RobThree\Auth\TwoFactorAuth;
/**
* Class Login
* @package Xibo\Controller
*/
class Login extends Base
{
/**
* @var Session
*/
private $session;
/** @var StorageServiceInterface */
private $store;
/**
* @var UserFactory
*/
private $userFactory;
/** @var \Stash\Interfaces\PoolInterface */
private $pool;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param Session $session
* @param UserFactory $userFactory
* @param \Stash\Interfaces\PoolInterface $pool
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $session, $userFactory, $pool, $store)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->session = $session;
$this->userFactory = $userFactory;
$this->pool = $pool;
$this->store = $store;
}
/**
* Output a login form
* @throws \Xibo\Exception\ConfigurationException
*/
public function loginForm()
{
// Check to see if the user has provided a special token
$nonce = $this->getSanitizer()->getString('nonce');
if ($nonce != '') {
// We have a nonce provided, so validate that in preference to showing the form.
$nonce = explode('::', $nonce);
$this->getLog()->debug('Nonce is ' . var_export($nonce, true));
$cache = $this->pool->getItem('/nonce/' . $nonce[0]);
$validated = $cache->get();
if ($cache->isMiss()) {
$this->getLog()->error('Expired nonce used.');
$this->getApp()->flashNow('login_message', __('This link has expired.'));
} else if (!password_verify($nonce[1], $validated['hash'])) {
$this->getLog()->error('Invalid nonce used.');
$this->getApp()->flashNow('login_message', __('This link has expired.'));
} else {
// We're valid.
$this->pool->deleteItem('/nonce/' . $nonce[0]);
try {
$user = $this->userFactory->getById($validated['userId']);
// Dooh user
if ($user->userTypeId === 4) {
$this->getLog()->error('Cannot log in as this User type');
$this->getApp()->flashNow('login_message', __('Invalid User Type'));
}
// Log in this user
$user->touch(true);
$this->getLog()->info($user->userName . ' user logged in via token.');
// Set the userId on the log object
$this->getLog()->setUserId($user->userId);
// Overwrite our stored user with this new object.
$this->getApp()->user = $user;
// Expire all sessions
$session = $this->session;
// this is a security measure in case the user is logged in somewhere else.
// (not this one though, otherwise we will deadlock
$session->expireAllSessionsForUser($user->userId);
// Switch Session ID's
$session->setIsExpired(0);
$session->regenerateSessionId();
$session->setUser($user->userId);
// Audit Log
$this->getLog()->audit('User', $user->userId, 'Login Granted via token', [
'IPAddress' => $this->getApp()->request()->getIp(),
'UserAgent' => $this->getApp()->request()->getUserAgent()
]);
$this->getApp()->redirectTo('home');
// We're done here
return;
} catch (NotFoundException $notFoundException) {
$this->getLog()->error('Valid nonce for non-existing user');
$this->getApp()->flashNow('login_message', __('This link has expired.'));
}
}
}
// Check to see if the password reminder functionality is enabled.
$passwordReminderEnabled = $this->getConfig()->getSetting('PASSWORD_REMINDER_ENABLED');
$mailFrom = $this->getConfig()->getSetting('mail_from');
$authCASEnabled = isset($this->app->configService->casSettings);
// Template
$this->getState()->template = 'login';
$this->getState()->setData([
'passwordReminderEnabled' => (($passwordReminderEnabled === 'On' || $passwordReminderEnabled === 'On except Admin') && $mailFrom != ''),
'authCASEnabled' => $authCASEnabled,
'version' => Environment::$WEBSITE_VERSION_NAME
]);
}
/**
* Login
* @throws \Xibo\Exception\ConfigurationException
*/
public function login()
{
// Capture the prior route (if there is one)
$user = null;
$redirect = 'login';
$priorRoute = ($this->getSanitizer()->getString('priorRoute'));
try {
// Get our username and password
$username = $this->getSanitizer()->getUserName('username');
$password = $this->getSanitizer()->getPassword('password');
$this->getLog()->debug('Login with username ' . $username);
// Get our user
try {
/* @var User $user */
$user = $this->userFactory->getByName($username);
// DOOH user
if ($user->userTypeId === 4) {
throw new AccessDeniedException('Sorry this account does not exist or does not have permission to access the web portal.');
}
// Check password
$user->checkPassword($password);
// check if 2FA is enabled
if ($user->twoFactorTypeId != 0) {
$_SESSION['tfaUsername'] = $user->userName;
$this->app->redirect('tfa');
}
// We are logged in, so complete the login flow
$this->completeLoginFlow($user);
}
catch (NotFoundException $e) {
throw new AccessDeniedException('User not found');
}
$redirect = ($priorRoute == '' || $priorRoute == '/' || stripos($priorRoute, $this->getApp()->urlFor('login'))) ? $this->getApp()->urlFor('home') : $priorRoute;
}
catch (\Xibo\Exception\AccessDeniedException $e) {
$this->getLog()->warning($e->getMessage());
// Modify our return message depending on whether we're a DOOH user or not
// we do this because a DOOH user is not allowed to log into the web UI directly and is API only.
if ($user === null || $user->userTypeId != 4) {
$this->getApp()->flash('login_message', __('Username or Password incorrect'));
} else {
$this->getApp()->flash('login_message', __($e->getMessage()));
}
$this->getApp()->flash('priorRoute', $priorRoute);
}
catch (\Xibo\Exception\FormExpiredException $e) {
$this->getApp()->flash('priorRoute', $priorRoute);
}
$this->setNoOutput(true);
$this->getLog()->debug('Redirect to ' . $redirect);
$this->getApp()->redirect($redirect);
}
/**
* Forgotten password link requested
* @throws \Xibo\Exception\XiboException
* @throws \PHPMailer\PHPMailer\Exception
*/
public function forgottenPassword()
{
// Is this functionality enabled?
$passwordReminderEnabled = $this->getConfig()->getSetting('PASSWORD_REMINDER_ENABLED');
$mailFrom = $this->getConfig()->getSetting('mail_from');
if (!(($passwordReminderEnabled === 'On' || $passwordReminderEnabled === 'On except Admin') && $mailFrom != '')) {
throw new ConfigurationException(__('This feature has been disabled by your administrator'));
}
// Get our username
$username = $this->getSanitizer()->getUserName('username');
// Log
$this->getLog()->info('Forgotten Password Request for ' . $username);
// Check to see if the provided username is valid, and if so, record a nonce and send them a link
try {
// Get our user
/* @var User $user */
$user = $this->userFactory->getByName($username);
// Does this user have an email address associated to their user record?
if ($user->email == '') {
throw new NotFoundException('No email');
}
// Nonce parts (nonce isn't ever stored, only the hash of it is stored, it only exists in the email)
$action = 'user-reset-password-' . Random::generateString(10);
$nonce = Random::generateString(20);
// Create a nonce for this user and store it somewhere
$cache = $this->pool->getItem('/nonce/' . $action);
$cache->set([
'action' => $action,
'hash' => password_hash($nonce, PASSWORD_DEFAULT),
'userId' => $user->userId
]);
$cache->expiresAfter(1800); // 30 minutes?
// Save cache
$this->pool->save($cache);
// Make a link
$link = ((new HttpsDetect())->getUrl()) . $this->getApp()->urlFor('login') . '?nonce=' . $action . '::' . $nonce;
// Uncomment this to get a debug message showing the link.
//$this->getLog()->debug('Link is:' . $link);
// Send the mail
$mail = new \PHPMailer\PHPMailer\PHPMailer();
$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';
$mail->From = $mailFrom;
$msgFromName = $this->getConfig()->getSetting('mail_from_name');
if ($msgFromName != null)
$mail->FromName = $msgFromName;
$mail->Subject = __('Password Reset');
$mail->addAddress($user->email);
// Body
$mail->isHTML(true);
$mail->Body = $this->generateEmailBody($mail->Subject, '' . __('You are receiving this email because a password reminder was requested for your account. If you did not make this request, please report this email to your administrator immediately.') . '
' . __('Reset Password') . '');
if (!$mail->send()) {
throw new ConfigurationException('Unable to send password reminder to ' . $user->email);
} else {
$this->getApp()->flash('login_message', __('Reminder email has been sent to your email address'));
}
// Audit Log
$this->getLog()->audit('User', $user->userId, 'Password Reset Link Granted', [
'IPAddress' => $this->getApp()->request()->getIp(),
'UserAgent' => $this->getApp()->request()->getUserAgent()
]);
} catch (XiboException $xiboException) {
$this->getLog()->debug($xiboException->getMessage());
$this->getApp()->flash('login_message', __('User not found'));
}
$this->setNoOutput(true);
$this->getApp()->redirectTo('login');
}
/**
* Log out
* @param bool $redirect
* @throws \Xibo\Exception\ConfigurationException
*/
public function logout($redirect = true)
{
$this->getUser()->touch();
// to log out a user we need only to clear out some session vars
unset($_SESSION['userid']);
unset($_SESSION['username']);
unset($_SESSION['password']);
$session = $this->session;
$session->setIsExpired(1);
if ($redirect)
$this->getApp()->redirectTo('login');
}
/**
* Ping Pong
*/
public function PingPong()
{
$this->session->refreshExpiry = ($this->getSanitizer()->getCheckbox('refreshSession') == 1);
$this->getState()->success = true;
}
/**
* Shows information about Xibo
*
* @SWG\Get(
* path="/about",
* operationId="about",
* tags={"misc"},
* summary="About",
* description="Information about this API, such as Version code, etc",
* @SWG\Response(
* response=200,
* description="successful response",
* @SWG\Schema(
* type="object",
* additionalProperties={
* "title"="version",
* "type"="string"
* }
* )
* )
* )
*/
function about()
{
$response = $this->getState();
if ($this->getApp()->request()->isAjax()) {
$response->template = 'about-text';
}
else {
$response->template = 'about-page';
}
$response->setData(['version' => Environment::$WEBSITE_VERSION_NAME, 'sourceUrl' => $this->getConfig()->getThemeConfig('cms_source_url')]);
}
/**
* Generate an email body
* @param $subject
* @param $body
* @return string
*/
private function generateEmailBody($subject, $body)
{
// Generate Body
// Start an object buffer
ob_start();
// Render the template
$this->app->render('email-template.twig', ['config' => $this->getConfig(), 'subject' => $subject, 'body' => $body]);
$body = ob_get_contents();
ob_end_clean();
return $body;
}
/**
* 2FA Auth required
* @throws \Xibo\Exception\XiboException
* @throws \RobThree\Auth\TwoFactorAuthException
* @throws \PHPMailer\PHPMailer\Exception
*/
public function twoFactorAuthForm()
{
if (!isset($_SESSION['tfaUsername'])) {
$this->getApp()->flash('login_message', __('Session has expired, please log in again'));
$this->getApp()->redirectTo('login');
}
$user = $this->userFactory->getByName($_SESSION['tfaUsername']);
// if our user has email two factor enabled, we need to send the email with code now
if ($user->twoFactorTypeId === 1) {
if ($user->email == '') {
throw new NotFoundException('No email');
}
$mailFrom = $this->getConfig()->getSetting('mail_from');
$issuerSettings = $this->getConfig()->getSetting('TWOFACTOR_ISSUER');
$appName = $this->getConfig()->getThemeConfig('app_name');
if ($issuerSettings !== '') {
$issuer = $issuerSettings;
} else {
$issuer = $appName;
}
if ($mailFrom == '') {
throw new InvalidArgumentException(__('Sending email address in CMS Settings is not configured'), 'mail_from');
}
$tfa = new TwoFactorAuth($issuer);
// Nonce parts (nonce isn't ever stored, only the hash of it is stored, it only exists in the email)
$action = 'user-tfa-email-auth' . Random::generateString(10);
$nonce = Random::generateString(20);
// Create a nonce for this user and store it somewhere
$cache = $this->pool->getItem('/nonce/' . $action);
$cache->set([
'action' => $action,
'hash' => password_hash($nonce, PASSWORD_DEFAULT),
'userId' => $user->userId
]);
$cache->expiresAfter(1800); // 30 minutes?
// Save cache
$this->pool->save($cache);
// Make a link
$code = $tfa->getCode($user->twoFactorSecret);
// Send the mail
$mail = new \PHPMailer\PHPMailer\PHPMailer();
$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';
$mail->From = $mailFrom;
$msgFromName = $this->getConfig()->getSetting('mail_from_name');
if ($msgFromName != null) {
$mail->FromName = $msgFromName;
}
$mail->Subject = __('Two Factor Authentication');
$mail->addAddress($user->email);
// Body
$mail->isHTML(true);
$mail->Body = $this->generateEmailBody($mail->Subject,
'' . __('You are receiving this email because two factor email authorisation is enabled in your CMS user account. If you did not make this request, please report this email to your administrator immediately.') . '
' . '' . $code . '
');
if (!$mail->send()) {
throw new ConfigurationException('Unable to send two factor code to ' . $user->email);
} else {
$this->getApp()->flash('login_message',
__('Two factor code email has been sent to your email address'));
}
// Audit Log
$this->getLog()->audit('User', $user->userId, 'Two Factor Code email sent', [
'IPAddress' => $this->getApp()->request()->getIp(),
'UserAgent' => $this->getApp()->request()->getUserAgent()
]);
}
// Template
$this->getState()->template = 'tfa';
}
/**
* @throws ConfigurationException
* @throws NotFoundException
* @throws \RobThree\Auth\TwoFactorAuthException
*/
public function twoFactorAuthValidate()
{
$user = $this->userFactory->getByName($_SESSION['tfaUsername']);
$result = false;
$updatedCodes = [];
if (isset($_POST['code'])) {
$issuerSettings = $this->getConfig()->getSetting('TWOFACTOR_ISSUER');
$appName = $this->getConfig()->getThemeConfig('app_name');
if ($issuerSettings !== '') {
$issuer = $issuerSettings;
} else {
$issuer = $appName;
}
$tfa = new TwoFactorAuth($issuer);
if ($user->twoFactorTypeId === 1 && $user->email !== '') {
$result = $tfa->verifyCode($user->twoFactorSecret, $this->getSanitizer()->getString('code'), 8);
} else {
$result = $tfa->verifyCode($user->twoFactorSecret, $this->getSanitizer()->getString('code'), 2);
}
} elseif (isset($_POST['recoveryCode'])) {
// get the array of recovery codes, go through them and try to match provided code
$codes = $user->twoFactorRecoveryCodes;
foreach (json_decode($codes) as $code) {
// if the provided recovery code matches one stored in the database, we want to log in the user
if ($this->getSanitizer()->string($code) === $this->getSanitizer()->getString('recoveryCode')) {
$result = true;
}
if ($this->getSanitizer()->string($code) !== $this->getSanitizer()->getString('recoveryCode')) {
$updatedCodes[] = $this->getSanitizer()->string($code);
}
}
// recovery codes are one time use, as such we want to update user recovery codes and remove the one that was just used.
$user->updateRecoveryCodes(json_encode($updatedCodes));
}
if ($result) {
// We are logged in at this point
$this->completeLoginFlow($user);
$this->setNoOutput(true);
//unset the session tfaUsername
unset($_SESSION['tfaUsername']);
$this->getApp()->redirectTo('home');
} else {
$this->getLog()->error('Authentication code incorrect, redirecting to login page');
$this->getApp()->flash('login_message', __('Authentication code incorrect'));
$this->getApp()->redirectTo('login');
}
}
/**
* @param \Xibo\Entity\User $user
* @throws \Xibo\Exception\ConfigurationException
*/
private function completeLoginFlow($user)
{
$user->touch();
$this->getLog()->info($user->userName . ' user logged in.');
// Set the userId on the log object
$this->getLog()->setUserId($user->userId);
// Overwrite our stored user with this new object.
$this->getApp()->user = $user;
// Switch Session ID's
$session = $this->session;
$session->setIsExpired(0);
$session->regenerateSessionId();
$session->setUser($user->userId);
// Audit Log
$this->getLog()->audit('User', $user->userId, 'Login Granted', [
'IPAddress' => $this->getApp()->request()->getIp(),
'UserAgent' => $this->getApp()->request()->getUserAgent()
]);
}
}
Template.php 0000644 00000030273 14716415766 0007056 0 ustar 00 .
*/
namespace Xibo\Controller;
use Xibo\Exception\AccessDeniedException;
use Xibo\Exception\XiboException;
use Xibo\Factory\LayoutFactory;
use Xibo\Factory\TagFactory;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
/**
* Class Template
* @package Xibo\Controller
*/
class Template extends Base
{
/**
* @var LayoutFactory
*/
private $layoutFactory;
/**
* @var TagFactory
*/
private $tagFactory;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param LayoutFactory $layoutFactory
* @param TagFactory $tagFactory
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $layoutFactory, $tagFactory)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->layoutFactory = $layoutFactory;
$this->tagFactory = $tagFactory;
}
/**
* Display page logic
*/
function displayPage()
{
// Call to render the template
$this->getState()->template = 'template-page';
}
/**
* Data grid
*
* @SWG\Get(
* path="/template",
* operationId="templateSearch",
* tags={"template"},
* summary="Template Search",
* description="Search templates this user has access to",
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(
* type="array",
* @SWG\Items(ref="#/definitions/Layout")
* )
* )
* )
*/
function grid()
{
// Embed?
$embed = ($this->getSanitizer()->getString('embed') != null) ? explode(',', $this->getSanitizer()->getString('embed')) : [];
$templates = $this->layoutFactory->query($this->gridRenderSort(), $this->gridRenderFilter([
'excludeTemplates' => 0,
'tags' => $this->getSanitizer()->getString('tags'),
'layoutId' => $this->getSanitizer()->getInt('templateId'),
'layout' => $this->getSanitizer()->getString('template')
]));
foreach ($templates as $template) {
/* @var \Xibo\Entity\Layout $template */
if (in_array('regions', $embed)) {
$template->load([
'loadPlaylists' => in_array('playlists', $embed),
'loadCampaigns' => in_array('campaigns', $embed),
'loadPermissions' => in_array('permissions', $embed),
'loadTags' => in_array('tags', $embed),
'loadWidgets' => in_array('widgets', $embed)
]);
}
if ($this->isApi())
break;
$template->includeProperty('buttons');
$template->thumbnail = '';
if ($template->backgroundImageId != 0) {
$download = $this->urlFor('layout.download.background', ['id' => $template->layoutId]) . '?preview=1';
$template->thumbnail = '';
}
// Parse down for description
$template->descriptionWithMarkup = \Parsedown::instance()->text($template->description);
if ($this->getUser()->checkEditable($template)) {
// Design Button
$template->buttons[] = array(
'id' => 'layout_button_design',
'linkType' => '_self', 'external' => true,
'url' => $this->urlFor('layout.designer', array('id' => $template->layoutId)),
'text' => __('Alter Template')
);
// Edit Button
$template->buttons[] = array(
'id' => 'layout_button_edit',
'url' => $this->urlFor('layout.edit.form', ['id' => $template->layoutId]),
'text' => __('Edit')
);
// Copy Button
$template->buttons[] = array(
'id' => 'layout_button_copy',
'url' => $this->urlFor('layout.copy.form', ['id' => $template->layoutId]),
'text' => __('Copy')
);
}
// Extra buttons if have delete permissions
if ($this->getUser()->checkDeleteable($template)) {
// Delete Button
$template->buttons[] = array(
'id' => 'layout_button_delete',
'url' => $this->urlFor('layout.delete.form', ['id' => $template->layoutId]),
'text' => __('Delete'),
'multi-select' => true,
'dataAttributes' => array(
array('name' => 'commit-url', 'value' => $this->urlFor('layout.delete', ['id' => $template->layoutId])),
array('name' => 'commit-method', 'value' => 'delete'),
array('name' => 'id', 'value' => 'layout_button_delete'),
array('name' => 'text', 'value' => __('Delete')),
array('name' => 'rowtitle', 'value' => $template->layout)
)
);
}
$template->buttons[] = ['divider' => true];
// Extra buttons if we have modify permissions
if ($this->getUser()->checkPermissionsModifyable($template)) {
// Permissions button
$template->buttons[] = array(
'id' => 'layout_button_permissions',
'url' => $this->urlFor('user.permissions.form', ['entity' => 'Campaign', 'id' => $template->campaignId]),
'text' => __('Permissions')
);
}
$template->buttons[] = ['divider' => true];
// Export Button
$template->buttons[] = array(
'id' => 'layout_button_export',
'linkType' => '_self', 'external' => true,
'url' => $this->urlFor('layout.export', ['id' => $template->layoutId]),
'text' => __('Export')
);
}
$this->getState()->template = 'grid';
$this->getState()->recordsTotal = $this->layoutFactory->countLast();
$this->getState()->setData($templates);
}
/**
* Template Form
* @param int $layoutId
*/
function addTemplateForm($layoutId)
{
// Get the layout
$layout = $this->layoutFactory->getById($layoutId);
$tags = '';
$arrayOfTags = array_filter(explode(',', $layout->tags));
$arrayOfTagValues = array_filter(explode(',', $layout->tagValues));
for ($i=0; $igetUser()->checkViewable($layout))
throw new AccessDeniedException(__('You do not have permissions to view this layout'));
$this->getState()->template = 'template-form-add-from-layout';
$this->getState()->setData([
'layout' => $layout,
'tags' => $tags,
'help' => $this->getHelp()->link('Template', 'Add')
]);
}
/**
* Add template
* @param int $layoutId
*
* @SWG\Post(
* path="/template/{layoutId}",
* operationId="template.add.from.layout",
* tags={"template"},
* summary="Add a template from a Layout",
* description="Use the provided layout as a base for a new template",
* @SWG\Parameter(
* name="layoutId",
* in="path",
* description="The Layout ID",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="includeWidgets",
* in="formData",
* description="Flag indicating whether to include the widgets in the Template",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="name",
* in="formData",
* description="The Template Name",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="tags",
* in="formData",
* description="Comma separated list of Tags for the template",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="description",
* in="formData",
* description="A description of the Template",
* type="string",
* required=false
* ),
* @SWG\Response(
* response=201,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/Layout"),
* @SWG\Header(
* header="Location",
* description="Location of the new record",
* type="string"
* )
* )
* )
*
* @throws XiboException
*/
function add($layoutId)
{
// Get the layout
$layout = $this->layoutFactory->getById($layoutId);
// Check Permissions
if (!$this->getUser()->checkViewable($layout))
throw new AccessDeniedException(__('You do not have permissions to view this layout'));
// Should the copy include the widgets
$includeWidgets = ($this->getSanitizer()->getCheckbox('includeWidgets') == 1);
// Load without anything
$layout->load([
'loadPlaylists' => true,
'loadWidgets' => $includeWidgets,
'playlistIncludeRegionAssignments' => false,
'loadTags' => false,
'loadPermissions' => false,
'loadCampaigns' => false
]);
$originalLayout = $layout;
$layout = clone $layout;
$layout->layout = $this->getSanitizer()->getString('name');
$layout->tags = $this->tagFactory->tagsFromString($this->getSanitizer()->getString('tags'));
$layout->tags[] = $this->tagFactory->getByTag('template');
$layout->description = $this->getSanitizer()->getString('description');
$layout->setOwner($this->getUser()->userId, true);
$layout->save();
if ($includeWidgets) {
// Sub-Playlist
foreach ($layout->regions as $region) {
// Match our original region id to the id in the parent layout
$original = $originalLayout->getRegion($region->getOriginalValue('regionId'));
// Make sure Playlist closure table from the published one are copied over
$original->getPlaylist()->cloneClosureTable($region->getPlaylist()->playlistId);
}
}
// Return
$this->getState()->hydrate([
'httpStatus' => 201,
'message' => sprintf(__('Saved %s'), $layout->layout),
'id' => $layout->layoutId,
'data' => $layout
]);
}
}
Preview.php 0000644 00000006107 14716415766 0006723 0 ustar 00 .
*/
namespace Xibo\Controller;
use baseDAO;
use database;
use Xibo\Exception\AccessDeniedException;
use Xibo\Factory\LayoutFactory;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
/**
* Class Preview
* @package Xibo\Controller
*/
class Preview extends Base
{
/**
* @var LayoutFactory
*/
private $layoutFactory;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param LayoutFactory $layoutFactory
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $layoutFactory)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->layoutFactory = $layoutFactory;
}
/**
* Layout Preview
* @param int $layoutId
*/
public function show($layoutId)
{
$layout = $this->layoutFactory->getById($layoutId);
if (!$this->getUser()->checkViewable($layout))
throw new AccessDeniedException();
$this->getState()->template = 'layout-preview';
$this->getState()->setData([
'layout' => $layout,
'previewOptions' => [
'getXlfUrl' => $this->urlFor('layout.getXlf', ['id' => $layout->layoutId]),
'getResourceUrl' => $this->urlFor('module.getResource'),
'libraryDownloadUrl' => $this->urlFor('library.download'),
'layoutBackgroundDownloadUrl' => $this->urlFor('layout.download.background'),
'loaderUrl' => $this->getConfig()->uri('img/loader.gif')
]
]);
}
/**
* Get the XLF for a Layout
* @param $layoutId
*/
function getXlf($layoutId)
{
$layout = $this->layoutFactory->getById($layoutId);
if (!$this->getUser()->checkViewable($layout))
throw new AccessDeniedException();
echo file_get_contents($layout->xlfToDisk());
$this->setNoOutput(true);
}
}
DataSetData.php 0000644 00000036120 14716415766 0007417 0 ustar 00 setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->dataSetFactory = $dataSetFactory;
$this->mediaFactory = $mediaFactory;
}
/**
* Display Page
* @param $dataSetId
*/
public function displayPage($dataSetId)
{
$dataSet = $this->dataSetFactory->getById($dataSetId);
if (!$this->getUser()->checkEditable($dataSet))
throw new AccessDeniedException();
// Load data set
$dataSet->load();
$this->getState()->template = 'dataset-dataentry-page';
$this->getState()->setData([
'dataSet' => $dataSet
]);
}
/**
* Grid
* @param $dataSetId
*
* @SWG\Get(
* path="/dataset/data/{dataSetId}",
* operationId="dataSetData",
* tags={"dataset"},
* summary="DataSet Data",
* description="Get Data for DataSet",
* @SWG\Parameter(
* name="dataSetId",
* in="path",
* description="The DataSet ID",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=200,
* description="successful operation"
* )
* )
*
* @throws \Xibo\Exception\XiboException
*/
public function grid($dataSetId)
{
$dataSet = $this->dataSetFactory->getById($dataSetId);
if (!$this->getUser()->checkEditable($dataSet))
throw new AccessDeniedException();
$sorting = $this->gridRenderSort();
if ($sorting != null)
$sorting = implode(',', $sorting);
// Filter criteria
$filter = '';
foreach ($dataSet->getColumn() as $column) {
/* @var \Xibo\Entity\DataSetColumn $column */
if ($column->dataSetColumnTypeId == 1) {
if ($this->getSanitizer()->getString($column->heading) != null) {
$filter .= 'AND ' . $column->heading . ' LIKE \'%' . $this->getSanitizer()->getString($column->heading) . '%\' ';
}
}
}
$filter = trim($filter, 'AND');
// Work out the limits
$filter = $this->gridRenderFilter(['filter' => $this->getSanitizer()->getParam('filter', $filter)]);
try {
$data = $dataSet->getData([
'order' => $sorting,
'start' => $filter['start'],
'size' => $filter['length'],
'filter' => $filter['filter']
]);
} catch (\Exception $e) {
$data = ['exception' => __('Error getting DataSet data, failed with following message: ') . $e->getMessage()];
$this->getLog()->error('Error getting DataSet data, failed with following message: ' . $e->getMessage());
$this->getLog()->debug($e->getTraceAsString());
}
$this->getState()->template = 'grid';
$this->getState()->setData($data);
// Output the count of records for paging purposes
if ($dataSet->countLast() != 0)
$this->getState()->recordsTotal = $dataSet->countLast();
// Set this dataSet as being active
$dataSet->setActive();
}
/**
* Add Form
* @param int $dataSetId
*/
public function addForm($dataSetId)
{
$dataSet = $this->dataSetFactory->getById($dataSetId);
if (!$this->getUser()->checkEditable($dataSet))
throw new AccessDeniedException();
$dataSet->load();
$this->getState()->template = 'dataset-data-form-add';
$this->getState()->setData([
'dataSet' => $dataSet
]);
}
/**
* Add
* @param int $dataSetId
*
* @SWG\Post(
* path="/dataset/data/{dataSetId}",
* operationId="dataSetDataAdd",
* tags={"dataset"},
* summary="Add Row",
* description="Add a row of Data to a DataSet",
* @SWG\Parameter(
* name="dataSetId",
* in="path",
* description="The DataSet ID",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="dataSetColumnId_ID",
* in="formData",
* description="Parameter for each dataSetColumnId in the DataSet",
* type="string",
* required=true
* ),
* @SWG\Response(
* response=201,
* description="successful operation",
* @SWG\Header(
* header="Location",
* description="Location of the new record",
* type="string"
* )
* )
* )
*
* @throws XiboException
*/
public function add($dataSetId)
{
$dataSet = $this->dataSetFactory->getById($dataSetId);
if (!$this->getUser()->checkEditable($dataSet))
throw new AccessDeniedException();
$row = [];
// Expect input for each value-column
foreach ($dataSet->getColumn() as $column) {
/* @var \Xibo\Entity\DataSetColumn $column */
if ($column->dataSetColumnTypeId == 1) {
// Sanitize accordingly
if ($column->dataTypeId == 2) {
// Number
$value = $this->getSanitizer()->getDouble('dataSetColumnId_' . $column->dataSetColumnId);
}
else if ($column->dataTypeId == 3) {
// Date
$value = $this->getDate()->getLocalDate($this->getSanitizer()->getDate('dataSetColumnId_' . $column->dataSetColumnId));
}
else if ($column->dataTypeId == 5) {
// Media Id
$value = $this->getSanitizer()->getInt('dataSetColumnId_' . $column->dataSetColumnId);
}
else {
// String
$value = $this->getSanitizer()->getString('dataSetColumnId_' . $column->dataSetColumnId);
}
$row[$column->heading] = $value;
} elseif ($column->dataSetColumnTypeId == 3) {
throw new InvalidArgumentException(__('Cannot add new rows to remote dataSet'), 'dataSetColumnTypeId');
}
}
// Use the data set object to add a row
$rowId = $dataSet->addRow($row);
// Save the dataSet
$dataSet->save(['validate' => false, 'saveColumns' => false]);
// Return
$this->getState()->hydrate([
'httpStatus' => 201,
'message' => __('Added Row'),
'id' => $rowId,
'data' => [
'id' => $rowId
]
]);
}
/**
* Edit Form
* @param $dataSetId
* @param $rowId
* @throws \Xibo\Exception\XiboException
*/
public function editForm($dataSetId, $rowId)
{
$dataSet = $this->dataSetFactory->getById($dataSetId);
if (!$this->getUser()->checkEditable($dataSet))
throw new AccessDeniedException();
$dataSet->load();
$row = $dataSet->getData(['id' => $rowId])[0];
// Augment my row with any already selected library image
foreach ($dataSet->getColumn() as $dataSetColumn) {
if ($dataSetColumn->dataTypeId === 5) {
// Add this image object to my row
try {
if (isset($row[$dataSetColumn->heading])) {
$row['__images'][$dataSetColumn->dataSetColumnId] = $this->mediaFactory->getById($row[$dataSetColumn->heading]);
}
} catch (NotFoundException $notFoundException) {
$this->getLog()->debug('DataSet ' . $dataSetId . ' references an image that no longer exists. ID is ' . $row[$dataSetColumn->heading]);
}
}
}
$this->getState()->template = 'dataset-data-form-edit';
$this->getState()->setData([
'dataSet' => $dataSet,
'row' => $row
]);
}
/**
* Edit Row
* @param int $dataSetId
* @param int $rowId
*
* @SWG\Put(
* path="/dataset/data/{dataSetId}/{rowId}",
* operationId="dataSetDataEdit",
* tags={"dataset"},
* summary="Edit Row",
* description="Edit a row of Data to a DataSet",
* @SWG\Parameter(
* name="dataSetId",
* in="path",
* description="The DataSet ID",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="rowId",
* in="path",
* description="The Row ID of the Data to Edit",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="dataSetColumnId_ID",
* in="formData",
* description="Parameter for each dataSetColumnId in the DataSet",
* type="string",
* required=true
* ),
* @SWG\Response(
* response=200,
* description="successful operation"
* )
* )
*
* @throws XiboException
*/
public function edit($dataSetId, $rowId)
{
$dataSet = $this->dataSetFactory->getById($dataSetId);
if (!$this->getUser()->checkEditable($dataSet))
throw new AccessDeniedException();
$existingRow = $dataSet->getData(['id' => $rowId])[0];
$row = [];
// Expect input for each value-column
foreach ($dataSet->getColumn() as $column) {
/* @var \Xibo\Entity\DataSetColumn $column */
$existingValue = $this->getSanitizer()->getParam($column->heading, null, $existingRow);
if ($column->dataSetColumnTypeId == 1) {
// Pull out the value
$value = $this->getSanitizer()->getParam('dataSetColumnId_' . $column->dataSetColumnId, null, null, false);
$this->getLog()->debug('Value is: ' . var_export($value, true) . ', existing value is ' . var_export($existingValue, true));
// Sanitize accordingly
if ($column->dataTypeId == 2) {
// Number
if ($value === null)
$value = $existingValue;
$value = $this->getSanitizer()->double($value);
}
else if ($column->dataTypeId == 3) {
// Date
if ($value === null) {
// Keep it as it was
$value = $existingValue;
} else {
// Parse the new date and convert to a local date/time
$value = $this->getDate()->getLocalDate($this->getDate()->parse($value));
}
}
else if ($column->dataTypeId == 5) {
// Media Id
if (isset($value)) {
$value = $this->getSanitizer()->int($value);
} else {
$value = null;
}
}
else {
// String
if ($value === null)
$value = $existingValue;
$value = $this->getSanitizer()->string($value);
}
$row[$column->heading] = $value;
}
}
// Use the data set object to edit a row
if ($row != [])
$dataSet->editRow($rowId, $row);
else
throw new InvalidArgumentException(__('Cannot edit data of remote columns'), 'dataSetColumnTypeId');
// Save the dataSet
$dataSet->save(['validate' => false, 'saveColumns' => false]);
// Return
$this->getState()->hydrate([
'message' => __('Edited Row'),
'id' => $rowId,
'data' => [
'id' => $rowId
]
]);
}
/**
* Delete Form
* @param int $dataSetId
* @param int $rowId
*/
public function deleteForm($dataSetId, $rowId)
{
$dataSet = $this->dataSetFactory->getById($dataSetId);
if (!$this->getUser()->checkEditable($dataSet))
throw new AccessDeniedException();
$dataSet->load();
$this->getState()->template = 'dataset-data-form-delete';
$this->getState()->setData([
'dataSet' => $dataSet,
'row' => $dataSet->getData(['id' => $rowId])[0]
]);
}
/**
* Delete Row
* @param $dataSetId
* @param $rowId
*
* @throws NotFoundException
*
* @SWG\Delete(
* path="/dataset/data/{dataSetId}/{rowId}",
* operationId="dataSetDataDelete",
* tags={"dataset"},
* summary="Delete Row",
* description="Delete a row of Data to a DataSet",
* @SWG\Parameter(
* name="dataSetId",
* in="path",
* description="The DataSet ID",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="rowId",
* in="path",
* description="The Row ID of the Data to Delete",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*/
public function delete($dataSetId, $rowId)
{
$dataSet = $this->dataSetFactory->getById($dataSetId);
if (!$this->getUser()->checkEditable($dataSet))
throw new AccessDeniedException();
if (empty($dataSet->getData(['id' => $rowId])[0])) {
throw new NotFoundException(__('row not found'), 'dataset');
}
// Delete the row
$dataSet->deleteRow($rowId);
// Save the dataSet
$dataSet->save(['validate' => false, 'saveColumns' => false]);
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => __('Deleted Row'),
'id' => $rowId
]);
}
} Fault.php 0000644 00000020503 14716415766 0006351 0 ustar 00 .
*/
namespace Xibo\Controller;
use Xibo\Factory\DisplayFactory;
use Xibo\Factory\LogFactory;
use Xibo\Helper\Environment;
use Xibo\Helper\Random;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
use Xibo\Storage\StorageServiceInterface;
/**
* Class Fault
* @package Xibo\Controller
*/
class Fault extends Base
{
/** @var StorageServiceInterface */
private $store;
/**
* @var LogFactory
*/
private $logFactory;
/** @var DisplayFactory */
private $displayFactory;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param StorageServiceInterface $store
* @param LogFactory $logFactory
* @param DisplayFactory $displayFactory
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $store, $logFactory, $displayFactory)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->store = $store;
$this->logFactory = $logFactory;
$this->displayFactory = $displayFactory;
}
function displayPage()
{
$url = $this->getApp()->request()->getUrl() . $this->getApp()->request()->getPathInfo();
$config = $this->getConfig();
$data = [
'environmentCheck' => $config->checkEnvironment(),
'environmentFault' => $config->envFault,
'environmentWarning' => $config->envWarning,
'binLogError' => ($config->checkBinLogEnabled() && !$config->checkBinLogFormat()),
'urlError' => !Environment::checkUrl($url)
];
$this->getState()->template = 'fault-page';
$this->getState()->setData($data);
}
public function collect()
{
$this->setNoOutput(true);
// Create a ZIP file
$tempFileName = $this->getConfig()->getSetting('LIBRARY_LOCATION') . 'temp/' . Random::generateString();
$zip = new \ZipArchive();
$result = $zip->open($tempFileName, \ZipArchive::CREATE | \ZipArchive::OVERWRITE);
if ($result !== true)
throw new \InvalidArgumentException(__('Can\'t create ZIP. Error Code: ' . $result));
// Decide what we output based on the options selected.
$outputVersion = $this->getSanitizer()->getCheckbox('outputVersion') == 1;
$outputLog = $this->getSanitizer()->getCheckbox('outputLog') == 1;
$outputEnvCheck = $this->getSanitizer()->getCheckbox('outputEnvCheck') == 1;
$outputSettings = $this->getSanitizer()->getCheckbox('outputSettings') == 1;
$outputDisplays = $this->getSanitizer()->getCheckbox('outputDisplays') == 1;
$outputDisplayProfile = $this->getSanitizer()->getCheckbox('outputDisplayProfile') == 1;
if (!$outputVersion && !$outputLog && !$outputEnvCheck && !$outputSettings && !$outputDisplays && !$outputDisplayProfile)
throw new \InvalidArgumentException(__('Please select at least one option'));
$environmentVariables = [
'app_ver' => Environment::$WEBSITE_VERSION_NAME,
'XmdsVersion' => Environment::$XMDS_VERSION,
'XlfVersion' => Environment::$XLF_VERSION
];
// Should we output the version?
if ($outputVersion) {
$zip->addFromString('version.json', json_encode($environmentVariables, JSON_PRETTY_PRINT));
}
// Should we output a log?
if ($outputLog) {
$tempLogFile = $this->getConfig()->getSetting('LIBRARY_LOCATION') . 'temp/log_' . Random::generateString();
$out = fopen($tempLogFile, 'w');
fputcsv($out, ['logId', 'runNo', 'logDate', 'channel', 'page', 'function', 'message', 'display.display', 'type']);
// Do some post processing
foreach ($this->logFactory->query(['logId'], ['fromDt' => (time() - (60 * 10))]) as $row) {
/* @var \Xibo\Entity\LogEntry $row */
fputcsv($out, [$row->logId, $row->runNo, $row->logDate, $row->channel, $row->page, $row->function, $row->message, $row->display, $row->type]);
}
fclose($out);
$zip->addFile($tempLogFile, 'log.csv');
}
// Output ENV Check
if ($outputEnvCheck) {
$zip->addFromString('environment.json', json_encode(array_map(function ($element) {
unset($element['advice']);
return $element;
}, $this->getConfig()->checkEnvironment()), JSON_PRETTY_PRINT));
}
// Output Settings
if ($outputSettings) {
$zip->addFromString('settings.json', json_encode(array_map(function($element) {
return [$element['setting'] => $element['value']];
}, $this->store->select('SELECT setting, `value` FROM `setting`', [])), JSON_PRETTY_PRINT));
}
// Output Displays
if ($outputDisplays) {
$displays = $this->displayFactory->query(['display']);
// Output Profiles
if ($outputDisplayProfile) {
foreach ($displays as $display) {
/** @var \Xibo\Entity\Display $display */
$display->settingProfile = array_map(function ($element) {
unset($element['helpText']);
return $element;
}, $display->getSettings());
}
}
$zip->addFromString('displays.json', json_encode($displays, JSON_PRETTY_PRINT));
}
// Close the ZIP file
$zip->close();
// Prepare the download
if (ini_get('zlib.output_compression')) {
ini_set('zlib.output_compression', 'Off');
}
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=troubleshoot.zip");
header('Content-Length: ' . filesize($tempFileName));
// Send via Apache X-Sendfile header?
if ($this->getConfig()->getSetting('SENDFILE_MODE') == 'Apache') {
header("X-Sendfile: $tempFileName");
$this->getApp()->halt(200);
}
// Send via Nginx X-Accel-Redirect?
if ($this->getConfig()->getSetting('SENDFILE_MODE') == 'Nginx') {
header("X-Accel-Redirect: /download/temp/" . basename($tempFileName));
$this->getApp()->halt(200);
}
// Return the file with PHP
// Disable any buffering to prevent OOM errors.
while (ob_get_level() > 0) {
ob_end_clean();
}
readfile($tempFileName);
exit;
}
public function debugOn()
{
$this->getConfig()->changeSetting('audit', 'DEBUG');
$this->getConfig()->changeSetting('ELEVATE_LOG_UNTIL', $this->getDate()->parse()->addMinutes(30)->format('U'));
// Return
$this->getState()->hydrate([
'message' => __('Switched to Debug Mode')
]);
}
public function debugOff()
{
$this->getConfig()->changeSetting('audit', $this->getConfig()->getSetting('RESTING_LOG_LEVEL'));
$this->getConfig()->changeSetting('ELEVATE_LOG_UNTIL', '');
// Return
$this->getState()->hydrate([
'message' => __('Switched to Normal Mode')
]);
}
}
Schedule.php 0000644 00000215412 14716415766 0007037 0 ustar 00 .
*/
namespace Xibo\Controller;
use Stash\Interfaces\PoolInterface;
use Xibo\Entity\ScheduleReminder;
use Xibo\Exception\AccessDeniedException;
use Xibo\Exception\NotFoundException;
use Xibo\Exception\XiboException;
use Xibo\Factory\CampaignFactory;
use Xibo\Factory\CommandFactory;
use Xibo\Factory\DayPartFactory;
use Xibo\Factory\DisplayFactory;
use Xibo\Factory\DisplayGroupFactory;
use Xibo\Factory\LayoutFactory;
use Xibo\Factory\MediaFactory;
use Xibo\Factory\ScheduleExclusionFactory;
use Xibo\Factory\ScheduleFactory;
use Xibo\Factory\ScheduleReminderFactory;
use Xibo\Helper\Session;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
/**
* Class Schedule
* @package Xibo\Controller
*/
class Schedule extends Base
{
/**
* @var Session
*/
private $session;
/** @var PoolInterface */
private $pool;
/**
* @var ScheduleFactory
*/
private $scheduleFactory;
/**
* @var ScheduleReminderFactory
*/
private $scheduleReminderFactory;
/**
* @var ScheduleExclusionFactory
*/
private $scheduleExclusionFactory;
/**
* @var DisplayGroupFactory
*/
private $displayGroupFactory;
/**
* @var CampaignFactory
*/
private $campaignFactory;
/**
* @var CommandFactory
*/
private $commandFactory;
/** @var DisplayFactory */
private $displayFactory;
/** @var LayoutFactory */
private $layoutFactory;
/** @var MediaFactory */
private $mediaFactory;
/** @var DayPartFactory */
private $dayPartFactory;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param Session $session
* @param PoolInterface $pool
* @param ScheduleFactory $scheduleFactory
* @param DisplayGroupFactory $displayGroupFactory
* @param CampaignFactory $campaignFactory
* @param CommandFactory $commandFactory
* @param DisplayFactory $displayFactory
* @param LayoutFactory $layoutFactory
* @param MediaFactory $mediaFactory
* @param DayPartFactory $dayPartFactory
* @param ScheduleReminderFactory $scheduleReminderFactory
* @param ScheduleExclusionFactory $scheduleExclusionFactory
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $session, $pool, $scheduleFactory, $displayGroupFactory, $campaignFactory, $commandFactory, $displayFactory, $layoutFactory, $mediaFactory, $dayPartFactory, $scheduleReminderFactory, $scheduleExclusionFactory)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->session = $session;
$this->pool = $pool;
$this->scheduleFactory = $scheduleFactory;
$this->displayGroupFactory = $displayGroupFactory;
$this->campaignFactory = $campaignFactory;
$this->commandFactory = $commandFactory;
$this->displayFactory = $displayFactory;
$this->layoutFactory = $layoutFactory;
$this->mediaFactory = $mediaFactory;
$this->dayPartFactory = $dayPartFactory;
$this->scheduleReminderFactory = $scheduleReminderFactory;
$this->scheduleExclusionFactory = $scheduleExclusionFactory;
}
function displayPage()
{
// We need to provide a list of displays
$displayGroupIds = $this->session->get('displayGroupIds');
if (!is_array($displayGroupIds)) {
$displayGroupIds = [];
}
$displayGroups = [];
// Boolean to check if the option show all was saved in session
$displayGroupsShowAll = false;
if (count($displayGroupIds) > 0) {
foreach ($displayGroupIds as $displayGroupId) {
if ($displayGroupId == -1) {
// If we have the show all option selected, go no further.
$displayGroupsShowAll = true;
break;
}
try {
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
if ($this->getUser()->checkViewable($displayGroup)) {
$displayGroups[] = $displayGroup;
}
} catch (NotFoundException $e) {
$this->getLog()->debug('Saved filter option for displayGroupId that no longer exists.');
}
}
}
$data = [
'displayGroupIds' => $displayGroupIds,
'displayGroups' => $displayGroups,
'displayGroupsShowAll' => $displayGroupsShowAll
];
// Render the Theme and output
$this->getState()->template = 'schedule-page';
$this->getState()->setData($data);
}
/**
* Generates the calendar that we draw events on
*
* @SWG\Get(
* path="/schedule/data/events",
* operationId="scheduleCalendarData",
* tags={"schedule"},
* @SWG\Parameter(
* name="displayGroupIds",
* description="The DisplayGroupIds to return the schedule for. Empty for All.",
* in="query",
* type="array",
* @SWG\Items(
* type="integer"
* )
* ),
* @SWG\Parameter(
* name="from",
* in="query",
* required=true,
* type="integer",
* description="From Date Timestamp in Microseconds"
* ),
* @SWG\Parameter(
* name="to",
* in="query",
* required=true,
* type="integer",
* description="To Date Timestamp in Microseconds"
* ),
* @SWG\Response(
* response=200,
* description="successful response",
* @SWG\Schema(
* type="array",
* @SWG\Items(ref="#/definitions/ScheduleCalendarData")
* )
* )
* )
* @throws \Xibo\Exception\ConfigurationException
* @throws \Xibo\Exception\NotFoundException
*/
function eventData()
{
$this->getApp()->response()->header('Content-Type', 'application/json');
$this->setNoOutput();
$displayGroupIds = $this->getSanitizer()->getIntArray('displayGroupIds');
$campaignId = $this->getSanitizer()->getInt('campaignId');
$originalDisplayGroupIds = $displayGroupIds;
$start = $this->getDate()->parse($this->getSanitizer()->getString('from', 1000) / 1000, 'U');
$end = $this->getDate()->parse($this->getSanitizer()->getString('to', 1000) / 1000, 'U');
// if we have some displayGroupIds then add them to the session info so we can default everything else.
$this->session->set('displayGroupIds', $displayGroupIds);
if (count($displayGroupIds) <= 0) {
$this->getApp()->response()->body(json_encode(array('success' => 1, 'result' => [])));
return;
}
// Setting for whether we show Layouts with out permissions
$showLayoutName = ($this->getConfig()->getSetting('SCHEDULE_SHOW_LAYOUT_NAME') == 1);
// Permissions check the list of display groups with the user accessible list of display groups
$displayGroupIds = array_diff($displayGroupIds, [-1]);
if (!$this->getUser()->isSuperAdmin()) {
$userDisplayGroupIds = array_map(function($element) {
/** @var \Xibo\Entity\DisplayGroup $element */
return $element->displayGroupId;
}, $this->displayGroupFactory->query(null, ['isDisplaySpecific' => -1]));
// Reset the list to only those display groups that intersect and if 0 have been provided, only those from
// the user list
$displayGroupIds = (count($displayGroupIds) > 0) ? array_intersect($displayGroupIds, $userDisplayGroupIds) : $userDisplayGroupIds;
$this->getLog()->debug('Resolved list of display groups ['
. json_encode($displayGroupIds) . '] from provided list ['
. json_encode($originalDisplayGroupIds) . '] and user list ['
. json_encode($userDisplayGroupIds) . ']');
// If we have none, then we do not return any events.
if (count($displayGroupIds) <= 0) {
$this->getApp()->response()->body(json_encode(array('success' => 1, 'result' => [])));
return;
}
}
$events = array();
$filter = [
'futureSchedulesFrom' => $start->format('U'),
'futureSchedulesTo' => $end->format('U'),
'displayGroupIds' => $displayGroupIds
];
if ($campaignId != null) {
$filter['campaignId'] = $campaignId;
}
foreach ($this->scheduleFactory->query('FromDT', $filter) as $row) {
/* @var \Xibo\Entity\Schedule $row */
// Generate this event
try {
$scheduleEvents = $row->getEvents($start, $end);
} catch (XiboException $e) {
$this->getLog()->error('Unable to getEvents for ' . $row->eventId);
continue;
}
if (count($scheduleEvents) <= 0)
continue;
$this->getLog()->debug('EventId ' . $row->eventId . ' as events: ' . json_encode($scheduleEvents));
// Load the display groups
$row->load();
$displayGroupList = '';
if (count($row->displayGroups) >= 0) {
$array = array_map(function ($object) {
return $object->displayGroup;
}, $row->displayGroups);
$displayGroupList = implode(', ', $array);
}
// Event Permissions
$editable = $this->isEventEditable($row->displayGroups);
// Event Title
if ($row->campaignId == 0) {
// Command
$title = __('%s scheduled on %s', $row->command, $displayGroupList);
} else {
// Should we show the Layout name, or not (depending on permission)
// Make sure we only run the below code if we have to, its quite expensive
if (!$showLayoutName && !$this->getUser()->isSuperAdmin()) {
// Campaign
$campaign = $this->campaignFactory->getById($row->campaignId);
if (!$this->getUser()->checkViewable($campaign))
$row->campaign = __('Private Item');
}
$title = __('%s scheduled on %s', $row->campaign, $displayGroupList);
}
// Day diff from start date to end date
$diff = $end->diff($start)->days;
// Show all Hourly repeats on the day view
if ($row->recurrenceType == 'Minute' || ($diff > 1 && $row->recurrenceType == 'Hour')) {
$title .= __(', Repeats every %s %s', $row->recurrenceDetail, $row->recurrenceType);
}
// Event URL
$editUrl = ($this->isApi()) ? 'schedule.edit' : 'schedule.edit.form';
$url = ($editable) ? $this->urlFor($editUrl, ['id' => $row->eventId]) : '#';
$days = [];
// Event scheduled events
foreach ($scheduleEvents as $scheduleEvent) {
$this->getLog()->debug('Parsing event dates from %s and %s', $scheduleEvent->fromDt, $scheduleEvent->toDt);
// Get the day of schedule start
$fromDtDay = $this->getDate()->parse($scheduleEvent->fromDt, 'U')->format('Y-m-d');
// Handle command events which do not have a toDt
if ($row->eventTypeId == \Xibo\Entity\Schedule::$COMMAND_EVENT)
$scheduleEvent->toDt = $scheduleEvent->fromDt;
// Parse our dates into a Date object, so that we convert to local time correctly.
$fromDt = $this->getDate()->parse($scheduleEvent->fromDt, 'U');
$toDt = $this->getDate()->parse($scheduleEvent->toDt, 'U');
// Set the row from/to date to be an ISO date for display
$scheduleEvent->fromDt = $this->getDate()->getLocalDate($scheduleEvent->fromDt);
$scheduleEvent->toDt = $this->getDate()->getLocalDate($scheduleEvent->toDt);
$this->getLog()->debug('Start date is ' . $fromDt->toRssString() . ' ' . $scheduleEvent->fromDt);
$this->getLog()->debug('End date is ' . $toDt->toRssString() . ' ' . $scheduleEvent->toDt);
// For a minute/hourly repeating events show only 1 event per day
if ($row->recurrenceType == 'Minute' || ($diff > 1 && $row->recurrenceType == 'Hour')) {
if (array_key_exists($fromDtDay, $days)) {
continue;
} else {
$days[$fromDtDay] = $scheduleEvent->fromDt;
}
}
/**
* @SWG\Definition(
* definition="ScheduleCalendarData",
* @SWG\Property(
* property="id",
* type="integer",
* description="Event ID"
* ),
* @SWG\Property(
* property="title",
* type="string",
* description="Event Title"
* ),
* @SWG\Property(
* property="sameDay",
* type="integer",
* description="Does this event happen only on 1 day"
* ),
* @SWG\Property(
* property="event",
* ref="#/definitions/Schedule"
* )
* )
*/
$events[] = array(
'id' => $row->eventId,
'title' => $title,
'url' => ($editable) ? $url : null,
'start' => $fromDt->format('U') * 1000,
'end' => $toDt->format('U') * 1000,
'sameDay' => ($fromDt->day == $toDt->day && $fromDt->month == $toDt->month && $fromDt->year == $toDt->year),
'editable' => $editable,
'event' => $row,
'scheduleEvent' => $scheduleEvent,
'recurringEvent' => ($row->recurrenceType != '') ? true : false
);
}
}
$this->getApp()->response()->body(json_encode(array('success' => 1, 'result' => $events)));
}
/**
* Event List
* @param $displayGroupId
*
* @SWG\Get(
* path="/schedule/{displayGroupId}/events",
* operationId="scheduleCalendarDataDisplayGroup",
* tags={"schedule"},
* @SWG\Parameter(
* name="displayGroupId",
* description="The DisplayGroupId to return the event list for.",
* in="path",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="date",
* in="query",
* required=true,
* type="string",
* description="Date in Y-m-d H:i:s"
* ),
* @SWG\Response(
* response=200,
* description="successful response"
* )
* )
*
* @throws \Xibo\Exception\XiboException
*/
public function eventList($displayGroupId)
{
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
if (!$this->getUser()->checkViewable($displayGroup))
throw new AccessDeniedException();
// Setting for whether we show Layouts with out permissions
$showLayoutName = ($this->getConfig()->getSetting('SCHEDULE_SHOW_LAYOUT_NAME') == 1);
$date = $this->getSanitizer()->getDate('date');
// Reset the seconds
$date->second(0);
$this->getLog()->debug('Generating eventList for DisplayGroupId ' . $displayGroupId . ' on date ' . $this->getDate()->getLocalDate($date));
// Get a list of scheduled events
$events = [];
$displayGroups = [];
$layouts = [];
$campaigns = [];
// Add the displayGroupId I am filtering for to the displayGroup object
$displayGroups[$displayGroup->displayGroupId] = $displayGroup;
// Is this group a display specific group, or a standalone?
$options = [];
/** @var \Xibo\Entity\Display $display */
$display = null;
if ($displayGroup->isDisplaySpecific == 1) {
// We should lookup the displayId for this group.
$display = $this->displayFactory->getByDisplayGroupId($displayGroupId)[0];
} else {
$options['useGroupId'] = true;
$options['displayGroupId'] = $displayGroupId;
}
// Get list of events
$scheduleForXmds = $this->scheduleFactory->getForXmds(($display === null) ? null : $display->displayId, $date, $date, $options);
$this->getLog()->debug(count($scheduleForXmds) . ' events returned for displaygroup and date');
foreach ($scheduleForXmds as $event) {
// Ignore command events
if ($event['eventTypeId'] == \Xibo\Entity\Schedule::$COMMAND_EVENT)
continue;
// Ignore events that have a campaignId, but no layoutId (empty Campaigns)
if ($event['layoutId'] == 0 && $event['campaignId'] != 0)
continue;
// Assess schedules
$schedule = $this->scheduleFactory->createEmpty()->hydrate($event, ['intProperties' => ['isPriority', 'syncTimezone', 'displayOrder', 'fromDt', 'toDt']]);
$schedule->load();
$this->getLog()->debug('EventId ' . $schedule->eventId . ' exists in the schedule window, checking its instances for activity');
// Get scheduled events based on recurrence
try {
$scheduleEvents = $schedule->getEvents($date, $date);
} catch (XiboException $e) {
$this->getLog()->error('Unable to getEvents for ' . $schedule->eventId);
continue;
}
// If this event is active, collect extra information and add to the events list
if (count($scheduleEvents) > 0) {
// Add the link to the schedule
if (!$this->isApi())
$schedule->link = $this->getApp()->urlFor('schedule.edit.form', ['id' => $schedule->eventId]);
// Add the Layout
$layoutId = $event['layoutId'];
$this->getLog()->debug('Adding this events layoutId [' . $layoutId . '] to list');
if ($layoutId != 0 && !array_key_exists($layoutId, $layouts)) {
// Look up the layout details
$layout = $this->layoutFactory->getById($layoutId);
// Add the link to the layout
if (!$this->isApi())
$layout->link = $this->getApp()->urlFor('layout.designer', ['id' => $layout->layoutId]);
if ($showLayoutName || $this->getUser()->checkViewable($layout))
$layouts[$layoutId] = $layout;
else {
$layouts[$layoutId] = [
'layout' => __('Private Item')
];
}
// Add the Campaign
$layout->campaigns = $this->campaignFactory->getByLayoutId($layout->layoutId);
if (count($layout->campaigns) > 0) {
// Add to the campaigns array
foreach ($layout->campaigns as $campaign) {
if (!array_key_exists($campaign->campaignId, $campaigns)) {
$campaigns[$campaign->campaignId] = $campaign;
}
}
}
}
$event['campaign'] = is_object($layouts[$layoutId]) ? $layouts[$layoutId]->layout : $layouts[$layoutId];
// Display Group details
$this->getLog()->debug('Adding this events displayGroupIds to list');
$schedule->excludeProperty('displayGroups');
foreach ($schedule->displayGroups as $scheduleDisplayGroup) {
if (!array_key_exists($scheduleDisplayGroup->displayGroupId, $displayGroups)) {
$displayGroups[$scheduleDisplayGroup->displayGroupId] = $scheduleDisplayGroup;
}
}
// Determine the intermediate display groups
$this->getLog()->debug('Adding this events intermediateDisplayGroupIds to list');
$schedule->intermediateDisplayGroupIds = $this->calculateIntermediates($display, $displayGroup, $event['displayGroupId']);
foreach ($schedule->intermediateDisplayGroupIds as $intermediate) {
if (!array_key_exists($intermediate, $displayGroups)) {
$displayGroups[$intermediate] = $this->displayGroupFactory->getById($intermediate);
}
}
$this->getLog()->debug('Adding scheduled events: ' . json_encode($scheduleEvents));
// We will never save this and we need the eventId on the agenda view
$eventId = $schedule->eventId;
foreach ($scheduleEvents as $scheduleEvent) {
$schedule = clone $schedule;
$schedule->eventId = $eventId;
$schedule->fromDt = $scheduleEvent->fromDt;
$schedule->toDt = $scheduleEvent->toDt;
$schedule->layoutId = intval($event['layoutId']);
$schedule->displayGroupId = intval($event['displayGroupId']);
$events[] = $schedule;
}
} else {
$this->getLog()->debug('No activity inside window');
}
}
$this->getState()->hydrate([
'data' => [
'events' => $events,
'displayGroups' => $displayGroups,
'layouts' => $layouts,
'campaigns' => $campaigns
]
]);
}
/**
* @param \Xibo\Entity\Display $display
* @param \Xibo\Entity\DisplayGroup $displayGroup
* @param int $eventDisplayGroupId
* @return array
*/
private function calculateIntermediates($display, $displayGroup, $eventDisplayGroupId)
{
$this->getLog()->debug('Calculating intermediates for events displayGroupId ' . $eventDisplayGroupId . ' viewing displayGroupId ' . $displayGroup->displayGroupId);
$intermediates = [];
$eventDisplayGroup = $this->displayGroupFactory->getById($eventDisplayGroupId);
// Is the event scheduled directly on the displayGroup in question?
if ($displayGroup->displayGroupId == $eventDisplayGroupId)
return $intermediates;
// Is the event scheduled directly on the display in question?
if ($eventDisplayGroup->isDisplaySpecific == 1)
return $intermediates;
$this->getLog()->debug('Event isnt directly scheduled to a display or to the current displaygroup ');
// There are nested groups involved, so we need to trace the relationship tree.
if ($display === null) {
$this->getLog()->debug('We are looking at a DisplayGroup');
// We are on a group.
// Get the relationship tree for this display group
$tree = $this->displayGroupFactory->getRelationShipTree($displayGroup->displayGroupId);
foreach ($tree as $branch) {
$this->getLog()->debug('Branch found: ' . $branch->displayGroup . ' [' . $branch->displayGroupId . '], ' . $branch->depth . '-' . $branch->level);
if ($branch->depth < 0 && $branch->displayGroupId != $eventDisplayGroup->displayGroupId) {
$intermediates[] = $branch->displayGroupId;
}
}
} else {
// We are on a display.
$this->getLog()->debug('We are looking at a Display');
// We will need to get all of this displays groups and then add only those ones that give us an eventual
// match on the events display group (complicated or what!)
$display->load();
foreach ($display->displayGroups as $displayDisplayGroup) {
// Ignore the display specific group
if ($displayDisplayGroup->isDisplaySpecific == 1)
continue;
// Get the relationship tree for this display group
$tree = $this->displayGroupFactory->getRelationShipTree($displayDisplayGroup->displayGroupId);
$found = false;
$possibleIntermediates = [];
foreach ($tree as $branch) {
$this->getLog()->debug('Branch found: ' . $branch->displayGroup . ' [' . $branch->displayGroupId . '], ' . $branch->depth . '-' . $branch->level);
if ($branch->displayGroupId != $eventDisplayGroup->displayGroupId) {
$possibleIntermediates[] = $branch->displayGroupId;
}
if ($branch->displayGroupId != $eventDisplayGroup->displayGroupId && count($possibleIntermediates) > 0)
$found = true;
}
if ($found) {
$this->getLog()->debug('We have found intermediates ' . json_encode($possibleIntermediates) . ' for display when looking at displayGroupId ' . $displayDisplayGroup->displayGroupId);
$intermediates = array_merge($intermediates, $possibleIntermediates);
}
}
}
$this->getLog()->debug('Returning intermediates: ' . json_encode($intermediates));
return $intermediates;
}
/**
* Shows a form to add an event
*/
function addForm()
{
// Get the display groups added to the session (if there are some)
$displayGroupIds = $this->session->get('displayGroupIds');
$displayGroups = [];
if (count($displayGroupIds) > 0) {
foreach ($displayGroupIds as $displayGroupId) {
if ($displayGroupId == -1)
continue;
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
if ($this->getUser()->checkViewable($displayGroup))
$displayGroups[] = $displayGroup;
}
}
// get the default longitude and latitude from CMS options
$defaultLat = (float)$this->getConfig()->getSetting('DEFAULT_LAT');
$defaultLong = (float)$this->getConfig()->getSetting('DEFAULT_LONG');
$this->getState()->template = 'schedule-form-add';
$this->getState()->setData([
'commands' => $this->commandFactory->query(),
'dayParts' => $this->dayPartFactory->allWithSystem(),
'displayGroupIds' => $displayGroupIds,
'displayGroups' => $displayGroups,
'help' => $this->getHelp()->link('Schedule', 'Add'),
'reminders' => [],
'defaultLat' => $defaultLat,
'defaultLong' => $defaultLong
]);
}
/**
* Model to use for supplying key/value pairs to arrays
* @SWG\Definition(
* definition="ScheduleReminderArray",
* @SWG\Property(
* property="reminder_value",
* type="integer"
* ),
* @SWG\Property(
* property="reminder_type",
* type="integer"
* ),
* @SWG\Property(
* property="reminder_option",
* type="integer"
* ),
* @SWG\Property(
* property="reminder_isEmailHidden",
* type="integer"
* )
* )
*/
/**
* Add Event
* @SWG\Post(
* path="/schedule",
* operationId="scheduleAdd",
* tags={"schedule"},
* summary="Add Schedule Event",
* description="Add a new scheduled event for a Campaign/Layout to be shown on a Display Group/Display.",
* @SWG\Parameter(
* name="eventTypeId",
* in="formData",
* description="The Event Type Id to use for this Event. 1=Campaign, 2=Command, 3=Overlay",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="campaignId",
* in="formData",
* description="The Campaign ID to use for this Event. If a Layout is needed then the Campaign specific ID for that Layout should be used.",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="commandId",
* in="formData",
* description="The Command ID to use for this Event.",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="displayOrder",
* in="formData",
* description="The display order for this event. ",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="isPriority",
* in="formData",
* description="An integer indicating the priority of this event. Normal events have a priority of 0.",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="displayGroupIds",
* in="formData",
* description="The Display Group IDs for this event. Display specific Group IDs should be used to schedule on single displays.",
* type="array",
* required=true,
* @SWG\Items(type="integer")
* ),
* @SWG\Parameter(
* name="dayPartId",
* in="formData",
* description="The Day Part for this event. Overrides supported are 0(custom) and 1(always). Defaulted to 0.",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="syncTimezone",
* in="formData",
* description="Should this schedule be synced to the resulting Display timezone?",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="fromDt",
* in="formData",
* description="The from date for this event.",
* type="string",
* format="date-time",
* required=true
* ),
* @SWG\Parameter(
* name="toDt",
* in="formData",
* description="The to date for this event.",
* type="string",
* format="date-time",
* required=false
* ),
* @SWG\Parameter(
* name="recurrenceType",
* in="formData",
* description="The type of recurrence to apply to this event.",
* type="string",
* required=false,
* enum={"", "Minute", "Hour", "Day", "Week", "Month", "Year"}
* ),
* @SWG\Parameter(
* name="recurrenceDetail",
* in="formData",
* description="The interval for the recurrence.",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="recurrenceRange",
* in="formData",
* description="The end date for this events recurrence.",
* type="string",
* format="date-time",
* required=false
* ),
* @SWG\Parameter(
* name="recurrenceRepeatsOn",
* in="formData",
* description="The days of the week that this event repeats - weekly only",
* type="string",
* format="array",
* required=false,
* @SWG\Items(type="integer")
* ),
* @SWG\Parameter(
* name="scheduleReminders",
* in="formData",
* description="Array of Reminders for this event",
* type="array",
* required=false,
* @SWG\Items(
* ref="#/definitions/ScheduleReminderArray"
* )
* ),
* @SWG\Parameter(
* name="isGeoAware",
* in="formData",
* description="Flag (0-1), whether this event is using Geo Location",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="geoLocation",
* in="formData",
* description="Array of comma separated strings each with comma separated pair of coordinates",
* type="array",
* required=false,
* @SWG\Items(type="string")
* ),
* @SWG\Response(
* response=201,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/Schedule"),
* @SWG\Header(
* header="Location",
* description="Location of the new record",
* type="string"
* )
* )
* )
*
* @throws XiboException
*/
public function add()
{
$this->getLog()->debug('Add Schedule');
$embed = ($this->getSanitizer()->getString('embed') != null) ? explode(',', $this->getSanitizer()->getString('embed')) : [];
// Get the custom day part to use as a default day part
$customDayPart = $this->dayPartFactory->getCustomDayPart();
$schedule = $this->scheduleFactory->createEmpty();
$schedule->userId = $this->getUser()->userId;
$schedule->eventTypeId = $this->getSanitizer()->getInt('eventTypeId');
$schedule->campaignId = $this->getSanitizer()->getInt('campaignId');
$schedule->commandId = $this->getSanitizer()->getInt('commandId');
$schedule->displayOrder = $this->getSanitizer()->getInt('displayOrder', 0);
$schedule->isPriority = $this->getSanitizer()->getInt('isPriority', 0);
$schedule->dayPartId = $this->getSanitizer()->getInt('dayPartId', $customDayPart->dayPartId);
$schedule->shareOfVoice = ($schedule->eventTypeId == 4) ? $this->getSanitizer()->getInt('shareOfVoice') : null;
$schedule->isGeoAware = $this->getSanitizer()->getCheckbox('isGeoAware');
if ($this->isApi()) {
if ($schedule->isGeoAware === 1) {
// get string array from API
$coordinates = $this->getSanitizer()->getStringArray('geoLocation');
// generate geo json and assign to Schedule
$schedule->geoLocation = $this->createGeoJson($coordinates);
}
} else {
// if we are not using API, then valid GeoJSON is created in the front end.
$schedule->geoLocation = $this->getSanitizer()->getString('geoLocation');
}
// Workaround for cases where we're supplied 0 as the dayPartId (legacy custom dayPart)
if ($schedule->dayPartId === 0) {
$schedule->dayPartId = $customDayPart->dayPartId;
}
$schedule->syncTimezone = $this->getSanitizer()->getCheckbox('syncTimezone', 0);
$schedule->syncEvent = $this->getSanitizer()->getCheckbox('syncEvent', 0);
$schedule->recurrenceType = $this->getSanitizer()->getString('recurrenceType');
$schedule->recurrenceDetail = $this->getSanitizer()->getInt('recurrenceDetail');
$recurrenceRepeatsOn = $this->getSanitizer()->getIntArray('recurrenceRepeatsOn');
$schedule->recurrenceRepeatsOn = (empty($recurrenceRepeatsOn)) ? null : implode(',', $recurrenceRepeatsOn);
$schedule->recurrenceMonthlyRepeatsOn = $this->getSanitizer()->getInt('recurrenceMonthlyRepeatsOn');
foreach ($this->getSanitizer()->getIntArray('displayGroupIds') as $displayGroupId) {
$schedule->assignDisplayGroup($this->displayGroupFactory->getById($displayGroupId));
}
if (!$schedule->isAlwaysDayPart()) {
// Handle the dates
$fromDt = $this->getSanitizer()->getDate('fromDt');
$toDt = $this->getSanitizer()->getDate('toDt');
$recurrenceRange = $this->getSanitizer()->getDate('recurrenceRange');
if ($fromDt === null)
throw new \InvalidArgumentException(__('Please enter a from date'));
$this->getLog()->debug('Times received are: FromDt=' . $this->getDate()->getLocalDate($fromDt) . '. ToDt=' . $this->getDate()->getLocalDate($toDt) . '. recurrenceRange=' . $this->getDate()->getLocalDate($recurrenceRange));
if (!$schedule->isCustomDayPart() && !$schedule->isAlwaysDayPart()) {
// Daypart selected
// expect only a start date (no time)
$schedule->fromDt = $fromDt->startOfDay()->format('U');
$schedule->toDt = null;
if ($recurrenceRange != null)
$schedule->recurrenceRange = $recurrenceRange->format('U');
} else if (!($this->isApi() || str_contains($this->getConfig()->getSetting('DATE_FORMAT'), 's'))) {
// In some circumstances we want to trim the seconds from the provided dates.
// this happens when the date format provided does not include seconds and when the add
// event comes from the UI.
$this->getLog()->debug('Date format does not include seconds, removing them');
$schedule->fromDt = $fromDt->setTime($fromDt->hour, $fromDt->minute, 0)->format('U');
if ($toDt !== null)
$schedule->toDt = $toDt->setTime($toDt->hour, $toDt->minute, 0)->format('U');
if ($recurrenceRange != null)
$schedule->recurrenceRange = $recurrenceRange->setTime($recurrenceRange->hour, $recurrenceRange->minute, 0)->format('U');
} else {
$schedule->fromDt = $fromDt->format('U');
if ($toDt !== null)
$schedule->toDt = $toDt->format('U');
if ($recurrenceRange != null)
$schedule->recurrenceRange = $recurrenceRange->format('U');
}
$this->getLog()->debug('Processed times are: FromDt=' . $this->getDate()->getLocalDate($fromDt) . '. ToDt=' . $this->getDate()->getLocalDate($toDt) . '. recurrenceRange=' . $this->getDate()->getLocalDate($recurrenceRange));
}
// Ready to do the add
$schedule->setDisplayFactory($this->displayFactory);
$schedule->save();
$this->getLog()->debug('Add Schedule Reminder');
// API Request
$rows = [];
if ($this->isApi()) {
$reminders = $this->getSanitizer()->getStringArray('scheduleReminders');
foreach ($reminders as $i => $reminder) {
$rows[$i]['reminder_value'] = (int) $reminder['reminder_value'];
$rows[$i]['reminder_type'] = (int) $reminder['reminder_type'];
$rows[$i]['reminder_option'] = (int) $reminder['reminder_option'];
$rows[$i]['reminder_isEmailHidden'] = (int) $reminder['reminder_isEmailHidden'];
}
} else {
for ($i=0; $i < count($this->getSanitizer()->getIntArray('reminder_value')); $i++) {
$rows[$i]['reminder_value'] = $this->getSanitizer()->getIntArray('reminder_value')[$i];
$rows[$i]['reminder_type'] = $this->getSanitizer()->getIntArray('reminder_type')[$i];
$rows[$i]['reminder_option'] = $this->getSanitizer()->getIntArray('reminder_option')[$i];
$rows[$i]['reminder_isEmailHidden'] = $this->getSanitizer()->getIntArray('reminder_isEmailHidden')[$i];
}
}
// Save new reminders
foreach ($rows as $reminder) {
// Do not add reminder if empty value provided for number of minute/hour
if ($reminder['reminder_value'] == 0) {
continue;
}
$scheduleReminder = $this->scheduleReminderFactory->createEmpty();
$scheduleReminder->scheduleReminderId = null;
$scheduleReminder->eventId = $schedule->eventId;
$scheduleReminder->value = $reminder['reminder_value'];
$scheduleReminder->type = $reminder['reminder_type'];
$scheduleReminder->option = $reminder['reminder_option'];
$scheduleReminder->isEmail = $reminder['reminder_isEmailHidden'];
$this->saveReminder($schedule, $scheduleReminder);
}
// We can get schedule reminders in an array
if ($this->isApi()) {
$schedule = $this->scheduleFactory->getById($schedule->eventId);
$schedule->load([
'loadScheduleReminders' => in_array('scheduleReminders', $embed),
]);
}
// Return
$this->getState()->hydrate([
'httpStatus' => 201,
'message' => __('Added Event'),
'id' => $schedule->eventId,
'data' => $schedule
]);
}
/**
* Shows a form to edit an event
* @param int $eventId
*/
function editForm($eventId)
{
// Recurring event start/end
$eventStart = $this->getSanitizer()->getInt('eventStart', 1000) / 1000;
$eventEnd = $this->getSanitizer()->getInt('eventEnd', 1000) / 1000;
$schedule = $this->scheduleFactory->getById($eventId);
$schedule->load();
if (!$this->isEventEditable($schedule->displayGroups))
throw new AccessDeniedException();
// Fix the event dates for display
if ($schedule->isAlwaysDayPart()) {
$schedule->fromDt = '';
$schedule->toDt = '';
} else {
$schedule->fromDt = $this->getDate()->getLocalDate($schedule->fromDt);
$schedule->toDt = $this->getDate()->getLocalDate($schedule->toDt);
}
if ($schedule->recurrenceRange != null)
$schedule->recurrenceRange = $this->getDate()->getLocalDate($schedule->recurrenceRange);
// Get all reminders
$scheduleReminders = $this->scheduleReminderFactory->query(null, ['eventId' => $eventId]);
// get the default longitude and latitude from CMS options
$defaultLat = (float)$this->getConfig()->getSetting('DEFAULT_LAT');
$defaultLong = (float)$this->getConfig()->getSetting('DEFAULT_LONG');
$this->getState()->template = 'schedule-form-edit';
$this->getState()->setData([
'event' => $schedule,
'campaigns' => $this->campaignFactory->query(null, ['isLayoutSpecific' => -1, 'retired' => 0, 'includeCampaignId' => $schedule->campaignId]),
'commands' => $this->commandFactory->query(),
'dayParts' => $this->dayPartFactory->allWithSystem(),
'displayGroups' => $schedule->displayGroups,
'campaign' => ($schedule->campaignId != '') ? $this->campaignFactory->getById($schedule->campaignId) : null,
'displayGroupIds' => array_map(function($element) {
return $element->displayGroupId;
}, $schedule->displayGroups),
'help' => $this->getHelp()->link('Schedule', 'Edit'),
'reminders' => $scheduleReminders,
'defaultLat' => $defaultLat,
'defaultLong' => $defaultLong,
'recurringEvent' => ($schedule->recurrenceType != '') ? true : false,
'eventStart' => $eventStart,
'eventEnd' => $eventEnd,
]);
}
/**
* Shows the Delete a Recurring Event form
* @param int $eventId
*/
function deleteRecurrenceForm($eventId)
{
// Recurring event start/end
$eventStart = $this->getSanitizer()->getInt('eventStart', 1000);
$eventEnd = $this->getSanitizer()->getInt('eventEnd', 1000);
$schedule = $this->scheduleFactory->getById($eventId);
$schedule->load();
if (!$this->isEventEditable($schedule->displayGroups)) {
throw new AccessDeniedException();
}
$this->getState()->template = 'schedule-recurrence-form-delete';
$this->getState()->setData([
'event' => $schedule,
'help' => $this->getHelp()->link('Schedule', 'Delete'),
'eventStart' => $eventStart,
'eventEnd' => $eventEnd,
]);
}
/**
* Deletes a recurring Event from all displays
* @param int $eventId
*
* @SWG\Delete(
* path="/schedulerecurrence/{eventId}",
* operationId="schedulerecurrenceDelete",
* tags={"schedule"},
* summary="Delete a Recurring Event",
* description="Delete a Recurring Event of a Scheduled Event",
* @SWG\Parameter(
* name="eventId",
* in="path",
* description="The Scheduled Event ID",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*/
public function deleteRecurrence($eventId)
{
$schedule = $this->scheduleFactory->getById($eventId);
$schedule->load();
if (!$this->isEventEditable($schedule->displayGroups))
throw new AccessDeniedException();
// Recurring event start/end
$eventStart = $this->getSanitizer()->getInt('eventStart', 1000);
$eventEnd = $this->getSanitizer()->getInt('eventEnd', 1000);
$scheduleExclusion = $this->scheduleExclusionFactory->create($schedule->eventId, $eventStart, $eventEnd);
$this->getLog()->debug('Create a schedule exclusion record');
$scheduleExclusion->save();
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => __('Deleted Event')
]);
}
/**
* Edits an event
* @param int $eventId
*
* @SWG\Put(
* path="/schedule/{eventId}",
* operationId="scheduleEdit",
* tags={"schedule"},
* summary="Edit Schedule Event",
* description="Edit a scheduled event for a Campaign/Layout to be shown on a Display Group/Display.",
* @SWG\Parameter(
* name="eventId",
* in="path",
* description="The Scheduled Event ID",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="eventTypeId",
* in="formData",
* description="The Event Type Id to use for this Event. 1=Campaign, 2=Command, 3=Overlay",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="campaignId",
* in="formData",
* description="The Campaign ID to use for this Event. If a Layout is needed then the Campaign specific ID for that Layout should be used.",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="commandId",
* in="formData",
* description="The Command ID to use for this Event.",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="displayOrder",
* in="formData",
* description="The display order for this event. ",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="isPriority",
* in="formData",
* description="An integer indicating the priority of this event. Normal events have a priority of 0.",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="displayGroupIds",
* in="formData",
* description="The Display Group IDs for this event. Display specific Group IDs should be used to schedule on single displays.",
* type="array",
* required=true,
* @SWG\Items(type="integer")
* ),
* @SWG\Parameter(
* name="dayPartId",
* in="formData",
* description="The Day Part for this event. Overrides supported are 0(custom) and 1(always). Defaulted to 0.",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="syncTimezone",
* in="formData",
* description="Should this schedule be synced to the resulting Display timezone?",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="fromDt",
* in="formData",
* description="The from date for this event.",
* type="string",
* format="date-time",
* required=true
* ),
* @SWG\Parameter(
* name="toDt",
* in="formData",
* description="The to date for this event.",
* type="string",
* format="date-time",
* required=false
* ),
* @SWG\Parameter(
* name="recurrenceType",
* in="formData",
* description="The type of recurrence to apply to this event.",
* type="string",
* required=false,
* enum={"", "Minute", "Hour", "Day", "Week", "Month", "Year"}
* ),
* @SWG\Parameter(
* name="recurrenceDetail",
* in="formData",
* description="The interval for the recurrence.",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="recurrenceRange",
* in="formData",
* description="The end date for this events recurrence.",
* type="string",
* format="date-time",
* required=false
* ),
* @SWG\Parameter(
* name="recurrenceRepeatsOn",
* in="formData",
* description="The days of the week that this event repeats - weekly only",
* type="string",
* format="array",
* required=false,
* @SWG\Items(type="integer")
* ),
* @SWG\Parameter(
* name="scheduleReminders",
* in="formData",
* description="Array of Reminders for this event",
* type="array",
* required=false,
* @SWG\Items(
* ref="#/definitions/ScheduleReminderArray"
* )
* ),
* @SWG\Parameter(
* name="isGeoAware",
* in="formData",
* description="Flag (0-1), whether this event is using Geo Location",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="geoLocation",
* in="formData",
* description="Array of comma separated strings each with comma separated pair of coordinates",
* type="array",
* required=false,
* @SWG\Items(type="string")
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/Schedule")
* )
* )
*
* @throws XiboException
*/
public function edit($eventId)
{
$embed = ($this->getSanitizer()->getString('embed') != null) ? explode(',', $this->getSanitizer()->getString('embed')) : [];
$schedule = $this->scheduleFactory->getById($eventId);
$schedule->load([
'loadScheduleReminders' => in_array('scheduleReminders', $embed),
]);
if (!$this->isEventEditable($schedule->displayGroups)) {
throw new AccessDeniedException();
}
$schedule->eventTypeId = $this->getSanitizer()->getInt('eventTypeId');
$schedule->campaignId = $this->getSanitizer()->getInt('campaignId');
$schedule->commandId = $this->getSanitizer()->getInt('commandId');
$schedule->displayOrder = $this->getSanitizer()->getInt('displayOrder', $schedule->displayOrder);
$schedule->isPriority = $this->getSanitizer()->getInt('isPriority', $schedule->isPriority);
$schedule->dayPartId = $this->getSanitizer()->getInt('dayPartId', $schedule->dayPartId);
$schedule->syncTimezone = $this->getSanitizer()->getCheckbox('syncTimezone', 0);
$schedule->syncEvent = $this->getSanitizer()->getCheckbox('syncEvent', 0);
$schedule->recurrenceType = $this->getSanitizer()->getString('recurrenceType');
$schedule->recurrenceDetail = $this->getSanitizer()->getInt('recurrenceDetail');
$recurrenceRepeatsOn = $this->getSanitizer()->getIntArray('recurrenceRepeatsOn');
$schedule->recurrenceRepeatsOn = (empty($recurrenceRepeatsOn)) ? null : implode(',', $recurrenceRepeatsOn);
$schedule->recurrenceMonthlyRepeatsOn = $this->getSanitizer()->getInt('recurrenceMonthlyRepeatsOn');
$schedule->displayGroups = [];
$schedule->shareOfVoice = ($schedule->eventTypeId == 4) ? $this->getSanitizer()->getInt('shareOfVoice') : null;
$schedule->isGeoAware = $this->getSanitizer()->getCheckbox('isGeoAware');
if ($this->isApi()) {
if ($schedule->isGeoAware === 1) {
// get string array from API
$coordinates = $this->getSanitizer()->getStringArray('geoLocation');
// generate geo json and assign to Schedule
$schedule->geoLocation = $this->createGeoJson($coordinates);
}
} else {
// if we are not using API, then valid GeoJSON is created in the front end.
$schedule->geoLocation = $this->getSanitizer()->getString('geoLocation');
}
// if we are editing Layout/Campaign event that was set with Always daypart and change it to Command event type
// the daypartId will remain as always, which will then cause the event to "disappear" from calendar
// https://github.com/xibosignage/xibo/issues/1982
if ($schedule->eventTypeId == \Xibo\Entity\Schedule::$COMMAND_EVENT) {
$schedule->dayPartId = $this->dayPartFactory->getCustomDayPart()->dayPartId;
}
foreach ($this->getSanitizer()->getIntArray('displayGroupIds') as $displayGroupId) {
$schedule->assignDisplayGroup($this->displayGroupFactory->getById($displayGroupId));
}
if (!$schedule->isAlwaysDayPart()) {
// Handle the dates
$fromDt = $this->getSanitizer()->getDate('fromDt');
$toDt = $this->getSanitizer()->getDate('toDt');
$recurrenceRange = $this->getSanitizer()->getDate('recurrenceRange');
if ($fromDt === null)
throw new \InvalidArgumentException(__('Please enter a from date'));
$this->getLog()->debug('Times received are: FromDt=' . $this->getDate()->getLocalDate($fromDt) . '. ToDt=' . $this->getDate()->getLocalDate($toDt) . '. recurrenceRange=' . $this->getDate()->getLocalDate($recurrenceRange));
if (!$schedule->isCustomDayPart() && !$schedule->isAlwaysDayPart()) {
// Daypart selected
// expect only a start date (no time)
$schedule->fromDt = $fromDt->startOfDay()->format('U');
$schedule->toDt = null;
$schedule->recurrenceRange = ($recurrenceRange === null) ? null : $recurrenceRange->format('U');
} else if (!($this->isApi() || str_contains($this->getConfig()->getSetting('DATE_FORMAT'), 's'))) {
// In some circumstances we want to trim the seconds from the provided dates.
// this happens when the date format provided does not include seconds and when the add
// event comes from the UI.
$this->getLog()->debug('Date format does not include seconds, removing them');
$schedule->fromDt = $fromDt->setTimeFromTimeString($fromDt->hour . ':' . $fromDt->minute . ':00')->format('U');
// If we have a toDt
if ($toDt !== null)
$schedule->toDt = $toDt->setTimeFromTimeString($toDt->hour . ':' . $toDt->minute . ':00')->format('U');
$schedule->recurrenceRange = ($recurrenceRange === null) ? null :
$recurrenceRange->setTimeFromTimeString($recurrenceRange->hour . ':' . $recurrenceRange->minute . ':00')->format('U');
} else {
$schedule->fromDt = $fromDt->format('U');
if ($toDt !== null)
$schedule->toDt = $toDt->format('U');
$schedule->recurrenceRange = ($recurrenceRange === null) ? null : $recurrenceRange->format('U');
}
$this->getLog()->debug('Processed start is: FromDt=' . $fromDt->toRssString());
} else {
// This is an always day part, which cannot be recurring, make sure we clear the recurring type if it has been set
$schedule->recurrenceType = null;
}
// Ready to do the add
$schedule->setDisplayFactory($this->displayFactory);
$schedule->save();
// Get form reminders
$rows = [];
for ($i=0; $i < count($this->getSanitizer()->getIntArray('reminder_value')); $i++) {
$entry = [];
if ($this->getSanitizer()->getIntArray('reminder_scheduleReminderId')[$i] == null ) {
continue;
}
$entry['reminder_scheduleReminderId'] = $this->getSanitizer()->getIntArray('reminder_scheduleReminderId')[$i];
$entry['reminder_value'] = $this->getSanitizer()->getIntArray('reminder_value')[$i];
$entry['reminder_type'] = $this->getSanitizer()->getIntArray('reminder_type')[$i];
$entry['reminder_option'] = $this->getSanitizer()->getIntArray('reminder_option')[$i];
$entry['reminder_isEmail'] = $this->getSanitizer()->getIntArray('reminder_isEmailHidden')[$i];
$rows[$this->getSanitizer()->getIntArray('reminder_scheduleReminderId')[$i]] = $entry;
}
$formReminders = $rows;
// Compare to delete
// Get existing db reminders
$scheduleReminders = $this->scheduleReminderFactory->query(null, ['eventId' => $eventId]);
$rows = [];
foreach ($scheduleReminders as $reminder) {
$entry = [];
$entry['reminder_scheduleReminderId'] = $reminder->scheduleReminderId;
$entry['reminder_value'] = $reminder->value;
$entry['reminder_type'] = $reminder->type;
$entry['reminder_option'] = $reminder->option;
$entry['reminder_isEmail'] = $reminder->isEmail;
$rows[$reminder->scheduleReminderId] = $entry;
}
$dbReminders = $rows;
$deleteReminders = $schedule->compareMultidimensionalArrays($dbReminders, $formReminders, false);
foreach ($deleteReminders as $reminder) {
$reminder = $this->scheduleReminderFactory->getById($reminder['reminder_scheduleReminderId']);
$reminder->delete();
}
// API Request
$rows = [];
if ($this->isApi()) {
$reminders = $this->getSanitizer()->getStringArray('scheduleReminders');
foreach ($reminders as $i => $reminder) {
$rows[$i]['reminder_scheduleReminderId'] = isset($reminder['reminder_scheduleReminderId']) ? (int) $reminder['reminder_scheduleReminderId'] : null;
$rows[$i]['reminder_value'] = (int) $reminder['reminder_value'];
$rows[$i]['reminder_type'] = (int) $reminder['reminder_type'];
$rows[$i]['reminder_option'] = (int) $reminder['reminder_option'];
$rows[$i]['reminder_isEmailHidden'] = (int) $reminder['reminder_isEmailHidden'];
}
} else {
for ($i=0; $i < count($this->getSanitizer()->getIntArray('reminder_value')); $i++) {
$rows[$i]['reminder_scheduleReminderId'] = $this->getSanitizer()->getIntArray('reminder_scheduleReminderId')[$i];
$rows[$i]['reminder_value'] = $this->getSanitizer()->getIntArray('reminder_value')[$i];
$rows[$i]['reminder_type'] = $this->getSanitizer()->getIntArray('reminder_type')[$i];
$rows[$i]['reminder_option'] = $this->getSanitizer()->getIntArray('reminder_option')[$i];
$rows[$i]['reminder_isEmailHidden'] = $this->getSanitizer()->getIntArray('reminder_isEmailHidden')[$i];
}
}
// Save rest of the reminders
foreach ($rows as $reminder) {
// Do not add reminder if empty value provided for number of minute/hour
if ($reminder['reminder_value'] == 0) {
continue;
}
$scheduleReminderId = isset($reminder['reminder_scheduleReminderId']) ? $reminder['reminder_scheduleReminderId'] : null;
try {
$scheduleReminder = $this->scheduleReminderFactory->getById($scheduleReminderId);
$scheduleReminder->load();
} catch (NotFoundException $e) {
$scheduleReminder = $this->scheduleReminderFactory->createEmpty();
$scheduleReminder->scheduleReminderId = null;
$scheduleReminder->eventId = $eventId;
}
$scheduleReminder->value = $reminder['reminder_value'];
$scheduleReminder->type = $reminder['reminder_type'];
$scheduleReminder->option = $reminder['reminder_option'];
$scheduleReminder->isEmail = $reminder['reminder_isEmailHidden'];
$this->saveReminder($schedule, $scheduleReminder);
}
// If this is a recurring event delete all schedule exclusions
if ($schedule->recurrenceType != '') {
// Delete schedule exclusions
$scheduleExclusions = $this->scheduleExclusionFactory->query(null, ['eventId' => $schedule->eventId]);
foreach ($scheduleExclusions as $exclusion) {
$exclusion->delete();
}
}
// Return
$this->getState()->hydrate([
'message' => __('Edited Event'),
'id' => $schedule->eventId,
'data' => $schedule
]);
}
/**
* Shows the DeleteEvent form
* @param int $eventId
*/
function deleteForm($eventId)
{
$schedule = $this->scheduleFactory->getById($eventId);
$schedule->load();
if (!$this->isEventEditable($schedule->displayGroups))
throw new AccessDeniedException();
$this->getState()->template = 'schedule-form-delete';
$this->getState()->setData([
'event' => $schedule,
'help' => $this->getHelp()->link('Schedule', 'Delete')
]);
}
/**
* Deletes an Event from all displays
* @param int $eventId
*
* @SWG\Delete(
* path="/schedule/{eventId}",
* operationId="scheduleDelete",
* tags={"schedule"},
* summary="Delete Event",
* description="Delete a Scheduled Event",
* @SWG\Parameter(
* name="eventId",
* in="path",
* description="The Scheduled Event ID",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*/
public function delete($eventId)
{
$schedule = $this->scheduleFactory->getById($eventId);
$schedule->load();
if (!$this->isEventEditable($schedule->displayGroups))
throw new AccessDeniedException();
$schedule
->setDisplayFactory($this->displayFactory)
->delete();
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => __('Deleted Event')
]);
}
/**
* Is this event editable?
* @param array[\Xibo\Entity\DisplayGroup] $displayGroups
* @return bool
*/
private function isEventEditable($displayGroups)
{
$scheduleWithView = ($this->getConfig()->getSetting('SCHEDULE_WITH_VIEW_PERMISSION') == 1);
// Work out if this event is editable or not. To do this we need to compare the permissions
// of each display group this event is associated with
foreach ($displayGroups as $displayGroup) {
/* @var \Xibo\Entity\DisplayGroup $\Xibo\Entity\DisplayGroup */
// Can schedule with view, but no view permissions
if ($scheduleWithView && !$this->getUser()->checkViewable($displayGroup))
return false;
// Can't schedule with view, but no edit permissions
if (!$scheduleWithView && !$this->getUser()->checkEditable($displayGroup))
return false;
}
return true;
}
/**
* Schedule Now Form
* @param string $from The object that called this form
* @param int $id The Id
*
* @throws NotFoundException
*/
public function scheduleNowForm($from, $id)
{
$groups = array();
$displays = array();
$scheduleWithView = ($this->getConfig()->getSetting('SCHEDULE_WITH_VIEW_PERMISSION') == 1);
foreach ($this->displayGroupFactory->query(null, ['isDisplaySpecific' => -1]) as $displayGroup) {
/* @var \Xibo\Entity\DisplayGroup $\Xibo\Entity\DisplayGroup */
// Can't schedule with view, but no edit permissions
if (!$scheduleWithView && !$this->getUser()->checkEditable($displayGroup))
continue;
if ($displayGroup->isDisplaySpecific == 1) {
$displays[] = $displayGroup;
} else {
$groups[] = $displayGroup;
}
}
$this->getState()->template = 'schedule-form-now';
$this->getState()->setData([
'campaignId' => (($from == 'Campaign') ? $id : 0),
'displayGroupId' => (($from == 'DisplayGroup') ? $id : 0),
'displays' => $displays,
'displayGroups' => $groups,
'campaigns' => $this->campaignFactory->query(null, ['isLayoutSpecific' => -1]),
'alwaysDayPart' => $this->dayPartFactory->getAlwaysDayPart(),
'customDayPart' => $this->dayPartFactory->getCustomDayPart(),
'help' => $this->getHelp()->link('Schedule', 'ScheduleNow')
]);
}
/*
* @param \Xibo\Entity\Schedule $schedule
*
*/
private function saveReminder($schedule, $scheduleReminder)
{
// if someone changes from custom to always
// we should keep the definitions, but make sure they don't get executed in the task
if ($schedule->isAlwaysDayPart()) {
$scheduleReminder->reminderDt = 0;
$scheduleReminder->save();
return;
}
switch ($scheduleReminder->type) {
case ScheduleReminder::$TYPE_MINUTE:
$type = ScheduleReminder::$MINUTE;
break;
case ScheduleReminder::$TYPE_HOUR:
$type = ScheduleReminder::$HOUR;
break;
case ScheduleReminder::$TYPE_DAY:
$type = ScheduleReminder::$DAY;
break;
case ScheduleReminder::$TYPE_WEEK:
$type = ScheduleReminder::$WEEK;
break;
case ScheduleReminder::$TYPE_MONTH:
$type = ScheduleReminder::$MONTH;
break;
default:
throw new \Xibo\Exception\NotFoundException('Unknown type');
}
// Remind seconds that we will subtract/add from schedule fromDt/toDt to get reminderDt
$remindSeconds = $scheduleReminder->value * $type;
// Set reminder date
if ($scheduleReminder->option == ScheduleReminder::$OPTION_BEFORE_START) {
$scheduleReminder->reminderDt = $schedule->fromDt - $remindSeconds;
} elseif ($scheduleReminder->option == ScheduleReminder::$OPTION_AFTER_START) {
$scheduleReminder->reminderDt = $schedule->fromDt + $remindSeconds;
} elseif ($scheduleReminder->option == ScheduleReminder::$OPTION_BEFORE_END) {
$scheduleReminder->reminderDt = $schedule->toDt - $remindSeconds;
} elseif ($scheduleReminder->option == ScheduleReminder::$OPTION_AFTER_END) {
$scheduleReminder->reminderDt = $schedule->toDt + $remindSeconds;
}
// Is recurring event?
$now = $this->getDate()->parse();
if ($schedule->recurrenceType != '') {
// find the next event from now
try {
$nextReminderDate = $schedule->getNextReminderDate($now, $scheduleReminder, $remindSeconds);
} catch (NotFoundException $error) {
$nextReminderDate = 0;
$this->getLog()->debug('No next occurrence of reminderDt found. ReminderDt set to 0.');
}
if ($nextReminderDate != 0) {
if ($nextReminderDate < $scheduleReminder->lastReminderDt) {
// handle if someone edit in frontend after notifications were created
// we cannot have a reminderDt set to below the lastReminderDt
// so we make the lastReminderDt 0
$scheduleReminder->lastReminderDt = 0;
$scheduleReminder->reminderDt = $nextReminderDate;
} else {
$scheduleReminder->reminderDt = $nextReminderDate;
}
} else {
// next event is not found
// we make the reminderDt and lastReminderDt as 0
$scheduleReminder->lastReminderDt = 0;
$scheduleReminder->reminderDt = 0;
}
// Save
$scheduleReminder->save();
} else { // one off event
$scheduleReminder->save();
}
}
private function createGeoJson($coordinates)
{
$properties = new \StdClass();
$convertedCoordinates = [];
// coordinates come as array of strings, we need convert that to array of arrays with float values for the Geo JSON
foreach ($coordinates as $coordinate) {
// each $coordinate is a comma separated string with 2 coordinates
// make it into an array
$explodedCords = explode(',', $coordinate);
// prepare a new array, we will add float values to it, need to be cleared for each set of coordinates
$floatCords = [];
// iterate through the exploded array, change the type to float store in a new array
foreach ($explodedCords as $explodedCord) {
$explodedCord = (float)$explodedCord;
$floatCords[] = $explodedCord;
}
// each set of coordinates will be added to this new array, which we will use in the geo json
$convertedCoordinates[] = $floatCords;
}
$geometry = [
'type' => 'Polygon',
'coordinates' => [
$convertedCoordinates
]
];
$geoJson = [
'type' => 'Feature',
'properties' => $properties,
'geometry' => $geometry
];
return json_encode($geoJson);
}
} Report.php 0000644 00000073633 14716415766 0006565 0 ustar 00 .
*/
namespace Xibo\Controller;
use Xibo\Entity\Media;
use Xibo\Entity\ReportSchedule;
use Xibo\Exception\AccessDeniedException;
use Xibo\Exception\InvalidArgumentException;
use Xibo\Exception\NotFoundException;
use Xibo\Exception\XiboException;
use Xibo\Factory\MediaFactory;
use Xibo\Factory\ReportScheduleFactory;
use Xibo\Factory\SavedReportFactory;
use Xibo\Factory\UserFactory;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\ReportServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
use Xibo\Storage\StorageServiceInterface;
use Xibo\Storage\TimeSeriesStoreInterface;
/**
* Class Report
* @package Xibo\Controller
*/
class Report extends Base
{
/**
* @var StorageServiceInterface
*/
private $store;
/**
* @var TimeSeriesStoreInterface
*/
private $timeSeriesStore;
/**
* @var ReportServiceInterface
*/
private $reportService;
/**
* @var ReportScheduleFactory
*/
private $reportScheduleFactory;
/**
* @var SavedReportFactory
*/
private $savedReportFactory;
/**
* @var MediaFactory
*/
private $mediaFactory;
/**
* @var UserFactory
*/
private $userFactory;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param StorageServiceInterface $store
* @param TimeSeriesStoreInterface $timeSeriesStore
* @param ReportServiceInterface $reportService
* @param ReportScheduleFactory $reportScheduleFactory
* @param SavedReportFactory $savedReportFactory
* @param MediaFactory $mediaFactory
* @param UserFactory $userFactory
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $store, $timeSeriesStore, $reportService, $reportScheduleFactory, $savedReportFactory, $mediaFactory, $userFactory)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->store = $store;
$this->timeSeriesStore = $timeSeriesStore;
$this->reportService = $reportService;
$this->reportScheduleFactory = $reportScheduleFactory;
$this->savedReportFactory = $savedReportFactory;
$this->mediaFactory = $mediaFactory;
$this->userFactory = $userFactory;
}
/// //
/**
* Report Schedule Grid
*/
public function reportScheduleGrid()
{
$reportSchedules = $this->reportScheduleFactory->query($this->gridRenderSort(), $this->gridRenderFilter([
'name' => $this->getSanitizer()->getString('name'),
'useRegexForName' => $this->getSanitizer()->getCheckbox('useRegexForName'),
'userId' => $this->getSanitizer()->getInt('userId'),
'reportScheduleId' => $this->getSanitizer()->getInt('reportScheduleId'),
'reportName' => $this->getSanitizer()->getString('reportName'),
'onlyMySchedules' => $this->getSanitizer()->getCheckbox('onlyMySchedules')
]));
/** @var \Xibo\Entity\ReportSchedule $reportSchedule */
foreach ($reportSchedules as $reportSchedule) {
$reportSchedule->includeProperty('buttons');
$cron = \Cron\CronExpression::factory($reportSchedule->schedule);
if ($reportSchedule->lastRunDt == 0) {
$nextRunDt = $this->getDate()->parse()->format('U');
} else {
$nextRunDt = $cron->getNextRunDate(\DateTime::createFromFormat('U', $reportSchedule->lastRunDt))->format('U');
}
$reportSchedule->nextRunDt = $nextRunDt;
// Ad hoc report name
$adhocReportName = $reportSchedule->reportName;
// We get the report description
try {
$reportSchedule->reportName = $this->reportService->getReportByName($reportSchedule->reportName)->description;
} catch (NotFoundException $notFoundException) {
$reportSchedule->reportName = __('Unknown or removed report.');
}
switch ($reportSchedule->schedule) {
case ReportSchedule::$SCHEDULE_DAILY:
$reportSchedule->schedule = __('Run once a day, midnight');
break;
case ReportSchedule::$SCHEDULE_WEEKLY:
$reportSchedule->schedule = __('Run once a week, midnight on Monday');
break;
case ReportSchedule::$SCHEDULE_MONTHLY:
$reportSchedule->schedule = __('Run once a month, midnight, first of month');
break;
case ReportSchedule::$SCHEDULE_YEARLY:
$reportSchedule->schedule = __('Run once a year, midnight, Jan. 1');
break;
}
switch ($reportSchedule->isActive) {
case 1:
$reportSchedule->isActiveDescription = __('This report schedule is active');
break;
default:
$reportSchedule->isActiveDescription = __('This report schedule is paused');
}
if ($reportSchedule->getLastSavedReportId() > 0) {
$lastSavedReport = $this->savedReportFactory->getById($reportSchedule->getLastSavedReportId());
// Open Last Saved Report
$reportSchedule->buttons[] = [
'id' => 'reportSchedule_lastsaved_report_button',
'class' => 'XiboRedirectButton',
'url' => $this->urlFor('savedreport.open', ['id' => $lastSavedReport->savedReportId, 'name' => $lastSavedReport->reportName] ),
'text' => __('Open last saved report')
];
}
// Back to Reports
$reportSchedule->buttons[] = [
'id' => 'reportSchedule_goto_report_button',
'class' => 'XiboRedirectButton',
'url' => $this->urlFor('report.form', ['name' => $adhocReportName] ),
'text' => __('Back to Reports')
];
$reportSchedule->buttons[] = ['divider' => true];
// Edit
$reportSchedule->buttons[] = [
'id' => 'reportSchedule_edit_button',
'url' => $this->urlFor('reportschedule.edit.form', ['id' => $reportSchedule->reportScheduleId]),
'text' => __('Edit')
];
// Reset to previous run
if ($this->getUser()->isSuperAdmin()) {
$reportSchedule->buttons[] = [
'id' => 'reportSchedule_reset_button',
'url' => $this->urlFor('reportschedule.reset.form', ['id' => $reportSchedule->reportScheduleId]),
'text' => __('Reset to previous run')
];
}
// Delete
if ($this->getUser()->checkDeleteable($reportSchedule)) {
// Show the delete button
$reportSchedule->buttons[] = array(
'id' => 'reportschedule_button_delete',
'url' => $this->urlFor('reportschedule.delete.form', ['id' => $reportSchedule->reportScheduleId]),
'text' => __('Delete'),
'multi-select' => true,
'dataAttributes' => array(
array('name' => 'commit-url', 'value' => $this->urlFor('reportschedule.delete', ['id' => $reportSchedule->reportScheduleId])),
array('name' => 'commit-method', 'value' => 'delete'),
array('name' => 'id', 'value' => 'reportschedule_button_delete'),
array('name' => 'text', 'value' => __('Delete')),
array('name' => 'rowtitle', 'value' => $reportSchedule->name),
)
);
}
// Toggle active
$reportSchedule->buttons[] = [
'id' => 'reportSchedule_toggleactive_button',
'url' => $this->urlFor('reportschedule.toggleactive.form', ['id' => $reportSchedule->reportScheduleId]),
'text' => ($reportSchedule->isActive == 1) ? __('Pause') : __('Resume')
];
// Delete all saved report
$savedreports = $this->savedReportFactory->query(null, ['reportScheduleId'=> $reportSchedule->reportScheduleId]);
if ((count($savedreports) > 0) && $this->getUser()->checkDeleteable($reportSchedule)) {
$reportSchedule->buttons[] = ['divider' => true];
$reportSchedule->buttons[] = array(
'id' => 'reportschedule_button_delete_all',
'url' => $this->urlFor('reportschedule.deleteall.form', ['id' => $reportSchedule->reportScheduleId]),
'text' => __('Delete all saved reports'),
);
}
}
$this->getState()->template = 'grid';
$this->getState()->recordsTotal = $this->reportScheduleFactory->countLast();
$this->getState()->setData($reportSchedules);
}
/**
* Report Schedule Reset
*/
public function reportScheduleReset($reportScheduleId)
{
$reportSchedule = $this->reportScheduleFactory->getById($reportScheduleId);
$this->getLog()->debug('Reset Report Schedule: '.$reportSchedule->name);
// Go back to previous run date
$reportSchedule->lastSavedReportId = 0;
$reportSchedule->lastRunDt = $reportSchedule->previousRunDt;
$reportSchedule->save();
}
/**
* Report Schedule Add
*/
public function reportScheduleAdd()
{
$name = $this->getSanitizer()->getString('name');
$reportName = $this->getSanitizer()->getParam('reportName', null);
$this->getLog()->debug('Add Report Schedule: '. $name);
// Set Report Schedule form data
$result = $this->reportService->setReportScheduleFormData($reportName);
$reportSchedule = $this->reportScheduleFactory->createEmpty();
$reportSchedule->name = $name;
$reportSchedule->lastSavedReportId = 0;
$reportSchedule->reportName = $reportName;
$reportSchedule->filterCriteria = $result['filterCriteria'];
$reportSchedule->schedule = $result['schedule'];
$reportSchedule->lastRunDt = 0;
$reportSchedule->previousRunDt = 0;
$reportSchedule->userId = $this->getUser()->userId;
$reportSchedule->createdDt = $this->getDate()->getLocalDate(null, 'U');
$reportSchedule->save();
// Return
$this->getState()->hydrate([
'httpStatus' => 201,
'message' => __('Added Report Schedule'),
'id' => $reportSchedule->reportScheduleId,
'data' => $reportSchedule
]);
}
/**
* Report Schedule Edit
* @param $reportScheduleId
*/
public function reportScheduleEdit($reportScheduleId)
{
$reportSchedule = $this->reportScheduleFactory->getById($reportScheduleId);
if ($reportSchedule->getOwnerId() != $this->getUser()->userId && $this->getUser()->userTypeId != 1)
throw new AccessDeniedException();
$reportSchedule->name = $this->getSanitizer()->getString('name');
$reportSchedule->save();
// Return
$this->getState()->hydrate([
'httpStatus' => 200,
'message' => sprintf(__('Edited %s'), $reportSchedule->name),
'id' => $reportSchedule->reportScheduleId,
'data' => $reportSchedule
]);
}
/**
* Report Schedule Delete
*/
public function reportScheduleDelete($reportScheduleId)
{
$reportSchedule = $this->reportScheduleFactory->getById($reportScheduleId);
if (!$this->getUser()->checkDeleteable($reportSchedule))
throw new AccessDeniedException(__('You do not have permissions to delete this report schedule'));
try {
$reportSchedule->delete();
} catch (\RuntimeException $e) {
throw new InvalidArgumentException(__('Report schedule cannot be deleted. Please ensure there are no saved reports against the schedule.'), 'reportScheduleId' );
}
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Deleted %s'), $reportSchedule->name)
]);
}
/**
* Report Schedule Delete All Saved Report
*/
public function reportScheduleDeleteAllSavedReport($reportScheduleId)
{
$reportSchedule = $this->reportScheduleFactory->getById($reportScheduleId);
if (!$this->getUser()->checkDeleteable($reportSchedule))
throw new AccessDeniedException(__('You do not have permissions to delete the saved report of this report schedule'));
// Get all saved reports of the report schedule
$savedReports = $this->savedReportFactory->query(null, ['reportScheduleId' => $reportScheduleId]);
foreach ($savedReports as $savedreport) {
try {
/** @var Media $media */
$media = $this->mediaFactory->getById($savedreport->mediaId);
$savedreport->load();
$media->load();
// Delete
$savedreport->delete();
$media->delete();
} catch (\RuntimeException $e) {
throw new InvalidArgumentException(__('Saved report cannot be deleted'), 'savedReportId');
}
}
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Deleted all saved reports of %s'), $reportSchedule->name)
]);
}
/**
* Report Schedule Toggle Active
*/
public function reportScheduleToggleActive($reportScheduleId)
{
$reportSchedule = $this->reportScheduleFactory->getById($reportScheduleId);
if (!$this->getUser()->checkEditable($reportSchedule))
throw new AccessDeniedException(__('You do not have permissions to pause/resume this report schedule'));
if ($reportSchedule->isActive == 1) {
$reportSchedule->isActive = 0;
$msg = sprintf(__('Paused %s'), $reportSchedule->name);
} else {
$reportSchedule->isActive = 1;
$msg = sprintf(__('Resumed %s'), $reportSchedule->name);
}
$reportSchedule->save();
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => $msg
]);
}
/**
* Displays the Report Schedule Page
*/
public function displayReportSchedulePage()
{
// Call to render the template
$this->getState()->template = 'report-schedule-page';
$this->getState()->setData([
'users' => $this->userFactory->query(),
'availableReports' => $this->reportService->listReports()
]);
}
/**
* Displays an Add form
*/
public function addReportScheduleForm()
{
$reportName = $this->getSanitizer()->getParam('reportName', null);
// Populate form title and hidden fields
$formData = $this->reportService->getReportScheduleFormData($reportName);
$template = $formData['template'];
$this->getState()->template = $template;
$this->getState()->setData($formData['data']);
}
/**
* Report Schedule Edit Form
*/
public function editReportScheduleForm($reportScheduleId)
{
$reportSchedule = $this->reportScheduleFactory->getById($reportScheduleId);
$this->getState()->template = 'reportschedule-form-edit';
$this->getState()->setData([
'reportSchedule' => $reportSchedule
]);
}
/**
* Report Schedule Reset Form
*/
public function resetReportScheduleForm($reportScheduleId)
{
$reportSchedule = $this->reportScheduleFactory->getById($reportScheduleId);
// Only admin can reset it
if ($this->getUser()->userTypeId != 1)
throw new AccessDeniedException(__('You do not have permissions to reset this report schedule'));
$data = [
'reportSchedule' => $reportSchedule
];
$this->getState()->template = 'reportschedule-form-reset';
$this->getState()->setData($data);
}
/**
* Report Schedule Delete Form
*/
public function deleteReportScheduleForm($reportScheduleId)
{
$reportSchedule = $this->reportScheduleFactory->getById($reportScheduleId);
if (!$this->getUser()->checkDeleteable($reportSchedule))
throw new AccessDeniedException(__('You do not have permissions to delete this report schedule'));
$data = [
'reportSchedule' => $reportSchedule
];
$this->getState()->template = 'reportschedule-form-delete';
$this->getState()->setData($data);
}
/**
* Report Schedule Delete All Saved Report Form
*/
public function deleteAllSavedReportReportScheduleForm($reportScheduleId)
{
$reportSchedule = $this->reportScheduleFactory->getById($reportScheduleId);
if (!$this->getUser()->checkDeleteable($reportSchedule))
throw new AccessDeniedException(__('You do not have permissions to delete saved reports of this report schedule'));
$data = [
'reportSchedule' => $reportSchedule
];
$this->getState()->template = 'reportschedule-form-deleteall';
$this->getState()->setData($data);
}
/**
* Report Schedule Toggle Active Form
*/
public function toggleActiveReportScheduleForm($reportScheduleId)
{
$reportSchedule = $this->reportScheduleFactory->getById($reportScheduleId);
if (!$this->getUser()->checkEditable($reportSchedule))
throw new AccessDeniedException(__('You do not have permissions to pause/resume this report schedule'));
$data = [
'reportSchedule' => $reportSchedule
];
$this->getState()->template = 'reportschedule-form-toggleactive';
$this->getState()->setData($data);
}
//
//
/**
* Saved report Grid
*/
public function savedReportGrid()
{
$savedReports = $this->savedReportFactory->query($this->gridRenderSort(), $this->gridRenderFilter([
'saveAs' => $this->getSanitizer()->getString('saveAs'),
'useRegexForName' => $this->getSanitizer()->getCheckbox('useRegexForName'),
'userId' => $this->getSanitizer()->getInt('userId'),
'reportName' => $this->getSanitizer()->getString('reportName'),
'onlyMyReport' => $this->getSanitizer()->getCheckbox('onlyMyReport')
]));
foreach ($savedReports as $savedReport) {
/** @var \Xibo\Entity\SavedReport $savedReport */
$savedReport->includeProperty('buttons');
$savedReport->buttons[] = [
'id' => 'button_show_report.now',
'class' => 'XiboRedirectButton',
'url' => $this->urlFor('savedreport.open', ['id' => $savedReport->savedReportId, 'name' => $savedReport->reportName] ),
'text' => __('Open')
];
$savedReport->buttons[] = ['divider' => true];
$savedReport->buttons[] = [
'id' => 'button_goto_report',
'class' => 'XiboRedirectButton',
'url' => $this->urlFor('report.form', ['name' => $savedReport->reportName] ),
'text' => __('Back to Reports')
];
$savedReport->buttons[] = [
'id' => 'button_goto_schedule',
'class' => 'XiboRedirectButton',
'url' => $this->urlFor('reportschedule.view' ) . '?reportScheduleId=' . $savedReport->reportScheduleId. '&reportName='.$savedReport->reportName,
'text' => __('Go to schedule')
];
$savedReport->buttons[] = ['divider' => true];
// Get report email template
$emailTemplate = $this->reportService->getReportEmailTemplate($savedReport->reportName);
if (!empty($emailTemplate)) {
// Export Button
$savedReport->buttons[] = [
'id' => 'button_export_report',
'linkType' => '_self', 'external' => true,
'url' => $this->urlFor('savedreport.export', ['id' => $savedReport->savedReportId, 'name' => $savedReport->reportName] ),
'text' => __('Export as PDF')
];
}
// Delete
if ($this->getUser()->checkDeleteable($savedReport)) {
// Show the delete button
$savedReport->buttons[] = array(
'id' => 'savedreport_button_delete',
'url' => $this->urlFor('savedreport.delete.form', ['id' => $savedReport->savedReportId]),
'text' => __('Delete'),
'multi-select' => true,
'dataAttributes' => array(
array('name' => 'commit-url', 'value' => $this->urlFor('savedreport.delete', ['id' => $savedReport->savedReportId])),
array('name' => 'commit-method', 'value' => 'delete'),
array('name' => 'id', 'value' => 'savedreport_button_delete'),
array('name' => 'text', 'value' => __('Delete')),
array('name' => 'rowtitle', 'value' => $savedReport->saveAs),
)
);
}
}
$this->getState()->template = 'grid';
$this->getState()->recordsTotal = $this->savedReportFactory->countLast();
$this->getState()->setData($savedReports);
}
/**
* Displays the Saved Report Page
*/
public function displaySavedReportPage()
{
// Call to render the template
$this->getState()->template = 'saved-report-page';
$this->getState()->setData([
'users' => $this->userFactory->query(),
'availableReports' => $this->reportService->listReports()
]);
}
/**
* Report Schedule Delete Form
*/
public function deleteSavedReportForm($savedreportId)
{
$savedReport = $this->savedReportFactory->getById($savedreportId);
if (!$this->getUser()->checkDeleteable($savedReport))
throw new AccessDeniedException(__('You do not have permissions to delete this report schedule'));
$data = [
'savedReport' => $savedReport
];
$this->getState()->template = 'savedreport-form-delete';
$this->getState()->setData($data);
}
/**
* Saved Report Delete
*/
public function savedReportDelete($savedreportId)
{
$savedReport = $this->savedReportFactory->getById($savedreportId);
/** @var Media $media */
$media = $this->mediaFactory->getById($savedReport->mediaId);
if (!$this->getUser()->checkDeleteable($savedReport))
throw new AccessDeniedException(__('You do not have permissions to delete this report schedule'));
$savedReport->load();
$media->load();
// Delete
$savedReport->delete();
$media->delete();
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Deleted %s'), $savedReport->saveAs)
]);
}
/**
* Returns a Saved Report's preview
* @param int $savedreportId
* @param string $reportName
*/
public function savedReportOpen($savedreportId, $reportName)
{
// Retrieve the saved report result in array
$results = $this->reportService->getSavedReportResults($savedreportId, $reportName);
$this->getState()->template = $results['template'];
$this->getState()->setData($results['chartData']);
}
/**
* Exports saved report as a PDF file
* @param int $savedreportId
* @param string $reportName
* @throws XiboException
*/
public function savedReportExport($savedreportId, $reportName)
{
$savedReport = $this->savedReportFactory->getById($savedreportId);
// Retrieve the saved report result in array
$savedReportData = $this->reportService->getSavedReportResults($savedreportId, $reportName);
// Get the report config
$report = $this->reportService->getReportByName($reportName);
if ($report->output_type == 'chart') {
$quickChartUrl = $this->getConfig()->getSetting('QUICK_CHART_URL');
if (!empty($quickChartUrl)) {
$script = $this->reportService->getReportChartScript($savedreportId, $reportName);
$src = $quickChartUrl. "/chart?width=1000&height=300&c=".$script;
} else {
$placeholder = __('Chart could not be drawn because the CMS has not been configured with a Quick Chart URL.');
}
} else { // only for tablebased report
$result = $savedReportData['chartData']['result'];
$tableData =json_decode($result, true);
}
// Get report email template
$emailTemplate = $this->reportService->getReportEmailTemplate($reportName);
if (!empty($emailTemplate)) {
// Save PDF attachment
ob_start();
// Render the template
$this->app->render($emailTemplate,
[
'header' => $report->description,
'logo' => $this->getConfig()->uri('img/xibologo.png', true),
'title' => $savedReport->saveAs,
'periodStart' => $savedReportData['chartData']['periodStart'],
'periodEnd' => $savedReportData['chartData']['periodEnd'],
'generatedOn' => $this->getDate()->parse($savedReport->generatedOn, 'U')->format('Y-m-d H:i:s'),
'tableData' => isset($tableData) ? $tableData : null,
'src' => isset($src) ? $src : null,
'placeholder' => isset($placeholder) ? $placeholder : null
]);
$body = ob_get_contents();
ob_end_clean();
$fileName = $this->getConfig()->getSetting('LIBRARY_LOCATION'). 'temp/saved_report_'.$savedreportId.'.pdf';
try {
$mpdf = new \Mpdf\Mpdf([
'tempDir' => $this->getConfig()->getSetting('LIBRARY_LOCATION') . '/temp',
'orientation' => 'L',
'mode' => 'c',
'margin_left' => 20,
'margin_right' => 20,
'margin_top' => 20,
'margin_bottom' => 20,
'margin_header' => 5,
'margin_footer' => 15
]);
$mpdf->setFooter('Page {PAGENO}') ;
$mpdf->SetDisplayMode('fullpage');
$stylesheet = file_get_contents($this->getConfig()->uri('css/email-report.css', true));
$mpdf->WriteHTML($stylesheet, 1);
$mpdf->WriteHTML($body);
$mpdf->Output($fileName, \Mpdf\Output\Destination::FILE);
} catch (\Exception $error) {
$this->getLog()->error($error->getMessage());
}
}
// Return the file with PHP
$this->setNoOutput(true);
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"" . basename($fileName) . "\"");
header('Content-Length: ' . filesize($fileName));
// Disable any buffering to prevent OOM errors.
ob_end_flush();
readfile($fileName);
exit;
}
//
/// //
/**
* Displays an Ad Hoc Report form
*/
public function getReportForm($reportName)
{
$this->getLog()->debug('Get report name: '.$reportName);
// Get the report Class from the Json File
$className = $this->reportService->getReportClass($reportName);
// Create the report object
$object = $this->reportService->createReportObject($className);
// Get the twig file and required data of the report form
$form = $object->getReportForm();
// Show the twig
$this->getState()->template = $form['template'];
$this->getState()->setData([
'reportName' => $reportName,
'defaults' => $form['data']
]);
}
/**
* Displays Ad Hoc Report data in charts
*/
public function getReportData($reportName)
{
$this->getLog()->debug('Get report name: '.$reportName);
// Get the report Class from the Json File
$className = $this->reportService->getReportClass($reportName);
// Create the report object
$object = $this->reportService->createReportObject($className);
// Return data to build chart
$results = $object->getResults(null);
$this->getState()->extra = $results;
}
//
} Maintenance.php 0000644 00000031721 14716415766 0007524 0 ustar 00 .
*/
namespace Xibo\Controller;
use Xibo\Entity\Task;
use Xibo\Exception\AccessDeniedException;
use Xibo\Factory\DisplayFactory;
use Xibo\Factory\DisplayGroupFactory;
use Xibo\Factory\LayoutFactory;
use Xibo\Factory\MediaFactory;
use Xibo\Factory\PlayerVersionFactory;
use Xibo\Factory\ScheduleFactory;
use Xibo\Factory\TaskFactory;
use Xibo\Factory\WidgetFactory;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
use Xibo\Storage\StorageServiceInterface;
/**
* Class Maintenance
* @package Xibo\Controller
*/
class Maintenance extends Base
{
/** @var TaskFactory */
private $taskFactory;
/** @var StorageServiceInterface */
private $store;
/** @var MediaFactory */
private $mediaFactory;
/** @var LayoutFactory */
private $layoutFactory;
/** @var WidgetFactory */
private $widgetFactory;
/** @var DisplayGroupFactory */
private $displayGroupFactory;
/** @var DisplayFactory */
private $displayFactory;
/** @var ScheduleFactory */
private $scheduleFactory;
/** @var PlayerVersionFactory */
private $playerVersionFactory;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param StorageServiceInterface $store
* @param TaskFactory $taskFactory
* @param MediaFactory $mediaFactory
* @param LayoutFactory $layoutFactory
* @param WidgetFactory $widgetFactory
* @param DisplayGroupFactory $displayGroupFactory
* @param DisplayFactory $displayFactory
* @param ScheduleFactory $scheduleFactory
* @param PlayerVersionFactory $playerVersionFactory
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $store, $taskFactory, $mediaFactory, $layoutFactory, $widgetFactory, $displayGroupFactory, $displayFactory, $scheduleFactory, $playerVersionFactory)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->taskFactory = $taskFactory;
$this->store = $store;
$this->mediaFactory = $mediaFactory;
$this->layoutFactory = $layoutFactory;
$this->widgetFactory = $widgetFactory;
$this->displayGroupFactory = $displayGroupFactory;
$this->displayFactory = $displayFactory;
$this->scheduleFactory = $scheduleFactory;
$this->playerVersionFactory = $playerVersionFactory;
}
/**
* Run Maintenance through the WEB portal
*/
public function run()
{
// Output HTML Headers
print '';
print ' ';
print ' ';
print ' Maintenance';
print ' ';
print '';
// Should the Scheduled Task script be running at all?
if ($this->getConfig()->getSetting("MAINTENANCE_ENABLED") == "Off") {
print "" . __("Maintenance Disabled") . "
";
print __("Maintenance tasks are disabled at the moment. Please enable them in the "Settings" dialog.");
} else {
$quick = ($this->getSanitizer()->getCheckbox('quick') == 1);
// Set defaults that don't match on purpose!
$key = 1;
$aKey = 2;
$pKey = 3;
if ($this->getConfig()->getSetting("MAINTENANCE_ENABLED")=="Protected") {
// Check that the magic parameter is set
$key = $this->getConfig()->getSetting("MAINTENANCE_KEY");
// Get key from arguments
$pKey = $this->getSanitizer()->getString('key');
}
if (($aKey == $key) || ($pKey == $key) || ($this->getConfig()->getSetting("MAINTENANCE_ENABLED")=="On")) {
// Are we full maintenance?
if (!$quick) {
$this->runTask('MaintenanceDailyTask');
}
// Always run quick tasks
$this->runTask('MaintenanceRegularTask');
$this->runTask('EmailNotificationsTask');
}
else {
print __("Maintenance key invalid.");
}
}
// Output HTML Footers
print "\n \n";
print "";
$this->getLog()->debug('Maintenance Complete');
// No output
$this->setNoOutput(true);
}
/**
* Run task
* @param $class
*/
private function runTask($class)
{
/** @var \Xibo\Controller\Task $taskController */
$taskController = $this->getApp()->container->get('\Xibo\Controller\Task');
$taskController->setApp($this->getApp());
$task = $this->taskFactory->getByClass('\Xibo\XTR\\' . $class);
// Check we aren't already running
if ($task->status == Task::$STATUS_RUNNING) {
echo __('Task already running');
} else {
// Hand off to the task controller
$taskController->run($task->taskId);
// Echo the task output
$task = $this->taskFactory->getById($task->taskId);
echo \Parsedown::instance()->text($task->lastRunMessage);
}
}
/**
* Tidy Library Form
*/
public function tidyLibraryForm()
{
$this->getState()->template = 'maintenance-form-tidy';
$this->getState()->setData([
'help' => $this->getHelp()->link('Settings', 'TidyLibrary')
]);
}
/**
* Tidies up the library
*/
public function tidyLibrary()
{
$tidyOldRevisions = $this->getSanitizer()->getCheckbox('tidyOldRevisions');
$cleanUnusedFiles = $this->getSanitizer()->getCheckbox('cleanUnusedFiles');
$tidyGenericFiles = $this->getSanitizer()->getCheckbox('tidyGenericFiles');
if ($this->getConfig()->getSetting('SETTING_LIBRARY_TIDY_ENABLED') != 1)
throw new AccessDeniedException(__('Sorry this function is disabled.'));
// Also run a script to tidy up orphaned media in the library
$library = $this->getConfig()->getSetting('LIBRARY_LOCATION');
$this->getLog()->debug('Library Location: ' . $library);
// Remove temporary files
$this->getApp()->container->get('\Xibo\Controller\Library')->removeTempFiles();
$media = array();
$unusedMedia = array();
$unusedRevisions = array();
// DataSets with library images
$dataSetSql = '
SELECT dataset.dataSetId, datasetcolumn.heading
FROM dataset
INNER JOIN datasetcolumn
ON datasetcolumn.DataSetID = dataset.DataSetID
WHERE DataTypeID = 5 AND DataSetColumnTypeID <> 2;
';
$dataSets = $this->store->select($dataSetSql, []);
// Run a query to get an array containing all of the media in the library
// this must contain ALL media, so that we can delete files in the storage that aren;t in the table
$sql = '
SELECT media.mediaid, media.storedAs, media.type, media.isedited,
SUM(CASE WHEN IFNULL(lkwidgetmedia.widgetId, 0) = 0 THEN 0 ELSE 1 END) AS UsedInLayoutCount,
SUM(CASE WHEN IFNULL(lkmediadisplaygroup.mediaId, 0) = 0 THEN 0 ELSE 1 END) AS UsedInDisplayCount,
SUM(CASE WHEN IFNULL(layout.layoutId, 0) = 0 THEN 0 ELSE 1 END) AS UsedInBackgroundImageCount
';
if (count($dataSets) > 0) {
$sql .= ' , SUM(CASE WHEN IFNULL(dataSetImages.mediaId, 0) = 0 THEN 0 ELSE 1 END) AS UsedInDataSetCount ';
} else {
$sql .= ' , 0 AS UsedInDataSetCount ';
}
$sql .= '
FROM `media`
LEFT OUTER JOIN `lkwidgetmedia`
ON lkwidgetmedia.mediaid = media.mediaid
LEFT OUTER JOIN `lkmediadisplaygroup`
ON lkmediadisplaygroup.mediaid = media.mediaid
LEFT OUTER JOIN `layout`
ON `layout`.backgroundImageId = `media`.mediaId
';
if (count($dataSets) > 0) {
$sql .= ' LEFT OUTER JOIN (';
$first = true;
foreach ($dataSets as $dataSet) {
if (!$first)
$sql .= ' UNION ALL ';
$first = false;
$dataSetId = $this->getSanitizer()->getInt('dataSetId', $dataSet);
$heading = $this->getSanitizer()->getString('heading', $dataSet);
$sql .= ' SELECT `' . $heading . '` AS mediaId FROM `dataset_' . $dataSetId . '`';
}
$sql .= ') dataSetImages
ON dataSetImages.mediaId = `media`.mediaId
';
}
$sql .= '
GROUP BY media.mediaid, media.storedAs, media.type, media.isedited
';
foreach ($this->store->select($sql, []) as $row) {
$media[$row['storedAs']] = $row;
$type = $this->getSanitizer()->getString('type', $row);
// Ignore any module files or fonts
if ($type == 'module' || $type == 'font' || $type == 'playersoftware' || ($type == 'genericfile' && $tidyGenericFiles != 1))
continue;
// Collect media revisions that aren't used
if ($tidyOldRevisions && $row['UsedInLayoutCount'] <= 0 && $row['UsedInDisplayCount'] <= 0 && $row['UsedInBackgroundImageCount'] <= 0 && $row['UsedInDataSetCount'] <= 0 && $row['isedited'] > 0) {
$unusedRevisions[$row['storedAs']] = $row;
}
// Collect any files that aren't used
else if ($cleanUnusedFiles && $row['UsedInLayoutCount'] <= 0 && $row['UsedInDisplayCount'] <= 0 && $row['UsedInBackgroundImageCount'] <= 0 && $row['UsedInDataSetCount'] <= 0) {
$unusedMedia[$row['storedAs']] = $row;
}
}
$i = 0;
// Library location
$libraryLocation = $this->getConfig()->getSetting("LIBRARY_LOCATION");
// Get a list of all media files
foreach(scandir($library) as $file) {
if ($file == '.' || $file == '..')
continue;
if (is_dir($library . $file))
continue;
// Ignore thumbnails
if (strstr($file, 'tn_'))
continue;
// Ignore XLF files
if (strstr($file, '.xlf'))
continue;
$i++;
// Is this file in the system anywhere?
if (!array_key_exists($file, $media)) {
// Totally missing
$this->getLog()->debug('Deleting file: ' . $file);
// If not, delete it
unlink($libraryLocation . $file);
}
else if (array_key_exists($file, $unusedRevisions)) {
// It exists but isn't being used any more
$this->getLog()->debug('Deleting unused revision media: ' . $media[$file]['mediaid']);
$this->mediaFactory->getById($media[$file]['mediaid'])
->setChildObjectDependencies($this->layoutFactory, $this->widgetFactory, $this->displayGroupFactory, $this->displayFactory, $this->scheduleFactory, $this->playerVersionFactory)
->delete();
}
else if (array_key_exists($file, $unusedMedia)) {
// It exists but isn't being used any more
$this->getLog()->debug('Deleting unused media: ' . $media[$file]['mediaid']);
$this->mediaFactory->getById($media[$file]['mediaid'])
->setChildObjectDependencies($this->layoutFactory, $this->widgetFactory, $this->displayGroupFactory, $this->displayFactory, $this->scheduleFactory, $this->playerVersionFactory)
->delete();
}
else {
$i--;
}
}
// Return
$this->getState()->hydrate([
'message' => __('Library Tidy Complete'),
'data' => [
'tidied' => $i
]
]);
}
} Notification.php 0000644 00000055700 14716415766 0007733 0 ustar 00 setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->notificationFactory = $notificationFactory;
$this->userNotificationFactory = $userNotificationFactory;
$this->displayGroupFactory = $displayGroupFactory;
$this->userGroupFactory = $userGroupFactory;
$this->displayNotifyService = $displayNotifyService;
}
public function displayPage()
{
// Call to render the template
$this->getState()->template = 'notification-page';
}
/**
* Show a notification
* @param int $notificationId
*/
public function interrupt($notificationId)
{
$notification = $this->userNotificationFactory->getByNotificationId($notificationId);
// Mark it as read
$notification->setRead($this->getDate()->getLocalDate(null, 'U'));
$notification->save();
$this->getState()->template = 'notification-interrupt';
$this->getState()->setData(['notification' => $notification]);
}
/**
* Show a notification
* @param int $notificationId
*/
public function show($notificationId)
{
$notification = $this->userNotificationFactory->getByNotificationId($notificationId);
// Mark it as read
$notification->setRead($this->getDate()->getLocalDate(null, 'U'));
$notification->save();
$this->getState()->template = 'notification-form-show';
$this->getState()->setData(['notification' => $notification]);
}
/**
* @SWG\Get(
* path="/notification",
* operationId="notificationSearch",
* tags={"notification"},
* summary="Notification Search",
* description="Search this users Notifications",
* @SWG\Parameter(
* name="notificationId",
* in="query",
* description="Filter by Notification Id",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="subject",
* in="query",
* description="Filter by Subject",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="embed",
* in="query",
* description="Embed related data such as userGroups,displayGroups",
* type="string",
* required=false
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(
* type="array",
* @SWG\Items(ref="#/definitions/Notification")
* )
* )
* )
*/
function grid()
{
$filter = [
'notificationId' => $this->getSanitizer()->getInt('notificationId'),
'subject' => $this->getSanitizer()->getString('subject')
];
$embed = ($this->getSanitizer()->getString('embed') != null) ? explode(',', $this->getSanitizer()->getString('embed')) : [];
$notifications = $this->notificationFactory->query($this->gridRenderSort(), $this->gridRenderFilter($filter));
foreach ($notifications as $notification) {
/* @var \Xibo\Entity\Notification $notification */
if (in_array('userGroups', $embed) || in_array('displayGroups', $embed)) {
$notification->load([
'loadUserGroups' => in_array('userGroups', $embed),
'loadDisplayGroups' => in_array('displayGroups', $embed),
]);
}
if ($this->isApi())
continue;
$notification->includeProperty('buttons');
// Default Layout
$notification->buttons[] = array(
'id' => 'notification_button_edit',
'url' => $this->urlFor('notification.edit.form', ['id' => $notification->notificationId]),
'text' => __('Edit')
);
if ($this->getUser()->checkDeleteable($notification)) {
$notification->buttons[] = array(
'id' => 'notification_button_delete',
'url' => $this->urlFor('notification.delete.form', ['id' => $notification->notificationId]),
'text' => __('Delete'),
'multi-select' => true,
'dataAttributes' => [
['name' => 'commit-url', 'value' => $this->urlFor('notification.delete', ['id' => $notification->notificationId])],
['name' => 'commit-method', 'value' => 'delete'],
['name' => 'id', 'value' => 'notification_button_delete'],
['name' => 'text', 'value' => __('Delete?')],
['name' => 'rowtitle', 'value' => $notification->subject]
]
);
}
}
$this->getState()->template = 'grid';
$this->getState()->recordsTotal = $this->notificationFactory->countLast();
$this->getState()->setData($notifications);
}
/**
* Add Notification Form
*/
public function addForm()
{
$groups = array();
$displays = array();
$userGroups = [];
$users = [];
foreach ($this->displayGroupFactory->query(['displayGroup'], ['isDisplaySpecific' => -1]) as $displayGroup) {
/* @var \Xibo\Entity\DisplayGroup $displayGroup */
if ($displayGroup->isDisplaySpecific == 1) {
$displays[] = $displayGroup;
} else {
$groups[] = $displayGroup;
}
}
foreach ($this->userGroupFactory->query(['`group`'], ['isUserSpecific' => -1]) as $userGroup) {
/* @var UserGroup $userGroup */
if ($userGroup->isUserSpecific == 0) {
$userGroups[] = $userGroup;
} else {
$users[] = $userGroup;
}
}
$this->getState()->template = 'notification-form-add';
$this->getState()->setData([
'displays' => $displays,
'displayGroups' => $groups,
'users' => $users,
'userGroups' => $userGroups,
]);
}
/**
* Edit Notification Form
* @param int $notificationId
*/
public function editForm($notificationId)
{
$notification = $this->notificationFactory->getById($notificationId);
$notification->load();
// Adjust the dates
$notification->createdDt = $this->getDate()->getLocalDate($notification->createdDt);
$notification->releaseDt = $this->getDate()->getLocalDate($notification->releaseDt);
if (!$this->getUser()->checkEditable($notification))
throw new AccessDeniedException();
$groups = array();
$displays = array();
$userGroups = [];
$users = [];
foreach ($this->displayGroupFactory->query(['displayGroup'], ['isDisplaySpecific' => -1]) as $displayGroup) {
/* @var \Xibo\Entity\DisplayGroup $displayGroup */
if ($displayGroup->isDisplaySpecific == 1) {
$displays[] = $displayGroup;
} else {
$groups[] = $displayGroup;
}
}
foreach ($this->userGroupFactory->query(['`group`'], ['isUserSpecific' => -1]) as $userGroup) {
/* @var UserGroup $userGroup */
if ($userGroup->isUserSpecific == 0) {
$userGroups[] = $userGroup;
} else {
$users[] = $userGroup;
}
}
$this->getState()->template = 'notification-form-edit';
$this->getState()->setData([
'notification' => $notification,
'displays' => $displays,
'displayGroups' => $groups,
'users' => $users,
'userGroups' => $userGroups,
'displayGroupIds' => array_map(function($element) {
return $element->displayGroupId;
}, $notification->displayGroups),
'userGroupIds' => array_map(function($element) {
return $element->groupId;
}, $notification->userGroups)
]);
}
/**
* Delete Notification Form
* @param int $notificationId
*/
public function deleteForm($notificationId)
{
$notification = $this->notificationFactory->getById($notificationId);
if (!$this->getUser()->checkDeleteable($notification))
throw new AccessDeniedException();
$this->getState()->template = 'notification-form-delete';
$this->getState()->setData([
'notification' => $notification
]);
}
/**
* Add attachment
*/
public function addAttachment()
{
$libraryFolder = $this->getConfig()->getSetting('LIBRARY_LOCATION');
// Make sure the library exists
Library::ensureLibraryExists($this->getConfig()->getSetting('LIBRARY_LOCATION'));
$options = array(
'userId' => $this->getUser()->userId,
'controller' => $this,
'upload_dir' => $libraryFolder . 'temp/',
'download_via_php' => true,
'script_url' => $this->urlFor('notification.add'),
'upload_url' => $this->urlFor('notification.add'),
'image_versions' => array(),
'accept_file_types' => '/\.jpg|.jpeg|.png|.bmp|.gif|.zip|.pdf/i'
);
// Output handled by UploadHandler
$this->setNoOutput(true);
$this->getLog()->debug('Hand off to Upload Handler with options: %s', json_encode($options));
// Hand off to the Upload Handler provided by jquery-file-upload
new AttachmentUploadHandler($options);
}
/**
* Add Notification
*
* @SWG\Post(
* path="/notification",
* operationId="notificationAdd",
* tags={"notification"},
* summary="Notification Add",
* description="Add a Notification",
* @SWG\Parameter(
* name="subject",
* in="formData",
* description="The Subject",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="body",
* in="formData",
* description="The Body",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="releaseDt",
* in="formData",
* description="ISO date representing the release date for this notification",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="isEmail",
* in="formData",
* description="Flag indicating whether this notification should be emailed.",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="isInterrupt",
* in="formData",
* description="Flag indication whether this notification should interrupt the web portal nativation/login",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="displayGroupIds",
* in="formData",
* description="The display group ids to assign this notification to",
* type="array",
* required=true,
* @SWG\Items(type="integer")
* ),
* @SWG\Parameter(
* name="userGroupIds",
* in="formData",
* description="The user group ids to assign to this notification",
* type="array",
* required=true,
* @SWG\Items(type="integer")
* ),
* @SWG\Response(
* response=201,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/Notification"),
* @SWG\Header(
* header="Location",
* description="Location of the new record",
* type="string"
* )
* )
* )
*/
public function add()
{
$notification = $this->notificationFactory->createEmpty();
$notification->subject = $this->getSanitizer()->getString('subject');
$notification->body = $this->getSanitizer()->getParam('body', '');
$notification->createdDt = $this->getDate()->getLocalDate(null, 'U');
$notification->releaseDt = $this->getSanitizer()->getDate('releaseDt');
if ($notification->releaseDt !== null)
$notification->releaseDt = $notification->releaseDt->format('U');
else
$notification->releaseDt = $notification->createdDt;
$notification->isEmail = $this->getSanitizer()->getCheckbox('isEmail');
$notification->isInterrupt = $this->getSanitizer()->getCheckbox('isInterrupt');
$notification->userId = $this->getUser()->userId;
$notification->nonusers = $this->getSanitizer()->getString('nonusers');
// Displays and Users to link
foreach ($this->getSanitizer()->getIntArray('displayGroupIds') as $displayGroupId) {
$notification->assignDisplayGroup($this->displayGroupFactory->getById($displayGroupId));
// Notify (don't collect)
$this->displayNotifyService->collectLater()->notifyByDisplayGroupId($displayGroupId);
}
foreach ($this->getSanitizer()->getIntArray('userGroupIds') as $userGroupId) {
$notification->assignUserGroup($this->userGroupFactory->getById($userGroupId));
}
$notification->save();
$attachedFilename = $this->getSanitizer()->getString('attachedFilename');
$libraryFolder = $this->getConfig()->getSetting('LIBRARY_LOCATION');
$saveName = $notification->notificationId .'_' .$attachedFilename;
if (!empty($attachedFilename)) {
// Move the file into the library
// Try to move the file first
$from = $libraryFolder . 'temp/' . $attachedFilename;
$to = $libraryFolder . 'attachment/' . $saveName;
$moved = rename($from, $to);
if (!$moved) {
$this->getLog()->info('Cannot move file: ' . $from . ' to ' . $to . ', will try and copy/delete instead.');
// Copy
$moved = copy($from, $to);
// Delete
if (!@unlink($from)) {
$this->getLog()->error('Cannot delete file: ' . $from . ' after copying to ' . $to);
}
}
if (!$moved)
throw new ConfigurationException(__('Problem moving uploaded file into the Attachment Folder'));
}
$notification->filename = $saveName;
$notification->originalFileName = $attachedFilename;
$notification->save();
// Return
$this->getState()->hydrate([
'httpStatus' => 201,
'message' => sprintf(__('Added %s'), $notification->subject),
'id' => $notification->notificationId,
'data' => $notification
]);
}
/**
* Edit Notification
* @param int $notificationId
*
* @SWG\Put(
* path="/notification/{notificationId}",
* operationId="notificationEdit",
* tags={"notification"},
* summary="Notification Edit",
* description="Edit a Notification",
* @SWG\Parameter(
* name="notificationId",
* in="path",
* description="The NotificationId",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="subject",
* in="formData",
* description="The Subject",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="body",
* in="formData",
* description="The Body",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="releaseDt",
* in="formData",
* description="ISO date representing the release date for this notification",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="isEmail",
* in="formData",
* description="Flag indicating whether this notification should be emailed.",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="isInterrupt",
* in="formData",
* description="Flag indication whether this notification should interrupt the web portal nativation/login",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="displayGroupIds",
* in="formData",
* description="The display group ids to assign this notification to",
* type="array",
* required=true,
* @SWG\Items(type="integer")
* ),
* @SWG\Parameter(
* name="userGroupIds",
* in="formData",
* description="The user group ids to assign to this notification",
* type="array",
* required=true,
* @SWG\Items(type="integer")
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/Notification")
* )
* )
*
* @throws XiboException
*/
public function edit($notificationId)
{
$notification = $this->notificationFactory->getById($notificationId);
$notification->load();
// Check Permissions
if (!$this->getUser()->checkEditable($notification))
throw new AccessDeniedException();
$notification->subject = $this->getSanitizer()->getString('subject');
$notification->body = $this->getSanitizer()->getParam('body', '');
$notification->createdDt = $this->getDate()->getLocalDate(null, 'U');
$notification->releaseDt = $this->getSanitizer()->getDate('releaseDt')->format('U');
$notification->isEmail = $this->getSanitizer()->getCheckbox('isEmail');
$notification->isInterrupt = $this->getSanitizer()->getCheckbox('isInterrupt');
$notification->userId = $this->getUser()->userId;
$notification->nonusers = $this->getSanitizer()->getString('nonusers');
// Clear existing assignments
$notification->displayGroups = [];
$notification->userGroups = [];
// Displays and Users to link
foreach ($this->getSanitizer()->getIntArray('displayGroupIds') as $displayGroupId) {
$notification->assignDisplayGroup($this->displayGroupFactory->getById($displayGroupId));
// Notify (don't collect)
$this->displayNotifyService->collectLater()->notifyByDisplayGroupId($displayGroupId);
}
foreach ($this->getSanitizer()->getIntArray('userGroupIds') as $userGroupId) {
$notification->assignUserGroup($this->userGroupFactory->getById($userGroupId));
}
$notification->save();
// Return
$this->getState()->hydrate([
'httpStatus' => 201,
'message' => sprintf(__('Edited %s'), $notification->subject),
'id' => $notification->notificationId,
'data' => $notification
]);
}
/**
* Delete Notification
* @param int $notificationId
*
* @SWG\Delete(
* path="/notification/{notificationId}",
* operationId="notificationDelete",
* tags={"notification"},
* summary="Delete Notification",
* description="Delete the provided notification",
* @SWG\Parameter(
* name="notificationId",
* in="path",
* description="The Notification Id to Delete",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*
* @throws XiboException
*/
public function delete($notificationId)
{
$notification = $this->notificationFactory->getById($notificationId);
if (!$this->getUser()->checkDeleteable($notification))
throw new AccessDeniedException();
$notification->delete();
/*Delete the attachment*/
if (!empty($notification->filename)) {
// Library location
$attachmentLocation = $this->getConfig()->getSetting('LIBRARY_LOCATION'). 'attachment/';
if (file_exists($attachmentLocation . $notification->filename))
unlink($attachmentLocation . $notification->filename);
}
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Deleted %s'), $notification->subject)
]);
}
public function exportAttachment($notificationId)
{
$notification = $this->notificationFactory->getById($notificationId);
$fileName = $this->getConfig()->getSetting('LIBRARY_LOCATION'). 'attachment/'.$notification->filename;
// Return the file with PHP
$this->setNoOutput(true);
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"" . basename($fileName) . "\"");
header('Content-Length: ' . filesize($fileName));
// Disable any buffering to prevent OOM errors.
ob_end_flush();
readfile($fileName);
exit;
}
} DataSetRss.php 0000644 00000065123 14716415766 0007322 0 ustar 00 .
*/
namespace Xibo\Controller;
use Carbon\Exceptions\InvalidDateException;
use Jenssegers\Date\Date;
use PicoFeed\Syndication\Rss20FeedBuilder;
use PicoFeed\Syndication\Rss20ItemBuilder;
use Stash\Interfaces\PoolInterface;
use Xibo\Exception\AccessDeniedException;
use Xibo\Exception\InvalidArgumentException;
use Xibo\Exception\NotFoundException;
use Xibo\Exception\XiboException;
use Xibo\Factory\DataSetColumnFactory;
use Xibo\Factory\DataSetFactory;
use Xibo\Factory\DataSetRssFactory;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
use Xibo\Storage\StorageServiceInterface;
class DataSetRss extends Base
{
/** @var DataSetRssFactory */
private $dataSetRssFactory;
/** @var DataSetFactory */
private $dataSetFactory;
/** @var DataSetColumnFactory */
private $dataSetColumnFactory;
/** @var PoolInterface */
private $pool;
/** @var StorageServiceInterface */
private $store;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param DataSetRssFactory $dataSetRssFactory
* @param DataSetFactory $dataSetFactory
* @param DataSetColumnFactory $dataSetColumnFactory
* @param PoolInterface $pool
* @param StorageServiceInterface $store
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $dataSetRssFactory, $dataSetFactory, $dataSetColumnFactory, $pool, $store)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->dataSetRssFactory = $dataSetRssFactory;
$this->dataSetFactory = $dataSetFactory;
$this->dataSetColumnFactory = $dataSetColumnFactory;
$this->pool = $pool;
$this->store = $store;
}
/**
* Display Page
* @param $dataSetId
* @throws AccessDeniedException
* @throws XiboException
*/
public function displayPage($dataSetId)
{
$dataSet = $this->dataSetFactory->getById($dataSetId);
if (!$this->getUser()->checkEditable($dataSet))
throw new AccessDeniedException();
$this->getState()->template = 'dataset-rss-page';
$this->getState()->setData([
'dataSet' => $dataSet
]);
}
/**
* Search
* @param $dataSetId
*
* @SWG\Get(
* path="/dataset/{dataSetId}/rss",
* operationId="dataSetRSSSearch",
* tags={"dataset"},
* summary="Search RSSs",
* description="Search RSSs for DataSet",
* @SWG\Parameter(
* name="dataSetId",
* in="path",
* description="The DataSet ID",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(
* type="array",
* @SWG\Items(ref="#/definitions/DataSetRss")
* )
* )
* )
*
* @throws XiboException
*/
public function grid($dataSetId)
{
$dataSet = $this->dataSetFactory->getById($dataSetId);
if (!$this->getUser()->checkEditable($dataSet))
throw new AccessDeniedException();
$feeds = $this->dataSetRssFactory->query($this->gridRenderSort(), $this->gridRenderFilter([
'dataSetId' => $dataSetId,
'useRegexForName' => $this->getSanitizer()->getCheckbox('useRegexForName')
]));
foreach ($feeds as $feed) {
if ($this->isApi())
continue;
$feed->includeProperty('buttons');
// Edit
$feed->buttons[] = array(
'id' => 'datasetrss_button_edit',
'url' => $this->urlFor('dataSet.rss.edit.form', ['id' => $dataSetId, 'rssId' => $feed->id]),
'text' => __('Edit')
);
if ($this->getUser()->checkDeleteable($dataSet)) {
// Delete
$feed->buttons[] = array(
'id' => 'datasetrss_button_delete',
'url' => $this->urlFor('dataSet.rss.delete.form', ['id' => $dataSetId, 'rssId' => $feed->id]),
'text' => __('Delete')
);
}
}
$this->getState()->template = 'grid';
$this->getState()->setData($feeds);
}
/**
* Add form
* @param int $dataSetId
*
* @throws XiboException
*/
public function addForm($dataSetId)
{
$dataSet = $this->dataSetFactory->getById($dataSetId);
if (!$this->getUser()->checkEditable($dataSet))
throw new AccessDeniedException();
$columns = $dataSet->getColumn();
$dateColumns = [];
foreach ($columns as $column) {
if ($column->dataTypeId === 3)
$dateColumns[] = $column;
}
$this->getState()->template = 'dataset-rss-form-add';
$this->getState()->setData([
'dataSet' => $dataSet,
'extra' => [
'orderClauses' => [],
'filterClauses' => [],
'columns' => $columns,
'dateColumns' => $dateColumns
]
]);
}
/**
* Add
* @param $dataSetId
*
* @SWG\Post(
* path="/dataset/{dataSetId}/rss",
* operationId="dataSetRssAdd",
* tags={"dataset"},
* summary="Add RSS",
* description="Add a RSS to a DataSet",
* @SWG\Parameter(
* name="dataSetId",
* in="path",
* description="The DataSet ID",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="title",
* in="formData",
* description="The title for the RSS",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="title",
* in="formData",
* description="The author for the RSS",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="summaryColumnId",
* in="formData",
* description="The columnId to be used as each item summary",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="contentColumnId",
* in="formData",
* description="The columnId to be used as each item content",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="publishedDateColumnId",
* in="formData",
* description="The columnId to be used as each item published date",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=201,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/DataSetRss"),
* @SWG\Header(
* header="Location",
* description="Location of the new record",
* type="string"
* )
* )
* )
*
* @throws XiboException
*/
public function add($dataSetId)
{
$dataSet = $this->dataSetFactory->getById($dataSetId);
if (!$this->getUser()->checkEditable($dataSet)) {
throw new AccessDeniedException();
}
if ($this->getSanitizer()->getString('title') == '') {
throw new InvalidArgumentException(__('Please enter title'), 'title');
}
if ($this->getSanitizer()->getString('author') == '') {
throw new InvalidArgumentException(__('Please enter author name'), 'author');
}
// Create RSS
$feed = $this->dataSetRssFactory->createEmpty();
$feed->dataSetId = $dataSetId;
$feed->title = $this->getSanitizer()->getString('title');
$feed->author = $this->getSanitizer()->getString('author');
$feed->titleColumnId = $this->getSanitizer()->getInt('titleColumnId');
$feed->summaryColumnId = $this->getSanitizer()->getInt('summaryColumnId');
$feed->contentColumnId = $this->getSanitizer()->getInt('contentColumnId');
$feed->publishedDateColumnId = $this->getSanitizer()->getInt('publishedDateColumnId');
$this->handleFormFilterAndOrder($feed);
// New feed needs a PSK
$feed->setNewPsk();
// Save
$feed->save();
// Return
$this->getState()->hydrate([
'httpStatus' => 201,
'message' => sprintf(__('Added %s'), $feed->title),
'id' => $feed->id,
'data' => $feed
]);
}
/**
* @param \Xibo\Entity\DataSetRss $feed
*/
private function handleFormFilterAndOrder($feed)
{
// Order criteria
$orderClauses = $this->getSanitizer()->getStringArray('orderClause');
$orderClauseDirections = $this->getSanitizer()->getStringArray('orderClauseDirection');
$orderClauseMapping = [];
$i = -1;
foreach ($orderClauses as $orderClause) {
$i++;
if ($orderClause == '')
continue;
// Map the stop code received to the stop ref (if there is one)
$orderClauseMapping[] = [
'orderClause' => $orderClause,
'orderClauseDirection' => isset($orderClauseDirections[$i]) ? $orderClauseDirections[$i] : '',
];
}
$feed->sort = json_encode([
'sort' => $this->getSanitizer()->getString('sort'),
'useOrderingClause' => $this->getSanitizer()->getCheckbox('useOrderingClause'),
'orderClauses' => $orderClauseMapping
]);
// Filter criteria
$filterClauses = $this->getSanitizer()->getStringArray('filterClause');
$filterClauseOperator = $this->getSanitizer()->getStringArray('filterClauseOperator');
$filterClauseCriteria = $this->getSanitizer()->getStringArray('filterClauseCriteria');
$filterClauseValue = $this->getSanitizer()->getStringArray('filterClauseValue');
$filterClauseMapping = [];
$i = -1;
foreach ($filterClauses as $filterClause) {
$i++;
if ($filterClause == '')
continue;
// Map the stop code received to the stop ref (if there is one)
$filterClauseMapping[] = [
'filterClause' => $filterClause,
'filterClauseOperator' => isset($filterClauseOperator[$i]) ? $filterClauseOperator[$i] : '',
'filterClauseCriteria' => isset($filterClauseCriteria[$i]) ? $filterClauseCriteria[$i] : '',
'filterClauseValue' => isset($filterClauseValue[$i]) ? $filterClauseValue[$i] : '',
];
}
$feed->filter = json_encode([
'filter' => $this->getSanitizer()->getString('filter'),
'useFilteringClause' => $this->getSanitizer()->getCheckbox('useFilteringClause'),
'filterClauses' => $filterClauseMapping
]);
}
/**
* Edit Form
* @param $dataSetId
* @param $dataSetRssId
*
* @throws XiboException
*/
public function editForm($dataSetId, $dataSetRssId)
{
$dataSet = $this->dataSetFactory->getById($dataSetId);
if (!$this->getUser()->checkEditable($dataSet))
throw new AccessDeniedException();
$feed = $this->dataSetRssFactory->getById($dataSetRssId);
$columns = $dataSet->getColumn();
$dateColumns = [];
foreach ($columns as $column) {
if ($column->dataTypeId === 3)
$dateColumns[] = $column;
}
$this->getState()->template = 'dataset-rss-form-edit';
$this->getState()->setData([
'dataSet' => $dataSet,
'feed' => $feed,
'extra' => array_merge($feed->getSort(), $feed->getFilter(), ['columns' => $columns, 'dateColumns' => $dateColumns])
]);
}
/**
* Edit
* @param $dataSetId
* @param $rssId
*
* @SWG\Put(
* path="/dataset/{dataSetId}/rss/{rssId}",
* operationId="dataSetRssEdit",
* tags={"dataset"},
* summary="Edit Rss",
* description="Edit DataSet Rss Feed",
* @SWG\Parameter(
* name="dataSetId",
* in="path",
* description="The DataSet ID",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="rssId",
* in="path",
* description="The RSS ID",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="title",
* in="formData",
* description="The title for the RSS",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="title",
* in="formData",
* description="The author for the RSS",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="summaryColumnId",
* in="formData",
* description="The rssId to be used as each item summary",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="contentColumnId",
* in="formData",
* description="The columnId to be used as each item content",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="publishedDateColumnId",
* in="formData",
* description="The columnId to be used as each item published date",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="regeneratePsk",
* in="formData",
* description="Regenerate the PSK?",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*
* @throws XiboException
*/
public function edit($dataSetId, $rssId)
{
$dataSet = $this->dataSetFactory->getById($dataSetId);
if (!$this->getUser()->checkEditable($dataSet)) {
throw new AccessDeniedException();
}
if ($this->getSanitizer()->getString('title') == '') {
throw new InvalidArgumentException(__('Please enter title'), 'title');
}
if ($this->getSanitizer()->getString('author') == '') {
throw new InvalidArgumentException(__('Please enter author name'), 'author');
}
$feed = $this->dataSetRssFactory->getById($rssId);
$feed->title = $this->getSanitizer()->getString('title');
$feed->author = $this->getSanitizer()->getString('author');
$feed->titleColumnId = $this->getSanitizer()->getInt('titleColumnId');
$feed->summaryColumnId = $this->getSanitizer()->getInt('summaryColumnId');
$feed->contentColumnId = $this->getSanitizer()->getInt('contentColumnId');
$feed->publishedDateColumnId = $this->getSanitizer()->getInt('publishedDateColumnId');
$this->handleFormFilterAndOrder($feed);
if ($this->getSanitizer()->getCheckbox('regeneratePsk')) {
$feed->setNewPsk();
}
$feed->save();
// Delete from the cache
$this->pool->deleteItem('/dataset/rss/' . $feed->id);
// Return
$this->getState()->hydrate([
'message' => sprintf(__('Edited %s'), $feed->title),
'id' => $feed->id,
'data' => $feed
]);
}
/**
* Delete Form
* @param $dataSetId
* @param $rssId
*
* @throws XiboException
*/
public function deleteForm($dataSetId, $rssId)
{
$dataSet = $this->dataSetFactory->getById($dataSetId);
if (!$this->getUser()->checkDeleteable($dataSet))
throw new AccessDeniedException();
$feed = $this->dataSetRssFactory->getById($rssId);
$this->getState()->template = 'dataset-rss-form-delete';
$this->getState()->setData([
'dataSet' => $dataSet,
'feed' => $feed
]);
}
/**
* Delete
* @param $dataSetId
* @param $rssId
*
* @SWG\Delete(
* path="/dataset/{dataSetId}/rss/{rssId}",
* operationId="dataSetRSSDelete",
* tags={"dataset"},
* summary="Delete RSS",
* description="Delete DataSet RSS",
* @SWG\Parameter(
* name="dataSetId",
* in="path",
* description="The DataSet ID",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="rssId",
* in="path",
* description="The RSS ID",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*
* @throws XiboException
*/
public function delete($dataSetId, $rssId)
{
$dataSet = $this->dataSetFactory->getById($dataSetId);
if (!$this->getUser()->checkDeleteable($dataSet))
throw new AccessDeniedException();
$feed = $this->dataSetRssFactory->getById($rssId);
$feed->delete();
// Delete from the cache
$this->pool->deleteItem('/dataset/rss/' . $feed->id);
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Deleted %s'), $feed->title)
]);
}
/**
* @param $psk
*/
public function feed($psk)
{
$this->setNoOutput();
$this->getLog()->debug('RSS Feed Request with PSK ' . $psk);
// Try and get the feed using the PSK
try {
$feed = $this->dataSetRssFactory->getByPsk($psk);
// Get the DataSet out
$dataSet = $this->dataSetFactory->getById($feed->dataSetId);
// What is the edit date of this data set
$dataSetEditDate = ($dataSet->lastDataEdit == 0) ? $this->getDate()->parse()->subMonths(2) : $this->getDate()->parse($dataSet->lastDataEdit, 'U');
// Do we have this feed in the cache?
$cache = $this->pool->getItem('/dataset/rss/' . $feed->id);
$output = $cache->get();
if ($cache->isMiss() || $cache->getCreation() < $dataSetEditDate) {
// We need to recache
$this->getLog()->debug('Generating RSS feed and saving to cache. Created on ' . (($cache->getCreation() !== false) ? $cache->getCreation()->format('Y-m-d H:i:s') : 'never'));
$output = $this->generateFeed($feed, $dataSetEditDate, $dataSet);
$cache->set($output);
$cache->expiresAfter(new \DateInterval('PT5M'));
$this->pool->saveDeferred($cache);
} else {
$this->getLog()->debug('Serving from Cache');
}
$this->getApp()->response()->header('Content-Type', 'application/rss+xml');
echo $output;
} catch (NotFoundException $notFoundException) {
$this->getState()->httpStatus = 404;
}
}
/**
* @param \Xibo\Entity\DataSetRss $feed
* @param Date $dataSetEditDate
* @param \Xibo\Entity\DataSet $dataSet
* @return string
* @throws XiboException
*/
private function generateFeed($feed, $dataSetEditDate, $dataSet)
{
// Create the start of our feed, its description, etc.
$builder = Rss20FeedBuilder::create()
->withTitle($feed->title)
->withAuthor($feed->author)
->withDate($dataSetEditDate);
$sort = $feed->getSort();
$filter = $feed->getFilter();
// Get results, using the filter criteria
// Ordering
$ordering = '';
if ($sort['useOrderingClause'] == 1) {
$ordering = $sort['sort'];
} else {
// Build an order string
foreach ($sort['orderClauses'] as $clause) {
$ordering .= $clause['orderClause'] . ' ' . $clause['orderClauseDirection'] . ',';
}
$ordering = rtrim($ordering, ',');
}
// Filtering
$filtering = '';
if ($filter['useFilteringClause'] == 1) {
$filtering = $filter['filter'];
} else {
// Build
$i = 0;
foreach ($filter['filterClauses'] as $clause) {
$i++;
$criteria = '';
switch ($clause['filterClauseCriteria']) {
case 'starts-with':
$criteria = 'LIKE \'' . $clause['filterClauseValue'] . '%\'';
break;
case 'ends-with':
$criteria = 'LIKE \'%' . $clause['filterClauseValue'] . '\'';
break;
case 'contains':
$criteria = 'LIKE \'%' . $clause['filterClauseValue'] . '%\'';
break;
case 'equals':
$criteria = '= \'' . $clause['filterClauseValue'] . '\'';
break;
case 'not-contains':
$criteria = 'NOT LIKE \'%' . $clause['filterClauseValue'] . '%\'';
break;
case 'not-starts-with':
$criteria = 'NOT LIKE \'' . $clause['filterClauseValue'] . '%\'';
break;
case 'not-ends-with':
$criteria = 'NOT LIKE \'%' . $clause['filterClauseValue'] . '\'';
break;
case 'not-equals':
$criteria = '<> \'' . $clause['filterClauseValue'] . '\'';
break;
case 'greater-than':
$criteria = '> \'' . $clause['filterClauseValue'] . '\'';
break;
case 'less-than':
$criteria = '< \'' . $clause['filterClauseValue'] . '\'';
break;
default:
// Continue out of the switch and the loop (this takes us back to our foreach)
continue 2;
}
if ($i > 1)
$filtering .= ' ' . $clause['filterClauseOperator'] . ' ';
// Ability to filter by not-empty and empty
if ($clause['filterClauseCriteria'] == 'is-empty') {
$filtering .= 'IFNULL(`' . $clause['filterClause'] . '`, \'\') = \'\'';
} else if ($clause['filterClauseCriteria'] == 'is-not-empty') {
$filtering .= 'IFNULL(`' . $clause['filterClause'] . '`, \'\') <> \'\'';
} else {
$filtering .= $clause['filterClause'] . ' ' . $criteria;
}
}
}
// Get an array representing the id->heading mappings
$mappings = [];
$columns = [];
if ($feed->titleColumnId != 0)
$columns[] = $feed->titleColumnId;
if ($feed->summaryColumnId != 0)
$columns[] = $feed->summaryColumnId;
if ($feed->contentColumnId != 0)
$columns[] = $feed->contentColumnId;
if ($feed->publishedDateColumnId != 0)
$columns[] = $feed->publishedDateColumnId;
foreach ($columns as $dataSetColumnId) {
// Get the column definition this represents
$column = $dataSet->getColumn($dataSetColumnId);
/* @var \Xibo\Entity\DataSetColumn $column */
$mappings[$column->heading] = [
'dataSetColumnId' => $dataSetColumnId,
'heading' => $column->heading,
'dataTypeId' => $column->dataTypeId
];
}
$filter = [
'filter' => $filtering,
'order' => $ordering
];
// Set the timezone for SQL
$dateNow = $this->getDate()->parse();
$this->store->setTimeZone($this->getDate()->getLocalDate($dateNow, 'P'));
// Get the data (complete table, filtered)
$dataSetResults = $dataSet->getData($filter);
foreach ($dataSetResults as $row) {
$item = Rss20ItemBuilder::create($builder);
$hasContent = false;
$hasDate = false;
// Go through the columns of each row
foreach ($row as $key => $value) {
// Is this one of the columns we're interested in?
if (isset($mappings[$key])) {
// Yes it is - which one?
$hasContent = true;
if ($mappings[$key]['dataSetColumnId'] === $feed->titleColumnId) {
$item->withTitle($value);
} else if ($mappings[$key]['dataSetColumnId'] === $feed->summaryColumnId) {
$item->withSummary($value);
} else if ($mappings[$key]['dataSetColumnId'] === $feed->contentColumnId) {
$item->withContent($value);
} else if ($mappings[$key]['dataSetColumnId'] === $feed->publishedDateColumnId) {
try {
$date = $this->getDate()->parse($value, 'U');
} catch (InvalidDateException $dateException) {
$date = $dataSetEditDate;
}
if ($date !== null) {
$item->withPublishedDate($date);
$hasDate = true;
}
}
}
}
if (!$hasDate)
$item->withPublishedDate($dataSetEditDate);
if ($hasContent)
$builder->withItem($item);
}
// Found, do things
return $builder->build();
}
} Settings.php 0000644 00000072021 14716415766 0007100 0 ustar 00 .
*/
namespace Xibo\Controller;
use Respect\Validation\Validator as v;
use Xibo\Exception\AccessDeniedException;
use Xibo\Exception\InvalidArgumentException;
use Xibo\Exception\NotFoundException;
use Xibo\Factory\LayoutFactory;
use Xibo\Factory\SettingsFactory;
use Xibo\Factory\TransitionFactory;
use Xibo\Factory\UserGroupFactory;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
/**
* Class Settings
* @package Xibo\Controller
*/
class Settings extends Base
{
/** @var LayoutFactory */
private $layoutFactory;
/** @var UserGroupFactory */
private $userGroupFactory;
/** @var TransitionFactory */
private $transitionfactory;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param LayoutFactory $layoutFactory
* @param UserGroupFactory $userGroupFactory
* @param TransitionFactory $transitionfactory
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $layoutFactory, $userGroupFactory, $transitionfactory)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->layoutFactory = $layoutFactory;
$this->userGroupFactory = $userGroupFactory;
$this->transitionfactory = $transitionfactory;
// Initialise extra validation rules
v::with('Xibo\\Validation\\Rules\\');
}
/**
* Display Page
*/
public function displayPage()
{
// Should we hide other themes?
$themes = [];
$hideThemes = $this->getConfig()->getThemeConfig('hide_others');
if (!$hideThemes) {
// Get all theme options
$directory = new \RecursiveDirectoryIterator(PROJECT_ROOT . '/web/theme', \FilesystemIterator::SKIP_DOTS);
$filter = new \RecursiveCallbackFilterIterator($directory, function($current, $key, $iterator) {
if ($current->isDir()) {
return true;
}
return strpos($current->getFilename(), 'config.php') === 0;
});
$iterator = new \RecursiveIteratorIterator($filter);
// Add options for all themes installed
foreach($iterator as $file) {
/* @var \SplFileInfo $file */
$this->getLog()->debug('Found ' . $file->getPath());
// Include the config file
include $file->getPath() . '/' . $file->getFilename();
$themes[] = ['id' => basename($file->getPath()), 'value' => $config['theme_name']];
}
}
// A list of timezones
$timeZones = [];
foreach ($this->getDate()->timezoneList() as $key => $value) {
$timeZones[] = ['id' => $key, 'value' => $value];
}
// A list of languages
// Build an array of supported languages
$languages = [];
$localeDir = PROJECT_ROOT . '/locale';
foreach (array_map('basename', glob($localeDir . '/*.mo')) as $lang) {
// Trim the .mo off the end
$lang = str_replace('.mo', '', $lang);
$languages[] = ['id' => $lang, 'value' => $lang];
}
// The default layout
try {
$defaultLayout = $this->layoutFactory->getById($this->getConfig()->getSetting('DEFAULT_LAYOUT'));
} catch (NotFoundException $notFoundException) {
$defaultLayout = null;
}
// The default user group
try {
$defaultUserGroup = $this->userGroupFactory->getById($this->getConfig()->getSetting('DEFAULT_USERGROUP'));
} catch (NotFoundException $notFoundException) {
$defaultUserGroup = null;
}
// The default Transition In
try {
$defaultTransitionIn = $this->transitionfactory->getByCode($this->getConfig()->getSetting('DEFAULT_TRANSITION_IN'));
} catch (NotFoundException $notFoundException) {
$defaultTransitionIn = null;
}
// The default Transition Out
try {
$defaultTransitionOut = $this->transitionfactory->getByCode($this->getConfig()->getSetting('DEFAULT_TRANSITION_OUT'));
} catch (NotFoundException $notFoundException) {
$defaultTransitionOut = null;
}
// Work out whether we're in a valid elevate log period
$elevateLogUntil = $this->getConfig()->getSetting('ELEVATE_LOG_UNTIL');
if ($elevateLogUntil != null) {
$elevateLogUntil = intval($elevateLogUntil);
if ($elevateLogUntil <= time()) {
$elevateLogUntil = null;
} else {
$elevateLogUntil = $this->getDate()->getLocalDate($elevateLogUntil);
}
}
// Render the Theme and output
$this->getState()->template = 'settings-page';
$this->getState()->setData([
'hideThemes' => $hideThemes,
'themes' => $themes,
'languages' => $languages,
'timeZones' => $timeZones,
'defaultLayout' => $defaultLayout,
'defaultUserGroup' => $defaultUserGroup,
'elevateLogUntil' => $elevateLogUntil,
'defaultTransitionIn' => $defaultTransitionIn,
'defaultTransitionOut' => $defaultTransitionOut
]);
}
/**
* Update settings
* @throws \Xibo\Exception\XiboException
*/
public function update()
{
if (!$this->getUser()->isSuperAdmin())
throw new AccessDeniedException();
// Pull in all of the settings we're expecting to be submitted with this form.
if ($this->getConfig()->isSettingEditable('LIBRARY_LOCATION')) {
$libraryLocation = $this->getSanitizer()->getString('LIBRARY_LOCATION');
// Validate library location
// Check for a trailing slash and add it if its not there
$libraryLocation = rtrim($libraryLocation, '/');
$libraryLocation = rtrim($libraryLocation, '\\') . DIRECTORY_SEPARATOR;
// Attempt to add the directory specified
if (!file_exists($libraryLocation . 'temp'))
// Make the directory with broad permissions recursively (so will add the whole path)
mkdir($libraryLocation . 'temp', 0777, true);
if (!is_writable($libraryLocation . 'temp'))
throw new InvalidArgumentException(__('The Library Location you have picked is not writeable'), 'LIBRARY_LOCATION');
$this->getConfig()->changeSetting('LIBRARY_LOCATION', $libraryLocation);
}
if ($this->getConfig()->isSettingEditable('SERVER_KEY')) {
$this->getConfig()->changeSetting('SERVER_KEY', $this->getSanitizer()->getString('SERVER_KEY'));
}
if ($this->getConfig()->isSettingEditable('GLOBAL_THEME_NAME')) {
$this->getConfig()->changeSetting('GLOBAL_THEME_NAME', $this->getSanitizer()->getString('GLOBAL_THEME_NAME'));
}
if ($this->getConfig()->isSettingEditable('NAVIGATION_MENU_POSITION')) {
$this->getConfig()->changeSetting('NAVIGATION_MENU_POSITION', $this->getSanitizer()->getString('NAVIGATION_MENU_POSITION'));
}
if ($this->getConfig()->isSettingEditable('LIBRARY_MEDIA_UPDATEINALL_CHECKB')) {
$this->getConfig()->changeSetting('LIBRARY_MEDIA_UPDATEINALL_CHECKB', $this->getSanitizer()->getCheckbox('LIBRARY_MEDIA_UPDATEINALL_CHECKB'));
}
if ($this->getConfig()->isSettingEditable('LAYOUT_COPY_MEDIA_CHECKB')) {
$this->getConfig()->changeSetting('LAYOUT_COPY_MEDIA_CHECKB', $this->getSanitizer()->getCheckbox('LAYOUT_COPY_MEDIA_CHECKB'));
}
if ($this->getConfig()->isSettingEditable('LIBRARY_MEDIA_DELETEOLDVER_CHECKB')) {
$this->getConfig()->changeSetting('LIBRARY_MEDIA_DELETEOLDVER_CHECKB', $this->getSanitizer()->getCheckbox('LIBRARY_MEDIA_DELETEOLDVER_CHECKB'));
}
if ($this->getConfig()->isSettingEditable('DEFAULT_CASCADE_PERMISSION_CHECKB')) {
$this->getConfig()->changeSetting('DEFAULT_CASCADE_PERMISSION_CHECKB', $this->getSanitizer()->getCheckbox('DEFAULT_CASCADE_PERMISSION_CHECKB'));
}
if ($this->getConfig()->isSettingEditable('DEFAULT_LAYOUT_AUTO_PUBLISH_CHECKB')) {
$this->getConfig()->changeSetting('DEFAULT_LAYOUT_AUTO_PUBLISH_CHECKB', $this->getSanitizer()->getCheckbox('DEFAULT_LAYOUT_AUTO_PUBLISH_CHECKB'));
}
if ($this->getConfig()->isSettingEditable('DEFAULT_TRANSITION_IN')) {
$this->getConfig()->changeSetting('DEFAULT_TRANSITION_IN', $this->getSanitizer()->getString('DEFAULT_TRANSITION_IN'));
}
if ($this->getConfig()->isSettingEditable('DEFAULT_TRANSITION_OUT')) {
$this->getConfig()->changeSetting('DEFAULT_TRANSITION_OUT', $this->getSanitizer()->getString('DEFAULT_TRANSITION_OUT'));
}
if ($this->getConfig()->isSettingEditable('DEFAULT_TRANSITION_DURATION')) {
$this->getConfig()->changeSetting('DEFAULT_TRANSITION_DURATION', $this->getSanitizer()->getInt('DEFAULT_TRANSITION_DURATION'));
}
if ($this->getConfig()->isSettingEditable('DEFAULT_TRANSITION_AUTO_APPLY')) {
$this->getConfig()->changeSetting('DEFAULT_TRANSITION_AUTO_APPLY', $this->getSanitizer()->getCheckbox('DEFAULT_TRANSITION_AUTO_APPLY'));
}
if ($this->getConfig()->isSettingEditable('DEFAULT_RESIZE_THRESHOLD')) {
$this->getConfig()->changeSetting('DEFAULT_RESIZE_THRESHOLD', $this->getSanitizer()->getInt('DEFAULT_RESIZE_THRESHOLD'));
}
if ($this->getConfig()->isSettingEditable('DEFAULT_RESIZE_LIMIT')) {
$this->getConfig()->changeSetting('DEFAULT_RESIZE_LIMIT', $this->getSanitizer()->getInt('DEFAULT_RESIZE_LIMIT'));
}
if ($this->getConfig()->isSettingEditable('DEFAULT_LAYOUT')) {
$this->getConfig()->changeSetting('DEFAULT_LAYOUT', $this->getSanitizer()->getInt('DEFAULT_LAYOUT'));
}
if ($this->getConfig()->isSettingEditable('XMR_ADDRESS')) {
$this->getConfig()->changeSetting('XMR_ADDRESS', $this->getSanitizer()->getString('XMR_ADDRESS'));
}
if ($this->getConfig()->isSettingEditable('XMR_PUB_ADDRESS')) {
$this->getConfig()->changeSetting('XMR_PUB_ADDRESS', $this->getSanitizer()->getString('XMR_PUB_ADDRESS'));
}
if ($this->getConfig()->isSettingEditable('DEFAULT_LAT')) {
$value = $this->getSanitizer()->getString('DEFAULT_LAT');
$this->getConfig()->changeSetting('DEFAULT_LAT', $value);
if (!v::latitude()->validate($value)) {
throw new InvalidArgumentException(__('The latitude entered is not valid.'), 'DEFAULT_LAT');
}
}
if ($this->getConfig()->isSettingEditable('DEFAULT_LONG')) {
$value = $this->getSanitizer()->getString('DEFAULT_LONG');
$this->getConfig()->changeSetting('DEFAULT_LONG', $value);
if (!v::longitude()->validate($value)) {
throw new InvalidArgumentException(__('The longitude entered is not valid.'), 'DEFAULT_LONG');
}
}
if ($this->getConfig()->isSettingEditable('SHOW_DISPLAY_AS_VNCLINK')) {
$this->getConfig()->changeSetting('SHOW_DISPLAY_AS_VNCLINK', $this->getSanitizer()->getString('SHOW_DISPLAY_AS_VNCLINK'));
}
if ($this->getConfig()->isSettingEditable('SHOW_DISPLAY_AS_VNC_TGT')) {
$this->getConfig()->changeSetting('SHOW_DISPLAY_AS_VNC_TGT', $this->getSanitizer()->getString('SHOW_DISPLAY_AS_VNC_TGT'));
}
if ($this->getConfig()->isSettingEditable('MAX_LICENSED_DISPLAYS')) {
$this->getConfig()->changeSetting('MAX_LICENSED_DISPLAYS', $this->getSanitizer()->getInt('MAX_LICENSED_DISPLAYS'));
}
if ($this->getConfig()->isSettingEditable('DISPLAY_PROFILE_AGGREGATION_LEVEL_DEFAULT')) {
$this->getConfig()->changeSetting('DISPLAY_PROFILE_AGGREGATION_LEVEL_DEFAULT', $this->getSanitizer()->getString('DISPLAY_PROFILE_AGGREGATION_LEVEL_DEFAULT'));
}
if ($this->getConfig()->isSettingEditable('DISPLAY_PROFILE_STATS_DEFAULT')) {
$this->getConfig()->changeSetting('DISPLAY_PROFILE_STATS_DEFAULT', $this->getSanitizer()->getCheckbox('DISPLAY_PROFILE_STATS_DEFAULT'));
}
if ($this->getConfig()->isSettingEditable('LAYOUT_STATS_ENABLED_DEFAULT')) {
$this->getConfig()->changeSetting('LAYOUT_STATS_ENABLED_DEFAULT', $this->getSanitizer()->getCheckbox('LAYOUT_STATS_ENABLED_DEFAULT'));
}
if ($this->getConfig()->isSettingEditable('PLAYLIST_STATS_ENABLED_DEFAULT')) {
$this->getConfig()->changeSetting('PLAYLIST_STATS_ENABLED_DEFAULT', $this->getSanitizer()->getString('PLAYLIST_STATS_ENABLED_DEFAULT'));
}
if ($this->getConfig()->isSettingEditable('MEDIA_STATS_ENABLED_DEFAULT')) {
$this->getConfig()->changeSetting('MEDIA_STATS_ENABLED_DEFAULT', $this->getSanitizer()->getString('MEDIA_STATS_ENABLED_DEFAULT'));
}
if ($this->getConfig()->isSettingEditable('WIDGET_STATS_ENABLED_DEFAULT')) {
$this->getConfig()->changeSetting('WIDGET_STATS_ENABLED_DEFAULT', $this->getSanitizer()->getString('WIDGET_STATS_ENABLED_DEFAULT'));
}
if ($this->getConfig()->isSettingEditable('DISPLAY_PROFILE_CURRENT_LAYOUT_STATUS_ENABLED')) {
$this->getConfig()->changeSetting('DISPLAY_PROFILE_CURRENT_LAYOUT_STATUS_ENABLED', $this->getSanitizer()->getCheckbox('DISPLAY_PROFILE_CURRENT_LAYOUT_STATUS_ENABLED'));
}
if ($this->getConfig()->isSettingEditable('DISPLAY_LOCK_NAME_TO_DEVICENAME')) {
$this->getConfig()->changeSetting('DISPLAY_LOCK_NAME_TO_DEVICENAME', $this->getSanitizer()->getCheckbox('DISPLAY_LOCK_NAME_TO_DEVICENAME'));
}
if ($this->getConfig()->isSettingEditable('DISPLAY_PROFILE_SCREENSHOT_INTERVAL_ENABLED')) {
$this->getConfig()->changeSetting('DISPLAY_PROFILE_SCREENSHOT_INTERVAL_ENABLED', $this->getSanitizer()->getCheckbox('DISPLAY_PROFILE_SCREENSHOT_INTERVAL_ENABLED'));
}
if ($this->getConfig()->isSettingEditable('DISPLAY_PROFILE_SCREENSHOT_SIZE_DEFAULT')) {
$this->getConfig()->changeSetting('DISPLAY_PROFILE_SCREENSHOT_SIZE_DEFAULT', $this->getSanitizer()->getInt('DISPLAY_PROFILE_SCREENSHOT_SIZE_DEFAULT'));
}
if ($this->getConfig()->isSettingEditable('DISPLAY_AUTO_AUTH')) {
$this->getConfig()->changeSetting('DISPLAY_AUTO_AUTH', $this->getSanitizer()->getCheckbox('DISPLAY_AUTO_AUTH'));
}
if ($this->getConfig()->isSettingEditable('HELP_BASE')) {
$this->getConfig()->changeSetting('HELP_BASE', $this->getSanitizer()->getString('HELP_BASE'));
}
if ($this->getConfig()->isSettingEditable('QUICK_CHART_URL')) {
$this->getConfig()->changeSetting('QUICK_CHART_URL', $this->getSanitizer()->getString('QUICK_CHART_URL'));
}
if ($this->getConfig()->isSettingEditable('PHONE_HOME')) {
$this->getConfig()->changeSetting('PHONE_HOME', $this->getSanitizer()->getCheckbox('PHONE_HOME'));
}
if ($this->getConfig()->isSettingEditable('PHONE_HOME_KEY')) {
$this->getConfig()->changeSetting('PHONE_HOME_KEY', $this->getSanitizer()->getString('PHONE_HOME_KEY'));
}
if ($this->getConfig()->isSettingEditable('PHONE_HOME_DATE')) {
$this->getConfig()->changeSetting('PHONE_HOME_DATE', $this->getSanitizer()->getInt('PHONE_HOME_DATE'));
}
if ($this->getConfig()->isSettingEditable('PHONE_HOME_URL')) {
$this->getConfig()->changeSetting('PHONE_HOME_URL', $this->getSanitizer()->getString('PHONE_HOME_URL'));
}
if ($this->getConfig()->isSettingEditable('SCHEDULE_LOOKAHEAD')) {
$this->getConfig()->changeSetting('SCHEDULE_LOOKAHEAD', $this->getSanitizer()->getCheckbox('SCHEDULE_LOOKAHEAD'));
}
if ($this->getConfig()->isSettingEditable('EVENT_SYNC')) {
$this->getConfig()->changeSetting('EVENT_SYNC', $this->getSanitizer()->getCheckbox('EVENT_SYNC'));
}
if ($this->getConfig()->isSettingEditable('REQUIRED_FILES_LOOKAHEAD')) {
$this->getConfig()->changeSetting('REQUIRED_FILES_LOOKAHEAD', $this->getSanitizer()->getInt('REQUIRED_FILES_LOOKAHEAD'));
}
if ($this->getConfig()->isSettingEditable('SETTING_IMPORT_ENABLED')) {
$this->getConfig()->changeSetting('SETTING_IMPORT_ENABLED', $this->getSanitizer()->getCheckbox('SETTING_IMPORT_ENABLED'));
}
if ($this->getConfig()->isSettingEditable('SETTING_LIBRARY_TIDY_ENABLED')) {
$this->getConfig()->changeSetting('SETTING_LIBRARY_TIDY_ENABLED', $this->getSanitizer()->getCheckbox('SETTING_LIBRARY_TIDY_ENABLED'));
}
if ($this->getConfig()->isSettingEditable('EMBEDDED_STATUS_WIDGET')) {
$this->getConfig()->changeSetting('EMBEDDED_STATUS_WIDGET', $this->getSanitizer()->getString('EMBEDDED_STATUS_WIDGET'));
}
if ($this->getConfig()->isSettingEditable('DEFAULTS_IMPORTED')) {
$this->getConfig()->changeSetting('DEFAULTS_IMPORTED', $this->getSanitizer()->getCheckbox('DEFAULTS_IMPORTED'));
}
if ($this->getConfig()->isSettingEditable('DASHBOARD_LATEST_NEWS_ENABLED')) {
$this->getConfig()->changeSetting('DASHBOARD_LATEST_NEWS_ENABLED', $this->getSanitizer()->getCheckbox('DASHBOARD_LATEST_NEWS_ENABLED'));
}
if ($this->getConfig()->isSettingEditable('INSTANCE_SUSPENDED')) {
$this->getConfig()->changeSetting('INSTANCE_SUSPENDED', $this->getSanitizer()->getCheckbox('INSTANCE_SUSPENDED'));
}
if ($this->getConfig()->isSettingEditable('LATEST_NEWS_URL')) {
$this->getConfig()->changeSetting('LATEST_NEWS_URL', $this->getSanitizer()->getString('LATEST_NEWS_URL'));
}
if ($this->getConfig()->isSettingEditable('MAINTENANCE_ENABLED')) {
$this->getConfig()->changeSetting('MAINTENANCE_ENABLED', $this->getSanitizer()->getString('MAINTENANCE_ENABLED'));
}
if ($this->getConfig()->isSettingEditable('MAINTENANCE_EMAIL_ALERTS')) {
$this->getConfig()->changeSetting('MAINTENANCE_EMAIL_ALERTS', $this->getSanitizer()->getCheckbox('MAINTENANCE_EMAIL_ALERTS'));
}
if ($this->getConfig()->isSettingEditable('MAINTENANCE_KEY')) {
$this->getConfig()->changeSetting('MAINTENANCE_KEY', $this->getSanitizer()->getString('MAINTENANCE_KEY'));
}
if ($this->getConfig()->isSettingEditable('MAINTENANCE_LOG_MAXAGE')) {
$this->getConfig()->changeSetting('MAINTENANCE_LOG_MAXAGE', $this->getSanitizer()->getInt('MAINTENANCE_LOG_MAXAGE'));
}
if ($this->getConfig()->isSettingEditable('MAINTENANCE_STAT_MAXAGE')) {
$this->getConfig()->changeSetting('MAINTENANCE_STAT_MAXAGE', $this->getSanitizer()->getInt('MAINTENANCE_STAT_MAXAGE'));
}
if ($this->getConfig()->isSettingEditable('MAINTENANCE_ALERT_TOUT')) {
$this->getConfig()->changeSetting('MAINTENANCE_ALERT_TOUT', $this->getSanitizer()->getInt('MAINTENANCE_ALERT_TOUT'));
}
if ($this->getConfig()->isSettingEditable('MAINTENANCE_ALWAYS_ALERT')) {
$this->getConfig()->changeSetting('MAINTENANCE_ALWAYS_ALERT', $this->getSanitizer()->getCheckbox('MAINTENANCE_ALWAYS_ALERT'));
}
if ($this->getConfig()->isSettingEditable('mail_to')) {
$this->getConfig()->changeSetting('mail_to', $this->getSanitizer()->getString('mail_to'));
}
if ($this->getConfig()->isSettingEditable('mail_from')) {
$this->getConfig()->changeSetting('mail_from', $this->getSanitizer()->getString('mail_from'));
}
if ($this->getConfig()->isSettingEditable('mail_from_name')) {
$this->getConfig()->changeSetting('mail_from_name', $this->getSanitizer()->getString('mail_from_name'));
}
if ($this->getConfig()->isSettingEditable('SENDFILE_MODE')) {
$this->getConfig()->changeSetting('SENDFILE_MODE', $this->getSanitizer()->getString('SENDFILE_MODE'));
}
if ($this->getConfig()->isSettingEditable('PROXY_HOST')) {
$this->getConfig()->changeSetting('PROXY_HOST', $this->getSanitizer()->getString('PROXY_HOST'));
}
if ($this->getConfig()->isSettingEditable('PROXY_PORT')) {
$this->getConfig()->changeSetting('PROXY_PORT', $this->getSanitizer()->getString('PROXY_PORT'));
}
if ($this->getConfig()->isSettingEditable('PROXY_AUTH')) {
$this->getConfig()->changeSetting('PROXY_AUTH', $this->getSanitizer()->getString('PROXY_AUTH'));
}
if ($this->getConfig()->isSettingEditable('PROXY_EXCEPTIONS')) {
$this->getConfig()->changeSetting('PROXY_EXCEPTIONS', $this->getSanitizer()->getString('PROXY_EXCEPTIONS'));
}
if ($this->getConfig()->isSettingEditable('CDN_URL')) {
$this->getConfig()->changeSetting('CDN_URL', $this->getSanitizer()->getString('CDN_URL'));
}
if ($this->getConfig()->isSettingEditable('MONTHLY_XMDS_TRANSFER_LIMIT_KB')) {
$this->getConfig()->changeSetting('MONTHLY_XMDS_TRANSFER_LIMIT_KB', $this->getSanitizer()->getInt('MONTHLY_XMDS_TRANSFER_LIMIT_KB'));
}
if ($this->getConfig()->isSettingEditable('LIBRARY_SIZE_LIMIT_KB')) {
$this->getConfig()->changeSetting('LIBRARY_SIZE_LIMIT_KB', $this->getSanitizer()->getInt('LIBRARY_SIZE_LIMIT_KB'));
}
if ($this->getConfig()->isSettingEditable('FORCE_HTTPS')) {
$this->getConfig()->changeSetting('FORCE_HTTPS', $this->getSanitizer()->getCheckbox('FORCE_HTTPS'));
}
if ($this->getConfig()->isSettingEditable('ISSUE_STS')) {
$this->getConfig()->changeSetting('ISSUE_STS', $this->getSanitizer()->getCheckbox('ISSUE_STS'));
}
if ($this->getConfig()->isSettingEditable('STS_TTL')) {
$this->getConfig()->changeSetting('STS_TTL', $this->getSanitizer()->getInt('STS_TTL'));
}
if ($this->getConfig()->isSettingEditable('WHITELIST_LOAD_BALANCERS')) {
$this->getConfig()->changeSetting('WHITELIST_LOAD_BALANCERS', $this->getSanitizer()->getString('WHITELIST_LOAD_BALANCERS'));
}
if ($this->getConfig()->isSettingEditable('LAYOUT_DEFAULT')) {
$this->getConfig()->changeSetting('LAYOUT_DEFAULT', $this->getSanitizer()->getString('LAYOUT_DEFAULT'));
}
if ($this->getConfig()->isSettingEditable('MEDIA_DEFAULT')) {
$this->getConfig()->changeSetting('MEDIA_DEFAULT', $this->getSanitizer()->getString('MEDIA_DEFAULT'));
}
if ($this->getConfig()->isSettingEditable('REGION_OPTIONS_COLOURING')) {
$this->getConfig()->changeSetting('REGION_OPTIONS_COLOURING', $this->getSanitizer()->getString('REGION_OPTIONS_COLOURING'));
}
if ($this->getConfig()->isSettingEditable('SCHEDULE_WITH_VIEW_PERMISSION')) {
$this->getConfig()->changeSetting('SCHEDULE_WITH_VIEW_PERMISSION', $this->getSanitizer()->getCheckbox('SCHEDULE_WITH_VIEW_PERMISSION'));
}
if ($this->getConfig()->isSettingEditable('SCHEDULE_SHOW_LAYOUT_NAME')) {
$this->getConfig()->changeSetting('SCHEDULE_SHOW_LAYOUT_NAME', $this->getSanitizer()->getCheckbox('SCHEDULE_SHOW_LAYOUT_NAME'));
}
if ($this->getConfig()->isSettingEditable('INHERIT_PARENT_PERMISSIONS')) {
$this->getConfig()->changeSetting('INHERIT_PARENT_PERMISSIONS', $this->getSanitizer()->getCheckbox('INHERIT_PARENT_PERMISSIONS'));
}
if ($this->getConfig()->isSettingEditable('MODULE_CONFIG_LOCKED_CHECKB')) {
$this->getConfig()->changeSetting('MODULE_CONFIG_LOCKED_CHECKB', $this->getSanitizer()->getCheckbox('MODULE_CONFIG_LOCKED_CHECKB'));
}
if ($this->getConfig()->isSettingEditable('TASK_CONFIG_LOCKED_CHECKB')) {
$this->getConfig()->changeSetting('TASK_CONFIG_LOCKED_CHECKB', $this->getSanitizer()->getCheckbox('TASK_CONFIG_LOCKED_CHECKB'));
}
if ($this->getConfig()->isSettingEditable('TRANSITION_CONFIG_LOCKED_CHECKB')) {
$this->getConfig()->changeSetting('TRANSITION_CONFIG_LOCKED_CHECKB', $this->getSanitizer()->getCheckbox('TRANSITION_CONFIG_LOCKED_CHECKB'));
}
if ($this->getConfig()->isSettingEditable('DEFAULT_LANGUAGE')) {
$this->getConfig()->changeSetting('DEFAULT_LANGUAGE', $this->getSanitizer()->getString('DEFAULT_LANGUAGE'));
}
if ($this->getConfig()->isSettingEditable('defaultTimezone')) {
$this->getConfig()->changeSetting('defaultTimezone', $this->getSanitizer()->getString('defaultTimezone'));
}
if ($this->getConfig()->isSettingEditable('DATE_FORMAT')) {
$this->getConfig()->changeSetting('DATE_FORMAT', $this->getSanitizer()->getString('DATE_FORMAT'));
}
if ($this->getConfig()->isSettingEditable('DETECT_LANGUAGE')) {
$this->getConfig()->changeSetting('DETECT_LANGUAGE', $this->getSanitizer()->getCheckbox('DETECT_LANGUAGE'));
}
if ($this->getConfig()->isSettingEditable('CALENDAR_TYPE')) {
$this->getConfig()->changeSetting('CALENDAR_TYPE', $this->getSanitizer()->getString('CALENDAR_TYPE'));
}
if ($this->getConfig()->isSettingEditable('RESTING_LOG_LEVEL')) {
$this->getConfig()->changeSetting('RESTING_LOG_LEVEL', $this->getSanitizer()->getString('RESTING_LOG_LEVEL'));
}
// Handle changes to log level
$newLogLevel = null;
$newElevateUntil = null;
$currentLogLevel = $this->getConfig()->getSetting('audit');
if ($this->getConfig()->isSettingEditable('audit')) {
$newLogLevel = $this->getSanitizer()->getString('audit');
$this->getConfig()->changeSetting('audit', $newLogLevel);
}
if ($this->getConfig()->isSettingEditable('ELEVATE_LOG_UNTIL') && $this->getSanitizer()->getDate('ELEVATE_LOG_UNTIL') != null) {
$newElevateUntil = $this->getSanitizer()->getDate('ELEVATE_LOG_UNTIL')->format('U');
$this->getConfig()->changeSetting('ELEVATE_LOG_UNTIL', $newElevateUntil);
}
// Have we changed log level? If so, were we also provided the elevate until setting?
if ($newElevateUntil === null && $currentLogLevel != $newLogLevel) {
// We haven't provided an elevate until (meaning it is not visible)
$this->getConfig()->changeSetting('ELEVATE_LOG_UNTIL', $this->getDate()->parse()->addHour(1)->format('U'));
}
if ($this->getConfig()->isSettingEditable('SERVER_MODE')) {
$this->getConfig()->changeSetting('SERVER_MODE', $this->getSanitizer()->getString('SERVER_MODE'));
}
if ($this->getConfig()->isSettingEditable('DEFAULT_USERGROUP')) {
$this->getConfig()->changeSetting('DEFAULT_USERGROUP', $this->getSanitizer()->getInt('DEFAULT_USERGROUP'));
}
if ($this->getConfig()->isSettingEditable('defaultUsertype')) {
$this->getConfig()->changeSetting('defaultUsertype', $this->getSanitizer()->getString('defaultUsertype'));
}
if ($this->getConfig()->isSettingEditable('USER_PASSWORD_POLICY')) {
$this->getConfig()->changeSetting('USER_PASSWORD_POLICY', $this->getSanitizer()->getString('USER_PASSWORD_POLICY'));
}
if ($this->getConfig()->isSettingEditable('USER_PASSWORD_ERROR')) {
$this->getConfig()->changeSetting('USER_PASSWORD_ERROR', $this->getSanitizer()->getString('USER_PASSWORD_ERROR'));
}
if ($this->getConfig()->isSettingEditable('PASSWORD_REMINDER_ENABLED')) {
$this->getConfig()->changeSetting('PASSWORD_REMINDER_ENABLED', $this->getSanitizer()->getString('PASSWORD_REMINDER_ENABLED'));
}
if ($this->getConfig()->isSettingEditable('TWOFACTOR_ISSUER')) {
$this->getConfig()->changeSetting('TWOFACTOR_ISSUER', $this->getSanitizer()->getString('TWOFACTOR_ISSUER'));
}
// Return
$this->getState()->hydrate([
'message' => __('Settings Updated')
]);
}
}
Transition.php 0000644 00000011642 14716415766 0007434 0 ustar 00 .
*/
namespace Xibo\Controller;
use baseDAO;
use Xibo\Exception\AccessDeniedException;
use Xibo\Factory\TransitionFactory;
use Xibo\Helper\Form;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
/**
* Class Transition
* @package Xibo\Controller
*/
class Transition extends Base
{
/**
* @var TransitionFactory
*/
private $transitionFactory;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param TransitionFactory $transitionFactory
*
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $transitionFactory)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->transitionFactory = $transitionFactory;
}
/**
* No display page functionaility
*/
function displayPage()
{
$this->getState()->template = 'transition-page';
}
public function grid()
{
$filter = [
'transition' => $this->getSanitizer()->getString('transition'),
'code' => $this->getSanitizer()->getString('code'),
'availableAsIn' => $this->getSanitizer()->getInt('availableAsIn'),
'availableAsOut' => $this->getSanitizer()->getInt('availableAsOut')
];
$transitions = $this->transitionFactory->query($this->gridRenderSort(), $this->gridRenderFilter($filter));
foreach ($transitions as $transition) {
/* @var \Xibo\Entity\Transition $transition */
// If the module config is not locked, present some buttons
if ($this->getConfig()->getSetting('TRANSITION_CONFIG_LOCKED_CHECKB') != 1 && $this->getConfig()->getSetting('TRANSITION_CONFIG_LOCKED_CHECKB') != 'Checked' ) {
// Edit button
$transition->buttons[] = array(
'id' => 'transition_button_edit',
'url' => $this->urlFor('transition.edit.form', ['id' => $transition->transitionId]),
'text' => __('Edit')
);
}
}
$this->getState()->template = 'grid';
$this->getState()->recordsTotal = $this->transitionFactory->countLast();
$this->getState()->setData($transitions);
}
/**
* Transition Edit Form
* @param int $transitionId
* @throws \Xibo\Exception\NotFoundException
*/
public function editForm($transitionId)
{
if ($this->getConfig()->getSetting('TRANSITION_CONFIG_LOCKED_CHECKB') == 1 || $this->getConfig()->getSetting('TRANSITION_CONFIG_LOCKED_CHECKB') == 'Checked')
throw new AccessDeniedException(__('Transition Config Locked'));
$transition = $this->transitionFactory->getById($transitionId);
$this->getState()->template = 'transition-form-edit';
$this->getState()->setData([
'transition' => $transition,
'help' => $this->getHelp()->link('Transition', 'Edit')
]);
}
/**
* Edit Transition
* @param int $transitionId
*/
public function edit($transitionId)
{
if ($this->getConfig()->getSetting('TRANSITION_CONFIG_LOCKED_CHECKB') == 1 || $this->getConfig()->getSetting('TRANSITION_CONFIG_LOCKED_CHECKB') == 'Checked')
throw new AccessDeniedException(__('Transition Config Locked'));
$transition = $this->transitionFactory->getById($transitionId);
$transition->availableAsIn = $this->getSanitizer()->getCheckbox('availableAsIn');
$transition->availableAsOut = $this->getSanitizer()->getCheckbox('availableAsOut');
$transition->save();
$this->getState()->hydrate([
'message' => sprintf(__('Edited %s'), $transition->transition),
'id' => $transition->transitionId,
'data' => $transition
]);
}
}
Display.php 0000644 00000227575 14716415766 0006725 0 ustar 00 .
*/
namespace Xibo\Controller;
use GuzzleHttp\Client;
use Intervention\Image\ImageManagerStatic as Img;
use Jenssegers\Date\Date;
use Respect\Validation\Validator as v;
use RobThree\Auth\TwoFactorAuth;
use Stash\Interfaces\PoolInterface;
use Xibo\Entity\RequiredFile;
use Xibo\Exception\AccessDeniedException;
use Xibo\Exception\ConfigurationException;
use Xibo\Exception\InvalidArgumentException;
use Xibo\Exception\NotFoundException;
use Xibo\Exception\XiboException;
use Xibo\Factory\DayPartFactory;
use Xibo\Factory\DisplayEventFactory;
use Xibo\Factory\DisplayFactory;
use Xibo\Factory\DisplayGroupFactory;
use Xibo\Factory\DisplayProfileFactory;
use Xibo\Factory\LayoutFactory;
use Xibo\Factory\LogFactory;
use Xibo\Factory\MediaFactory;
use Xibo\Factory\NotificationFactory;
use Xibo\Factory\PlayerVersionFactory;
use Xibo\Factory\RequiredFileFactory;
use Xibo\Factory\ScheduleFactory;
use Xibo\Factory\TagFactory;
use Xibo\Factory\UserGroupFactory;
use Xibo\Helper\ByteFormatter;
use Xibo\Helper\HttpsDetect;
use Xibo\Helper\Random;
use Xibo\Helper\WakeOnLan;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\PlayerActionServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
use Xibo\Storage\StorageServiceInterface;
use Xibo\XMR\LicenceCheckAction;
use Xibo\XMR\RekeyAction;
use Xibo\XMR\ScreenShotAction;
/**
* Class Display
* @package Xibo\Controller
*/
class Display extends Base
{
use DisplayProfileConfigFields;
/**
* @var StorageServiceInterface
*/
private $store;
/**
* @var PoolInterface
*/
private $pool;
/**
* @var PlayerActionServiceInterface
*/
private $playerAction;
/**
* @var DayPartFactory
*/
private $dayPartFactory;
/**
* @var DisplayFactory
*/
private $displayFactory;
/**
* @var DisplayGroupFactory
*/
private $displayGroupFactory;
/**
* @var LogFactory
*/
private $logFactory;
/**
* @var LayoutFactory
*/
private $layoutFactory;
/**
* @var DisplayProfileFactory
*/
private $displayProfileFactory;
/**
* @var MediaFactory
*/
private $mediaFactory;
/**
* @var ScheduleFactory
*/
private $scheduleFactory;
/** @var DisplayEventFactory */
private $displayEventFactory;
/** @var PlayerVersionFactory */
private $playerVersionFactory;
/** @var RequiredFileFactory */
private $requiredFileFactory;
/** @var TagFactory */
private $tagFactory;
/** @var NotificationFactory */
private $notificationFactory;
/** @var UserGroupFactory */
private $userGroupFactory;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param StorageServiceInterface $store
* @param PoolInterface $pool
* @param PlayerActionServiceInterface $playerAction
* @param DisplayFactory $displayFactory
* @param DisplayGroupFactory $displayGroupFactory
* @param LogFactory $logFactory
* @param LayoutFactory $layoutFactory
* @param DisplayProfileFactory $displayProfileFactory
* @param MediaFactory $mediaFactory
* @param ScheduleFactory $scheduleFactory
* @param DisplayEventFactory $displayEventFactory
* @param RequiredFileFactory $requiredFileFactory
* @param TagFactory $tagFactory
* @param NotificationFactory $notificationFactory
* @param UserGroupFactory $userGroupFactory
* @param PlayerVersionFactory $playerVersionFactory
* @param DayPartFactory $dayPartFactory
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $store, $pool, $playerAction, $displayFactory, $displayGroupFactory, $logFactory, $layoutFactory, $displayProfileFactory, $mediaFactory, $scheduleFactory, $displayEventFactory, $requiredFileFactory, $tagFactory, $notificationFactory, $userGroupFactory, $playerVersionFactory, $dayPartFactory)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->store = $store;
$this->pool = $pool;
$this->playerAction = $playerAction;
$this->displayFactory = $displayFactory;
$this->displayGroupFactory = $displayGroupFactory;
$this->logFactory = $logFactory;
$this->layoutFactory = $layoutFactory;
$this->displayProfileFactory = $displayProfileFactory;
$this->mediaFactory = $mediaFactory;
$this->scheduleFactory = $scheduleFactory;
$this->displayEventFactory = $displayEventFactory;
$this->requiredFileFactory = $requiredFileFactory;
$this->tagFactory = $tagFactory;
$this->notificationFactory = $notificationFactory;
$this->userGroupFactory = $userGroupFactory;
$this->playerVersionFactory = $playerVersionFactory;
$this->dayPartFactory = $dayPartFactory;
}
/**
* Include display page template page based on sub page selected
* @throws NotFoundException
*/
function displayPage()
{
// Build a list of display profiles
$displayProfiles = $this->displayProfileFactory->query();
$displayProfiles[] = ['displayProfileId' => -1, 'name' => __('Default')];
// Call to render the template
$this->getState()->template = 'display-page';
$this->getState()->setData([
'displayGroups' => $this->displayGroupFactory->query(),
'displayProfiles' => $displayProfiles
]);
}
/**
* Display Management Page for an Individual Display
* @param int $displayId
* @throws \Xibo\Exception\NotFoundException
*/
function displayManage($displayId)
{
$display = $this->displayFactory->getById($displayId);
if (!$this->getUser()->checkViewable($display))
throw new AccessDeniedException();
// Zero out some variables
$layouts = [];
$widgets = [];
$media = [];
$totalCount = 0;
$completeCount = 0;
$totalSize = 0;
$completeSize = 0;
// Show 3 widgets
$sql = '
SELECT layoutId, layout, `requiredfile`.*
FROM `layout`
INNER JOIN `requiredfile`
ON `requiredfile`.itemId = `layout`.layoutId
WHERE `requiredfile`.displayId = :displayId
AND `requiredfile`.type = :type
ORDER BY layout
';
foreach ($this->store->select($sql, ['displayId' => $displayId, 'type' => 'L']) as $row) {
/** @var RequiredFile $rf */
$rf = $this->requiredFileFactory->getByDisplayAndLayout($displayId, $row['layoutId']);
$totalCount++;
if ($rf->complete) {
$completeCount = $completeCount + 1;
}
$rf = $rf->toArray();
$rf['layout'] = $row['layout'];
$layouts[] = $rf;
}
// Media
$sql = '
SELECT mediaId, `name`, fileSize, media.type AS mediaType, storedAs, `requiredfile`.*
FROM `media`
INNER JOIN `requiredfile`
ON `requiredfile`.itemId = `media`.mediaId
WHERE `requiredfile`.displayId = :displayId
AND `requiredfile`.type = :type
ORDER BY `name`
';
foreach ($this->store->select($sql, ['displayId' => $displayId, 'type' => 'M']) as $row) {
/** @var RequiredFile $rf */
$rf = $this->requiredFileFactory->getByDisplayAndMedia($displayId, $row['mediaId']);
$totalSize = $totalSize + $row['fileSize'];
$totalCount++;
if ($rf->complete) {
$completeSize = $completeSize + $row['fileSize'];
$completeCount = $completeCount + 1;
}
$rf = $rf->toArray();
$rf['name'] = $row['name'];
$rf['type'] = $row['mediaType'];
$rf['storedAs'] = $row['storedAs'];
$rf['size'] = $row['fileSize'];
$media[] = $rf;
}
// Widgets
$sql = '
SELECT `widget`.type AS widgetType,
IFNULL(`widgetoption`.value, `widget`.type) AS widgetName,
`widget`.widgetId,
`requiredfile`.*
FROM `widget`
INNER JOIN `requiredfile`
ON `requiredfile`.itemId = `widget`.widgetId
LEFT OUTER JOIN `widgetoption`
ON `widgetoption`.widgetId = `widget`.widgetId
AND `widgetoption`.option = \'name\'
WHERE `requiredfile`.displayId = :displayId
AND `requiredfile`.type = :type
ORDER BY IFNULL(`widgetoption`.value, `widget`.type)
';
foreach ($this->store->select($sql, ['displayId' => $displayId, 'type' => 'W']) as $row) {
/** @var RequiredFile $rf */
$rf = $this->requiredFileFactory->getByDisplayAndWidget($displayId, $row['widgetId']);
$totalCount++;
if ($rf->complete) {
$completeCount = $completeCount + 1;
}
$rf = $rf->toArray();
$rf['type'] = $row['widgetType'];
$rf['widgetName'] = $row['widgetName'];
$widgets[] = $rf;
}
// Widget for file status
// Decide what our units are going to be, based on the size
$suffixes = array('bytes', 'k', 'M', 'G', 'T');
$base = (int)floor(log($totalSize) / log(1024));
if ($base < 0)
$base = 0;
$units = (isset($suffixes[$base]) ? $suffixes[$base] : '');
$this->getLog()->debug('Base for size is %d and suffix is %s', $base, $units);
// Call to render the template
$this->getState()->template = 'display-page-manage';
$this->getState()->setData([
'requiredFiles' => [],
'display' => $display,
'timeAgo' => $this->getDate()->parse($display->lastAccessed, 'U')->diffForHumans(),
'errorSearch' => http_build_query([
'displayId' => $display->displayId,
'type' => 'ERROR',
'fromDt' => $this->getDate()->getLocalDate($this->getDate()->parse()->subHours(12)),
'toDt' => $this->getDate()->getLocalDate()
]),
'inventory' => [
'layouts' => $layouts,
'media' => $media,
'widgets' => $widgets
],
'status' => [
'units' => $units,
'countComplete' => $completeCount,
'countRemaining' => $totalCount - $completeCount,
'sizeComplete' => round((double)$completeSize / (pow(1024, $base)), 2),
'sizeRemaining' => round((double)($totalSize - $completeSize) / (pow(1024, $base)), 2),
],
'defaults' => [
'fromDate' => $this->getDate()->getLocalDate(time() - (86400 * 35)),
'fromDateOneDay' => $this->getDate()->getLocalDate(time() - 86400),
'toDate' => $this->getDate()->getLocalDate()
]
]);
}
/**
* Grid of Displays
*
* @SWG\Get(
* path="/display",
* operationId="displaySearch",
* tags={"display"},
* summary="Display Search",
* description="Search Displays for this User",
* @SWG\Parameter(
* name="displayId",
* in="query",
* description="Filter by Display Id",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="displayGroupId",
* in="query",
* description="Filter by DisplayGroup Id",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="display",
* in="query",
* description="Filter by Display Name",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="macAddress",
* in="query",
* description="Filter by Mac Address",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="hardwareKey",
* in="query",
* description="Filter by Hardware Key",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="clientVersion",
* in="query",
* description="Filter by Client Version",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="clientType",
* in="query",
* description="Filter by Client Type",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="clientCode",
* in="query",
* description="Filter by Client Code",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="embed",
* in="query",
* description="Embed related data, namely displaygroups. A comma separated list of child objects to embed.",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="authorised",
* in="query",
* description="Filter by authorised flag",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="displayProfileId",
* in="query",
* description="Filter by Display Profile",
* type="integer",
* required=false
* ),
* * @SWG\Parameter(
* name="mediaInventoryStatus",
* in="query",
* description="Filter by Display Status ( 1 - up to date, 2 - downloading, 3 - Out of date)",
* type="integer",
* required=false
* ),
* * @SWG\Parameter(
* name="loggedIn",
* in="query",
* description="Filter by Logged In flag",
* type="integer",
* required=false
* ),
* * @SWG\Parameter(
* name="lastAccessed",
* in="query",
* description="Filter by Display Last Accessed date, expects date in Y-m-d H:i:s format",
* type="string",
* required=false
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(
* type="array",
* @SWG\Items(ref="#/definitions/Display")
* )
* )
* )
*
* @throws \Xibo\Exception\XiboException
*/
function grid()
{
// Embed?
$embed = ($this->getSanitizer()->getString('embed') != null) ? explode(',', $this->getSanitizer()->getString('embed')) : [];
$filter = [
'displayId' => $this->getSanitizer()->getInt('displayId'),
'display' => $this->getSanitizer()->getString('display'),
'useRegexForName' => $this->getSanitizer()->getCheckbox('useRegexForName'),
'macAddress' => $this->getSanitizer()->getString('macAddress'),
'license' => $this->getSanitizer()->getString('hardwareKey'),
'displayGroupId' => $this->getSanitizer()->getInt('displayGroupId'),
'clientVersion' => $this->getSanitizer()->getString('clientVersion'),
'clientType' => $this->getSanitizer()->getString('clientType'),
'clientCode' => $this->getSanitizer()->getString('clientCode'),
'authorised' => $this->getSanitizer()->getInt('authorised'),
'displayProfileId' => $this->getSanitizer()->getInt('displayProfileId'),
'tags' => $this->getSanitizer()->getString('tags'),
'exactTags' => $this->getSanitizer()->getCheckbox('exactTags'),
'showTags' => true,
'useRegexForName' => $this->getSanitizer()->getCheckbox('useRegexForName'),
'clientAddress' => $this->getSanitizer()->getString('clientAddress'),
'mediaInventoryStatus' => $this->getSanitizer()->getInt('mediaInventoryStatus'),
'loggedIn' => $this->getSanitizer()->getInt('loggedIn'),
'lastAccessed' => ($this->getSanitizer()->getDate('lastAccessed') != null) ? $this->getSanitizer()->getDate('lastAccessed')->format('U') : null,
'displayGroupIdMembers' => $this->getSanitizer()->getInt('displayGroupIdMembers'),
'orientation' => $this->getSanitizer()->getString('orientation'),
'commercialLicence' => $this->getSanitizer()->getInt('commercialLicence')
];
// Get a list of displays
$displays = $this->displayFactory->query($this->gridRenderSort(), $this->gridRenderFilter($filter));
// Get all Display Profiles
$displayProfiles = [];
foreach ($this->displayProfileFactory->query() as $displayProfile) {
$displayProfiles[$displayProfile->displayProfileId] = $displayProfile->name;
}
// validate displays so we get a realistic view of the table
$this->validateDisplays($displays);
foreach ($displays as $display) {
/* @var \Xibo\Entity\Display $display */
if (in_array('displaygroups', $embed)) {
$display->load();
} else {
$display->excludeProperty('displayGroups');
}
if (in_array('overrideconfig', $embed)) {
$display->includeProperty('overrideConfig');
}
$display->bandwidthLimitFormatted = ByteFormatter::format($display->bandwidthLimit * 1024);
// Current layout from cache
$display->setChildObjectDependencies($this->layoutFactory, $this->mediaFactory, $this->scheduleFactory);
$display->getCurrentLayoutId($this->pool);
if ($this->isApi()) {
$display->lastAccessed = $this->getDate()->getLocalDate($display->lastAccessed);
$display->auditingUntil = ($display->auditingUntil == 0) ? 0 : $this->getDate()->getLocalDate($display->auditingUntil);
$display->storageAvailableSpace = ByteFormatter::format($display->storageAvailableSpace);
$display->storageTotalSpace = ByteFormatter::format($display->storageTotalSpace);
continue;
}
// use try and catch here to cover scenario when there is no default display profile set for any of the existing display types.
$displayProfileName = '';
try {
$defaultDisplayProfile = $this->displayProfileFactory->getDefaultByType($display->clientType);
$displayProfileName = $defaultDisplayProfile->name;
} catch (NotFoundException $e) {
$this->getLog()->debug('No default Display Profile set for Display type ' . $display->clientType);
}
// Add in the display profile information
$display->displayProfile = (!array_key_exists($display->displayProfileId, $displayProfiles)) ? $displayProfileName . __(' (Default)') : $displayProfiles[$display->displayProfileId];
$display->includeProperty('buttons');
// Format the storage available / total space
$display->storageAvailableSpaceFormatted = ByteFormatter::format($display->storageAvailableSpace);
$display->storageTotalSpaceFormatted = ByteFormatter::format($display->storageTotalSpace);
$display->storagePercentage = ($display->storageTotalSpace == 0) ? 0 : round($display->storageAvailableSpace / $display->storageTotalSpace * 100.0, 2);
// Set some text for the display status
switch ($display->mediaInventoryStatus) {
case 1:
$display->statusDescription = __('Display is up to date');
break;
case 2:
$display->statusDescription = __('Display is downloading new files');
break;
case 3:
$display->statusDescription = __('Display is out of date but has not yet checked in with the server');
break;
default:
$display->statusDescription = __('Unknown Display Status');
}
// Commercial Licence
switch ($display->commercialLicence) {
case 1:
$display->commercialLicenceDescription = __('Display is fully licensed');
break;
case 2:
$display->commercialLicenceDescription = __('Display is on a trial licence');
break;
default:
$display->commercialLicenceDescription = __('Display is not licensed');
}
// Thumbnail
$display->thumbnail = '';
// If we aren't logged in, and we are showThumbnail == 2, then show a circle
if (file_exists($this->getConfig()->getSetting('LIBRARY_LOCATION') . 'screenshots/' . $display->displayId . '_screenshot.jpg')) {
$display->thumbnail = $this->urlFor('display.screenShot', ['id' => $display->displayId]) . '?' . Random::generateString();
}
// Remote support buttons.
$teamViewerSerial = '';
$webkeySerial = '';
foreach ($display->overrideConfig as $override) {
if ($override['name'] === 'teamViewerSerial') {
$teamViewerSerial = $override['value'];
}
if ($override['name'] === 'webkeySerial') {
$webkeySerial = $override['value'];
}
}
$display->teamViewerLink = (!empty($teamViewerSerial)) ? 'https://start.teamviewer.com/' . $teamViewerSerial : '';
$display->webkeyLink = (!empty($webkeySerial)) ? 'https://webkeyapp.com/mgm?publicid=' . $webkeySerial : '';
// Edit and Delete buttons first
if ($this->getUser()->checkEditable($display)) {
// Manage
$display->buttons[] = array(
'id' => 'display_button_manage',
'url' => $this->urlFor('display.manage', ['id' => $display->displayId]),
'text' => __('Manage'),
'external' => true
);
$display->buttons[] = ['divider' => true];
// Edit
$display->buttons[] = array(
'id' => 'display_button_edit',
'url' => $this->urlFor('display.edit.form', ['id' => $display->displayId]),
'text' => __('Edit')
);
}
// Delete
if ($this->getUser()->checkDeleteable($display)) {
$display->buttons[] = array(
'id' => 'display_button_delete',
'url' => $this->urlFor('display.delete.form', ['id' => $display->displayId]),
'text' => __('Delete'),
/*'multi-select' => true,
'dataAttributes' => array(
array('name' => 'commit-url', 'value' => $this->urlFor('display.delete', ['id' => $display->displayId])),
array('name' => 'commit-method', 'value' => 'delete'),
array('name' => 'id', 'value' => 'display_button_delete'),
array('name' => 'text', 'value' => __('Delete')),
array('name' => 'rowtitle', 'value' => $display->display)
)*/
);
}
if ($this->getUser()->checkEditable($display) || $this->getUser()->checkDeleteable($display)) {
$display->buttons[] = ['divider' => true];
}
if ($this->getUser()->checkEditable($display)) {
// Authorise
$display->buttons[] = array(
'id' => 'display_button_authorise',
'url' => $this->urlFor('display.authorise.form', ['id' => $display->displayId]),
'text' => __('Authorise'),
'multi-select' => true,
'dataAttributes' => array(
array('name' => 'commit-url', 'value' => $this->urlFor('display.authorise', ['id' => $display->displayId])),
array('name' => 'commit-method', 'value' => 'put'),
array('name' => 'id', 'value' => 'display_button_authorise'),
array('name' => 'text', 'value' => __('Toggle Authorise')),
array('name' => 'rowtitle', 'value' => $display->display)
)
);
// Default Layout
$display->buttons[] = array(
'id' => 'display_button_defaultlayout',
'url' => $this->urlFor('display.defaultlayout.form', ['id' => $display->displayId]),
'text' => __('Default Layout'),
'multi-select' => true,
'dataAttributes' => array(
array('name' => 'commit-url', 'value' => $this->urlFor('display.defaultlayout', ['id' => $display->displayId])),
array('name' => 'commit-method', 'value' => 'put'),
array('name' => 'id', 'value' => 'display_button_defaultlayout'),
array('name' => 'text', 'value' => __('Set Default Layout')),
array('name' => 'rowtitle', 'value' => $display->display),
['name' => 'form-callback', 'value' => 'setDefaultMultiSelectFormOpen']
)
);
if (in_array($display->clientType, ['android', 'lg', 'sssp'])) {
$display->buttons[] = array(
'id' => 'display_button_checkLicence',
'url' => $this->urlFor('display.licencecheck.form', ['id' => $display->displayId]),
'text' => __('Check Licence'),
'multi-select' => true,
'dataAttributes' => array(
array('name' => 'commit-url', 'value' => $this->urlFor('display.licencecheck', ['id' => $display->displayId])),
array('name' => 'commit-method', 'value' => 'put'),
array('name' => 'id', 'value' => 'display_button_checkLicence'),
array('name' => 'text', 'value' => __('Check Licence')),
array('name' => 'rowtitle', 'value' => $display->display)
)
);
}
$display->buttons[] = ['divider' => true];
}
// Schedule Now
if (($this->getUser()->checkEditable($display) || $this->getConfig()->getSetting('SCHEDULE_WITH_VIEW_PERMISSION') == 1) && $this->getUser()->routeViewable('/schedulenow/form/now/:from/:id') === true ) {
$display->buttons[] = array(
'id' => 'display_button_schedulenow',
'url' => $this->urlFor('schedulenow.now.form', ['id' => $display->displayGroupId, 'from' => 'DisplayGroup']),
'text' => __('Schedule Now')
);
}
if ($this->getUser()->checkEditable($display)) {
// File Associations
$display->buttons[] = array(
'id' => 'displaygroup_button_fileassociations',
'url' => $this->urlFor('displayGroup.media.form', ['id' => $display->displayGroupId]),
'text' => __('Assign Files')
);
// Layout Assignments
$display->buttons[] = array(
'id' => 'displaygroup_button_layout_associations',
'url' => $this->urlFor('displayGroup.layout.form', ['id' => $display->displayGroupId]),
'text' => __('Assign Layouts')
);
// Screen Shot
$display->buttons[] = array(
'id' => 'display_button_requestScreenShot',
'url' => $this->urlFor('display.screenshot.form', ['id' => $display->displayId]),
'text' => __('Request Screen Shot'),
'multi-select' => true,
'dataAttributes' => array(
array('name' => 'commit-url', 'value' => $this->urlFor('display.requestscreenshot', ['id' => $display->displayId])),
array('name' => 'commit-method', 'value' => 'put'),
array('name' => 'id', 'value' => 'display_button_requestScreenShot'),
array('name' => 'text', 'value' => __('Request Screen Shot')),
array('name' => 'rowtitle', 'value' => $display->display)
)
);
// Collect Now
$display->buttons[] = array(
'id' => 'display_button_collectNow',
'url' => $this->urlFor('displayGroup.collectNow.form', ['id' => $display->displayGroupId]),
'text' => __('Collect Now'),
'multi-select' => true,
'dataAttributes' => array(
array('name' => 'commit-url', 'value' => $this->urlFor('displayGroup.action.collectNow', ['id' => $display->displayGroupId])),
array('name' => 'commit-method', 'value' => 'post'),
array('name' => 'id', 'value' => 'display_button_collectNow'),
array('name' => 'text', 'value' => __('Collect Now')),
array('name' => 'rowtitle', 'value' => $display->display)
)
);
$display->buttons[] = ['divider' => true];
}
if ($this->getUser()->checkPermissionsModifyable($display)) {
// Display Groups
$display->buttons[] = array(
'id' => 'display_button_group_membership',
'url' => $this->urlFor('display.membership.form', ['id' => $display->displayId]),
'text' => __('Display Groups')
);
// Permissions
$display->buttons[] = array(
'id' => 'display_button_group_permissions',
'url' => $this->urlFor('user.permissions.form', ['entity' => 'DisplayGroup', 'id' => $display->displayGroupId]),
'text' => __('Permissions')
);
}
if ($this->getUser()->checkEditable($display)) {
if ($this->getUser()->checkPermissionsModifyable($display)) {
$display->buttons[] = ['divider' => true];
}
// Wake On LAN
$display->buttons[] = array(
'id' => 'display_button_wol',
'url' => $this->urlFor('display.wol.form', ['id' => $display->displayId]),
'text' => __('Wake on LAN')
);
$display->buttons[] = array(
'id' => 'displaygroup_button_command',
'url' => $this->urlFor('displayGroup.command.form', ['id' => $display->displayGroupId]),
'text' => __('Send Command')
);
$display->buttons[] = ['divider' => true];
$display->buttons[] = [
'id' => 'display_button_move_cms',
'url' => $this->urlFor('display.moveCms.form', ['id' => $display->displayId]),
'text' => __('Transfer to another CMS'),
'multi-select' => true,
'dataAttributes' => [
['name' => 'commit-url', 'value' => $this->urlFor('display.moveCms', ['id' => $display->displayId])],
['name' => 'commit-method', 'value' => 'put'],
['name' => 'id', 'value' => 'display_button_move_cms'],
['name' => 'text', 'value' => __('Transfer to another CMS')],
['name' => 'rowtitle', 'value' => $display->display],
['name' => 'form-callback', 'value' => 'setMoveCmsMultiSelectFormOpen']
]
];
}
}
$this->getState()->template = 'grid';
$this->getState()->recordsTotal = $this->displayFactory->countLast();
$this->getState()->setData($displays);
}
/**
* Edit Display Form
* @param int $displayId
* @throws \Xibo\Exception\XiboException
*/
function editForm($displayId)
{
$display = $this->displayFactory->getById($displayId, true);
if (!$this->getUser()->checkEditable($display))
throw new AccessDeniedException();
// We have permission - load
$display->load();
$tags = '';
$arrayOfTags = array_filter(explode(',', $display->tags));
$arrayOfTagValues = array_filter(explode(',', $display->tagValues));
for ($i=0; $iauditingUntilIso = $this->getDate()->getLocalDate($display->auditingUntil);
// Get the settings from the profile
$profile = $display->getSettings();
// Get a list of timezones
$timeZones = [];
foreach ($this->getDate()->timezoneList() as $key => $value) {
$timeZones[] = ['id' => $key, 'value' => $value];
}
// Get the currently assigned default layout
try {
$layouts = (($display->defaultLayoutId != null) ? [$this->layoutFactory->getById($display->defaultLayoutId)] : []);
} catch (NotFoundException $notFoundException) {
$layouts = [];
}
// Player Version Setting
$versionId = $display->getSetting('versionMediaId', null, ['displayOnly' => true]);
$profileVersionId = $display->getDisplayProfile()->getSetting('versionMediaId');
$playerVersions = [];
// Daypart - Operating Hours
$dayPartId = $display->getSetting('dayPartId', null,['displayOnly' => true]);
$profileDayPartId = $display->getDisplayProfile()->getSetting('dayPartId');
$dayparts = [];
// Get the Player Version for this display profile type
if ($versionId !== null) {
try {
$playerVersions[] = $this->playerVersionFactory->getByMediaId($versionId);
} catch (NotFoundException $e) {
$this->getLog()->debug('Unknown versionId set on Display Profile for displayId ' . $display->displayId);
}
}
if ($versionId !== $profileVersionId) {
try {
$playerVersions[] = $this->playerVersionFactory->getByMediaId($profileVersionId);
} catch (NotFoundException $e) {
$this->getLog()->debug('Unknown versionId set on Display Profile for displayId ' . $display->displayId);
}
}
if ($dayPartId !== null) {
try {
$dayparts[] = $this->dayPartFactory->getById($dayPartId);
} catch (NotFoundException $e) {
$this->getLog()->debug('Unknown dayPartId set on Display Profile for displayId ' . $display->displayId);
}
}
if ($dayPartId !== $profileDayPartId) {
try {
$dayparts[] = $this->dayPartFactory->getById($profileDayPartId);
} catch (NotFoundException $e) {
$this->getLog()->debug('Unknown dayPartId set on Display Profile for displayId ' . $display->displayId);
}
}
// These are temporary additions and will be removed in v3
$teamViewerSerial = '';
$webkeySerial = '';
foreach ($display->overrideConfig as $override) {
if ($override['name'] === 'teamViewerSerial') {
$teamViewerSerial = $override['value'];
}
if ($override['name'] === 'webkeySerial') {
$webkeySerial = $override['value'];
}
}
$this->getState()->template = 'display-form-edit';
$this->getState()->setData([
'display' => $display,
'displayProfile' => $display->getDisplayProfile(),
'lockOptions' => json_decode($display->getDisplayProfile()->getSetting('lockOptions', '[]'), true),
'layouts' => $layouts,
'profiles' => $this->displayProfileFactory->query(NULL, array('type' => $display->clientType)),
'settings' => $profile,
'timeZones' => $timeZones,
'displayLockName' => ($this->getConfig()->getSetting('DISPLAY_LOCK_NAME_TO_DEVICENAME') == 1),
'help' => $this->getHelp()->link('Display', 'Edit'),
'versions' => $playerVersions,
'tags' => $tags,
'dayParts' => $dayparts,
// These are temporary additions and will be removed in v3
'teamViewerSerial' => $teamViewerSerial,
'webkeySerial' => $webkeySerial
]);
}
/**
* Delete form
* @param int $displayId
*/
function deleteForm($displayId)
{
$display = $this->displayFactory->getById($displayId);
if (!$this->getUser()->checkDeleteable($display))
throw new AccessDeniedException();
$this->getState()->template = 'display-form-delete';
$this->getState()->setData([
'display' => $display,
'help' => $this->getHelp()->link('Display', 'Delete')
]);
}
/**
* Display Edit
* @param int $displayId
*
* @SWG\Put(
* path="/display/{displayId}",
* operationId="displayEdit",
* tags={"display"},
* summary="Display Edit",
* description="Edit a Display",
* @SWG\Parameter(
* name="displayId",
* in="path",
* description="The Display ID",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="display",
* in="formData",
* description="The Display Name",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="description",
* in="formData",
* description="A description of the Display",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="tags",
* in="formData",
* description="A comma separated list of tags for this item",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="auditingUntil",
* in="formData",
* description="A date this Display records auditing information until.",
* type="string",
* format="date-time",
* required=false
* ),
* @SWG\Parameter(
* name="defaultLayoutId",
* in="formData",
* description="A Layout ID representing the Default Layout for this Display.",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="licensed",
* in="formData",
* description="Flag indicating whether this display is licensed.",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="license",
* in="formData",
* description="The hardwareKey to use as the licence key for this Display",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="incSchedule",
* in="formData",
* description="Flag indicating whether the Default Layout should be included in the Schedule",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="emailAlert",
* in="formData",
* description="Flag indicating whether the Display generates up/down email alerts.",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="alertTimeout",
* in="formData",
* description="How long in seconds should this display wait before alerting when it hasn't connected. Override for the collection interval.",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="wakeOnLanEnabled",
* in="formData",
* description="Flag indicating if Wake On LAN is enabled for this Display",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="wakeOnLanTime",
* in="formData",
* description="A h:i string representing the time that the Display should receive its Wake on LAN command",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="broadCastAddress",
* in="formData",
* description="The BroadCast Address for this Display - used by Wake On LAN",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="secureOn",
* in="formData",
* description="The secure on configuration for this Display",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="cidr",
* in="formData",
* description="The CIDR configuration for this Display",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="latitude",
* in="formData",
* description="The Latitude of this Display",
* type="number",
* required=false
* ),
* @SWG\Parameter(
* name="longitude",
* in="formData",
* description="The Longitude of this Display",
* type="number",
* required=false
* ),
* @SWG\Parameter(
* name="timeZone",
* in="formData",
* description="The timezone for this display, or empty to use the CMS timezone",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="displayProfileId",
* in="formData",
* description="The Display Settings Profile ID",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="clearCachedData",
* in="formData",
* description="Clear all Cached data for this display",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="rekeyXmr",
* in="formData",
* description="Clear the cached XMR configuration and send a rekey",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="teamViewerSerial",
* in="formData",
* description="The TeamViewer serial number for this Display, if applicable",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="webkeySerial",
* in="formData",
* description="The Webkey serial number for this Display, if applicable",
* type="string",
* required=false
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/Display")
* )
* )
*
* @throws \Xibo\Exception\XiboException
*/
function edit($displayId)
{
$display = $this->displayFactory->getById($displayId, true);
if (!$this->getUser()->checkEditable($display))
throw new AccessDeniedException();
// Update properties
if ($this->getConfig()->getSetting('DISPLAY_LOCK_NAME_TO_DEVICENAME') == 0)
$display->display = $this->getSanitizer()->getString('display');
$display->load();
$display->description = $this->getSanitizer()->getString('description');
$display->auditingUntil = $this->getSanitizer()->getDate('auditingUntil');
$display->defaultLayoutId = $this->getSanitizer()->getInt('defaultLayoutId');
$display->licensed = $this->getSanitizer()->getInt('licensed');
$display->license = $this->getSanitizer()->getString('license');
$display->incSchedule = $this->getSanitizer()->getInt('incSchedule');
$display->emailAlert = $this->getSanitizer()->getInt('emailAlert');
$display->alertTimeout = $this->getSanitizer()->getCheckbox('alertTimeout');
$display->wakeOnLanEnabled = $this->getSanitizer()->getCheckbox('wakeOnLanEnabled');
$display->wakeOnLanTime = $this->getSanitizer()->getString('wakeOnLanTime');
$display->broadCastAddress = $this->getSanitizer()->getString('broadCastAddress');
$display->secureOn = $this->getSanitizer()->getString('secureOn');
$display->cidr = $this->getSanitizer()->getString('cidr');
$display->latitude = $this->getSanitizer()->getDouble('latitude');
$display->longitude = $this->getSanitizer()->getDouble('longitude');
$display->timeZone = $this->getSanitizer()->getString('timeZone');
$display->displayProfileId = $this->getSanitizer()->getInt('displayProfileId');
$display->bandwidthLimit = $this->getSanitizer()->getInt('bandwidthLimit');
// Get the display profile and use that to pull in any overrides
// start with an empty config
$display->overrideConfig = $this->editConfigFields($display->getDisplayProfile(), []);
// Workaround
// in v3 these will have their own fields.
$profile = $display->getDisplayProfile();
$profile->setSetting('teamViewerSerial', $this->getSanitizer()->getString('teamViewerSerial'),
false, $display->overrideConfig);
$profile->setSetting('webkeySerial', $this->getSanitizer()->getString('webkeySerial'),
false, $display->overrideConfig);
// Tags are stored on the displaygroup, we're just passing through here
$display->tags = $this->tagFactory->tagsFromString($this->getSanitizer()->getString('tags'));
if ($display->auditingUntil !== null)
$display->auditingUntil = $display->auditingUntil->format('U');
// Should we invalidate this display?
if ($display->hasPropertyChanged('defaultLayoutId')) {
$display->notify();
} else if ($this->getSanitizer()->getCheckbox('clearCachedData', 1) == 1) {
// Remove the cache if the display licenced state has changed
$this->pool->deleteItem($display->getCacheKey());
}
// Should we rekey?
if ($this->getSanitizer()->getCheckbox('rekeyXmr', 0) == 1) {
// Queue the rekey action first (before we clear the channel and key)
$this->playerAction->sendAction($display, new RekeyAction());
// Clear the config.
$display->xmrChannel = null;
$display->xmrPubKey = null;
}
$display->setChildObjectDependencies($this->layoutFactory, $this->mediaFactory, $this->scheduleFactory);
$display->save();
if ($this->isApi()) {
$display->lastAccessed = $this->getDate()->getLocalDate($display->lastAccessed);
$display->auditingUntil = ($display->auditingUntil == 0) ? 0 : $this->getDate()->getLocalDate($display->auditingUntil);
}
// Return
$this->getState()->hydrate([
'message' => sprintf(__('Edited %s'), $display->display),
'id' => $display->displayId,
'data' => $display
]);
}
/**
* Delete a display
* @param int $displayId
*
* @SWG\Delete(
* path="/display/{displayId}",
* operationId="displayDelete",
* tags={"display"},
* summary="Display Delete",
* description="Delete a Display",
* @SWG\Parameter(
* name="displayId",
* in="path",
* description="The Display ID",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*/
function delete($displayId)
{
$display = $this->displayFactory->getById($displayId);
if (!$this->getUser()->checkDeleteable($display))
throw new AccessDeniedException();
$display->setChildObjectDependencies($this->layoutFactory, $this->mediaFactory, $this->scheduleFactory);
$display->delete();
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Deleted %s'), $display->display),
'id' => $display->displayId,
'data' => $display
]);
}
/**
* Member of Display Groups Form
* @param int $displayId
*/
public function membershipForm($displayId)
{
$display = $this->displayFactory->getById($displayId);
if (!$this->getUser()->checkEditable($display))
throw new AccessDeniedException();
// Groups we are assigned to
$groupsAssigned = $this->displayGroupFactory->getByDisplayId($display->displayId);
// All Groups
$allGroups = $this->displayGroupFactory->getByIsDynamic(0);
// The available users are all users except users already in assigned users
$checkboxes = array();
foreach ($allGroups as $group) {
/* @var \Xibo\Entity\DisplayGroup $group */
// Check to see if it exists in $usersAssigned
$exists = false;
foreach ($groupsAssigned as $groupAssigned) {
/* @var \Xibo\Entity\DisplayGroup $groupAssigned */
if ($groupAssigned->displayGroupId == $group->displayGroupId) {
$exists = true;
break;
}
}
// Store this checkbox
$checkbox = array(
'id' => $group->displayGroupId,
'name' => $group->displayGroup,
'value_checked' => (($exists) ? 'checked' : '')
);
$checkboxes[] = $checkbox;
}
$this->getState()->template = 'display-form-membership';
$this->getState()->setData([
'display' => $display,
'checkboxes' => $checkboxes,
'help' => $this->getHelp()->link('Display', 'Members')
]);
}
/**
* Assign Display to Display Groups
* @param int $displayId
* @throws \Xibo\Exception\NotFoundException
*/
public function assignDisplayGroup($displayId)
{
$display = $this->displayFactory->getById($displayId);
if (!$this->getUser()->checkEditable($display))
throw new AccessDeniedException();
// Go through each ID to assign
foreach ($this->getSanitizer()->getIntArray('displayGroupId') as $displayGroupId) {
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
$displayGroup->setChildObjectDependencies($this->displayFactory, $this->layoutFactory, $this->mediaFactory, $this->scheduleFactory);
if (!$this->getUser()->checkEditable($displayGroup))
throw new AccessDeniedException(__('Access Denied to DisplayGroup'));
$displayGroup->assignDisplay($display);
$displayGroup->save(['validate' => false]);
}
// Have we been provided with unassign id's as well?
foreach ($this->getSanitizer()->getIntArray('unassignDisplayGroupId') as $displayGroupId) {
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
$displayGroup->setChildObjectDependencies($this->displayFactory, $this->layoutFactory, $this->mediaFactory, $this->scheduleFactory);
if (!$this->getUser()->checkEditable($displayGroup))
throw new AccessDeniedException(__('Access Denied to DisplayGroup'));
$displayGroup->unassignDisplay($display);
$displayGroup->save(['validate' => false]);
}
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('%s assigned to Display Groups'), $display->display),
'id' => $display->displayId
]);
}
/**
* Output a screen shot
* @param int $displayId
* @throws XiboException
*/
public function screenShot($displayId)
{
$display = $this->displayFactory->getById($displayId);
if (!$this->getUser()->checkViewable($display))
throw new AccessDeniedException();
// The request will output its own content, disable framework
$this->setNoOutput(true);
// Output an image if present, otherwise not found image.
$file = 'screenshots/' . $displayId . '_screenshot.jpg';
// File upload directory.. get this from the settings object
$library = $this->getConfig()->getSetting("LIBRARY_LOCATION");
$fileName = $library . $file;
if (!file_exists($fileName)) {
$fileName = $this->getConfig()->uri('forms/filenotfound.gif');
}
Img::configure(array('driver' => 'gd'));
$img = Img::make($fileName);
$date = $display->getCurrentScreenShotTime($this->pool);
if ($date != '') {
$img
->rectangle(0, 0, 110, 15, function($draw) {
$draw->background('#ffffff');
})
->text($date, 10, 10);
}
// Cache headers
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Pragma: no-cache");
header("Expires: 0");
// Disable any buffering to prevent OOM errors.
while (ob_get_level() > 0) {
ob_end_clean();
}
echo $img->encode();
}
/**
* Request ScreenShot form
* @param int $displayId
*/
public function requestScreenShotForm($displayId)
{
$display = $this->displayFactory->getById($displayId);
if (!$this->getUser()->checkViewable($display))
throw new AccessDeniedException();
// Work out the next collection time based on the last accessed date/time and the collection interval
if ($display->lastAccessed == 0) {
$nextCollect = __('once it has connected for the first time');
} else {
$collectionInterval = $display->getSetting('collectionInterval', 5);
$nextCollect = $this->getDate()->parse($display->lastAccessed, 'U')->addMinutes($collectionInterval)->diffForHumans();
}
$this->getState()->template = 'display-form-request-screenshot';
$this->getState()->setData([
'display' => $display,
'nextCollect' => $nextCollect,
'help' => $this->getHelp()->link('Display', 'ScreenShot')
]);
}
/**
* Request ScreenShot
* @param int $displayId
* @throws \InvalidArgumentException if XMR is not configured
* @throws ConfigurationException if XMR cannot be contacted
*
* @SWG\Put(
* path="/display/requestscreenshot/{displayId}",
* operationId="displayRequestScreenshot",
* tags={"display"},
* summary="Request Screen Shot",
* description="Notify the display that the CMS would like a screen shot to be sent.",
* @SWG\Parameter(
* name="displayId",
* in="path",
* description="The Display ID",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/Display")
* )
* )
*/
public function requestScreenShot($displayId)
{
$display = $this->displayFactory->getById($displayId);
if (!$this->getUser()->checkViewable($display))
throw new AccessDeniedException();
$display->screenShotRequested = 1;
$display->save(['validate' => false, 'audit' => false]);
if (!empty($display->xmrChannel))
$this->playerAction->sendAction($display, new ScreenShotAction());
// Return
$this->getState()->hydrate([
'message' => sprintf(__('Request sent for %s'), $display->display),
'id' => $display->displayId
]);
}
/**
* Form for wake on Lan
* @param int $displayId
*/
public function wakeOnLanForm($displayId)
{
$display = $this->displayFactory->getById($displayId);
if (!$this->getUser()->checkViewable($display))
throw new AccessDeniedException();
if ($display->macAddress == '')
throw new \InvalidArgumentException(__('This display has no mac address recorded against it yet. Make sure the display is running.'));
$this->getState()->template = 'display-form-wakeonlan';
$this->getState()->setData([
'display' => $display,
'help' => $this->getHelp()->link('Display', 'WakeOnLan')
]);
}
/**
* Wake this display using a WOL command
* @param int $displayId
*
* @SWG\Post(
* path="/display/wol/{displayId}",
* operationId="displayWakeOnLan",
* tags={"display"},
* summary="Issue WOL",
* description="Send a Wake On LAN packet to this Display",
* @SWG\Parameter(
* name="displayId",
* in="path",
* description="The Display ID",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*/
public function wakeOnLan($displayId)
{
$display = $this->displayFactory->getById($displayId);
if (!$this->getUser()->checkViewable($display))
throw new AccessDeniedException();
if ($display->macAddress == '' || $display->broadCastAddress == '')
throw new \InvalidArgumentException(__('This display has no mac address recorded against it yet. Make sure the display is running.'));
$this->getLog()->notice('About to send WOL packet to ' . $display->broadCastAddress . ' with Mac Address ' . $display->macAddress);
WakeOnLan::TransmitWakeOnLan($display->macAddress, $display->secureOn, $display->broadCastAddress, $display->cidr, '9', $this->getLog());
$display->lastWakeOnLanCommandSent = time();
$display->save(['validate' => false]);
// Return
$this->getState()->hydrate([
'message' => sprintf(__('Wake on Lan sent for %s'), $display->display),
'id' => $display->displayId
]);
}
/**
* Validate the display list
* @param array[Display] $displays
* @throws XiboException
*/
public function validateDisplays($displays)
{
// Get the global time out (overrides the alert time out on the display if 0)
$globalTimeout = $this->getConfig()->getSetting('MAINTENANCE_ALERT_TOUT') * 60;
$emailAlerts = ($this->getConfig()->getSetting("MAINTENANCE_EMAIL_ALERTS") == 1);
$alwaysAlert = ($this->getConfig()->getSetting("MAINTENANCE_ALWAYS_ALERT") == 1);
foreach ($displays as $display) {
/* @var \Xibo\Entity\Display $display */
// Should we test against the collection interval or the preset alert timeout?
if ($display->alertTimeout == 0 && $display->clientType != '') {
$timeoutToTestAgainst = ((double)$display->getSetting('collectInterval', $globalTimeout)) * 1.1;
}
else {
$timeoutToTestAgainst = $globalTimeout;
}
// Store the time out to test against
$timeOut = $display->lastAccessed + $timeoutToTestAgainst;
// If the last time we accessed is less than now minus the time out
if ($timeOut < time()) {
$this->getLog()->debug('Timed out display. Last Accessed: ' . date('Y-m-d h:i:s', $display->lastAccessed) . '. Time out: ' . date('Y-m-d h:i:s', $timeOut));
// Is this the first time this display has gone "off-line"
$displayOffline = ($display->loggedIn == 1);
// If this is the first switch (i.e. the row was logged in before)
if ($displayOffline) {
// Update the display and set it as logged out
$display->loggedIn = 0;
$display->save(\Xibo\Entity\Display::$saveOptionsMinimum);
// Log the down event
$event = $this->displayEventFactory->createEmpty();
$event->displayId = $display->displayId;
$event->start = $display->lastAccessed;
$event->save();
}
$dayPartId = $display->getSetting('dayPartId', null,['displayOverride' => true]);
$operatingHours = true;
if ($dayPartId !== null) {
try {
$dayPart = $this->dayPartFactory->getById($dayPartId);
$startTimeArray = explode(':', $dayPart->startTime);
$startTime = Date::now()->setTime(intval($startTimeArray[0]), intval($startTimeArray[1]));
$endTimeArray = explode(':', $dayPart->endTime);
$endTime = Date::now()->setTime(intval($endTimeArray[0]), intval($endTimeArray[1]));
$now = Date::now();
// exceptions
foreach ($dayPart->exceptions as $exception) {
// check if we are on exception day and if so override the start and endtime accordingly
if ($exception['day'] == Date::now()->format('D')) {
$exceptionsStartTime = explode(':', $exception['start']);
$startTime = Date::now()->setTime(intval($exceptionsStartTime[0]), intval($exceptionsStartTime[1]));
$exceptionsEndTime = explode(':', $exception['end']);
$endTime = Date::now()->setTime(intval($exceptionsEndTime[0]), intval($exceptionsEndTime[1]));
}
}
// check if we are inside the operating hours for this display - we use that flag to decide if we need to create a notification and send an email.
if (($now >= $startTime && $now <= $endTime)) {
$operatingHours = true;
} else {
$operatingHours = false;
}
} catch (NotFoundException $e) {
$this->getLog()->debug('Unknown dayPartId set on Display Profile for displayId ' . $display->displayId);
}
}
// Should we create a notification
if ($emailAlerts && $display->emailAlert == 1 && ($displayOffline || $alwaysAlert)) {
// Alerts enabled for this display
// Display just gone offline, or always alert
// Fields for email
// for displays without dayPartId set, this is always true, otherwise we check if we are inside the operating hours set for this display
if ($operatingHours) {
$subject = sprintf(__("Alert for Display %s"), $display->display);
$body = sprintf(__("Display ID %d is offline since %s."), $display->displayId,
$this->getDate()->getLocalDate($display->lastAccessed));
// Add to system
$notification = $this->notificationFactory->createSystemNotification($subject, $body,
$this->getDate()->parse());
// Add in any displayNotificationGroups, with permissions
foreach ($this->userGroupFactory->getDisplayNotificationGroups($display->displayGroupId) as $group) {
$notification->assignUserGroup($group);
}
$notification->save();
} else {
$this->getLog()->info('Not sending email down alert for Display - ' . $display->display . ' we are outside of its operating hours');
}
} else if ($displayOffline) {
$this->getLog()->info('Not sending an email for offline display - emailAlert = ' . $display->emailAlert . ', alwaysAlert = ' . $alwaysAlert);
}
}
}
}
/**
* Show the authorise form
* @param $displayId
* @throws NotFoundException
*/
public function authoriseForm($displayId)
{
$display = $this->displayFactory->getById($displayId);
if (!$this->getUser()->checkEditable($display))
throw new AccessDeniedException();
$this->getState()->template = 'display-form-authorise';
$this->getState()->setData([
'display' => $display
]);
}
/**
* Toggle Authorise on this Display
* @param int $displayId
*
* @SWG\Put(
* path="/display/authorise/{displayId}",
* operationId="displayToggleAuthorise",
* tags={"display"},
* summary="Toggle authorised",
* description="Toggle authorised for the Display.",
* @SWG\Parameter(
* name="displayId",
* in="path",
* description="The Display ID",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
* @throws XiboException
*/
public function toggleAuthorise($displayId)
{
$display = $this->displayFactory->getById($displayId);
if (!$this->getUser()->checkEditable($display))
throw new AccessDeniedException();
$display->licensed = ($display->licensed == 1) ? 0 : 1;
$display->save(['validate' => false]);
// Return
$this->getState()->hydrate([
'message' => sprintf(__('Authorised set to %d for %s'), $display->licensed, $display->display),
'id' => $display->displayId
]);
}
/**
* @param $displayId
* @throws NotFoundException
*/
public function defaultLayoutForm($displayId)
{
$display = $this->displayFactory->getById($displayId);
if (!$this->getUser()->checkEditable($display))
throw new AccessDeniedException();
// Get the currently assigned default layout
try {
$layouts = (($display->defaultLayoutId != null) ? [$this->layoutFactory->getById($display->defaultLayoutId)] : []);
} catch (NotFoundException $notFoundException) {
$layouts = [];
}
$this->getState()->template = 'display-form-defaultlayout';
$this->getState()->setData([
'display' => $display,
'layouts' => $layouts
]);
}
/**
* Set the Default Layout for this Display
* @param int $displayId
*
* @SWG\Put(
* path="/display/defaultlayout/{displayId}",
* operationId="displayDefaultLayout",
* tags={"display"},
* summary="Set Default Layout",
* description="Set the default Layout on this Display",
* @SWG\Parameter(
* name="displayId",
* in="path",
* description="The Display ID",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="layoutId",
* in="formData",
* description="The Layout ID",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
* @throws XiboException
*/
public function setDefaultLayout($displayId)
{
$display = $this->displayFactory->getById($displayId);
if (!$this->getUser()->checkEditable($display))
throw new AccessDeniedException();
$layoutId = $this->getSanitizer()->getInt('layoutId');
$layout = $this->layoutFactory->getById($layoutId);
if (!$this->getUser()->checkViewable($layout))
throw new AccessDeniedException();
$display->defaultLayoutId = $layoutId;
$display->save(['validate' => false]);
if ($display->hasPropertyChanged('defaultLayoutId'))
$display->notify();
// Return
$this->getState()->hydrate([
'message' => sprintf(__('Default Layout with name %s set for %s'), $layout->layout, $display->display),
'id' => $display->displayId
]);
}
/**
* @param $displayId
* @throws NotFoundException
*/
public function moveCmsForm($displayId)
{
if ($this->getUser()->twoFactorTypeId != 2) {
throw new AccessDeniedException('This action requires active Google Authenticator Two Factor authentication');
}
$display = $this->displayFactory->getById($displayId);
if (!$this->getUser()->checkEditable($display)) {
throw new AccessDeniedException();
}
$this->getState()->template = 'display-form-moveCms';
$this->getState()->setData([
'display' => $display,
'newCmsAddress' => $display->newCmsAddress,
'newCmsKey' => $display->newCmsKey
]);
}
/**
* @param $displayId
* @throws NotFoundException
* @throws \RobThree\Auth\TwoFactorAuthException
* @throws InvalidArgumentException
* @throws XiboException
*/
public function moveCms($displayId)
{
if ($this->getUser()->twoFactorTypeId != 2) {
throw new AccessDeniedException('This action requires active Google Authenticator Two Factor authentication');
}
$display = $this->displayFactory->getById($displayId);
if (!$this->getUser()->checkEditable($display)) {
throw new AccessDeniedException();
}
// Two Factor Auth
$issuerSettings = $this->getConfig()->getSetting('TWOFACTOR_ISSUER');
$appName = $this->getConfig()->getThemeConfig('app_name');
if ($issuerSettings !== '') {
$issuer = $issuerSettings;
} else {
$issuer = $appName;
}
$authenticationCode = $this->getSanitizer()->getString('twoFactorCode', '');
$tfa = new TwoFactorAuth($issuer);
$result = $tfa->verifyCode($this->getUser()->twoFactorSecret, $authenticationCode);
if ($result) {
// get the new CMS Address and Key from the form.
$newCmsAddress = $this->getSanitizer()->getString('newCmsAddress');
$newCmsKey = $this->getSanitizer()->getString('newCmsKey');
// validate the URL
if (!v::url()->notEmpty()->validate(urldecode($newCmsAddress)) || !filter_var($newCmsAddress, FILTER_VALIDATE_URL)) {
throw new InvalidArgumentException(__('Provided CMS URL is invalid'), 'newCmsUrl');
}
if ($newCmsKey == '') {
throw new InvalidArgumentException(__('Provided CMS Key is invalid'), 'newCmsKey');
}
// we are successfully authenticated, get new CMS address and Key and save the Display record.
$display->newCmsAddress = $newCmsAddress;
$display->newCmsKey = $newCmsKey;
$display->save();
} else {
throw new InvalidArgumentException(__('Invalid Two Factor Authentication Code'), 'twoFactorCode');
}
}
public function addViaCodeForm()
{
$this->getState()->template = 'display-form-addViaCode';
}
/**
* @throws InvalidArgumentException
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function addViaCode()
{
$user_code = $this->getSanitizer()->getString('user_code');
$cmsAddress = (new HttpsDetect())->getUrl();
$cmsKey = $this->getConfig()->getSetting('SERVER_KEY');
if ($user_code == '') {
throw new InvalidArgumentException('Code cannot be empty', 'code');
}
$guzzle = new Client();
try {
// When the valid code is submitted, it will be sent along with CMS Address and Key to Authentication Service maintained by Xibo Signage Ltd.
// The Player will then call the service with the same code to retrieve the CMS details.
// On success, the details will be removed from the Authentication Service.
$request = $guzzle->request('POST', 'https://auth.signlicence.co.uk/addDetails',
$this->getConfig()->getGuzzleProxy([
'form_params' => [
'user_code' => $user_code,
'cmsAddress' => $cmsAddress,
'cmsKey' => $cmsKey,
]
]));
$data = json_decode($request->getBody(), true);
$this->getState()->hydrate([
'message' => $data['message']
]);
} catch (\Exception $e) {
$this->getLog()->debug($e->getMessage());
throw new InvalidArgumentException('Provided user_code does not exist', 'user_code');
}
}
/**
* Check commercial licence form
* @param int $displayId
* @throws \Xibo\Exception\NotFoundException
*/
public function checkLicenceForm($displayId)
{
$display = $this->displayFactory->getById($displayId);
if (!$this->getUser()->checkViewable($display)) {
throw new AccessDeniedException();
}
$this->getState()->template = 'display-form-licence-check';
$this->getState()->setData([
'display' => $display
]);
}
/**
* Check commercial licence
*
* @SWG\Put(
* summary="Licence Check",
* path="/display/licenceCheck/{displayId}",
* operationId="displayLicenceCheck",
* tags={"display"},
* description="Ask this Player to check its Commercial Licence",
* @SWG\Parameter(
* name="displayId",
* in="path",
* description="The Display ID",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*
* @param int $displayId
* @throws \Xibo\Exception\ConfigurationException if XMR cannot be contacted
* @throws \Xibo\Exception\NotFoundException
* @throws \Xibo\Exception\XiboException
*/
public function checkLicence($displayId)
{
$display = $this->displayFactory->getById($displayId);
if (!$this->getUser()->checkViewable($display)) {
throw new AccessDeniedException();
}
if (empty($display->xmrChannel)) {
throw new InvalidArgumentException('XMR is not configured for this Display', 'xmrChannel');
}
$this->playerAction->sendAction($display, new LicenceCheckAction());
// Return
$this->getState()->hydrate([
'message' => sprintf(__('Request sent for %s'), $display->display),
'id' => $display->displayId
]);
}
}
error_log; 0000644 00001677152 14716415766 0006620 0 ustar 00 [11-Sep-2023 17:11:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[13-Sep-2023 20:51:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[13-Sep-2023 21:56:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[14-Sep-2023 07:46:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[15-Sep-2023 12:37:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[16-Sep-2023 06:59:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[17-Sep-2023 04:16:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[17-Sep-2023 16:36:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[18-Sep-2023 03:37:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[18-Sep-2023 05:36:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[18-Sep-2023 16:14:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[18-Sep-2023 23:58:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[20-Sep-2023 02:56:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[22-Sep-2023 17:29:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[23-Sep-2023 04:49:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[23-Sep-2023 08:08:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[24-Sep-2023 06:45:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[25-Sep-2023 16:09:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[25-Sep-2023 16:09:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[25-Sep-2023 16:09:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[25-Sep-2023 16:09:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[25-Sep-2023 16:09:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[25-Sep-2023 16:09:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[25-Sep-2023 16:09:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[25-Sep-2023 16:09:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[25-Sep-2023 16:09:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[25-Sep-2023 16:09:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[25-Sep-2023 16:09:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[25-Sep-2023 16:09:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[25-Sep-2023 16:09:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[25-Sep-2023 16:09:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[25-Sep-2023 16:09:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[25-Sep-2023 16:09:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[25-Sep-2023 16:09:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[25-Sep-2023 16:09:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[25-Sep-2023 16:09:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[25-Sep-2023 16:09:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[25-Sep-2023 16:09:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[25-Sep-2023 16:09:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[25-Sep-2023 16:09:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[25-Sep-2023 16:09:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[25-Sep-2023 16:09:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[25-Sep-2023 16:09:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[25-Sep-2023 16:09:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[25-Sep-2023 16:09:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[25-Sep-2023 16:09:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[25-Sep-2023 16:09:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[25-Sep-2023 16:09:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[25-Sep-2023 16:09:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[25-Sep-2023 16:10:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[25-Sep-2023 16:10:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[25-Sep-2023 16:10:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[25-Sep-2023 16:10:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[25-Sep-2023 16:10:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[25-Sep-2023 16:10:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[25-Sep-2023 16:10:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[25-Sep-2023 16:10:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[25-Sep-2023 16:10:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[25-Sep-2023 16:10:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[25-Sep-2023 16:10:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[25-Sep-2023 20:24:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[25-Sep-2023 20:57:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[26-Sep-2023 01:53:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[26-Sep-2023 01:53:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[26-Sep-2023 01:53:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[26-Sep-2023 01:53:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[26-Sep-2023 01:53:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[26-Sep-2023 01:53:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[26-Sep-2023 01:53:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[26-Sep-2023 01:53:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[26-Sep-2023 01:53:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[26-Sep-2023 01:53:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[26-Sep-2023 01:53:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[26-Sep-2023 01:53:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[26-Sep-2023 01:53:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[26-Sep-2023 01:53:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[26-Sep-2023 01:53:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[26-Sep-2023 01:53:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[26-Sep-2023 01:53:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[26-Sep-2023 01:53:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[26-Sep-2023 01:53:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[26-Sep-2023 01:53:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[26-Sep-2023 01:53:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[26-Sep-2023 01:53:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[26-Sep-2023 01:53:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[26-Sep-2023 01:53:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[26-Sep-2023 01:53:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[26-Sep-2023 01:53:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[26-Sep-2023 01:53:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[26-Sep-2023 01:53:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[26-Sep-2023 01:53:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[26-Sep-2023 01:53:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[26-Sep-2023 01:53:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[26-Sep-2023 01:53:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[26-Sep-2023 01:53:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[26-Sep-2023 01:53:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[26-Sep-2023 01:53:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[26-Sep-2023 01:53:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[26-Sep-2023 01:53:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[26-Sep-2023 01:53:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[26-Sep-2023 01:54:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[26-Sep-2023 01:54:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[26-Sep-2023 01:54:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[26-Sep-2023 01:54:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[26-Sep-2023 01:54:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[27-Sep-2023 00:54:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[27-Sep-2023 00:54:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[27-Sep-2023 00:54:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[27-Sep-2023 00:54:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[27-Sep-2023 00:54:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[27-Sep-2023 00:54:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[27-Sep-2023 00:54:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[27-Sep-2023 00:54:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[27-Sep-2023 00:54:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[27-Sep-2023 00:54:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[27-Sep-2023 00:54:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[27-Sep-2023 00:54:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[27-Sep-2023 00:54:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[27-Sep-2023 00:54:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[27-Sep-2023 00:54:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[27-Sep-2023 00:54:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[27-Sep-2023 00:54:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[27-Sep-2023 00:54:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[27-Sep-2023 00:54:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[27-Sep-2023 00:54:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[27-Sep-2023 00:54:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[27-Sep-2023 00:54:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[27-Sep-2023 00:54:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[27-Sep-2023 00:54:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[27-Sep-2023 00:54:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[27-Sep-2023 00:54:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[27-Sep-2023 00:54:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[27-Sep-2023 00:54:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[27-Sep-2023 00:54:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[27-Sep-2023 00:54:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[27-Sep-2023 00:54:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[27-Sep-2023 00:54:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[27-Sep-2023 00:54:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[27-Sep-2023 00:54:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[27-Sep-2023 00:54:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[27-Sep-2023 00:54:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[27-Sep-2023 00:54:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[27-Sep-2023 00:54:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[27-Sep-2023 00:54:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[27-Sep-2023 00:54:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[27-Sep-2023 00:54:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[27-Sep-2023 00:54:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[27-Sep-2023 00:55:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[27-Sep-2023 00:58:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[27-Sep-2023 01:11:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[27-Sep-2023 01:11:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[27-Sep-2023 01:11:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[27-Sep-2023 01:11:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[27-Sep-2023 01:11:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[27-Sep-2023 01:11:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[27-Sep-2023 01:11:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[27-Sep-2023 01:11:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[27-Sep-2023 01:11:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[27-Sep-2023 01:11:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[27-Sep-2023 01:11:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[27-Sep-2023 01:11:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[27-Sep-2023 01:11:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[27-Sep-2023 01:11:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[27-Sep-2023 01:11:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[27-Sep-2023 01:11:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[27-Sep-2023 01:11:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[27-Sep-2023 01:11:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[27-Sep-2023 01:11:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[27-Sep-2023 01:12:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[27-Sep-2023 01:12:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[27-Sep-2023 01:12:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[27-Sep-2023 01:12:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[27-Sep-2023 01:12:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[27-Sep-2023 01:12:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[27-Sep-2023 01:12:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[27-Sep-2023 01:12:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[27-Sep-2023 01:12:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[27-Sep-2023 01:12:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[27-Sep-2023 01:12:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[27-Sep-2023 01:12:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[27-Sep-2023 01:12:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[27-Sep-2023 01:12:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[27-Sep-2023 01:12:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[27-Sep-2023 01:12:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[27-Sep-2023 01:12:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[27-Sep-2023 01:12:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[27-Sep-2023 01:12:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[27-Sep-2023 01:12:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[27-Sep-2023 01:12:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[27-Sep-2023 01:12:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[27-Sep-2023 01:12:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[27-Sep-2023 01:12:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[27-Sep-2023 20:27:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[29-Sep-2023 22:56:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[02-Oct-2023 04:14:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[03-Oct-2023 07:47:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[03-Oct-2023 07:53:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[03-Oct-2023 09:58:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[03-Oct-2023 21:53:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[07-Oct-2023 22:17:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[07-Oct-2023 22:18:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[07-Oct-2023 22:33:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[08-Oct-2023 01:34:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[10-Oct-2023 13:58:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[12-Oct-2023 20:24:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[17-Oct-2023 12:42:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[17-Oct-2023 19:14:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[21-Oct-2023 19:31:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[24-Oct-2023 08:54:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[28-Oct-2023 12:29:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[28-Oct-2023 16:59:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[30-Oct-2023 04:22:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[04-Nov-2023 02:52:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[05-Nov-2023 09:25:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[06-Nov-2023 06:12:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[06-Nov-2023 18:11:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[07-Nov-2023 13:55:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[10-Nov-2023 19:44:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[12-Nov-2023 17:50:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[12-Nov-2023 17:50:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[12-Nov-2023 17:50:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[12-Nov-2023 17:50:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[12-Nov-2023 17:50:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[12-Nov-2023 17:50:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[12-Nov-2023 17:50:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[12-Nov-2023 17:50:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[12-Nov-2023 17:50:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[12-Nov-2023 17:50:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[12-Nov-2023 17:50:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[12-Nov-2023 17:50:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[12-Nov-2023 17:50:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[12-Nov-2023 17:50:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[12-Nov-2023 17:51:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[12-Nov-2023 17:51:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[12-Nov-2023 17:51:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[12-Nov-2023 17:51:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[12-Nov-2023 17:51:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[12-Nov-2023 17:51:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[12-Nov-2023 17:51:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[12-Nov-2023 17:51:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[12-Nov-2023 17:51:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[12-Nov-2023 17:51:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[12-Nov-2023 17:51:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[12-Nov-2023 17:51:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[12-Nov-2023 17:52:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[12-Nov-2023 17:52:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[12-Nov-2023 17:52:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[12-Nov-2023 17:53:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[12-Nov-2023 17:53:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[12-Nov-2023 17:53:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[12-Nov-2023 17:53:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[12-Nov-2023 17:53:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[12-Nov-2023 17:53:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[12-Nov-2023 17:53:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[12-Nov-2023 17:53:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[12-Nov-2023 17:53:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[12-Nov-2023 17:53:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[12-Nov-2023 17:53:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[12-Nov-2023 17:53:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[12-Nov-2023 17:53:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[12-Nov-2023 17:53:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[14-Nov-2023 04:49:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[14-Nov-2023 04:49:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[14-Nov-2023 04:50:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[14-Nov-2023 04:50:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[14-Nov-2023 04:50:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[14-Nov-2023 04:50:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[14-Nov-2023 04:50:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[14-Nov-2023 04:50:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[14-Nov-2023 04:50:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[14-Nov-2023 04:50:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[14-Nov-2023 04:50:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[14-Nov-2023 04:51:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[14-Nov-2023 04:51:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[14-Nov-2023 04:51:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[14-Nov-2023 04:51:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[14-Nov-2023 04:51:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[14-Nov-2023 04:51:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[14-Nov-2023 04:51:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[14-Nov-2023 04:51:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[14-Nov-2023 04:51:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[14-Nov-2023 04:51:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[14-Nov-2023 04:51:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[14-Nov-2023 04:51:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[14-Nov-2023 04:51:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[14-Nov-2023 04:51:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[14-Nov-2023 04:51:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[14-Nov-2023 04:51:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[14-Nov-2023 04:51:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[14-Nov-2023 04:51:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[14-Nov-2023 04:51:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[14-Nov-2023 04:51:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[14-Nov-2023 04:52:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[14-Nov-2023 04:52:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[14-Nov-2023 04:52:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[14-Nov-2023 04:52:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[14-Nov-2023 04:52:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[14-Nov-2023 04:52:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[14-Nov-2023 04:52:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[14-Nov-2023 04:52:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[14-Nov-2023 04:53:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[14-Nov-2023 04:53:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[14-Nov-2023 04:53:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[14-Nov-2023 04:53:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[14-Nov-2023 11:53:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[14-Nov-2023 11:53:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[14-Nov-2023 11:53:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[14-Nov-2023 11:53:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[14-Nov-2023 11:53:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[14-Nov-2023 11:53:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[14-Nov-2023 11:53:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[14-Nov-2023 11:53:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[14-Nov-2023 11:53:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[14-Nov-2023 11:53:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[14-Nov-2023 11:53:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[14-Nov-2023 11:54:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[14-Nov-2023 11:54:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[14-Nov-2023 11:54:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[14-Nov-2023 11:54:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[14-Nov-2023 11:54:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[14-Nov-2023 11:54:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[14-Nov-2023 11:54:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[14-Nov-2023 11:54:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[14-Nov-2023 11:54:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[14-Nov-2023 11:54:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[14-Nov-2023 11:54:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[14-Nov-2023 11:54:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[14-Nov-2023 11:54:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[14-Nov-2023 11:54:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[14-Nov-2023 11:55:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[14-Nov-2023 11:55:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[14-Nov-2023 11:55:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[14-Nov-2023 11:55:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[14-Nov-2023 11:55:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[14-Nov-2023 11:55:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[14-Nov-2023 11:55:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[14-Nov-2023 11:55:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[14-Nov-2023 11:55:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[14-Nov-2023 11:55:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[14-Nov-2023 11:55:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[14-Nov-2023 11:55:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[14-Nov-2023 11:55:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[14-Nov-2023 11:55:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[14-Nov-2023 11:55:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[14-Nov-2023 11:55:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[14-Nov-2023 11:56:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[14-Nov-2023 11:56:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[14-Nov-2023 17:51:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[15-Nov-2023 17:30:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[16-Nov-2023 00:21:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[16-Nov-2023 04:27:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[16-Nov-2023 04:27:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[16-Nov-2023 04:27:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[16-Nov-2023 04:27:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[16-Nov-2023 04:27:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[16-Nov-2023 04:27:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[16-Nov-2023 04:27:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[16-Nov-2023 04:27:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[16-Nov-2023 04:27:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[16-Nov-2023 04:27:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[16-Nov-2023 04:27:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[16-Nov-2023 04:28:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[16-Nov-2023 04:28:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[16-Nov-2023 04:28:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[16-Nov-2023 04:28:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[16-Nov-2023 04:28:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[16-Nov-2023 04:28:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[16-Nov-2023 04:28:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[16-Nov-2023 04:28:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[16-Nov-2023 04:28:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[16-Nov-2023 04:28:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[16-Nov-2023 04:28:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[16-Nov-2023 04:28:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[16-Nov-2023 04:28:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[16-Nov-2023 04:28:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[16-Nov-2023 04:28:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[16-Nov-2023 04:28:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[16-Nov-2023 04:28:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[16-Nov-2023 04:29:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[16-Nov-2023 04:29:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[16-Nov-2023 04:29:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[16-Nov-2023 04:29:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[16-Nov-2023 04:29:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[16-Nov-2023 04:29:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[16-Nov-2023 04:29:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[16-Nov-2023 04:29:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[16-Nov-2023 04:29:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[16-Nov-2023 04:29:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[16-Nov-2023 04:29:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[16-Nov-2023 04:29:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[16-Nov-2023 04:29:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[16-Nov-2023 04:29:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[16-Nov-2023 04:30:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[16-Nov-2023 09:24:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[16-Nov-2023 14:13:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[16-Nov-2023 14:21:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[16-Nov-2023 23:30:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[17-Nov-2023 04:45:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[17-Nov-2023 18:00:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[17-Nov-2023 21:49:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[18-Nov-2023 04:21:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[18-Nov-2023 16:00:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[19-Nov-2023 03:09:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[19-Nov-2023 04:32:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[19-Nov-2023 08:36:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[19-Nov-2023 08:36:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[19-Nov-2023 09:20:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[20-Nov-2023 02:40:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[20-Nov-2023 13:13:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[20-Nov-2023 19:32:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[21-Nov-2023 05:39:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[21-Nov-2023 08:42:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[21-Nov-2023 15:19:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[21-Nov-2023 18:09:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[21-Nov-2023 20:07:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[22-Nov-2023 10:17:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[22-Nov-2023 10:17:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[22-Nov-2023 12:45:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[22-Nov-2023 16:19:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[23-Nov-2023 07:09:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[23-Nov-2023 08:20:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[23-Nov-2023 09:46:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[26-Nov-2023 13:15:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[26-Nov-2023 14:48:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[27-Nov-2023 02:11:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[27-Nov-2023 02:18:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[27-Nov-2023 04:10:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[27-Nov-2023 06:25:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[28-Nov-2023 08:05:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[28-Nov-2023 09:44:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[29-Nov-2023 03:37:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[29-Nov-2023 20:15:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[30-Nov-2023 08:39:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[30-Nov-2023 10:32:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[01-Dec-2023 09:00:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[01-Dec-2023 10:51:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[01-Dec-2023 22:39:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[02-Dec-2023 07:45:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[02-Dec-2023 23:20:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[03-Dec-2023 14:24:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[05-Dec-2023 23:37:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[06-Dec-2023 06:39:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[07-Dec-2023 21:20:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[17-Dec-2023 03:20:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[19-Dec-2023 01:09:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[19-Dec-2023 06:31:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[19-Dec-2023 13:06:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[21-Dec-2023 11:43:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[27-Dec-2023 16:53:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[27-Dec-2023 18:44:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[27-Dec-2023 18:52:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[27-Dec-2023 18:54:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[28-Dec-2023 05:20:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[29-Dec-2023 05:35:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[29-Dec-2023 22:06:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[29-Dec-2023 23:54:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[30-Dec-2023 04:45:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[30-Dec-2023 13:18:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[30-Dec-2023 18:25:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[31-Dec-2023 03:52:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[31-Dec-2023 12:17:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[31-Dec-2023 22:40:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[01-Jan-2024 13:54:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[01-Jan-2024 16:43:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[02-Jan-2024 13:47:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[03-Jan-2024 14:13:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[03-Jan-2024 15:01:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[03-Jan-2024 19:38:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[03-Jan-2024 21:06:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[03-Jan-2024 21:24:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[03-Jan-2024 23:54:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[04-Jan-2024 00:45:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[06-Jan-2024 11:55:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[06-Jan-2024 13:17:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[06-Jan-2024 15:23:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[08-Jan-2024 00:03:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[08-Jan-2024 02:37:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[08-Jan-2024 04:42:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[08-Jan-2024 05:44:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[08-Jan-2024 13:00:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[09-Jan-2024 01:13:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[09-Jan-2024 05:47:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[10-Jan-2024 23:36:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[11-Jan-2024 03:40:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[12-Jan-2024 10:35:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[13-Jan-2024 14:14:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[13-Jan-2024 17:51:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[13-Jan-2024 17:57:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[13-Jan-2024 19:21:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[14-Jan-2024 00:16:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[14-Jan-2024 00:17:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[14-Jan-2024 04:38:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[14-Jan-2024 11:51:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[15-Jan-2024 06:13:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[15-Jan-2024 21:29:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[16-Jan-2024 01:06:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[16-Jan-2024 03:37:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[17-Jan-2024 18:26:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[19-Jan-2024 05:53:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[19-Jan-2024 08:08:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[19-Jan-2024 13:35:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[19-Jan-2024 23:18:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[20-Jan-2024 20:48:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[24-Jan-2024 01:50:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[24-Jan-2024 08:24:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[24-Jan-2024 21:07:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[24-Jan-2024 21:17:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[25-Jan-2024 04:28:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[25-Jan-2024 16:34:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[25-Jan-2024 19:20:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[27-Jan-2024 08:47:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[27-Jan-2024 18:47:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[31-Jan-2024 23:38:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[02-Feb-2024 20:49:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[05-Feb-2024 20:45:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[06-Feb-2024 10:30:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[06-Feb-2024 19:05:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[06-Feb-2024 23:31:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[07-Feb-2024 14:24:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[07-Feb-2024 17:22:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[07-Feb-2024 19:24:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[07-Feb-2024 20:13:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[07-Feb-2024 22:48:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[07-Feb-2024 22:53:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[07-Feb-2024 23:25:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[08-Feb-2024 00:11:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[08-Feb-2024 02:43:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[08-Feb-2024 04:07:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[08-Feb-2024 04:19:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[08-Feb-2024 04:45:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[08-Feb-2024 05:01:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[08-Feb-2024 05:13:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[08-Feb-2024 05:14:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[08-Feb-2024 05:48:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[08-Feb-2024 06:30:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[08-Feb-2024 06:51:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[08-Feb-2024 06:52:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[08-Feb-2024 07:13:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[08-Feb-2024 07:58:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[08-Feb-2024 08:02:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[08-Feb-2024 08:17:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[08-Feb-2024 08:23:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[08-Feb-2024 08:34:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[08-Feb-2024 09:59:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[08-Feb-2024 10:43:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[08-Feb-2024 10:56:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[08-Feb-2024 11:02:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[08-Feb-2024 11:24:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[08-Feb-2024 13:11:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[08-Feb-2024 15:50:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[08-Feb-2024 15:53:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[08-Feb-2024 16:07:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[08-Feb-2024 17:04:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[08-Feb-2024 17:27:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[08-Feb-2024 17:39:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[08-Feb-2024 17:41:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[08-Feb-2024 18:54:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[08-Feb-2024 19:14:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[08-Feb-2024 19:16:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[08-Feb-2024 19:23:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[08-Feb-2024 23:38:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[08-Feb-2024 23:51:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[09-Feb-2024 00:54:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[09-Feb-2024 01:44:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[09-Feb-2024 01:52:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[09-Feb-2024 12:47:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[09-Feb-2024 14:35:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[11-Feb-2024 05:00:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[11-Feb-2024 07:06:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[11-Feb-2024 07:47:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[11-Feb-2024 07:53:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[11-Feb-2024 08:28:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[11-Feb-2024 10:49:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[11-Feb-2024 11:31:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[11-Feb-2024 13:54:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[11-Feb-2024 14:25:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[12-Feb-2024 17:19:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[13-Feb-2024 02:46:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[13-Feb-2024 05:19:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[13-Feb-2024 06:19:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[13-Feb-2024 16:49:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[13-Feb-2024 20:00:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[13-Feb-2024 20:32:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[14-Feb-2024 05:14:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[15-Feb-2024 05:18:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[15-Feb-2024 05:54:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[15-Feb-2024 05:58:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[15-Feb-2024 08:42:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[15-Feb-2024 08:50:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[15-Feb-2024 09:10:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[15-Feb-2024 09:30:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[15-Feb-2024 09:34:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[15-Feb-2024 09:42:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[15-Feb-2024 09:46:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[15-Feb-2024 11:22:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[15-Feb-2024 11:50:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[15-Feb-2024 11:58:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[15-Feb-2024 12:30:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[15-Feb-2024 12:46:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[16-Feb-2024 12:23:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[16-Feb-2024 19:16:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[16-Feb-2024 22:34:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[17-Feb-2024 13:12:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[17-Feb-2024 13:51:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[17-Feb-2024 18:35:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[17-Feb-2024 18:40:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[17-Feb-2024 18:46:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[18-Feb-2024 13:06:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[18-Feb-2024 13:14:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[18-Feb-2024 16:39:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[18-Feb-2024 16:42:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[18-Feb-2024 18:06:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[18-Feb-2024 18:22:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[18-Feb-2024 19:10:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[18-Feb-2024 19:50:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[18-Feb-2024 20:18:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[18-Feb-2024 20:38:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[18-Feb-2024 20:42:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[18-Feb-2024 20:46:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[18-Feb-2024 20:58:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[18-Feb-2024 21:10:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[18-Feb-2024 21:22:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[18-Feb-2024 22:54:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[18-Feb-2024 22:58:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[18-Feb-2024 23:22:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[18-Feb-2024 23:40:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[19-Feb-2024 00:30:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[19-Feb-2024 01:06:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[19-Feb-2024 14:39:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[19-Feb-2024 19:00:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[20-Feb-2024 01:55:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[21-Feb-2024 19:05:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[21-Feb-2024 19:06:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[21-Feb-2024 19:06:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[21-Feb-2024 19:06:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[21-Feb-2024 19:06:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[21-Feb-2024 19:06:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[21-Feb-2024 19:06:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[21-Feb-2024 19:06:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[21-Feb-2024 19:06:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[21-Feb-2024 19:07:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[21-Feb-2024 19:07:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[21-Feb-2024 19:07:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[21-Feb-2024 19:07:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[21-Feb-2024 19:09:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[21-Feb-2024 19:09:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[21-Feb-2024 19:10:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[21-Feb-2024 19:10:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[21-Feb-2024 19:10:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[21-Feb-2024 19:10:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[21-Feb-2024 19:11:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[21-Feb-2024 19:11:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[21-Feb-2024 19:11:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[21-Feb-2024 19:12:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[21-Feb-2024 19:12:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[21-Feb-2024 19:12:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[21-Feb-2024 19:13:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[21-Feb-2024 19:13:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[21-Feb-2024 19:14:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[21-Feb-2024 19:14:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[21-Feb-2024 19:15:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[21-Feb-2024 19:15:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[21-Feb-2024 19:16:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[21-Feb-2024 19:16:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[21-Feb-2024 22:24:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[22-Feb-2024 01:44:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[22-Feb-2024 01:44:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[22-Feb-2024 01:44:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[22-Feb-2024 01:44:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[22-Feb-2024 01:44:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[22-Feb-2024 01:44:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[22-Feb-2024 01:44:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[22-Feb-2024 03:32:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[22-Feb-2024 11:44:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[22-Feb-2024 11:52:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[22-Feb-2024 15:43:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[22-Feb-2024 15:43:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[22-Feb-2024 15:44:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[22-Feb-2024 18:32:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[22-Feb-2024 22:34:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[23-Feb-2024 01:16:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[23-Feb-2024 01:29:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[23-Feb-2024 16:31:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[26-Feb-2024 11:36:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[27-Feb-2024 08:50:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[27-Feb-2024 13:23:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[27-Feb-2024 13:23:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[27-Feb-2024 13:23:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[27-Feb-2024 13:23:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[27-Feb-2024 13:23:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[27-Feb-2024 13:23:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[27-Feb-2024 13:23:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[27-Feb-2024 13:23:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[27-Feb-2024 13:24:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[27-Feb-2024 13:24:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[27-Feb-2024 13:24:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[27-Feb-2024 13:24:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[27-Feb-2024 13:24:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[27-Feb-2024 13:24:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[27-Feb-2024 13:24:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[27-Feb-2024 13:24:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[27-Feb-2024 13:24:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[27-Feb-2024 13:24:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[27-Feb-2024 13:24:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[27-Feb-2024 13:24:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[27-Feb-2024 13:25:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[27-Feb-2024 13:25:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[27-Feb-2024 13:25:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[27-Feb-2024 13:25:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[27-Feb-2024 13:25:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[27-Feb-2024 13:25:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[27-Feb-2024 13:25:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[27-Feb-2024 13:25:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[27-Feb-2024 13:25:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[27-Feb-2024 13:25:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[27-Feb-2024 13:25:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[27-Feb-2024 13:26:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[27-Feb-2024 13:26:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[27-Feb-2024 13:26:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[27-Feb-2024 13:26:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[27-Feb-2024 13:26:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[27-Feb-2024 13:26:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[27-Feb-2024 13:26:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[27-Feb-2024 13:26:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[27-Feb-2024 13:26:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[27-Feb-2024 13:26:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[27-Feb-2024 13:26:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[27-Feb-2024 13:26:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[27-Feb-2024 16:35:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[27-Feb-2024 17:46:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[27-Feb-2024 17:52:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[27-Feb-2024 17:53:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[27-Feb-2024 18:17:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[27-Feb-2024 18:25:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[27-Feb-2024 18:32:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[27-Feb-2024 18:35:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[27-Feb-2024 21:45:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[28-Feb-2024 18:46:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[28-Feb-2024 18:47:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[28-Feb-2024 18:47:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[28-Feb-2024 18:47:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[28-Feb-2024 19:05:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[28-Feb-2024 19:05:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[28-Feb-2024 19:10:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[28-Feb-2024 19:10:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[28-Feb-2024 20:22:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[28-Feb-2024 21:59:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[29-Feb-2024 06:06:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[29-Feb-2024 16:55:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[02-Mar-2024 14:36:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[03-Mar-2024 17:12:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[03-Mar-2024 23:21:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[05-Mar-2024 13:43:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[06-Mar-2024 02:29:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[06-Mar-2024 11:06:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[07-Mar-2024 00:39:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[08-Mar-2024 05:04:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[11-Mar-2024 15:55:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[11-Mar-2024 15:55:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[11-Mar-2024 15:55:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[11-Mar-2024 15:56:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[12-Mar-2024 10:03:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[12-Mar-2024 19:20:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[16-Mar-2024 07:39:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[17-Mar-2024 23:46:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[17-Mar-2024 23:46:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[17-Mar-2024 23:46:58 America[19-Mar-2024 04:08:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[20-Mar-2024 13:56:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[20-Mar-2024 22:44:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[21-Mar-2024 03:42:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[21-Mar-2024 06:14:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[21-Mar-2024 14:22:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[22-Mar-2024 04:54:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[22-Mar-2024 11:46:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[23-Mar-2024 04:01:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[23-Mar-2024 07:29:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[23-Mar-2024 15:04:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[23-Mar-2024 16:06:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[23-Mar-2024 16:47:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[24-Mar-2024 02:03:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[24-Mar-2024 03:16:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[24-Mar-2024 03:44:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[24-Mar-2024 05:31:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[24-Mar-2024 11:35:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[24-Mar-2024 14:19:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[25-Mar-2024 06:52:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[25-Mar-2024 09:39:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[25-Mar-2024 11:05:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[25-Mar-2024 11:43:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[25-Mar-2024 20:07:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[25-Mar-2024 21:34:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[26-Mar-2024 03:51:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[26-Mar-2024 04:47:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[26-Mar-2024 07:01:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[26-Mar-2024 07:11:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[26-Mar-2024 13:10:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[26-Mar-2024 20:10:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[26-Mar-2024 21:42:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[27-Mar-2024 00:57:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[27-Mar-2024 06:32:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[27-Mar-2024 09:46:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[27-Mar-2024 10:03:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[27-Mar-2024 14:50:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[27-Mar-2024 16:01:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[27-Mar-2024 16:32:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[27-Mar-2024 19:22:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[27-Mar-2024 21:57:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[27-Mar-2024 22:04:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[27-Mar-2024 22:59:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[28-Mar-2024 18:47:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[29-Mar-2024 03:53:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[29-Mar-2024 05:01:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[29-Mar-2024 08:43:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[29-Mar-2024 09:14:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[29-Mar-2024 09:28:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[29-Mar-2024 09:41:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[29-Mar-2024 09:43:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[29-Mar-2024 09:44:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[29-Mar-2024 10:48:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[29-Mar-2024 22:20:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[30-Mar-2024 14:21:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[30-Mar-2024 20:16:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[30-Mar-2024 23:44:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[31-Mar-2024 01:27:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[31-Mar-2024 15:04:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[31-Mar-2024 16:32:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[01-Apr-2024 05:21:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[01-Apr-2024 06:55:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[01-Apr-2024 07:12:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[01-Apr-2024 15:54:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[02-Apr-2024 07:42:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[02-Apr-2024 13:36:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[02-Apr-2024 15:51:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[02-Apr-2024 22:58:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[03-Apr-2024 00:10:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[03-Apr-2024 00:10:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mg[04-Apr-2024 09:53:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[04-Apr-2024 16:23:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[04-Apr-2024 18:41:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[05-Apr-2024 00:16:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[05-Apr-2024 06:06:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[05-Apr-2024 11:19:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[05-Apr-2024 16:24:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[06-Apr-2024 04:34:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[07-Apr-2024 15:54:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[07-Apr-2024 22:38:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[07-Apr-2024 23:01:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[08-Apr-2024 00:24:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[08-Apr-2024 02:31:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[08-Apr-2024 03:58:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[08-Apr-2024 19:55:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[09-Apr-2024 06:59:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[09-Apr-2024 07:06:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[09-Apr-2024 07:13:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[09-Apr-2024 07:23:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[09-Apr-2024 07:35:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[09-Apr-2024 08:03:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[09-Apr-2024 08:06:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[09-Apr-2024 08:15:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[09-Apr-2024 08:18:08 America/Fortaleza] PHP Fatal e[09-Apr-2024 09:36:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[09-Apr-2024 09:38:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[09-Apr-2024 09:40:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[09-Apr-2024 09:42:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[09-Apr-2024 09:49:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[09-Apr-2024 09:52:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[09-Apr-2024 10:16:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[09-Apr-2024 10:17:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[09-Apr-2024 10:41:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[09-Apr-2024 10:42:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[09-Apr-2024 12:10:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[09-Apr-2024 12:29:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[09-Apr-2024 12:36:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[09-Apr-2024 12:50:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[09-Apr-2024 15:02:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[09-Apr-2024 21:37:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[10-Apr-2024 02:17:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[10-Apr-2024 03:21:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[10-Apr-2024 18:56:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[10-Apr-2024 18:57:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[11-Apr-2024 00:26:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[12-Apr-2024 04:31:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[12-Apr-2024 10:29:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[12-Apr-2024 10:44:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[13-Apr-2024 04:12:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[13-Apr-2024 17:44:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[13-Apr-2024 19:06:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[13-Apr-2024 22:05:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[15-Apr-2024 02:48:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[15-Apr-2024 20:03:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[16-Apr-2024 13:43:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[16-Apr-2024 17:15:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[17-Apr-2024 12:16:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[18-Apr-2024 08:20:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[18-Apr-2024 10:05:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[19-Apr-2024 10:41:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[22-Apr-2024 04:30:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[22-Apr-2024 13:37:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[23-Apr-2024 06:13:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[28-Apr-2024 21:19:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[01-May-2024 10:44:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[01-May-2024 15:30:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[02-May-2024 06:47:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[02-May-2024 08:40:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[02-May-2024 13:44:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[02-May-2024 14:12:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[02-May-2024 14:31:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[02-May-2024 16:37:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[03-May-2024 00:31:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[03-May-2024 01:01:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[03-May-2024 04:23:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[03-May-2024 06:36:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[03-May-2024 11:01:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[03-May-2024 14:20:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[04-May-2024 01:55:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[04-May-2024 02:54:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[04-May-2024 03:16:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[04-May-2024 05:54:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[04-May-2024 07:48:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[04-May-2024 08:56:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[04-May-2024 10:23:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[04-May-2024 10:27:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[04-May-2024 13:51:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[04-May-2024 17:22:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[04-May-2024 19:03:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[04-May-2024 19:08:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[04-May-2024 21:09:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[04-May-2024 22:02:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[05-May-2024 02:21:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[05-May-2024 02:21:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[05-May-2024 02:21:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[05-May-2024 20:33:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[05-May-2024 21:47:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[06-May-2024 01:27:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[06-May-2024 02:21:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[06-May-2024 03:15:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[06-May-2024 06:14:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[06-May-2024 09:28:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[06-May-2024 20:04:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[06-May-2024 20:50:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[07-May-2024 01:04:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[07-May-2024 02:54:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[07-May-2024 06:23:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[07-May-2024 06:44:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[07-May-2024 13:05:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[07-May-2024 14:00:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[07-May-2024 17:08:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[08-May-2024 00:33:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[08-May-2024 01:57:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[08-May-2024 08:40:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[08-May-2024 14:30:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[08-May-2024 18:11:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[08-May-2024 21:58:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[09-May-2024 01:23:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[09-May-2024 05:38:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[09-May-2024 13:23:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[09-May-2024 21:47:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[11-May-2024 02:02:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[11-May-2024 07:39:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[11-May-2024 11:34:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[11-May-2024 11:47:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[11-May-2024 15:37:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[11-May-2024 16:20:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[12-May-2024 00:52:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[12-May-2024 03:54:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[12-May-2024 08:44:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[12-May-2024 09:04:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[12-May-2024 10:46:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[12-May-2024 15:54:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[12-May-2024 18:54:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[12-May-2024 19:08:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[13-May-2024 04:25:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[13-May-2024 07:04:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[13-May-2024 11:51:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[13-May-2024 13:11:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[14-May-2024 00:46:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[14-May-2024 06:52:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[14-May-2024 06:57:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[14-May-2024 06:58:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[14-May-2024 06:59:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[14-May-2024 07:00:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[14-May-2024 07:01:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[14-May-2024 07:04:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[14-May-2024 07:12:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[14-May-2024 07:13:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[14-May-2024 07:14:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[14-May-2024 07:18:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[14-May-2024 07:38:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[14-May-2024 07:41:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[14-May-2024 07:44:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[14-May-2024 07:44:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[14-May-2024 07:48:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[14-May-2024 08:03:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[14-May-2024 08:10:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[14-May-2024 22:45:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[16-May-2024 05:27:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[16-May-2024 06:24:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[16-May-2024 06:28:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[16-May-2024 11:35:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[16-May-2024 11:35:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[16-May-2024 16:37:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[16-May-2024 17:55:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[16-May-2024 18:47:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[16-May-2024 23:03:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[17-May-2024 03:01:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[17-May-2024 04:14:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[17-May-2024 05:47:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[17-May-2024 06:41:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[17-May-2024 09:02:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[17-May-2024 09:03:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[17-May-2024 09:10:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[17-May-2024 10:17:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[17-May-2024 10:27:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[17-May-2024 10:28:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[17-May-2024 10:29:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[17-May-2024 10:59:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[17-May-2024 11:29:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[17-May-2024 12:16:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[17-May-2024 12:24:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[17-May-2024 20:06:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[18-May-2024 07:41:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[18-May-2024 23:14:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[19-May-2024 00:13:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[19-May-2024 00:54:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[19-May-2024 00:54:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[19-May-2024 00:54:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[19-May-2024 00:54:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[19-May-2024 00:54:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[19-May-2024 00:54:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[19-May-2024 00:54:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[19-May-2024 00:54:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[19-May-2024 00:54:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[19-May-2024 00:54:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[19-May-2024 00:54:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[19-May-2024 00:55:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[19-May-2024 00:55:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[19-May-2024 00:55:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[19-May-2024 00:55:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[19-May-2024 00:55:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[19-May-2024 00:55:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[19-May-2024 00:55:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[19-May-2024 00:55:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[19-May-2024 00:55:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[19-May-2024 00:55:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[19-May-2024 00:55:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[19-May-2024 00:55:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[19-May-2024 00:55:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[19-May-2024 00:55:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[19-May-2024 00:56:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[19-May-2024 00:56:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[19-May-2024 00:56:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[19-May-2024 00:56:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[19-May-2024 00:56:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[19-May-2024 00:56:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[19-May-2024 00:56:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[19-May-2024 00:56:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[19-May-2024 00:56:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[19-May-2024 00:56:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[19-May-2024 00:56:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[19-May-2024 00:56:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[19-May-2024 00:56:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[19-May-2024 00:56:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[19-May-2024 00:56:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[19-May-2024 00:57:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[19-May-2024 00:57:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[19-May-2024 00:57:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[19-May-2024 22:48:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[19-May-2024 23:41:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[19-May-2024 23:44:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[20-May-2024 00:27:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[20-May-2024 01:46:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[20-May-2024 02:00:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[20-May-2024 02:29:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[20-May-2024 04:32:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[20-May-2024 05:01:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[20-May-2024 05:39:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[20-May-2024 07:16:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[20-May-2024 07:44:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[20-May-2024 12:07:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[20-May-2024 15:29:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[20-May-2024 20:08:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[21-May-2024 03:04:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[21-May-2024 08:58:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[21-May-2024 10:09:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[21-May-2024 10:09:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[21-May-2024 10:09:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[21-May-2024 10:09:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[21-May-2024 10:10:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[21-May-2024 10:10:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[21-May-2024 10:10:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[21-May-2024 10:10:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[21-May-2024 10:10:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[21-May-2024 10:10:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[21-May-2024 10:10:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[21-May-2024 10:10:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[21-May-2024 10:10:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[21-May-2024 10:10:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[21-May-2024 10:10:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[21-May-2024 10:10:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[21-May-2024 10:10:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[21-May-2024 10:11:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[21-May-2024 10:11:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[21-May-2024 10:11:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[21-May-2024 10:11:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[21-May-2024 10:11:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[21-May-2024 10:11:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[21-May-2024 10:11:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[21-May-2024 10:11:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[21-May-2024 10:11:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[21-May-2024 10:11:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[21-May-2024 10:11:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[21-May-2024 10:11:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[21-May-2024 10:11:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[21-May-2024 10:11:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[21-May-2024 10:11:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[21-May-2024 10:12:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[21-May-2024 10:12:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[21-May-2024 10:12:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[21-May-2024 10:12:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[21-May-2024 10:12:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[21-May-2024 10:12:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[21-May-2024 10:12:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[21-May-2024 10:12:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[21-May-2024 10:12:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[21-May-2024 10:12:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[21-May-2024 10:12:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[21-May-2024 11:21:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[21-May-2024 11:21:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[21-May-2024 11:21:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[21-May-2024 11:21:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[21-May-2024 11:22:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[21-May-2024 11:22:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[21-May-2024 11:22:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[21-May-2024 11:22:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[21-May-2024 11:22:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[21-May-2024 11:22:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[21-May-2024 11:22:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[21-May-2024 11:22:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[21-May-2024 11:22:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[21-May-2024 11:22:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[21-May-2024 11:22:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[21-May-2024 11:22:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[21-May-2024 11:22:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[21-May-2024 11:22:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[21-May-2024 11:23:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[21-May-2024 11:23:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[21-May-2024 11:23:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[21-May-2024 11:23:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[21-May-2024 11:23:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[21-May-2024 11:23:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[21-May-2024 11:23:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[21-May-2024 11:23:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[21-May-2024 11:23:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[21-May-2024 11:23:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[21-May-2024 11:23:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[21-May-2024 11:23:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[21-May-2024 11:23:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[21-May-2024 11:23:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[21-May-2024 11:23:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[21-May-2024 11:24:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[21-May-2024 11:24:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[21-May-2024 11:24:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[21-May-2024 11:24:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[21-May-2024 11:24:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[21-May-2024 11:24:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[21-May-2024 11:24:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[21-May-2024 11:24:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[21-May-2024 11:24:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[21-May-2024 11:24:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[21-May-2024 12:24:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[21-May-2024 12:32:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[21-May-2024 12:32:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[21-May-2024 12:32:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[21-May-2024 12:32:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[21-May-2024 12:32:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[21-May-2024 12:32:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[21-May-2024 12:32:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[21-May-2024 12:32:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[21-May-2024 12:32:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[21-May-2024 12:32:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[21-May-2024 12:32:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[21-May-2024 12:32:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[21-May-2024 12:33:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[21-May-2024 12:33:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[21-May-2024 12:33:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[21-May-2024 12:33:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[21-May-2024 12:33:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[21-May-2024 12:33:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[21-May-2024 12:33:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[21-May-2024 12:33:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[21-May-2024 12:33:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[21-May-2024 12:33:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[21-May-2024 12:33:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[21-May-2024 12:33:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[21-May-2024 12:33:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[21-May-2024 12:33:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[21-May-2024 12:34:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[21-May-2024 12:34:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[21-May-2024 12:34:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[21-May-2024 12:34:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[21-May-2024 12:34:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[21-May-2024 12:34:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[21-May-2024 12:34:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[21-May-2024 12:34:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[21-May-2024 12:34:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[21-May-2024 12:34:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[21-May-2024 12:34:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[21-May-2024 12:34:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[21-May-2024 12:34:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[21-May-2024 12:34:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[21-May-2024 12:34:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[21-May-2024 12:35:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[21-May-2024 12:35:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[22-May-2024 04:04:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[22-May-2024 04:41:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[22-May-2024 11:16:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[22-May-2024 11:39:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[22-May-2024 17:48:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[27-May-2024 03:48:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[27-May-2024 05:35:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[27-May-2024 05:35:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[27-May-2024 05:35:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[27-May-2024 05:35:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[27-May-2024 06:35:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[27-May-2024 07:15:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[27-May-2024 09:18:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[27-May-2024 11:26:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[27-May-2024 15:06:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[27-May-2024 17:03:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[27-May-2024 19:57:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[28-May-2024 01:53:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[31-May-2024 21:03:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[01-Jun-2024 19:59:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[02-Jun-2024 00:10:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[02-Jun-2024 00:11:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[02-Jun-2024 02:25:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[02-Jun-2024 11:37:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[02-Jun-2024 15:40:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[02-Jun-2024 15:57:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[02-Jun-2024 16:18:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[02-Jun-2024 16:47:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[02-Jun-2024 16:50:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[03-Jun-2024 02:29:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[03-Jun-2024 02:30:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[03-Jun-2024 02:39:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[03-Jun-2024 02:43:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[03-Jun-2024 02:43:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[03-Jun-2024 02:59:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[03-Jun-2024 03:01:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[03-Jun-2024 03:04:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[03-Jun-2024 03:25:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[03-Jun-2024 03:32:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[03-Jun-2024 03:47:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[03-Jun-2024 03:51:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[03-Jun-2024 03:51:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[03-Jun-2024 03:53:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[03-Jun-2024 03:59:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[03-Jun-2024 04:05:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[03-Jun-2024 04:18:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[03-Jun-2024 04:57:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[03-Jun-2024 08:21:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[03-Jun-2024 11:53:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[03-Jun-2024 18:19:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[03-Jun-2024 21:09:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[04-Jun-2024 12:56:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[04-Jun-2024 13:05:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[04-Jun-2024 13:07:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[04-Jun-2024 15:03:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[04-Jun-2024 15:25:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[04-Jun-2024 15:27:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[04-Jun-2024 15:29:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[04-Jun-2024 15:33:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[04-Jun-2024 15:35:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[04-Jun-2024 15:51:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[06-Jun-2024 20:48:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[07-Jun-2024 14:11:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[07-Jun-2024 14:16:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[07-Jun-2024 14:20:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[07-Jun-2024 14:23:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[07-Jun-2024 22:31:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[07-Jun-2024 22:37:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[07-Jun-2024 23:29:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[08-Jun-2024 05:17:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[08-Jun-2024 07:49:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[08-Jun-2024 08:20:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[08-Jun-2024 09:35:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[08-Jun-2024 12:10:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[08-Jun-2024 13:19:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[08-Jun-2024 13:23:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[08-Jun-2024 13:46:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[08-Jun-2024 15:26:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[08-Jun-2024 16:05:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[08-Jun-2024 16:15:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[08-Jun-2024 16:34:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[08-Jun-2024 17:18:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[08-Jun-2024 17:51:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[08-Jun-2024 17:53:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[08-Jun-2024 19:45:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[08-Jun-2024 21:18:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[08-Jun-2024 21:31:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[08-Jun-2024 21:52:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[08-Jun-2024 22:29:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[08-Jun-2024 22:59:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[08-Jun-2024 23:14:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[08-Jun-2024 23:38:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[09-Jun-2024 00:04:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[09-Jun-2024 00:14:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[09-Jun-2024 05:43:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[13-Jun-2024 07:16:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[13-Jun-2024 07:29:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[13-Jun-2024 07:48:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[13-Jun-2024 09:25:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[13-Jun-2024 09:36:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[13-Jun-2024 09:56:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[13-Jun-2024 10:15:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[13-Jun-2024 11:39:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[13-Jun-2024 12:32:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[13-Jun-2024 12:43:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[13-Jun-2024 12:54:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[13-Jun-2024 13:17:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[13-Jun-2024 14:17:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[13-Jun-2024 14:35:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[13-Jun-2024 14:40:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[13-Jun-2024 14:47:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[13-Jun-2024 15:48:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[13-Jun-2024 16:31:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[13-Jun-2024 17:59:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[13-Jun-2024 18:16:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[13-Jun-2024 18:37:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[13-Jun-2024 18:43:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[13-Jun-2024 18:47:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[13-Jun-2024 21:45:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[13-Jun-2024 22:17:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[13-Jun-2024 23:28:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[13-Jun-2024 23:54:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[14-Jun-2024 00:09:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[14-Jun-2024 00:28:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[14-Jun-2024 01:43:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[14-Jun-2024 03:06:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[14-Jun-2024 03:13:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[14-Jun-2024 04:48:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[14-Jun-2024 05:41:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[14-Jun-2024 06:44:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[14-Jun-2024 09:54:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[14-Jun-2024 18:46:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[17-Jun-2024 13:01:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[19-Jun-2024 17:42:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[19-Jun-2024 18:10:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[19-Jun-2024 18:23:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[19-Jun-2024 18:26:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[19-Jun-2024 19:58:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[19-Jun-2024 21:30:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[20-Jun-2024 08:28:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[20-Jun-2024 12:33:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[20-Jun-2024 13:14:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[20-Jun-2024 15:24:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[20-Jun-2024 16:50:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[20-Jun-2024 17:51:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[20-Jun-2024 18:11:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[20-Jun-2024 18:52:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[20-Jun-2024 19:09:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[20-Jun-2024 19:20:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[20-Jun-2024 21:31:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[20-Jun-2024 21:59:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[20-Jun-2024 22:15:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[21-Jun-2024 01:35:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[21-Jun-2024 02:49:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[21-Jun-2024 03:31:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[21-Jun-2024 05:34:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[21-Jun-2024 06:55:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[21-Jun-2024 07:18:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[21-Jun-2024 09:25:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[21-Jun-2024 10:00:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[21-Jun-2024 10:04:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[21-Jun-2024 10:33:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[21-Jun-2024 11:11:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[21-Jun-2024 11:34:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[21-Jun-2024 12:20:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[21-Jun-2024 13:42:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[21-Jun-2024 13:56:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[21-Jun-2024 16:10:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[21-Jun-2024 20:58:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[22-Jun-2024 00:24:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[22-Jun-2024 02:46:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[22-Jun-2024 03:05:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[22-Jun-2024 05:21:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[22-Jun-2024 11:21:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[22-Jun-2024 14:16:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[22-Jun-2024 14:51:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[22-Jun-2024 15:16:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[22-Jun-2024 16:30:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[22-Jun-2024 19:21:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[22-Jun-2024 22:13:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[23-Jun-2024 00:32:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[23-Jun-2024 02:24:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[23-Jun-2024 05:01:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[23-Jun-2024 08:56:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[23-Jun-2024 13:02:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[23-Jun-2024 13:44:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[23-Jun-2024 13:46:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[23-Jun-2024 14:47:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[23-Jun-2024 16:11:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[23-Jun-2024 21:02:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[23-Jun-2024 23:53:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[24-Jun-2024 00:06:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[24-Jun-2024 00:07:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[24-Jun-2024 00:32:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[24-Jun-2024 00:50:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[24-Jun-2024 00:53:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[24-Jun-2024 00:54:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[24-Jun-2024 01:24:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[24-Jun-2024 01:29:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[24-Jun-2024 02:32:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[24-Jun-2024 04:10:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[24-Jun-2024 05:37:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[24-Jun-2024 05:58:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[24-Jun-2024 07:50:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[24-Jun-2024 11:27:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[24-Jun-2024 14:26:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[24-Jun-2024 17:37:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[24-Jun-2024 17:40:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[24-Jun-2024 17:51:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[24-Jun-2024 18:02:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[24-Jun-2024 19:39:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[24-Jun-2024 21:07:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[25-Jun-2024 01:18:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[25-Jun-2024 03:07:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[25-Jun-2024 03:31:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[25-Jun-2024 04:09:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[25-Jun-2024 05:09:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[25-Jun-2024 08:34:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[25-Jun-2024 12:12:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[25-Jun-2024 14:04:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[25-Jun-2024 14:15:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[25-Jun-2024 14:27:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[25-Jun-2024 14:35:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[25-Jun-2024 16:18:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[25-Jun-2024 16:35:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[25-Jun-2024 18:08:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[25-Jun-2024 18:10:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[25-Jun-2024 18:16:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[25-Jun-2024 19:56:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[25-Jun-2024 20:05:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[25-Jun-2024 20:45:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[25-Jun-2024 21:33:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[25-Jun-2024 22:50:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[25-Jun-2024 22:50:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[25-Jun-2024 22:51:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[25-Jun-2024 23:02:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[25-Jun-2024 23:07:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[25-Jun-2024 23:08:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[25-Jun-2024 23:12:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[25-Jun-2024 23:22:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[25-Jun-2024 23:32:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[25-Jun-2024 23:51:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[26-Jun-2024 00:45:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[26-Jun-2024 01:22:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[26-Jun-2024 01:42:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[26-Jun-2024 02:55:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[26-Jun-2024 03:07:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[26-Jun-2024 04:06:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[26-Jun-2024 04:14:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[26-Jun-2024 05:45:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[26-Jun-2024 05:59:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[26-Jun-2024 06:21:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[26-Jun-2024 06:59:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[26-Jun-2024 07:02:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[26-Jun-2024 07:12:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[26-Jun-2024 07:28:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[26-Jun-2024 07:29:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[26-Jun-2024 07:50:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[26-Jun-2024 07:52:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[26-Jun-2024 09:42:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[26-Jun-2024 11:36:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[26-Jun-2024 11:37:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[26-Jun-2024 14:09:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[26-Jun-2024 15:30:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[26-Jun-2024 15:40:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[26-Jun-2024 16:59:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[26-Jun-2024 18:51:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[26-Jun-2024 19:10:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[26-Jun-2024 19:15:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[26-Jun-2024 19:57:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[26-Jun-2024 20:04:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[26-Jun-2024 20:57:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[26-Jun-2024 21:14:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[26-Jun-2024 21:36:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[26-Jun-2024 21:57:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[26-Jun-2024 22:05:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[26-Jun-2024 23:51:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[27-Jun-2024 00:05:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[27-Jun-2024 00:25:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[27-Jun-2024 00:26:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[27-Jun-2024 02:52:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[27-Jun-2024 03:25:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[27-Jun-2024 05:18:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[27-Jun-2024 06:40:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[27-Jun-2024 09:55:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[27-Jun-2024 13:34:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[27-Jun-2024 15:04:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[27-Jun-2024 15:16:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[27-Jun-2024 15:40:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[27-Jun-2024 16:15:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[27-Jun-2024 17:11:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[27-Jun-2024 23:55:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[28-Jun-2024 00:59:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[28-Jun-2024 02:08:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[28-Jun-2024 04:30:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[28-Jun-2024 05:21:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[28-Jun-2024 11:14:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[28-Jun-2024 11:23:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[28-Jun-2024 11:33:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[28-Jun-2024 11:37:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[28-Jun-2024 12:21:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[28-Jun-2024 19:43:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[28-Jun-2024 20:20:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[28-Jun-2024 20:22:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[28-Jun-2024 22:43:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[29-Jun-2024 03:30:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[29-Jun-2024 04:21:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[29-Jun-2024 04:51:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[29-Jun-2024 07:15:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[29-Jun-2024 08:48:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[29-Jun-2024 11:08:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[29-Jun-2024 16:47:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[29-Jun-2024 17:56:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[29-Jun-2024 18:28:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[29-Jun-2024 19:24:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[30-Jun-2024 00:56:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[30-Jun-2024 04:03:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[30-Jun-2024 04:36:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[30-Jun-2024 05:33:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[30-Jun-2024 07:47:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[30-Jun-2024 08:35:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[30-Jun-2024 09:07:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[30-Jun-2024 10:49:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[30-Jun-2024 11:34:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[30-Jun-2024 12:53:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[30-Jun-2024 15:33:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[30-Jun-2024 15:42:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[30-Jun-2024 21:01:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[30-Jun-2024 22:09:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[30-Jun-2024 22:43:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[01-Jul-2024 01:19:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[01-Jul-2024 01:50:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[01-Jul-2024 09:01:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[01-Jul-2024 10:04:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[01-Jul-2024 12:10:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[01-Jul-2024 12:49:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[01-Jul-2024 14:20:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[01-Jul-2024 14:53:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[01-Jul-2024 15:34:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[01-Jul-2024 16:00:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[01-Jul-2024 17:43:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[01-Jul-2024 19:40:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[01-Jul-2024 21:12:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[01-Jul-2024 22:33:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[01-Jul-2024 23:29:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[01-Jul-2024 23:44:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[01-Jul-2024 23:52:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[02-Jul-2024 00:50:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[02-Jul-2024 01:02:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[02-Jul-2024 01:11:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[02-Jul-2024 01:11:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[02-Jul-2024 01:12:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[02-Jul-2024 01:12:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[02-Jul-2024 01:16:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[02-Jul-2024 01:21:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[02-Jul-2024 01:42:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[02-Jul-2024 01:48:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[02-Jul-2024 02:08:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[02-Jul-2024 06:17:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[02-Jul-2024 07:36:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[02-Jul-2024 09:17:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[02-Jul-2024 10:39:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[02-Jul-2024 13:04:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[02-Jul-2024 13:29:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[02-Jul-2024 14:54:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[02-Jul-2024 14:58:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[02-Jul-2024 21:30:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[02-Jul-2024 21:30:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[02-Jul-2024 21:30:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[02-Jul-2024 21:30:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[02-Jul-2024 21:30:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[02-Jul-2024 21:30:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[02-Jul-2024 21:31:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[02-Jul-2024 21:31:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[02-Jul-2024 21:31:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[02-Jul-2024 21:31:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[02-Jul-2024 21:31:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[02-Jul-2024 21:32:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[02-Jul-2024 21:32:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[02-Jul-2024 21:33:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[02-Jul-2024 21:33:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[02-Jul-2024 21:33:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[02-Jul-2024 21:33:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[02-Jul-2024 21:33:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[02-Jul-2024 21:33:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[02-Jul-2024 21:33:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[02-Jul-2024 21:34:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[02-Jul-2024 21:34:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[02-Jul-2024 21:34:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[02-Jul-2024 21:34:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[02-Jul-2024 21:34:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[02-Jul-2024 21:35:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[02-Jul-2024 21:35:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[02-Jul-2024 21:35:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[02-Jul-2024 21:35:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[02-Jul-2024 21:35:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[02-Jul-2024 21:35:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[02-Jul-2024 21:36:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[02-Jul-2024 21:36:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[02-Jul-2024 21:36:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[02-Jul-2024 21:36:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[02-Jul-2024 21:37:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[02-Jul-2024 21:37:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[02-Jul-2024 21:37:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[02-Jul-2024 21:37:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[02-Jul-2024 21:37:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[02-Jul-2024 21:37:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[02-Jul-2024 21:38:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[02-Jul-2024 21:38:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[02-Jul-2024 23:43:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[03-Jul-2024 01:05:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[03-Jul-2024 05:05:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[03-Jul-2024 23:21:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[05-Jul-2024 01:14:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[05-Jul-2024 02:22:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[05-Jul-2024 02:24:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[05-Jul-2024 02:57:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[05-Jul-2024 03:50:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[05-Jul-2024 04:38:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[05-Jul-2024 05:56:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[05-Jul-2024 06:28:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[05-Jul-2024 07:33:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[05-Jul-2024 07:33:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[05-Jul-2024 07:34:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[05-Jul-2024 07:34:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[05-Jul-2024 07:34:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[05-Jul-2024 07:34:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[05-Jul-2024 07:35:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[05-Jul-2024 07:35:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[05-Jul-2024 07:35:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[05-Jul-2024 07:35:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[05-Jul-2024 07:35:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[05-Jul-2024 07:35:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[05-Jul-2024 07:35:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[05-Jul-2024 07:35:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[05-Jul-2024 07:36:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[05-Jul-2024 07:36:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[05-Jul-2024 07:36:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[05-Jul-2024 07:36:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[05-Jul-2024 07:36:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[05-Jul-2024 07:36:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[05-Jul-2024 07:36:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[05-Jul-2024 07:37:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[05-Jul-2024 07:37:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[05-Jul-2024 07:37:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[05-Jul-2024 07:37:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[05-Jul-2024 07:37:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[05-Jul-2024 07:37:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[05-Jul-2024 07:37:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[05-Jul-2024 07:37:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[05-Jul-2024 07:38:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[05-Jul-2024 07:38:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[05-Jul-2024 07:38:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[05-Jul-2024 07:38:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[05-Jul-2024 07:38:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[05-Jul-2024 07:38:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[05-Jul-2024 07:38:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[05-Jul-2024 07:38:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[05-Jul-2024 07:38:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[05-Jul-2024 07:39:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[05-Jul-2024 07:39:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[05-Jul-2024 07:39:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[05-Jul-2024 07:39:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[05-Jul-2024 07:39:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[05-Jul-2024 08:10:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[05-Jul-2024 09:31:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[05-Jul-2024 09:51:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[05-Jul-2024 10:39:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[05-Jul-2024 10:56:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[05-Jul-2024 13:13:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[06-Jul-2024 08:12:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[06-Jul-2024 11:45:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[06-Jul-2024 12:04:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[06-Jul-2024 12:13:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[06-Jul-2024 14:46:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[06-Jul-2024 14:53:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[06-Jul-2024 15:42:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[06-Jul-2024 19:33:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[06-Jul-2024 19:38:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[06-Jul-2024 21:01:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[06-Jul-2024 22:00:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[07-Jul-2024 02:08:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[07-Jul-2024 15:09:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[07-Jul-2024 15:47:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[07-Jul-2024 15:47:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[07-Jul-2024 15:47:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[08-Jul-2024 00:39:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[08-Jul-2024 03:28:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[08-Jul-2024 04:09:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[08-Jul-2024 04:33:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[08-Jul-2024 04:39:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[08-Jul-2024 05:19:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[08-Jul-2024 06:56:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[08-Jul-2024 08:29:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[08-Jul-2024 12:05:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[08-Jul-2024 22:24:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[09-Jul-2024 01:29:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[09-Jul-2024 02:06:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[11-Jul-2024 01:23:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[11-Jul-2024 02:33:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[11-Jul-2024 02:36:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[11-Jul-2024 03:16:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[11-Jul-2024 04:11:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[11-Jul-2024 04:58:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[11-Jul-2024 10:09:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[11-Jul-2024 11:41:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[11-Jul-2024 12:03:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[11-Jul-2024 13:06:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[11-Jul-2024 13:18:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[11-Jul-2024 16:50:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[11-Jul-2024 16:52:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[11-Jul-2024 18:05:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[11-Jul-2024 21:50:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[11-Jul-2024 23:49:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[12-Jul-2024 02:48:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[12-Jul-2024 04:01:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[12-Jul-2024 04:15:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[12-Jul-2024 05:59:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[12-Jul-2024 06:15:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[12-Jul-2024 07:09:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[12-Jul-2024 07:17:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[12-Jul-2024 20:17:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[12-Jul-2024 20:51:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[16-Jul-2024 03:07:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[16-Jul-2024 06:23:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[17-Jul-2024 00:43:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[17-Jul-2024 01:17:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[17-Jul-2024 01:32:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[17-Jul-2024 02:27:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[17-Jul-2024 02:28:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[17-Jul-2024 03:20:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[17-Jul-2024 03:32:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[17-Jul-2024 04:16:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[17-Jul-2024 04:50:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[17-Jul-2024 05:37:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[17-Jul-2024 05:40:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[17-Jul-2024 06:31:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[17-Jul-2024 06:43:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[17-Jul-2024 06:43:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[17-Jul-2024 06:45:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[17-Jul-2024 07:03:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[17-Jul-2024 07:13:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[17-Jul-2024 07:33:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[17-Jul-2024 07:37:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[17-Jul-2024 08:05:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[17-Jul-2024 08:52:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[17-Jul-2024 09:35:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[17-Jul-2024 10:24:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[17-Jul-2024 10:24:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[17-Jul-2024 10:29:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[17-Jul-2024 11:43:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[17-Jul-2024 12:24:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[17-Jul-2024 12:40:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[17-Jul-2024 14:17:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[17-Jul-2024 14:19:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[17-Jul-2024 14:27:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[17-Jul-2024 14:55:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[17-Jul-2024 15:02:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[17-Jul-2024 15:07:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[17-Jul-2024 15:31:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[17-Jul-2024 16:54:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[17-Jul-2024 16:54:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[17-Jul-2024 17:10:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[17-Jul-2024 17:15:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[17-Jul-2024 17:26:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[17-Jul-2024 17:51:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[17-Jul-2024 18:03:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[17-Jul-2024 18:16:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[17-Jul-2024 18:24:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[17-Jul-2024 20:40:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[18-Jul-2024 00:04:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[18-Jul-2024 07:40:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[18-Jul-2024 11:55:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[18-Jul-2024 12:05:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[18-Jul-2024 12:27:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[18-Jul-2024 18:54:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[18-Jul-2024 19:06:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[20-Jul-2024 18:09:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[20-Jul-2024 19:47:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[20-Jul-2024 19:59:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[22-Jul-2024 03:40:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[22-Jul-2024 04:01:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[22-Jul-2024 06:29:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[22-Jul-2024 10:39:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[22-Jul-2024 13:09:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[23-Jul-2024 00:08:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[23-Jul-2024 02:56:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[23-Jul-2024 03:58:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[23-Jul-2024 13:45:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[23-Jul-2024 20:09:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[24-Jul-2024 01:53:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[24-Jul-2024 06:27:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[24-Jul-2024 06:37:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[24-Jul-2024 07:49:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[24-Jul-2024 07:52:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[24-Jul-2024 09:37:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[24-Jul-2024 10:26:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[24-Jul-2024 11:07:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[24-Jul-2024 11:07:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[24-Jul-2024 11:07:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[24-Jul-2024 11:07:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[24-Jul-2024 11:07:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[24-Jul-2024 11:07:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[24-Jul-2024 11:07:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[24-Jul-2024 11:07:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[24-Jul-2024 11:07:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[24-Jul-2024 11:08:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[24-Jul-2024 11:08:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[24-Jul-2024 11:08:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[24-Jul-2024 11:08:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[24-Jul-2024 11:08:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[24-Jul-2024 11:08:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[24-Jul-2024 11:08:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[24-Jul-2024 11:08:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[24-Jul-2024 11:08:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[24-Jul-2024 11:08:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[24-Jul-2024 11:08:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[24-Jul-2024 11:08:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[24-Jul-2024 11:08:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[24-Jul-2024 11:08:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[24-Jul-2024 11:09:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[24-Jul-2024 11:09:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[24-Jul-2024 11:09:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[24-Jul-2024 11:09:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[24-Jul-2024 11:09:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[24-Jul-2024 11:09:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[24-Jul-2024 11:09:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[24-Jul-2024 11:09:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[24-Jul-2024 11:09:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[24-Jul-2024 11:09:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[24-Jul-2024 11:09:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[24-Jul-2024 11:09:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[24-Jul-2024 11:09:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[24-Jul-2024 11:09:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[24-Jul-2024 11:09:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[24-Jul-2024 11:10:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[24-Jul-2024 11:10:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[24-Jul-2024 11:10:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[24-Jul-2024 11:10:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[24-Jul-2024 11:10:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[24-Jul-2024 17:10:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[24-Jul-2024 17:40:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[24-Jul-2024 17:49:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[24-Jul-2024 17:56:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[24-Jul-2024 18:02:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[24-Jul-2024 18:08:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[24-Jul-2024 19:04:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[24-Jul-2024 19:36:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[25-Jul-2024 01:56:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[25-Jul-2024 06:18:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[25-Jul-2024 20:37:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[26-Jul-2024 19:47:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[26-Jul-2024 23:15:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[27-Jul-2024 01:58:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[27-Jul-2024 02:55:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[27-Jul-2024 14:12:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[27-Jul-2024 14:12:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[27-Jul-2024 14:12:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[27-Jul-2024 14:12:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[27-Jul-2024 14:13:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[27-Jul-2024 14:13:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[27-Jul-2024 14:46:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[27-Jul-2024 18:53:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[27-Jul-2024 19:54:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[27-Jul-2024 20:03:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[27-Jul-2024 21:10:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[27-Jul-2024 21:50:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[27-Jul-2024 22:39:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[27-Jul-2024 23:16:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[28-Jul-2024 02:14:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[28-Jul-2024 02:37:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[28-Jul-2024 02:41:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[28-Jul-2024 03:21:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[28-Jul-2024 03:36:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[28-Jul-2024 04:20:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[28-Jul-2024 04:24:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[28-Jul-2024 04:28:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[28-Jul-2024 04:34:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[28-Jul-2024 05:55:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[28-Jul-2024 06:28:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[28-Jul-2024 08:01:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[28-Jul-2024 16:00:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[28-Jul-2024 17:27:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[28-Jul-2024 22:43:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[30-Jul-2024 02:06:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[30-Jul-2024 20:24:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[31-Jul-2024 18:11:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[01-Aug-2024 22:38:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[02-Aug-2024 21:49:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[03-Aug-2024 11:35:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[03-Aug-2024 18:42:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[04-Aug-2024 17:25:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[04-Aug-2024 18:24:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[04-Aug-2024 19:00:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[06-Aug-2024 20:08:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[06-Aug-2024 22:41:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[07-Aug-2024 03:27:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[07-Aug-2024 04:30:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[07-Aug-2024 04:30:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[07-Aug-2024 04:30:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[07-Aug-2024 04:30:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[07-Aug-2024 04:30:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[07-Aug-2024 04:31:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[07-Aug-2024 05:27:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[07-Aug-2024 05:37:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[07-Aug-2024 06:03:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[07-Aug-2024 06:03:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[07-Aug-2024 06:05:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[07-Aug-2024 06:16:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[07-Aug-2024 06:20:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[07-Aug-2024 09:05:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[07-Aug-2024 10:20:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[07-Aug-2024 11:48:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[07-Aug-2024 12:33:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[07-Aug-2024 13:33:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[07-Aug-2024 14:22:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[07-Aug-2024 17:27:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[07-Aug-2024 21:08:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[08-Aug-2024 04:24:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[08-Aug-2024 10:02:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[09-Aug-2024 08:51:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[10-Aug-2024 01:46:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[11-Aug-2024 02:28:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[11-Aug-2024 03:17:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[11-Aug-2024 04:29:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[12-Aug-2024 11:11:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[12-Aug-2024 16:26:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[12-Aug-2024 17:01:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[12-Aug-2024 18:49:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[12-Aug-2024 22:00:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[12-Aug-2024 22:39:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[12-Aug-2024 23:53:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[13-Aug-2024 03:18:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[13-Aug-2024 04:06:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[13-Aug-2024 04:42:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[13-Aug-2024 06:17:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[13-Aug-2024 06:39:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[13-Aug-2024 07:05:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[13-Aug-2024 09:17:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[13-Aug-2024 10:19:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[14-Aug-2024 01:23:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[14-Aug-2024 01:36:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[14-Aug-2024 02:27:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[14-Aug-2024 02:28:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[15-Aug-2024 06:25:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[16-Aug-2024 14:13:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[17-Aug-2024 21:59:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[17-Aug-2024 22:22:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[17-Aug-2024 22:57:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[17-Aug-2024 23:00:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[17-Aug-2024 23:08:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[17-Aug-2024 23:52:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[17-Aug-2024 23:55:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[18-Aug-2024 00:20:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[18-Aug-2024 00:32:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[18-Aug-2024 01:34:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[18-Aug-2024 01:36:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[18-Aug-2024 03:03:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[18-Aug-2024 03:44:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[18-Aug-2024 04:30:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[18-Aug-2024 04:35:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[18-Aug-2024 04:35:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[18-Aug-2024 05:03:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[18-Aug-2024 05:12:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[18-Aug-2024 05:15:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[18-Aug-2024 05:48:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[18-Aug-2024 05:48:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[18-Aug-2024 05:48:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[18-Aug-2024 05:56:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[18-Aug-2024 06:30:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[18-Aug-2024 07:33:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[18-Aug-2024 07:48:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[18-Aug-2024 08:00:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[18-Aug-2024 09:04:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[18-Aug-2024 09:17:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[18-Aug-2024 09:53:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[18-Aug-2024 10:52:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[18-Aug-2024 12:11:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[18-Aug-2024 12:41:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[18-Aug-2024 12:48:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[18-Aug-2024 12:55:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[18-Aug-2024 13:36:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[18-Aug-2024 13:54:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[18-Aug-2024 14:15:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[18-Aug-2024 14:31:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[18-Aug-2024 14:32:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[18-Aug-2024 16:35:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[19-Aug-2024 03:02:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[19-Aug-2024 04:22:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[23-Aug-2024 10:26:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[23-Aug-2024 11:21:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[23-Aug-2024 16:44:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[23-Aug-2024 18:46:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[23-Aug-2024 18:47:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[23-Aug-2024 18:47:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[23-Aug-2024 18:47:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[23-Aug-2024 21:12:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[23-Aug-2024 22:46:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[23-Aug-2024 23:03:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[24-Aug-2024 02:19:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[24-Aug-2024 06:05:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[25-Aug-2024 06:44:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[25-Aug-2024 21:46:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[26-Aug-2024 01:04:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[26-Aug-2024 01:59:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[26-Aug-2024 02:47:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[26-Aug-2024 23:27:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[27-Aug-2024 01:24:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[28-Aug-2024 01:57:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[28-Aug-2024 09:46:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[28-Aug-2024 11:37:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[28-Aug-2024 11:45:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[28-Aug-2024 11:45:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[28-Aug-2024 17:02:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[28-Aug-2024 18:02:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[28-Aug-2024 19:06:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[28-Aug-2024 21:21:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[28-Aug-2024 21:25:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[28-Aug-2024 21:32:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[28-Aug-2024 22:01:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[28-Aug-2024 23:49:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[29-Aug-2024 00:22:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[29-Aug-2024 00:30:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[29-Aug-2024 01:02:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[29-Aug-2024 03:17:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[29-Aug-2024 05:20:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[29-Aug-2024 05:27:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[29-Aug-2024 05:41:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[29-Aug-2024 05:45:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[29-Aug-2024 05:54:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[29-Aug-2024 06:28:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[29-Aug-2024 06:56:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[29-Aug-2024 06:59:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[29-Aug-2024 07:10:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[29-Aug-2024 07:31:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[29-Aug-2024 08:08:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[29-Aug-2024 08:46:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[29-Aug-2024 09:03:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[29-Aug-2024 09:10:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[29-Aug-2024 09:28:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[29-Aug-2024 09:28:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[29-Aug-2024 12:21:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[29-Aug-2024 12:21:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[29-Aug-2024 12:21:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[29-Aug-2024 12:21:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[29-Aug-2024 15:51:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[29-Aug-2024 15:56:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[29-Aug-2024 22:29:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[29-Aug-2024 22:32:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[29-Aug-2024 22:44:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[30-Aug-2024 05:56:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[30-Aug-2024 06:28:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[30-Aug-2024 10:59:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[31-Aug-2024 03:01:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[31-Aug-2024 14:24:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[31-Aug-2024 21:37:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[01-Sep-2024 21:10:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[02-Sep-2024 05:13:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[02-Sep-2024 19:49:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[03-Sep-2024 07:59:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[03-Sep-2024 17:06:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[03-Sep-2024 18:32:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[03-Sep-2024 18:48:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[03-Sep-2024 18:49:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[03-Sep-2024 18:59:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[03-Sep-2024 21:31:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[03-Sep-2024 21:34:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[03-Sep-2024 22:58:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[04-Sep-2024 00:43:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[04-Sep-2024 00:43:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[04-Sep-2024 00:43:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[04-Sep-2024 00:43:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[04-Sep-2024 00:43:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[04-Sep-2024 00:43:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[04-Sep-2024 00:44:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[04-Sep-2024 00:44:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[04-Sep-2024 00:44:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[04-Sep-2024 00:44:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[04-Sep-2024 02:38:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[04-Sep-2024 03:39:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[04-Sep-2024 04:00:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[04-Sep-2024 04:39:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[04-Sep-2024 04:40:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[04-Sep-2024 05:32:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[04-Sep-2024 09:36:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[04-Sep-2024 13:07:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[04-Sep-2024 17:38:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[04-Sep-2024 17:39:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[04-Sep-2024 17:41:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[04-Sep-2024 22:09:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[04-Sep-2024 23:03:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[05-Sep-2024 00:08:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[05-Sep-2024 04:07:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[05-Sep-2024 20:57:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[05-Sep-2024 22:28:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[06-Sep-2024 00:51:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[06-Sep-2024 03:15:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[06-Sep-2024 03:32:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[06-Sep-2024 03:48:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[07-Sep-2024 01:01:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[07-Sep-2024 06:58:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[07-Sep-2024 07:12:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[07-Sep-2024 08:03:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[08-Sep-2024 02:37:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[08-Sep-2024 03:47:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[08-Sep-2024 03:58:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[08-Sep-2024 04:17:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[08-Sep-2024 04:56:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[08-Sep-2024 06:52:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[08-Sep-2024 07:47:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[08-Sep-2024 08:00:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[08-Sep-2024 12:09:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[08-Sep-2024 12:34:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[08-Sep-2024 14:47:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[09-Sep-2024 10:37:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[09-Sep-2024 10:38:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[09-Sep-2024 10:38:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[09-Sep-2024 10:38:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[09-Sep-2024 10:38:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[09-Sep-2024 11:25:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[09-Sep-2024 13:26:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[09-Sep-2024 13:46:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[09-Sep-2024 16:45:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[09-Sep-2024 16:48:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[09-Sep-2024 19:37:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[10-Sep-2024 02:24:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[10-Sep-2024 06:18:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[10-Sep-2024 09:43:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[10-Sep-2024 10:45:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[10-Sep-2024 11:42:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[10-Sep-2024 12:56:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[10-Sep-2024 18:11:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[10-Sep-2024 21:11:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[11-Sep-2024 01:41:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[11-Sep-2024 08:43:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[11-Sep-2024 17:33:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[11-Sep-2024 19:34:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[11-Sep-2024 22:41:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[12-Sep-2024 04:16:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[12-Sep-2024 11:08:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[12-Sep-2024 16:01:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[12-Sep-2024 21:30:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[13-Sep-2024 03:46:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[13-Sep-2024 03:48:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[13-Sep-2024 21:20:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[13-Sep-2024 23:34:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[14-Sep-2024 00:52:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[14-Sep-2024 02:54:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[14-Sep-2024 04:16:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[14-Sep-2024 06:35:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[15-Sep-2024 04:02:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[15-Sep-2024 14:00:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[15-Sep-2024 20:34:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[15-Sep-2024 22:51:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[16-Sep-2024 00:01:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[16-Sep-2024 07:00:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[16-Sep-2024 08:58:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[16-Sep-2024 11:03:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[16-Sep-2024 12:36:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[16-Sep-2024 12:36:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[16-Sep-2024 12:36:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[16-Sep-2024 12:36:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[16-Sep-2024 12:36:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[16-Sep-2024 12:36:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[16-Sep-2024 12:36:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[16-Sep-2024 12:36:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[16-Sep-2024 12:36:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[16-Sep-2024 12:36:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[16-Sep-2024 12:36:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[16-Sep-2024 12:36:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[16-Sep-2024 12:36:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[16-Sep-2024 12:37:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[16-Sep-2024 12:37:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[16-Sep-2024 12:37:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[16-Sep-2024 12:37:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[16-Sep-2024 12:37:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[16-Sep-2024 12:37:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[16-Sep-2024 12:37:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[16-Sep-2024 12:37:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[16-Sep-2024 12:37:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[16-Sep-2024 12:37:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[16-Sep-2024 12:37:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[16-Sep-2024 12:37:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[16-Sep-2024 12:37:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[16-Sep-2024 12:37:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[16-Sep-2024 12:37:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[16-Sep-2024 12:38:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[16-Sep-2024 12:38:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[16-Sep-2024 12:38:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[16-Sep-2024 12:38:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[16-Sep-2024 12:38:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[16-Sep-2024 12:38:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[16-Sep-2024 12:38:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[16-Sep-2024 12:38:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[16-Sep-2024 12:38:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[16-Sep-2024 12:38:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[16-Sep-2024 12:38:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[16-Sep-2024 12:38:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[16-Sep-2024 12:38:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[16-Sep-2024 12:38:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[16-Sep-2024 12:38:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[16-Sep-2024 13:25:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[16-Sep-2024 13:25:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[16-Sep-2024 13:25:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[16-Sep-2024 13:25:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[16-Sep-2024 13:25:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[16-Sep-2024 13:25:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[16-Sep-2024 13:25:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[16-Sep-2024 13:25:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[16-Sep-2024 13:25:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[16-Sep-2024 13:25:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[16-Sep-2024 13:25:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[16-Sep-2024 13:25:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[16-Sep-2024 13:26:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[16-Sep-2024 13:26:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[16-Sep-2024 13:26:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[16-Sep-2024 13:26:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[16-Sep-2024 13:26:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[16-Sep-2024 13:26:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[16-Sep-2024 13:26:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[16-Sep-2024 13:26:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[16-Sep-2024 13:26:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[16-Sep-2024 13:26:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[16-Sep-2024 13:26:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[16-Sep-2024 13:26:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[16-Sep-2024 13:26:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[16-Sep-2024 13:26:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[16-Sep-2024 13:27:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[16-Sep-2024 13:27:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[16-Sep-2024 13:27:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[16-Sep-2024 13:27:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[16-Sep-2024 13:27:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[16-Sep-2024 13:27:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[16-Sep-2024 13:27:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[16-Sep-2024 13:27:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[16-Sep-2024 13:27:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[16-Sep-2024 13:27:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[16-Sep-2024 13:27:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[16-Sep-2024 13:27:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[16-Sep-2024 13:27:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[16-Sep-2024 13:27:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[16-Sep-2024 13:27:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[16-Sep-2024 13:28:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[16-Sep-2024 13:28:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[16-Sep-2024 14:18:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[16-Sep-2024 14:18:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[16-Sep-2024 14:18:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[16-Sep-2024 14:18:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[16-Sep-2024 14:18:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[16-Sep-2024 14:18:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[16-Sep-2024 14:18:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[16-Sep-2024 14:18:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[16-Sep-2024 14:18:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[16-Sep-2024 14:18:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[16-Sep-2024 14:18:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[16-Sep-2024 14:18:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[16-Sep-2024 14:18:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[16-Sep-2024 14:18:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[16-Sep-2024 14:19:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[16-Sep-2024 14:19:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[16-Sep-2024 14:19:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[16-Sep-2024 14:19:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[16-Sep-2024 14:19:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[16-Sep-2024 14:19:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[16-Sep-2024 14:19:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[16-Sep-2024 14:19:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[16-Sep-2024 14:19:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[16-Sep-2024 14:19:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[16-Sep-2024 14:19:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[16-Sep-2024 14:19:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[16-Sep-2024 14:19:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[16-Sep-2024 14:19:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[16-Sep-2024 14:19:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[16-Sep-2024 14:20:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[16-Sep-2024 14:20:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[16-Sep-2024 14:20:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[16-Sep-2024 14:20:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[16-Sep-2024 14:20:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[16-Sep-2024 14:20:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[16-Sep-2024 14:20:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[16-Sep-2024 14:20:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[16-Sep-2024 14:20:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[16-Sep-2024 14:20:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[16-Sep-2024 14:20:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[16-Sep-2024 14:20:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[16-Sep-2024 14:20:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[16-Sep-2024 14:20:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[16-Sep-2024 14:40:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[16-Sep-2024 14:41:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[16-Sep-2024 14:41:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[16-Sep-2024 14:41:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[16-Sep-2024 14:42:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[16-Sep-2024 14:42:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[16-Sep-2024 14:42:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[16-Sep-2024 14:42:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[16-Sep-2024 14:42:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[16-Sep-2024 14:42:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[16-Sep-2024 14:42:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[16-Sep-2024 14:42:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[16-Sep-2024 14:42:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[16-Sep-2024 14:42:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[16-Sep-2024 14:42:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[16-Sep-2024 14:42:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[16-Sep-2024 14:42:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[16-Sep-2024 14:42:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[16-Sep-2024 14:43:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[16-Sep-2024 14:43:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[16-Sep-2024 14:43:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[16-Sep-2024 14:43:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[16-Sep-2024 14:43:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[16-Sep-2024 14:43:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[16-Sep-2024 14:43:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[16-Sep-2024 14:43:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[16-Sep-2024 14:43:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[16-Sep-2024 14:43:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[16-Sep-2024 14:43:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[16-Sep-2024 14:43:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[16-Sep-2024 14:43:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[16-Sep-2024 14:43:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[16-Sep-2024 14:43:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[16-Sep-2024 14:43:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[16-Sep-2024 14:44:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[16-Sep-2024 14:44:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[16-Sep-2024 14:44:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[16-Sep-2024 14:44:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[16-Sep-2024 14:44:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[16-Sep-2024 14:44:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[16-Sep-2024 14:44:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[16-Sep-2024 14:44:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[16-Sep-2024 14:44:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[16-Sep-2024 14:44:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[16-Sep-2024 14:49:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[17-Sep-2024 07:28:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[18-Sep-2024 13:02:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[18-Sep-2024 19:34:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[18-Sep-2024 22:27:37 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[18-Sep-2024 22:28:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[18-Sep-2024 22:28:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[18-Sep-2024 22:28:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[18-Sep-2024 22:34:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[18-Sep-2024 22:35:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[18-Sep-2024 22:39:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[18-Sep-2024 22:41:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[18-Sep-2024 22:41:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[18-Sep-2024 22:43:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[18-Sep-2024 22:44:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[18-Sep-2024 22:44:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[18-Sep-2024 22:51:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[18-Sep-2024 22:51:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[18-Sep-2024 22:55:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[18-Sep-2024 22:58:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[18-Sep-2024 22:59:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[18-Sep-2024 22:59:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[18-Sep-2024 23:03:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[18-Sep-2024 23:06:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[18-Sep-2024 23:06:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[18-Sep-2024 23:08:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[18-Sep-2024 23:08:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[18-Sep-2024 23:09:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[18-Sep-2024 23:10:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[18-Sep-2024 23:14:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[18-Sep-2024 23:14:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[19-Sep-2024 02:08:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[19-Sep-2024 03:48:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[19-Sep-2024 04:30:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[19-Sep-2024 04:56:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[19-Sep-2024 05:51:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[19-Sep-2024 06:13:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[19-Sep-2024 06:21:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[19-Sep-2024 07:17:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[19-Sep-2024 07:32:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[19-Sep-2024 08:02:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[19-Sep-2024 08:08:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[19-Sep-2024 08:09:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[19-Sep-2024 08:22:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[19-Sep-2024 08:58:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[19-Sep-2024 09:07:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[19-Sep-2024 09:19:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[19-Sep-2024 09:30:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[19-Sep-2024 11:19:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[19-Sep-2024 12:09:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[19-Sep-2024 12:16:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[19-Sep-2024 12:17:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[19-Sep-2024 12:45:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[19-Sep-2024 13:25:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[19-Sep-2024 13:52:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[19-Sep-2024 14:05:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[19-Sep-2024 14:53:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[19-Sep-2024 15:26:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[19-Sep-2024 15:26:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[19-Sep-2024 15:35:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[19-Sep-2024 15:42:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[19-Sep-2024 16:07:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[19-Sep-2024 17:36:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[19-Sep-2024 17:38:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[19-Sep-2024 17:45:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[19-Sep-2024 18:29:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[19-Sep-2024 18:35:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[19-Sep-2024 21:24:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[20-Sep-2024 01:03:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[20-Sep-2024 01:45:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[20-Sep-2024 02:04:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[20-Sep-2024 04:05:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[20-Sep-2024 05:58:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[20-Sep-2024 05:58:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[22-Sep-2024 07:30:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[22-Sep-2024 21:36:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[23-Sep-2024 09:43:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[24-Sep-2024 14:24:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[24-Sep-2024 19:22:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[24-Sep-2024 23:57:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[25-Sep-2024 12:29:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[26-Sep-2024 02:06:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[26-Sep-2024 03:16:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[27-Sep-2024 13:05:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[28-Sep-2024 03:21:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[28-Sep-2024 06:52:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[28-Sep-2024 11:15:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[30-Sep-2024 05:51:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[30-Sep-2024 07:53:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[30-Sep-2024 09:15:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[30-Sep-2024 09:21:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[30-Sep-2024 10:29:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[30-Sep-2024 11:10:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[30-Sep-2024 14:31:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[30-Sep-2024 15:13:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[30-Sep-2024 17:03:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[30-Sep-2024 17:19:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[30-Sep-2024 17:43:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[30-Sep-2024 18:21:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[30-Sep-2024 19:31:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[30-Sep-2024 21:01:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[30-Sep-2024 22:46:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[30-Sep-2024 22:49:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[01-Oct-2024 00:17:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[01-Oct-2024 01:24:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[01-Oct-2024 01:48:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[01-Oct-2024 01:48:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[01-Oct-2024 02:02:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[01-Oct-2024 03:24:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[01-Oct-2024 03:27:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[01-Oct-2024 04:16:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[01-Oct-2024 05:48:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[01-Oct-2024 06:28:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[01-Oct-2024 07:01:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[01-Oct-2024 08:04:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[01-Oct-2024 12:55:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[01-Oct-2024 14:42:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[03-Oct-2024 10:40:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[03-Oct-2024 15:42:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[03-Oct-2024 16:57:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[03-Oct-2024 17:06:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[03-Oct-2024 18:04:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[04-Oct-2024 08:03:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[05-Oct-2024 05:14:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[05-Oct-2024 05:32:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[05-Oct-2024 07:48:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[05-Oct-2024 22:10:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[06-Oct-2024 05:38:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[06-Oct-2024 15:09:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[06-Oct-2024 20:27:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[07-Oct-2024 09:29:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[07-Oct-2024 22:59:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[08-Oct-2024 03:30:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[08-Oct-2024 11:54:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[09-Oct-2024 04:27:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[09-Oct-2024 09:05:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[09-Oct-2024 13:42:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[09-Oct-2024 15:37:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[09-Oct-2024 16:24:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[09-Oct-2024 20:24:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[10-Oct-2024 03:26:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[10-Oct-2024 07:54:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[10-Oct-2024 07:59:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[10-Oct-2024 10:32:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[10-Oct-2024 20:11:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[11-Oct-2024 07:13:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[11-Oct-2024 07:23:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[11-Oct-2024 10:58:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[11-Oct-2024 11:51:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[11-Oct-2024 13:01:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[11-Oct-2024 13:08:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[11-Oct-2024 13:26:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[11-Oct-2024 14:06:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[11-Oct-2024 14:28:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[11-Oct-2024 15:15:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[11-Oct-2024 15:27:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[11-Oct-2024 20:30:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[11-Oct-2024 21:47:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[11-Oct-2024 21:47:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[11-Oct-2024 21:47:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[11-Oct-2024 21:47:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[11-Oct-2024 23:11:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[11-Oct-2024 23:11:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[12-Oct-2024 05:42:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[12-Oct-2024 10:06:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[12-Oct-2024 13:42:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[12-Oct-2024 17:46:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[13-Oct-2024 04:31:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[13-Oct-2024 13:09:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[13-Oct-2024 13:50:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[13-Oct-2024 21:28:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[14-Oct-2024 14:37:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[16-Oct-2024 00:41:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[16-Oct-2024 06:19:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[16-Oct-2024 15:27:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[16-Oct-2024 15:55:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[16-Oct-2024 19:00:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[16-Oct-2024 20:52:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[17-Oct-2024 03:23:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[17-Oct-2024 05:50:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[17-Oct-2024 06:38:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[17-Oct-2024 12:23:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[17-Oct-2024 12:55:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[17-Oct-2024 12:55:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[17-Oct-2024 12:55:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[17-Oct-2024 16:55:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[17-Oct-2024 17:03:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[17-Oct-2024 22:32:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[18-Oct-2024 19:58:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[20-Oct-2024 00:27:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[21-Oct-2024 23:51:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[22-Oct-2024 00:50:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[22-Oct-2024 00:57:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[22-Oct-2024 01:14:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[22-Oct-2024 01:24:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[22-Oct-2024 02:21:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[22-Oct-2024 02:36:56 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[22-Oct-2024 03:40:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[22-Oct-2024 06:04:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[22-Oct-2024 06:29:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[22-Oct-2024 06:34:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[22-Oct-2024 06:35:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[22-Oct-2024 06:37:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[22-Oct-2024 07:11:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[22-Oct-2024 07:30:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[22-Oct-2024 07:58:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[22-Oct-2024 08:44:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[22-Oct-2024 08:56:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[22-Oct-2024 09:11:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[22-Oct-2024 09:47:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[22-Oct-2024 09:47:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[22-Oct-2024 10:00:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[22-Oct-2024 10:03:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[22-Oct-2024 10:05:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[22-Oct-2024 10:33:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[22-Oct-2024 10:37:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[22-Oct-2024 10:45:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[22-Oct-2024 11:07:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[22-Oct-2024 11:34:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[22-Oct-2024 12:40:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[22-Oct-2024 13:10:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[22-Oct-2024 13:12:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[22-Oct-2024 13:23:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[22-Oct-2024 13:35:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[22-Oct-2024 13:39:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[22-Oct-2024 14:14:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[22-Oct-2024 14:51:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[22-Oct-2024 15:12:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[22-Oct-2024 15:48:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[22-Oct-2024 15:58:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[22-Oct-2024 16:05:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[22-Oct-2024 16:22:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[22-Oct-2024 16:43:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[22-Oct-2024 19:49:17 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[23-Oct-2024 00:02:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[23-Oct-2024 01:29:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[23-Oct-2024 03:52:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[23-Oct-2024 06:24:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[23-Oct-2024 06:24:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[23-Oct-2024 06:24:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[23-Oct-2024 06:24:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[23-Oct-2024 06:24:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[23-Oct-2024 06:25:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[23-Oct-2024 06:48:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[23-Oct-2024 08:48:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[23-Oct-2024 10:00:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[23-Oct-2024 20:34:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[24-Oct-2024 14:23:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[25-Oct-2024 20:59:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[26-Oct-2024 01:39:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[26-Oct-2024 14:25:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[26-Oct-2024 15:27:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[26-Oct-2024 15:39:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[26-Oct-2024 16:40:20 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[27-Oct-2024 04:51:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[27-Oct-2024 11:46:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[27-Oct-2024 15:02:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[27-Oct-2024 15:02:25 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[27-Oct-2024 15:02:28 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[27-Oct-2024 15:02:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[27-Oct-2024 15:02:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[27-Oct-2024 15:02:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[27-Oct-2024 15:02:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[27-Oct-2024 15:02:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[27-Oct-2024 15:02:45 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[27-Oct-2024 15:02:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[27-Oct-2024 15:05:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[27-Oct-2024 15:05:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[27-Oct-2024 15:05:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[27-Oct-2024 15:05:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[27-Oct-2024 15:05:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[27-Oct-2024 15:05:48 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[27-Oct-2024 15:05:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[27-Oct-2024 15:05:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[27-Oct-2024 15:05:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[27-Oct-2024 15:05:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[27-Oct-2024 15:05:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[27-Oct-2024 15:06:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[27-Oct-2024 15:06:04 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[27-Oct-2024 15:06:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[27-Oct-2024 15:06:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[27-Oct-2024 15:07:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[27-Oct-2024 17:25:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[27-Oct-2024 17:25:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[27-Oct-2024 17:25:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[27-Oct-2024 17:25:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[27-Oct-2024 17:25:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[27-Oct-2024 17:25:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[27-Oct-2024 17:25:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[27-Oct-2024 17:25:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[27-Oct-2024 19:48:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[27-Oct-2024 23:37:38 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[28-Oct-2024 02:56:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[28-Oct-2024 02:56:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[28-Oct-2024 02:56:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[28-Oct-2024 09:18:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[28-Oct-2024 09:18:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[28-Oct-2024 09:18:49 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[28-Oct-2024 09:18:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[28-Oct-2024 09:18:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[28-Oct-2024 09:19:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[28-Oct-2024 09:19:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[28-Oct-2024 16:14:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[29-Oct-2024 07:38:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[29-Oct-2024 12:58:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[29-Oct-2024 14:25:24 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[29-Oct-2024 22:41:32 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[30-Oct-2024 11:55:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[30-Oct-2024 23:04:33 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[31-Oct-2024 05:30:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[31-Oct-2024 08:38:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[31-Oct-2024 20:13:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[31-Oct-2024 20:42:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[01-Nov-2024 08:56:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[01-Nov-2024 12:13:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[02-Nov-2024 01:29:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[02-Nov-2024 04:19:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[02-Nov-2024 05:19:36 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[02-Nov-2024 15:52:06 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[02-Nov-2024 18:50:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[02-Nov-2024 18:50:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[02-Nov-2024 18:50:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[02-Nov-2024 18:50:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[02-Nov-2024 18:50:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[02-Nov-2024 18:50:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[02-Nov-2024 18:51:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[02-Nov-2024 18:51:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[02-Nov-2024 18:51:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[02-Nov-2024 18:51:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[02-Nov-2024 18:51:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[02-Nov-2024 18:51:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[02-Nov-2024 18:51:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[02-Nov-2024 18:51:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[02-Nov-2024 18:51:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[02-Nov-2024 18:51:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[02-Nov-2024 18:51:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[02-Nov-2024 18:51:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[02-Nov-2024 18:51:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[02-Nov-2024 18:51:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[02-Nov-2024 18:52:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[02-Nov-2024 18:52:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[02-Nov-2024 18:52:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[02-Nov-2024 18:52:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[02-Nov-2024 18:52:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[02-Nov-2024 18:52:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[02-Nov-2024 18:52:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[02-Nov-2024 18:52:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[02-Nov-2024 18:52:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[02-Nov-2024 18:52:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[02-Nov-2024 18:52:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[02-Nov-2024 18:52:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[02-Nov-2024 18:52:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[02-Nov-2024 18:52:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[02-Nov-2024 18:52:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[02-Nov-2024 18:53:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[02-Nov-2024 18:53:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[02-Nov-2024 18:53:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[02-Nov-2024 18:53:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[02-Nov-2024 18:53:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[02-Nov-2024 18:53:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[02-Nov-2024 18:53:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[02-Nov-2024 18:53:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[02-Nov-2024 20:14:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[02-Nov-2024 23:11:57 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[02-Nov-2024 23:17:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[03-Nov-2024 01:59:01 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[03-Nov-2024 03:20:10 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[03-Nov-2024 03:33:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[03-Nov-2024 04:04:53 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[03-Nov-2024 05:42:40 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[03-Nov-2024 06:47:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[03-Nov-2024 08:11:21 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
[03-Nov-2024 08:29:29 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[03-Nov-2024 11:15:00 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[03-Nov-2024 11:33:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[03-Nov-2024 14:25:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[03-Nov-2024 18:04:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[03-Nov-2024 18:56:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[03-Nov-2024 19:13:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[03-Nov-2024 20:47:41 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[03-Nov-2024 23:05:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[03-Nov-2024 23:06:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[03-Nov-2024 23:22:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[03-Nov-2024 23:27:09 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[03-Nov-2024 23:27:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[04-Nov-2024 00:25:13 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[04-Nov-2024 00:33:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[04-Nov-2024 01:42:08 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[04-Nov-2024 03:13:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[04-Nov-2024 05:34:44 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[05-Nov-2024 12:50:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[06-Nov-2024 19:51:16 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[06-Nov-2024 20:43:05 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[06-Nov-2024 21:23:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[07-Nov-2024 01:52:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[09-Nov-2024 13:02:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[10-Nov-2024 06:39:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[10-Nov-2024 08:16:52 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[11-Nov-2024 19:38:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/IconDashboard.php on line 20
[11-Nov-2024 19:38:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetColumn.php on line 28
[11-Nov-2024 19:38:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlaylistDashboard.php on line 32
[11-Nov-2024 19:38:58 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/StatusDashboard.php on line 42
[11-Nov-2024 19:39:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Notification.php on line 30
[11-Nov-2024 19:39:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/MediaManager.php on line 36
[11-Nov-2024 19:39:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayGroup.php on line 53
[11-Nov-2024 19:39:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Applications.php on line 50
[11-Nov-2024 19:39:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/PlayerSoftware.php on line 49
[11-Nov-2024 19:39:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DisplayProfile.php on line 39
[11-Nov-2024 19:39:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Maintenance.php on line 47
[11-Nov-2024 19:39:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetData.php on line 28
[11-Nov-2024 19:39:34 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/UserGroup.php on line 40
[11-Nov-2024 19:39:42 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Transition.php on line 36
[11-Nov-2024 19:39:47 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Resolution.php on line 37
[11-Nov-2024 19:39:50 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Report.php on line 47
[11-Nov-2024 19:39:55 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Region.php on line 34
[11-Nov-2024 19:39:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Module.php on line 58
[11-Nov-2024 19:40:02 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Layout.php on line 58
[11-Nov-2024 19:40:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSetRss.php on line 45
[11-Nov-2024 19:40:12 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Preview.php on line 36
[11-Nov-2024 19:40:14 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Logging.php on line 38
[11-Nov-2024 19:40:18 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Library.php on line 67
[11-Nov-2024 19:40:22 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Display.php on line 68
[11-Nov-2024 19:40:26 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DayPart.php on line 41
[11-Nov-2024 19:40:31 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/DataSet.php on line 40
[11-Nov-2024 19:40:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Command.php on line 26
[11-Nov-2024 19:40:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Template.php on line 36
[11-Nov-2024 19:40:43 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Settings.php on line 40
[11-Nov-2024 19:40:46 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Sessions.php on line 36
[11-Nov-2024 19:40:51 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Schedule.php on line 48
[11-Nov-2024 19:40:54 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Playlist.php on line 40
[11-Nov-2024 19:40:59 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Campaign.php on line 41
[11-Nov-2024 19:41:03 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/AuditLog.php on line 32
[11-Nov-2024 19:41:07 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Stats.php on line 45
[11-Nov-2024 19:41:11 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Login.php on line 45
[11-Nov-2024 19:41:15 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Fault.php on line 37
[11-Nov-2024 19:41:19 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Error.php on line 29
[11-Nov-2024 19:41:23 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Clock.php on line 34
[11-Nov-2024 19:41:27 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Tag.php on line 46
[11-Nov-2024 19:41:30 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/User.php on line 66
[11-Nov-2024 19:41:35 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Task.php on line 46
[11-Nov-2024 19:41:39 America/Fortaleza] PHP Fatal error: Class 'Xibo\Controller\Base' not found in /home/mgatv524/public_html/edurocha/lib/Controller/Help.php on line 34
AuditLog.php 0000644 00000012717 14716415766 0007016 0 ustar 00 .
*/
namespace Xibo\Controller;
use Xibo\Factory\AuditLogFactory;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
/**
* Class AuditLog
* @package Xibo\Controller
*/
class AuditLog extends Base
{
/**
* @var AuditLogFactory
*/
private $auditLogFactory;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param AuditLogFactory $auditLogFactory
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $auditLogFactory)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->auditLogFactory = $auditLogFactory;
}
public function displayPage()
{
$this->getState()->template = 'auditlog-page';
}
function grid()
{
$filterFromDt = $this->getSanitizer()->getDate('fromDt');
$filterToDt = $this->getSanitizer()->getDate('toDt');
$filterUser = $this->getSanitizer()->getString('user');
$filterEntity = $this->getSanitizer()->getString('entity');
$filterEntityId = $this->getSanitizer()->getString('entityId');
$filterMessage = $this->getSanitizer()->getString('message');
$search = [];
if ($filterFromDt != null && $filterFromDt == $filterToDt) {
$filterToDt->addDay(1);
}
// Get the dates and times
if ($filterFromDt == null)
$filterFromDt = $this->getDate()->parse()->sub('1 day');
if ($filterToDt == null)
$filterToDt = $this->getDate()->parse();
$search['fromTimeStamp'] = $filterFromDt->format('U');
$search['toTimeStamp'] = $filterToDt->format('U');
if ($filterUser != '') {
$search['userName'] = $filterUser;
}
if ($filterEntity != '') {
$search['entity'] = $filterEntity;
}
if ($filterEntityId != null) {
$search['entityId'] = $filterEntityId;
}
if ($filterMessage != '') {
$search['message'] = $filterMessage;
}
$rows = $this->auditLogFactory->query($this->gridRenderSort(), $this->gridRenderFilter($search));
// Do some post processing
foreach ($rows as $row) {
/* @var \Xibo\Entity\AuditLog $row */
$row->objectAfter = json_decode($row->objectAfter);
}
$this->getState()->template = 'grid';
$this->getState()->recordsTotal = $this->auditLogFactory->countLast();
$this->getState()->setData($rows);
}
/**
* Output CSV Form
*/
public function exportForm()
{
$this->getState()->template = 'auditlog-form-export';
$this->getState()->setData([
'help' => $this->getHelp()->link('AuditLog', 'Export')
]);
}
/**
* Outputs a CSV of audit trail messages
*/
public function export()
{
// We are expecting some parameters
$filterFromDt = $this->getSanitizer()->getDate('filterFromDt');
$filterToDt = $this->getSanitizer()->getDate('filterToDt');
if ($filterFromDt == null || $filterToDt == null)
throw new \InvalidArgumentException(__('Please provide a from/to date.'));
$fromTimeStamp = $filterFromDt->setTime(0, 0, 0)->format('U');
$toTimeStamp = $filterToDt->setTime(0, 0, 0)->format('U');
$rows = $this->auditLogFactory->query('logId', ['fromTimeStamp' => $fromTimeStamp, 'toTimeStamp' => $toTimeStamp]);
$out = fopen('php://output', 'w');
fputcsv($out, ['ID', 'Date', 'User', 'Entity', 'EntityId', 'Message', 'Object']);
// Do some post processing
foreach ($rows as $row) {
/* @var \Xibo\Entity\AuditLog $row */
fputcsv($out, [$row->logId, $this->getDate()->getLocalDate($row->logDate), $row->userName, $row->entity, $row->entityId, $row->message, $row->objectAfter]);
}
fclose($out);
// We want to output a load of stuff to the browser as a text file.
$app = $this->getApp();
$app->response()->header('Content-Type', 'text/csv');
$app->response()->header('Content-Disposition', 'attachment; filename="audittrail.csv"');
$app->response()->header('Content-Transfer-Encoding', 'binary"');
$app->response()->header('Accept-Ranges', 'bytes');
$this->setNoOutput(true);
}
}
DayPart.php 0000644 00000043103 14716415766 0006643 0 ustar 00 .
*/
namespace Xibo\Controller;
use Xibo\Exception\AccessDeniedException;
use Xibo\Exception\XiboException;
use Xibo\Factory\DayPartFactory;
use Xibo\Factory\DisplayFactory;
use Xibo\Factory\DisplayGroupFactory;
use Xibo\Factory\LayoutFactory;
use Xibo\Factory\MediaFactory;
use Xibo\Factory\ScheduleFactory;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
/**
* Class DayPart
* @package Xibo\Controller
*/
class DayPart extends Base
{
/** @var DayPartFactory */
private $dayPartFactory;
/** @var DisplayGroupFactory */
private $displayGroupFactory;
/** @var DisplayFactory */
private $displayFactory;
/** @var LayoutFactory */
private $layoutFactory;
/** @var MediaFactory */
private $mediaFactory;
/** @var ScheduleFactory */
private $scheduleFactory;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param DayPartFactory $dayPartFactory
* @param DisplayGroupFactory $displayGroupFactory
* @param DisplayFactory $displayFactory
* @param LayoutFactory $layoutFactory
* @param MediaFactory $mediaFactory
* @param ScheduleFactory $scheduleFactory
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $dayPartFactory, $displayGroupFactory, $displayFactory, $layoutFactory, $mediaFactory, $scheduleFactory)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->dayPartFactory = $dayPartFactory;
$this->displayGroupFactory = $displayGroupFactory;
$this->displayFactory = $displayFactory;
$this->layoutFactory = $layoutFactory;
$this->mediaFactory = $mediaFactory;
$this->scheduleFactory = $scheduleFactory;
}
/**
* View Route
*/
public function displayPage()
{
$this->getState()->template = 'daypart-page';
}
/**
* Search
*
* @SWG\Get(
* path="/daypart",
* operationId="dayPartSearch",
* tags={"dayPart"},
* summary="Daypart Search",
* description="Search dayparts",
* @SWG\Parameter(
* name="dayPartId",
* in="query",
* description="The dayPart ID to Search",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="name",
* in="query",
* description="The name of the dayPart to Search",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="embed",
* in="query",
* description="Embed related data such as exceptions",
* type="string",
* required=false
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(
* type="array",
* @SWG\Items(ref="#/definitions/DayPart")
* )
* )
* )
*/
public function grid()
{
$filter = [
'dayPartId' => $this->getSanitizer()->getInt('dayPartId'),
'name' => $this->getSanitizer()->getString('name'),
'useRegexForName' => $this->getSanitizer()->getCheckbox('useRegexForName'),
'isAlways' => $this->getSanitizer()->getInt('isAlways'),
'isCustom' => $this->getSanitizer()->getInt('isCustom')
];
$dayParts = $this->dayPartFactory->query($this->gridRenderSort(), $this->gridRenderFilter($filter));
$embed = ($this->getSanitizer()->getString('embed') != null) ? explode(',', $this->getSanitizer()->getString('embed')) : [];
foreach ($dayParts as $dayPart) {
/* @var \Xibo\Entity\DayPart $dayPart */
if (!in_array('exceptions', $embed)){
$dayPart->excludeProperty('exceptions');
}
if ($this->isApi())
continue;
$dayPart->includeProperty('buttons');
if ($dayPart->isCustom !== 1 && $dayPart->isAlways !== 1) {
// CRUD
$dayPart->buttons[] = array(
'id' => 'daypart_button_edit',
'url' => $this->urlFor('daypart.edit.form', ['id' => $dayPart->dayPartId]),
'text' => __('Edit')
);
if ($this->getUser()->checkDeleteable($dayPart)) {
$dayPart->buttons[] = array(
'id' => 'daypart_button_delete',
'url' => $this->urlFor('daypart.delete.form', ['id' => $dayPart->dayPartId]),
'text' => __('Delete'),
'multi-select' => true,
'dataAttributes' => array(
array('name' => 'commit-url', 'value' => $this->urlFor('daypart.delete', ['id' => $dayPart->dayPartId])),
array('name' => 'commit-method', 'value' => 'delete'),
array('name' => 'id', 'value' => 'daypart_button_delete'),
array('name' => 'text', 'value' => __('Delete')),
array('name' => 'rowtitle', 'value' => $dayPart->name)
)
);
}
}
if ($this->getUser()->checkPermissionsModifyable($dayPart)) {
if (count($dayPart->buttons) > 0)
$dayPart->buttons[] = ['divider' => true];
// Edit Permissions
$dayPart->buttons[] = array(
'id' => 'daypart_button_permissions',
'url' => $this->urlFor('user.permissions.form', ['entity' => 'DayPart', 'id' => $dayPart->dayPartId]),
'text' => __('Permissions')
);
}
}
$this->getState()->template = 'grid';
$this->getState()->recordsTotal = $this->dayPartFactory->countLast();
$this->getState()->setData($dayParts);
}
/**
* Add Daypart Form
*/
public function addForm()
{
$this->getState()->template = 'daypart-form-add';
$this->getState()->setData([
'extra' => [
'exceptions' => []
]
]);
}
/**
* Edit Daypart
* @param int $dayPartId
*/
public function editForm($dayPartId)
{
$dayPart = $this->dayPartFactory->getById($dayPartId);
if (!$this->getUser()->checkEditable($dayPart))
throw new AccessDeniedException();
if ($dayPart->isAlways === 1 || $dayPart->isCustom === 1)
throw new AccessDeniedException();
$this->getState()->template = 'daypart-form-edit';
$this->getState()->setData([
'dayPart' => $dayPart,
'extra' => [
'exceptions' => $dayPart->exceptions
]
]);
}
/**
* Delete Daypart
* @param int $dayPartId
*/
public function deleteForm($dayPartId)
{
$dayPart = $this->dayPartFactory->getById($dayPartId);
if (!$this->getUser()->checkDeleteable($dayPart))
throw new AccessDeniedException();
if ($dayPart->isAlways === 1 || $dayPart->isCustom === 1)
throw new AccessDeniedException();
// Get a count of schedules for this day part
$schedules = $this->scheduleFactory->getByDayPartId($dayPartId);
$this->getState()->template = 'daypart-form-delete';
$this->getState()->setData([
'countSchedules' => count($schedules),
'dayPart' => $dayPart
]);
}
/**
* Add
* @SWG\Post(
* path="/daypart",
* operationId="dayPartAdd",
* tags={"dayPart"},
* summary="Daypart Add",
* description="Add a Daypart",
* @SWG\Parameter(
* name="name",
* in="formData",
* description="The Daypart Name",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="description",
* in="formData",
* description="A description for the dayPart",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="startTime",
* in="formData",
* description="The start time for this day part",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="endTime",
* in="formData",
* description="The end time for this day part",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="exceptionDays",
* in="formData",
* description="String array of exception days",
* type="array",
* required=false,
* @SWG\Items(type="string")
* ),
* @SWG\Parameter(
* name="exceptionStartTimes",
* in="formData",
* description="String array of exception start times to match the exception days",
* type="array",
* required=false,
* @SWG\Items(type="string")
* ),
* @SWG\Parameter(
* name="exceptionEndTimes",
* in="formData",
* description="String array of exception end times to match the exception days",
* type="array",
* required=false,
* @SWG\Items(type="string")
* ),
* @SWG\Response(
* response=201,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/DayPart"),
* @SWG\Header(
* header="Location",
* description="Location of the new record",
* type="string"
* )
* )
* )
*/
public function add()
{
$dayPart = $this->dayPartFactory->createEmpty();
$this->handleCommonInputs($dayPart);
$dayPart
->setScheduleFactory($this->scheduleFactory)
->save();
// Return
$this->getState()->hydrate([
'httpStatus' => 201,
'message' => sprintf(__('Added %s'), $dayPart->name),
'id' => $dayPart->dayPartId,
'data' => $dayPart
]);
}
/**
* Edit
* @param int $dayPartId
*
* @SWG\Put(
* path="/daypart/{dayPartId}",
* operationId="dayPartEdit",
* tags={"dayPart"},
* summary="Daypart Edit",
* description="Edit a Daypart",
* @SWG\Parameter(
* name="dayPartId",
* in="path",
* description="The Daypart Id",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="name",
* in="formData",
* description="The Daypart Name",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="description",
* in="formData",
* description="A description for the dayPart",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="startTime",
* in="formData",
* description="The start time for this day part",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="endTime",
* in="formData",
* description="The end time for this day part",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="exceptionDays",
* in="formData",
* description="String array of exception days",
* type="array",
* required=false,
* @SWG\Items(type="string")
* ),
* @SWG\Parameter(
* name="exceptionStartTimes",
* in="formData",
* description="String array of exception start times to match the exception days",
* type="array",
* required=false,
* @SWG\Items(type="string")
* ),
* @SWG\Parameter(
* name="exceptionEndTimes",
* in="formData",
* description="String array of exception end times to match the exception days",
* type="array",
* required=false,
* @SWG\Items(type="string")
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/DayPart")
* )
* )
*
* @throws XiboException
*/
public function edit($dayPartId)
{
$dayPart = $this->dayPartFactory->getById($dayPartId)
->setDateService($this->getDate())
->setChildObjectDependencies($this->displayGroupFactory, $this->displayFactory, $this->layoutFactory, $this->mediaFactory, $this->scheduleFactory, $this->dayPartFactory)
->load();
if (!$this->getUser()->checkEditable($dayPart))
throw new AccessDeniedException();
if ($dayPart->isAlways === 1 || $dayPart->isCustom === 1)
throw new AccessDeniedException();
$this->handleCommonInputs($dayPart);
$dayPart
->setScheduleFactory($this->scheduleFactory)
->save();
// Return
$this->getState()->hydrate([
'httpStatus' => 200,
'message' => sprintf(__('Edited %s'), $dayPart->name),
'id' => $dayPart->dayPartId,
'data' => $dayPart
]);
}
/**
* Handle common inputs
* @param $dayPart
*/
private function handleCommonInputs($dayPart)
{
$dayPart->userId = $this->getUser()->userId;
$dayPart->name = $this->getSanitizer()->getString('name');
$dayPart->description = $this->getSanitizer()->getString('description');
$dayPart->isRetired = $this->getSanitizer()->getCheckbox('isRetired');
$dayPart->startTime = $this->getSanitizer()->getString('startTime');
$dayPart->endTime = $this->getSanitizer()->getString('endTime');
// Exceptions
$exceptionDays = $this->getSanitizer()->getStringArray('exceptionDays');
$exceptionStartTimes = $this->getSanitizer()->getStringArray('exceptionStartTimes');
$exceptionEndTimes = $this->getSanitizer()->getStringArray('exceptionEndTimes');
// Clear down existing exceptions
$dayPart->exceptions = [];
$i = -1;
foreach ($exceptionDays as $exceptionDay) {
// Pull the corrisponding start/end time out of the same position in the array
$i++;
$exceptionDayStartTime = isset($exceptionStartTimes[$i]) ? $exceptionStartTimes[$i] : '';
$exceptionDayEndTime = isset($exceptionEndTimes[$i]) ? $exceptionEndTimes[$i] : '';
if ($exceptionDay == '' || $exceptionDayStartTime == '' || $exceptionDayEndTime == '')
continue;
// Is this already set?
$found = false;
foreach ($dayPart->exceptions as $exception) {
if ($exception['day'] == $exceptionDay) {
$exception['start'] = $exceptionDayStartTime;
$exception['end'] = $exceptionDayEndTime;
$found = true;
break;
}
}
// Otherwise add it
if (!$found) {
$dayPart->exceptions[] = [
'day' => $exceptionDay,
'start' => $exceptionDayStartTime,
'end' => $exceptionDayEndTime
];
}
}
}
/**
* Delete
* @param int $dayPartId
*
* @SWG\Delete(
* path="/daypart/{dayPartId}",
* operationId="dayPartDelete",
* tags={"dayPart"},
* summary="Delete DayPart",
* description="Delete the provided dayPart",
* @SWG\Parameter(
* name="dayPartId",
* in="path",
* description="The Daypart Id to Delete",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*
* @throws XiboException
*/
public function delete($dayPartId)
{
$dayPart = $this->dayPartFactory->getById($dayPartId);
if (!$this->getUser()->checkDeleteable($dayPart))
throw new AccessDeniedException();
$dayPart
->setDateService($this->getDate())
->setScheduleFactory($this->scheduleFactory)
->delete();
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Deleted %s'), $dayPart->name)
]);
}
} StatusDashboard.php 0000644 00000046306 14716415766 0010402 0 ustar 00 .
*/
namespace Xibo\Controller;
use Exception;
use GuzzleHttp\Client;
use PicoFeed\PicoFeedException;
use PicoFeed\Reader\Reader;
use Stash\Interfaces\PoolInterface;
use Xibo\Factory\DisplayFactory;
use Xibo\Factory\DisplayGroupFactory;
use Xibo\Factory\MediaFactory;
use Xibo\Factory\UserFactory;
use Xibo\Helper\ByteFormatter;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
use Xibo\Storage\StorageServiceInterface;
/**
* Class StatusDashboard
* @package Xibo\Controller
*/
class StatusDashboard extends Base
{
/**
* @var StorageServiceInterface
*/
private $store;
/**
* @var PoolInterface
*/
private $pool;
/**
* @var UserFactory
*/
private $userFactory;
/**
* @var DisplayFactory
*/
private $displayFactory;
/**
* @var DisplayGroupFactory
*/
private $displayGroupFactory;
/**
* @var MediaFactory
*/
private $mediaFactory;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param StorageServiceInterface $store
* @param PoolInterface $pool
* @param UserFactory $userFactory
* @param DisplayFactory $displayFactory
* @param DisplayGroupFactory $displayGroupFactory
* @param MediaFactory $mediaFactory
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $store, $pool, $userFactory, $displayFactory, $displayGroupFactory, $mediaFactory)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->store = $store;
$this->pool = $pool;
$this->userFactory = $userFactory;
$this->displayFactory = $displayFactory;
$this->displayGroupFactory = $displayGroupFactory;
$this->mediaFactory = $mediaFactory;
}
/**
* Displays
*/
public function displays()
{
// Get a list of displays
$displays = $this->displayFactory->query($this->gridRenderSort(), $this->gridRenderFilter());
$this->getState()->template = 'grid';
$this->getState()->recordsTotal = $this->displayFactory->countLast();
$this->getState()->setData($displays);
}
/**
* View
*/
function displayPage()
{
$data = [];
// Set up some suffixes
$suffixes = array('B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB');
try {
// Get some data for a bandwidth chart
$dbh = $this->store->getConnection();
$params = ['month' => time() - (86400 * 365)];
$sql = '
SELECT MAX(FROM_UNIXTIME(month)) AS month,
IFNULL(SUM(Size), 0) AS size
FROM `bandwidth`
LEFT OUTER JOIN `lkdisplaydg`
ON lkdisplaydg.displayID = bandwidth.displayId
LEFT OUTER JOIN `displaygroup`
ON displaygroup.DisplayGroupID = lkdisplaydg.DisplayGroupID
AND displaygroup.isDisplaySpecific = 1
WHERE month > :month ';
// Including this will break the LEFT OUTER join for everyone except super-admins, for whom this statement
// doesn't add any SQL.
// However, that is probably desirable, as otherwise deleted Displays the user never had permissions for
// will be counted in the SUM. Not desirable for a multi-tenant CMS
$this->displayFactory->viewPermissionSql('Xibo\Entity\DisplayGroup', $sql, $params, '`lkdisplaydg`.displayGroupId');
$sql .= ' GROUP BY MONTH(FROM_UNIXTIME(month)) ORDER BY MIN(month); ';
// Run the SQL
$results = $this->store->select($sql, $params);
// Monthly bandwidth - optionally tested against limits
$xmdsLimit = $this->getConfig()->getSetting('MONTHLY_XMDS_TRANSFER_LIMIT_KB');
$maxSize = 0;
foreach ($results as $row) {
$maxSize = ($row['size'] > $maxSize) ? $row['size'] : $maxSize;
}
// Decide what our units are going to be, based on the size
$base = ($maxSize == 0) ? 0 : floor(log($maxSize) / log(1024));
if ($xmdsLimit > 0) {
// Convert to appropriate size (xmds limit is in KB)
$xmdsLimit = ($xmdsLimit * 1024) / (pow(1024, $base));
$data['xmdsLimit'] = round($xmdsLimit, 2) . ' ' . $suffixes[$base];
}
$labels = [];
$usage = [];
$limit = [];
foreach ($results as $row) {
$labels[] = $this->getDate()->getLocalDate($this->getSanitizer()->getDate('month', $row), 'F');
$size = ((double)$row['size']) / (pow(1024, $base));
$usage[] = round($size, 2);
$limit[] = round($xmdsLimit - $size, 2);
}
// What if we are empty?
if (count($results) == 0) {
$labels[] = $this->getDate()->getLocalDate(null, 'F');
$usage[] = 0;
$limit[] = 0;
}
// Organise our datasets
$dataSets = [
[
'label' => __('Used'),
'backgroundColor' => ($xmdsLimit > 0) ? 'rgb(255, 0, 0)' : 'rgb(11, 98, 164)',
'data' => $usage
]
];
if ($xmdsLimit > 0) {
$dataSets[] = [
'label' => __('Available'),
'backgroundColor' => 'rgb(0, 204, 0)',
'data' => $limit
];
}
// Set the data
$data['xmdsLimitSet'] = ($xmdsLimit > 0);
$data['bandwidthSuffix'] = $suffixes[$base];
$data['bandwidthWidget'] = json_encode([
'labels' => $labels,
'datasets' => $dataSets
]);
// We would also like a library usage pie chart!
if ($this->getUser()->libraryQuota != 0) {
$libraryLimit = $this->getUser()->libraryQuota * 1024;
}
else {
$libraryLimit = $this->getConfig()->getSetting('LIBRARY_SIZE_LIMIT_KB') * 1024;
}
// Library Size in Bytes
$params = [];
$sql = 'SELECT IFNULL(SUM(FileSize), 0) AS SumSize, type FROM `media` WHERE 1 = 1 ';
$this->mediaFactory->viewPermissionSql('Xibo\Entity\Media', $sql, $params, '`media`.mediaId', '`media`.userId');
$sql .= ' GROUP BY type ';
$sth = $dbh->prepare($sql);
$sth->execute($params);
$results = $sth->fetchAll();
// Do we base the units on the maximum size or the library limit
$maxSize = 0;
if ($libraryLimit > 0) {
$maxSize = $libraryLimit;
} else {
// Find the maximum sized chunk of the items in the library
foreach ($results as $library) {
$maxSize = ($library['SumSize'] > $maxSize) ? $library['SumSize'] : $maxSize;
}
}
// Decide what our units are going to be, based on the size
$base = ($maxSize == 0) ? 0 : floor(log($maxSize) / log(1024));
$libraryUsage = [];
$libraryLabels = [];
$totalSize = 0;
foreach ($results as $library) {
$libraryUsage[] = round((double)$library['SumSize'] / (pow(1024, $base)), 2);
$libraryLabels[] = ucfirst($library['type']) . ' ' . $suffixes[$base];
$totalSize = $totalSize + $library['SumSize'];
}
// Do we need to add the library remaining?
if ($libraryLimit > 0) {
$remaining = round(($libraryLimit - $totalSize) / (pow(1024, $base)), 2);
$libraryUsage[] = $remaining;
$libraryLabels[] = __('Free') . ' ' . $suffixes[$base];
}
// What if we are empty?
if (count($results) == 0 && $libraryLimit <= 0) {
$libraryUsage[] = 0;
$libraryLabels[] = __('Empty');
}
$data['libraryLimitSet'] = ($libraryLimit > 0);
$data['libraryLimit'] = (round((double)$libraryLimit / (pow(1024, $base)), 2)) . ' ' . $suffixes[$base];
$data['librarySize'] = ByteFormatter::format($totalSize, 1);
$data['librarySuffix'] = $suffixes[$base];
$data['libraryWidgetLabels'] = json_encode($libraryLabels);
$data['libraryWidgetData'] = json_encode($libraryUsage);
// Get a count of users
$data['countUsers'] = count($this->userFactory->query());
// Get a count of active layouts, only for display groups we have permission for
$displayGroups = $this->displayGroupFactory->query(null, ['isDisplaySpecific' => -1]);
$displayGroupIds = array_map(function($element) {
return $element->displayGroupId;
}, $displayGroups);
// Add an empty one
$displayGroupIds[] = -1;
$params = ['now' => time()];
$sql = '
SELECT IFNULL(COUNT(*), 0) AS count_scheduled
FROM `schedule`
WHERE (
:now BETWEEN FromDT AND ToDT
OR `schedule`.recurrence_range >= :now
OR (
IFNULL(`schedule`.recurrence_range, 0) = 0 AND IFNULL(`schedule`.recurrence_type, \'\') <> \'\'
)
)
AND eventId IN (
SELECT eventId
FROM `lkscheduledisplaygroup`
WHERE 1 = 1
';
$this->displayFactory->viewPermissionSql('Xibo\Entity\DisplayGroup', $sql, $params, '`lkscheduledisplaygroup`.displayGroupId');
$sql .= ' ) ';
$sth = $dbh->prepare($sql);
$sth->execute($params);
$data['nowShowing'] = $sth->fetchColumn(0);
// Latest news
if ($this->getConfig()->getSetting('DASHBOARD_LATEST_NEWS_ENABLED') == 1 && !empty($this->getConfig()->getSetting('LATEST_NEWS_URL'))) {
// Make sure we have the cache location configured
Library::ensureLibraryExists($this->getConfig()->getSetting('LIBRARY_LOCATION'));
try {
$feedUrl = $this->getConfig()->getSetting('LATEST_NEWS_URL');
$cache = $this->pool->getItem('rss/' . md5($feedUrl));
$latestNews = $cache->get();
// Check the cache
if ($cache->isMiss()) {
// Create a Guzzle Client to get the Feed XML
$client = new Client();
$response = $client->get($feedUrl, $this->getConfig()->getGuzzleProxy());
// Pull out the content type and body
$result = explode('charset=', $response->getHeaderLine('Content-Type'));
$document['encoding'] = isset($result[1]) ? $result[1] : '';
$document['xml'] = $response->getBody();
// Get the feed parser
$reader = new Reader();
$parser = $reader->getParser($feedUrl, $document['xml'], $document['encoding']);
// Get a feed object
$feed = $parser->execute();
// Parse the items in the feed
$latestNews = [];
foreach ($feed->getItems() as $item) {
/* @var \PicoFeed\Parser\Item $item */
// Try to get the description tag
if (!$desc = $item->getTag('description')) {
// use content with tags stripped
$content = strip_tags($item->getContent());
} else {
// use description
$content = (isset($desc[0]) ? $desc[0] : strip_tags($item->getContent()));
}
$latestNews[] = array(
'title' => $item->getTitle(),
'description' => $content,
'link' => $item->getUrl(),
'date' => $this->getDate()->getLocalDate($item->getDate()->format('U'))
);
}
// Store in the cache for 1 day
$cache->set($latestNews);
$cache->expiresAfter(86400);
$this->pool->saveDeferred($cache);
}
$data['latestNews'] = $latestNews;
}
catch (PicoFeedException $e) {
$this->getLog()->error('Unable to get feed: %s', $e->getMessage());
$this->getLog()->debug($e->getTraceAsString());
$data['latestNews'] = array(array('title' => __('Latest news not available.'), 'description' => '', 'link' => ''));
}
} else {
$data['latestNews'] = array(array('title' => __('Latest news not enabled.'), 'description' => '', 'link' => ''));
}
// Display Status and Media Inventory data - Level one
$displays = $this->displayFactory->query();
$displayIds = [];
$displayLoggedIn = [];
$displayNames = [];
$displayMediaStatus = [];
$displaysOnline = 0;
$displaysOffline = 0;
$displaysMediaUpToDate = 0;
$displaysMediaNotUpToDate = 0;
foreach ($displays as $display) {
$displayIds[] = $display->displayId;
$displayNames[] = $display->display;
$displayLoggedIn[] = $display->loggedIn;
$displayMediaStatus[] = $display->mediaInventoryStatus;
}
foreach ($displayLoggedIn as $status) {
if ($status == 1) {
$displaysOnline++;
} else {
$displaysOffline++;
}
}
foreach ($displayMediaStatus as $statusMedia) {
if ($statusMedia == 1) {
$displaysMediaUpToDate++;
} else {
$displaysMediaNotUpToDate++;
}
}
$data['displayStatus'] = json_encode([$displaysOnline, $displaysOffline]);
$data['displayMediaStatus'] = json_encode([$displaysMediaUpToDate, $displaysMediaNotUpToDate]);
$data['displayLabels'] = json_encode($displayNames);
}
catch (Exception $e) {
$this->getLog()->error($e->getMessage());
$this->getLog()->debug($e->getTraceAsString());
// Show the error in place of the bandwidth chart
$data['widget-error'] = 'Unable to get widget details';
}
// Do we have an embedded widget?
$data['embeddedWidget'] = html_entity_decode($this->getConfig()->getSetting('EMBEDDED_STATUS_WIDGET'));
// Render the Theme and output
$this->getState()->template = 'dashboard-status-page';
$this->getState()->setData($data);
}
function displayGroups()
{
$status = null;
$inventoryStatus = null;
$params = [];
$label = $this->getSanitizer()->getString('status');
$labelContent = $this->getSanitizer()->getString('inventoryStatus');
$displayGroupIds = [];
$displayGroupNames = [];
$displaysAssigned = [];
$data = [];
if (isset($label)) {
if ($label == 'Online') {
$status = 1;
} else {
$status = 0;
}
}
if (isset($labelContent)) {
if ($labelContent == 'Up to Date') {
$inventoryStatus = 1;
} else {
$inventoryStatus = -1;
}
}
try {
$sql = 'SELECT DISTINCT displaygroup.DisplayGroupID, displaygroup.displayGroup
FROM displaygroup
INNER JOIN `lkdisplaydg`
ON lkdisplaydg.DisplayGroupID = displaygroup.DisplayGroupID
INNER JOIN `display`
ON display.displayid = lkdisplaydg.DisplayID
WHERE
displaygroup.IsDisplaySpecific = 0 ';
if ($status !== null) {
$sql .= ' AND display.loggedIn = :status ';
$params = ['status' => $status];
}
if ($inventoryStatus != null) {
if ($inventoryStatus === -1) {
$sql .= ' AND display.MediaInventoryStatus <> 1';
} else {
$sql .= ' AND display.MediaInventoryStatus = :inventoryStatus';
$params = ['inventoryStatus' => $inventoryStatus];
}
}
$this->displayFactory->viewPermissionSql('Xibo\Entity\DisplayGroup', $sql, $params, '`lkdisplaydg`.displayGroupId');
$sql .= ' ORDER BY displaygroup.DisplayGroup ';
$results = $this->store->select($sql, $params);
foreach ($results as $row) {
$displayGroupNames[] = $row['displayGroup'];
$displayGroupIds[] = $row['DisplayGroupID'];
$displaysAssigned[] = count($this->displayFactory->query(['displayGroup'], ['displayGroupId' => $row['DisplayGroupID'], 'mediaInventoryStatus' => $inventoryStatus, 'loggedIn' => $status]));
}
$data['displayGroupNames'] = json_encode($displayGroupNames);
$data['displayGroupIds'] = json_encode($displayGroupIds);
$data['displayGroupMembers'] = json_encode($displaysAssigned);
$this->getState()->setData($data);
} catch (Exception $e) {
$this->getLog()->error($e->getMessage());
$this->getLog()->debug($e->getTraceAsString());
}
}
}
Campaign.php 0000644 00000070605 14716415766 0007025 0 ustar 00 .
*/
namespace Xibo\Controller;
use Xibo\Entity\Permission;
use Xibo\Exception\AccessDeniedException;
use Xibo\Exception\InvalidArgumentException;
use Xibo\Exception\XiboException;
use Xibo\Factory\CampaignFactory;
use Xibo\Factory\LayoutFactory;
use Xibo\Factory\PermissionFactory;
use Xibo\Factory\TagFactory;
use Xibo\Factory\UserGroupFactory;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
/**
* Class Campaign
* @package Xibo\Controller
*/
class Campaign extends Base
{
/**
* @var CampaignFactory
*/
private $campaignFactory;
/**
* @var LayoutFactory
*/
private $layoutFactory;
/**
* @var TagFactory
*/
private $tagFactory;
/**
* @var PermissionFactory
*/
private $permissionFactory;
/**
* @var UserGroupFactory
*/
private $userGroupFactory;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param CampaignFactory $campaignFactory
* @param LayoutFactory $layoutFactory
* @param PermissionFactory $permissionFactory
* @param UserGroupFactory $userGroupFactory
* @param TagFactory $tagFactory
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $campaignFactory, $layoutFactory, $permissionFactory, $userGroupFactory, $tagFactory)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->campaignFactory = $campaignFactory;
$this->layoutFactory = $layoutFactory;
$this->permissionFactory = $permissionFactory;
$this->userGroupFactory = $userGroupFactory;
$this->tagFactory = $tagFactory;
}
public function displayPage()
{
$this->getState()->template = 'campaign-page';
}
/**
* Returns a Grid of Campaigns
*
* @SWG\Get(
* path="/campaign",
* operationId="campaignSearch",
* tags={"campaign"},
* summary="Search Campaigns",
* description="Search all Campaigns this user has access to",
* @SWG\Parameter(
* name="campaignId",
* in="query",
* description="Filter by Campaign Id",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="name",
* in="query",
* description="Filter by Name",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="tags",
* in="query",
* description="Filter by Tags",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="hasLayouts",
* in="query",
* description="Filter by has layouts",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="isLayoutSpecific",
* in="query",
* description="Filter by whether this Campaign is specific to a Layout or User added",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="retired",
* in="query",
* description="Filter by retired",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="totalDuration",
* in="query",
* description="Should we total the duration?",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="embed",
* in="query",
* description="Embed related data such as layouts, permissions, tags and events",
* type="string",
* required=false
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(
* type="array",
* @SWG\Items(ref="#/definitions/Campaign")
* )
* )
* )
* @throws \Xibo\Exception\NotFoundException
*/
public function grid()
{
$filter = [
'campaignId' => $this->getSanitizer()->getInt('campaignId'),
'name' => $this->getSanitizer()->getString('name'),
'useRegexForName' => $this->getSanitizer()->getCheckbox('useRegexForName'),
'tags' => $this->getSanitizer()->getString('tags'),
'hasLayouts' => $this->getSanitizer()->getInt('hasLayouts'),
'isLayoutSpecific' => $this->getSanitizer()->getInt('isLayoutSpecific'),
'retired' => $this->getSanitizer()->getInt('retired')
];
$options = [
'totalDuration' => $this->getSanitizer()->getInt('totalDuration', 1),
];
$embed = ($this->getSanitizer()->getString('embed') != null) ? explode(',', $this->getSanitizer()->getString('embed')) : [];
$campaigns = $this->campaignFactory->query($this->gridRenderSort(), $this->gridRenderFilter($filter), $options);
foreach ($campaigns as $campaign) {
/* @var \Xibo\Entity\Campaign $campaign */
if (count($embed) > 0) {
$campaign->setChildObjectDependencies($this->layoutFactory);
$campaign->load([
'loadPermissions' => in_array('permissions', $embed),
'loadLayouts' => in_array('layouts', $embed),
'loadTags' => in_array('tags', $embed),
'loadEvents' => in_array('events', $embed)
]);
}
if ($this->isApi())
break;
$campaign->includeProperty('buttons');
$campaign->buttons = [];
// Schedule Now
$campaign->buttons[] = array(
'id' => 'campaign_button_schedulenow',
'url' => $this->urlFor('schedule.now.form', ['id' => $campaign->campaignId, 'from' => 'Campaign']),
'text' => __('Schedule Now')
);
// Preview
$campaign->buttons[] = array(
'id' => 'campaign_button_preview',
'linkType' => '_blank',
'external' => true,
'url' => $this->urlFor('campaign.preview', ['id' => $campaign->campaignId]),
'text' => __('Preview Campaign')
);
// Buttons based on permissions
if ($this->getUser()->checkEditable($campaign)) {
$campaign->buttons[] = ['divider' => true];
// Edit the Campaign
$campaign->buttons[] = array(
'id' => 'campaign_button_edit',
'url' => $this->urlFor('campaign.edit.form', ['id' => $campaign->campaignId]),
'text' => __('Edit')
);
// Copy the campaign
$campaign->buttons[] = [
'id' => 'campaign_button_copy',
'url' => $this->urlFor('campaign.copy.form', ['id' => $campaign->campaignId]),
'text' => __('Copy')
];
} else {
$campaign->buttons[] = ['divider' => true];
}
if ($this->getUser()->checkDeleteable($campaign)) {
// Delete Campaign
$campaign->buttons[] = array(
'id' => 'campaign_button_delete',
'url' => $this->urlFor('campaign.delete.form', ['id' => $campaign->campaignId]),
'text' => __('Delete'),
'multi-select' => true,
'dataAttributes' => array(
array('name' => 'commit-url', 'value' => $this->urlFor('campaign.delete', ['id' => $campaign->campaignId])),
array('name' => 'commit-method', 'value' => 'delete'),
array('name' => 'id', 'value' => 'campaign_button_delete'),
array('name' => 'text', 'value' => __('Delete')),
array('name' => 'rowtitle', 'value' => $campaign->campaign)
)
);
}
if ($this->getUser()->checkPermissionsModifyable($campaign)) {
$campaign->buttons[] = ['divider' => true];
// Permissions for Campaign
$campaign->buttons[] = array(
'id' => 'campaign_button_permissions',
'url' => $this->urlFor('user.permissions.form', ['entity' => 'Campaign', 'id' => $campaign->campaignId]),
'text' => __('Permissions')
);
}
}
$this->getState()->template = 'grid';
$this->getState()->recordsTotal = $this->campaignFactory->countLast();
$this->getState()->setData($campaigns);
}
/**
* Campaign Add Form
*/
public function addForm()
{
// Load layouts
$layouts = [];
$this->getState()->template = 'campaign-form-add';
$this->getState()->setData([
'layouts' => $layouts,
'help' => $this->getHelp()->link('Campaign', 'Add')
]);
}
/**
* Add a Campaign
*
* @SWG\Post(
* path="/campaign",
* operationId="campaignAdd",
* tags={"campaign"},
* summary="Add Campaign",
* description="Add a Campaign",
* @SWG\Parameter(
* name="name",
* in="formData",
* description="Name for this Campaign",
* type="string",
* required=true
* ),
* @SWG\Response(
* response=201,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/Campaign"),
* @SWG\Header(
* header="Location",
* description="Location of the new record",
* type="string"
* )
* )
* )
*/
public function add()
{
$campaign = $this->campaignFactory->create($this->getSanitizer()->getString('name'), $this->getUser()->userId, $this->getSanitizer()->getString('tags'));
$campaign->save();
// Permissions
foreach ($this->permissionFactory->createForNewEntity($this->getUser(), get_class($campaign), $campaign->getId(), $this->getConfig()->getSetting('LAYOUT_DEFAULT'), $this->userGroupFactory) as $permission) {
/* @var Permission $permission */
$permission->save();
}
// Assign layouts
$this->assignLayout($campaign->campaignId);
// Return
$this->getState()->hydrate([
'httpStatus' => 201,
'message' => sprintf(__('Added %s'), $campaign->campaign),
'id' => $campaign->campaignId,
'data' => $campaign
]);
}
/**
* Campaign Edit Form
* @param int $campaignId
*/
public function editForm($campaignId)
{
$campaign = $this->campaignFactory->getById($campaignId);
$tags = '';
$arrayOfTags = array_filter(explode(',', $campaign->tags));
$arrayOfTagValues = array_filter(explode(',', $campaign->tagValues));
for ($i=0; $igetUser()->checkEditable($campaign))
throw new AccessDeniedException();
// Load layouts
$layouts = [];
foreach ($this->layoutFactory->getByCampaignId($campaignId, false) as $layout) {
if (!$this->getUser()->checkViewable($layout)) {
// Hide all layout details from the user
$emptyLayout = $this->layoutFactory->createEmpty();
$emptyLayout->layoutId = $layout->layoutId;
$emptyLayout->layout = __('Layout');
$emptyLayout->locked = true;
$layouts[] = $emptyLayout;
} else {
$layouts[] = $layout;
}
}
$this->getState()->template = 'campaign-form-edit';
$this->getState()->setData([
'campaign' => $campaign,
'layouts' => $layouts,
'help' => $this->getHelp()->link('Campaign', 'Edit'),
'tags' => $tags
]);
}
/**
* Edit a Campaign
* @param int $campaignId
*
* @SWG\Put(
* path="/campaign/{campaignId}",
* operationId="campaignEdit",
* tags={"campaign"},
* summary="Edit Campaign",
* description="Edit an existing Campaign",
* @SWG\Parameter(
* name="campaignId",
* in="path",
* description="The Campaign ID to Edit",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="name",
* in="formData",
* description="Name for this Campaign",
* type="string",
* required=true
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/Campaign")
* )
* )
*/
public function edit($campaignId)
{
$campaign = $this->campaignFactory->getById($campaignId);
if (!$this->getUser()->checkEditable($campaign))
throw new AccessDeniedException();
$campaign->campaign = $this->getSanitizer()->getString('name');
$campaign->replaceTags($this->tagFactory->tagsFromString($this->getSanitizer()->getString('tags')));
$campaign->save([
'saveTags' => true
]);
// Assign layouts
$this->assignLayout($campaign->campaignId);
// Return
$this->getState()->hydrate([
'message' => sprintf(__('Edited %s'), $campaign->campaign),
'id' => $campaign->campaignId,
'data' => $campaign
]);
}
/**
* Shows the Delete Group Form
* @param int $campaignId
*/
function deleteForm($campaignId)
{
$campaign = $this->campaignFactory->getById($campaignId);
if (!$this->getUser()->checkDeleteable($campaign))
throw new AccessDeniedException();
$this->getState()->template = 'campaign-form-delete';
$this->getState()->setData([
'campaign' => $campaign,
'help' => $this->getHelp()->link('Campaign', 'Delete')
]);
}
/**
* Delete Campaign
* @param int $campaignId
*
* @SWG\Delete(
* path="/campaign/{campaignId}",
* operationId="campaignDelete",
* tags={"campaign"},
* summary="Delete Campaign",
* description="Delete an existing Campaign",
* @SWG\Parameter(
* name="campaignId",
* in="path",
* description="The Campaign ID to Delete",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*
* @throws XiboException
*/
public function delete($campaignId)
{
$campaign = $this->campaignFactory->getById($campaignId);
if (!$this->getUser()->checkDeleteable($campaign))
throw new AccessDeniedException();
$campaign->setChildObjectDependencies($this->layoutFactory);
$campaign->delete();
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Deleted %s'), $campaign->campaign)
]);
}
/**
* Layouts form
* @param int $campaignId
* @throws XiboException
*/
public function layoutsForm($campaignId)
{
$campaign = $this->campaignFactory->getById($campaignId);
if (!$this->getUser()->checkEditable($campaign))
throw new AccessDeniedException();
$layouts = [];
foreach ($this->layoutFactory->getByCampaignId($campaignId, false) as $layout) {
if (!$this->getUser()->checkViewable($layout)) {
// Hide all layout details from the user
$emptyLayout = $this->layoutFactory->createEmpty();
$emptyLayout->layoutId = $layout->layoutId;
$emptyLayout->layout = __('Layout');
$emptyLayout->locked = true;
$layouts[] = $emptyLayout;
} else {
$layouts[] = $layout;
}
}
$this->getState()->template = 'campaign-form-layouts';
$this->getState()->setData([
'campaign' => $campaign,
'layouts' => $layouts,
'help' => $this->getHelp()->link('Campaign', 'Layouts')
]);
}
/**
* Model to use for supplying key/value pairs to arrays
* @SWG\Definition(
* definition="LayoutAssignmentArray",
* @SWG\Property(
* property="layoutId",
* type="integer"
* ),
* @SWG\Property(
* property="displayOrder",
* type="integer"
* )
* )
*/
/**
* Assigns a layout to a Campaign
* @param int $campaignId
*
* @SWG\Post(
* path="/campaign/layout/assign/{campaignId}",
* operationId="campaignAssignLayout",
* tags={"campaign"},
* summary="Assign Layouts",
* description="Assign Layouts to a Campaign",
* @SWG\Parameter(
* name="campaignId",
* in="path",
* description="The Campaign ID",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="layoutId",
* in="formData",
* description="Array of Layout ID/Display Orders to Assign",
* type="array",
* required=true,
* @SWG\Items(
* ref="#/definitions/LayoutAssignmentArray"
* )
* ),
* @SWG\Parameter(
* name="unassignLayoutId",
* in="formData",
* description="Array of Layout ID/Display Orders to unassign",
* type="array",
* required=false,
* @SWG\Items(
* ref="#/definitions/LayoutAssignmentArray"
* )
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*
* @throws XiboException
*/
public function assignLayout($campaignId)
{
$this->getLog()->debug('assignLayout with campaignId ' . $campaignId);
$campaign = $this->campaignFactory->getById($campaignId);
if (!$this->getUser()->checkEditable($campaign))
throw new AccessDeniedException();
// Make sure this is a non-layout specific campaign
if ($campaign->isLayoutSpecific == 1)
throw new InvalidArgumentException(__('You cannot change the assignment of a Layout Specific Campaign'),'campaignId');
$campaign->setChildObjectDependencies($this->layoutFactory);
// Track whether we've made any changes.
$changesMade = false;
// Check our permissions to see each one
$layouts = $this->getSanitizer()->getParam('layoutId', null);
$layouts = is_array($layouts) ? $layouts : [];
$this->getLog()->debug('There are %d Layouts to assign', count($layouts));
foreach ($layouts as $object) {
$layout = $this->layoutFactory->getById($this->getSanitizer()->getInt('layoutId', $object));
// Check to see if this layout is already assigned
// if it is, then we have permission to move it around
if (!$this->getUser()->checkViewable($layout) && !$campaign->isLayoutAssigned($layout))
throw new AccessDeniedException(__('You do not have permission to assign the provided Layout'));
// Make sure we're not a draft
if ($layout->isChild())
throw new InvalidArgumentException('Cannot assign a Draft Layout to a Campaign', 'layoutId');
// Make sure this layout is not a template - for API, in web ui templates are not available for assignment
$tags = $layout->tags;
$tagsArray = explode(',', $tags);
foreach ($tagsArray as $tag) {
if ($tag === 'template') {
throw new InvalidArgumentException('Cannot assign a Template to a Campaign', 'layoutId');
}
}
// Set the Display Order
$layout->displayOrder = $this->getSanitizer()->getInt('displayOrder', $object);
// Assign it
$campaign->assignLayout($layout);
$changesMade = true;
}
// Run through the layouts to unassign
$layouts = $this->getSanitizer()->getParam('unassignLayoutId', null);
$layouts = is_array($layouts) ? $layouts : [];
$this->getLog()->debug('There are %d Layouts to unassign', count($layouts));
foreach ($layouts as $object) {
$layout = $this->layoutFactory->getById($this->getSanitizer()->getInt('layoutId', $object));
if (!$this->getUser()->checkViewable($layout) && !$campaign->isLayoutAssigned($layout))
throw new AccessDeniedException(__('You do not have permission to assign the provided Layout'));
// Set the Display Order
$layout->displayOrder = $this->getSanitizer()->getInt('displayOrder', $object);
// Unassign it
$campaign->unassignLayout($layout);
$changesMade = true;
}
// Save the campaign
if ($changesMade) {
$campaign->save(['validate' => false, 'saveTags' => false]);
}
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Assigned Layouts to %s'), $campaign->campaign)
]);
}
/**
* Unassign a layout to a Campaign
* @param int $campaignId
*
* SWG\Post(
* path="/campaign/layout/unassign/{campaignId}",
* operationId="campaignUnassignLayout",
* tags={"campaign"},
* summary="Unassign Layouts",
* description="Unassign Layouts from a Campaign",
* SWG\Parameter(
* name="campaignId",
* in="path",
* description="The Campaign ID",
* type="integer",
* required=true
* ),
* SWG\Parameter(
* name="layoutId",
* in="formData",
* description="Array of Layout IDs to Unassign",
* type="array",
* required=true,
* SWG\Items(
* ref="#/definitions/LayoutAssignmentArray"
* )
* ),
* SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*
* @throws XiboException
*/
public function unassignLayout($campaignId)
{
$campaign = $this->campaignFactory->getById($campaignId);
if (!$this->getUser()->checkEditable($campaign))
throw new AccessDeniedException();
// Make sure this is a non-layout specific campaign
if ($campaign->isLayoutSpecific == 1)
throw new InvalidArgumentException(__('You cannot change the assignment of a Layout Specific Campaign'),'campaignId');
$campaign->setChildObjectDependencies($this->layoutFactory);
$layouts = $this->getSanitizer()->getIntArray('layoutId');
if (count($layouts) <= 0)
throw new \InvalidArgumentException(__('Layouts not provided'));
// Check our permissions to see each one
$layouts = $this->getSanitizer()->getParam('layoutId', null);
$layouts = is_array($layouts) ? $layouts : [];
foreach ($layouts as $object) {
$layout = $this->layoutFactory->getById($this->getSanitizer()->getInt('layoutId', $object));
if (!$this->getUser()->checkViewable($layout) && !$campaign->isLayoutAssigned($layout))
throw new AccessDeniedException(__('You do not have permission to assign the provided Layout'));
// Set the Display Order
$layout->displayOrder = $this->getSanitizer()->getInt('displayOrder', $object);
// Unassign it
$campaign->unassignLayout($layout);
}
$campaign->save(['validate' => false]);
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Unassigned Layouts from %s'), $campaign->campaign)
]);
}
/**
* Returns a Campaign's preview
* @param int $campaignId
*/
public function preview($campaignId)
{
$campaign = $this->campaignFactory->getById($campaignId);
$layouts = $this->layoutFactory->getByCampaignId($campaignId);
$duration = 0 ;
$extendedLayouts = [];
foreach($layouts as $layout)
{
$duration += $layout->duration;
$extendedLayouts[] = ['layout' => $layout,
'duration' => $layout->duration,
'previewOptions' => [
'getXlfUrl' => $this->urlFor('layout.getXlf', ['id' => $layout->layoutId]),
'getResourceUrl' => $this->urlFor('module.getResource'),
'libraryDownloadUrl' => $this->urlFor('library.download'),
'layoutBackgroundDownloadUrl' => $this->urlFor('layout.download.background'),
'loaderUrl' => $this->getConfig()->uri('img/loader.gif')]
];
}
$this->getState()->template = 'campaign-preview';
$this->getState()->setData([
'campaign' => $campaign,
'help' => $this->getHelp()->link('Campaign', 'Preview'),
'layouts' => $layouts,
'duration' => $duration,
'extendedLayouts' => $extendedLayouts
]);
}
public function copyForm($campaignId)
{
// get the Campaign
$campaign = $this->campaignFactory->getById($campaignId);
if ($this->getUser()->userTypeId != 1 && $this->getUser()->userId != $campaign->ownerId) {
throw new AccessDeniedException(__('You do not have permission to copy this Campaign'));
}
$this->getState()->template = 'campaign-form-copy';
$this->getState()->setData([
'campaign' => $campaign
]);
}
/**
* @param $campaignId
* @throws InvalidArgumentException
* @throws \Xibo\Exception\NotFoundException
*/
public function copy($campaignId)
{
// get the Campaign
$campaign = $this->campaignFactory->getById($campaignId);
// get the Layouts assigned to the original Campaign
$layouts = $this->layoutFactory->getByCampaignId($campaign->campaignId, false);
if ($this->getUser()->userTypeId != 1 && $this->getUser()->userId != $campaign->ownerId) {
throw new AccessDeniedException(__('You do not have permission to copy this Campaign'));
}
$newCampaign = clone $campaign;
$newCampaign->campaign = $this->getSanitizer()->getString('name');
// assign the same layouts to the new Campaign
foreach ($layouts as $layout) {
$newCampaign->assignLayout($layout);
}
$newCampaign->save();
// Return
$this->getState()->hydrate([
'httpStatus' => 201,
'message' => sprintf(__('Added %s'), $newCampaign->campaign),
'id' => $newCampaign->campaignId,
'data' => $newCampaign
]);
}
}
Region.php 0000644 00000052133 14716415766 0006525 0 ustar 00 setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->session = $session;
$this->regionFactory = $regionFactory;
$this->widgetFactory = $widgetFactory;
$this->permissionFactory = $permissionFactory;
$this->transitionFactory = $transitionFactory;
$this->layoutFactory = $layoutFactory;
$this->moduleFactory = $moduleFactory;
$this->userGroupFactory = $userGroupFactory;
}
/**
* Edit Form
* @param int $regionId
* @throws XiboException
*/
public function editForm($regionId)
{
$region = $this->regionFactory->getById($regionId);
if (!$this->getUser()->checkEditable($region))
throw new AccessDeniedException();
$this->getState()->template = 'region-form-edit';
$this->getState()->setData([
'region' => $region,
'layout' => $this->layoutFactory->getById($region->layoutId),
'transitions' => $this->transitionData(),
'help' => $this->getHelp()->link('Region', 'Edit')
]);
}
/**
* Delete Form
* @param int $regionId
* @throws XiboException
*/
public function deleteForm($regionId)
{
$region = $this->regionFactory->getById($regionId);
if (!$this->getUser()->checkDeleteable($region))
throw new AccessDeniedException();
$this->getState()->template = 'region-form-delete';
$this->getState()->setData([
'region' => $region,
'layout' => $this->layoutFactory->getById($region->layoutId),
'help' => $this->getHelp()->link('Region', 'Delete')
]);
}
/**
* Add a region
* @param int $layoutId
*
* @SWG\Post(
* path="/region/{id}",
* operationId="regionAdd",
* tags={"layout"},
* summary="Add Region",
* description="Add a Region to a Layout",
* @SWG\Parameter(
* name="id",
* in="path",
* description="The Layout ID to add the Region to",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="width",
* in="formData",
* description="The Width, default 250",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="height",
* in="formData",
* description="The Height",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="top",
* in="formData",
* description="The Top Coordinate",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="left",
* in="formData",
* description="The Left Coordinate",
* type="integer",
* required=false
* ),
* @SWG\Response(
* response=201,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/Region"),
* @SWG\Header(
* header="Location",
* description="Location of the new record",
* type="string"
* )
* )
* )
*
* @throws XiboException
*/
public function add($layoutId)
{
$layout = $this->layoutFactory->getById($layoutId);
if (!$this->getUser()->checkEditable($layout))
throw new AccessDeniedException();
if (!$layout->isChild())
throw new InvalidArgumentException(__('This Layout is not a Draft, please checkout.'), 'layoutId');
$layout->load([
'loadPlaylists' => true,
'loadTags' => false,
'loadPermissions' => true,
'loadCampaigns' => false
]);
// Add a new region
$region = $this->regionFactory->create(
$this->getUser()->userId, $layout->layout . '-' . (count($layout->regions) + 1),
$this->getSanitizer()->getInt('width', 250),
$this->getSanitizer()->getInt('height', 250),
$this->getSanitizer()->getInt('top', 50),
$this->getSanitizer()->getInt('left', 50)
);
$layout->regions[] = $region;
$layout->save([
'saveTags' => false
]);
// Permissions
if ($this->getConfig()->getSetting('INHERIT_PARENT_PERMISSIONS') == 1) {
$this->getLog()->debug('Applying permissions from parent, there are ' . count($layout->permissions));
// Apply permissions from the Parent
foreach ($layout->permissions as $permission) {
/* @var Permission $permission */
$permission = $this->permissionFactory->create($permission->groupId, get_class($region), $region->getId(), $permission->view, $permission->edit, $permission->delete);
$permission->save();
}
}
else {
$this->getLog()->debug('Applying default permissions');
// Apply the default permissions
foreach ($this->permissionFactory->createForNewEntity($this->getUser(), get_class($region), $region->getId(), $this->getConfig()->getSetting('LAYOUT_DEFAULT'), $this->userGroupFactory) as $permission) {
/* @var Permission $permission */
$permission->save();
}
}
// Return
$this->getState()->hydrate([
'httpStatus' => 201,
'message' => sprintf(__('Added %s'), $region->name),
'id' => $region->regionId,
'data' => $region
]);
}
/**
* @param int $regionId
*
* @SWG\Put(
* path="/region/{id}",
* operationId="regionEdit",
* tags={"layout"},
* summary="Edit Region",
* description="Edit Region",
* @SWG\Parameter(
* name="id",
* in="path",
* description="The Region ID to Edit",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="width",
* in="formData",
* description="The Width, default 250",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="height",
* in="formData",
* description="The Height",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="top",
* in="formData",
* description="The Top Coordinate",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="left",
* in="formData",
* description="The Left Coordinate",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="zIndex",
* in="formData",
* description="The Layer for this Region",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="transitionType",
* in="formData",
* description="The Transition Type. Must be a valid transition code as returned by /transition",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="transitionDuration",
* in="formData",
* description="The transition duration in milliseconds if required by the transition type",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="transitionDirection",
* in="formData",
* description="The transition direction if required by the transition type.",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="loop",
* in="formData",
* description="Flag indicating whether this region should loop if there is only 1 media item in the timeline",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/Region")
* )
* )
*
* @throws XiboException
*/
public function edit($regionId)
{
$region = $this->regionFactory->getById($regionId);
if (!$this->getUser()->checkEditable($region))
throw new AccessDeniedException();
// Check that this Regions Layout is in an editable state
$layout = $this->layoutFactory->getById($region->layoutId);
if (!$layout->isChild())
throw new InvalidArgumentException(__('This Layout is not a Draft, please checkout.'), 'layoutId');
// Load before we save
$region->load();
$region->name = $this->getSanitizer()->getString('name');
$region->width = $this->getSanitizer()->getDouble('width');
$region->height = $this->getSanitizer()->getDouble('height');
$region->top = $this->getSanitizer()->getDouble('top');
$region->left = $this->getSanitizer()->getDouble('left');
$region->zIndex = $this->getSanitizer()->getInt('zIndex');
// Loop
$region->setOptionValue('loop', $this->getSanitizer()->getCheckbox('loop'));
// Transitions
$region->setOptionValue('transitionType', $this->getSanitizer()->getString('transitionType'));
$region->setOptionValue('transitionDuration', $this->getSanitizer()->getInt('transitionDuration'));
$region->setOptionValue('transitionDirection', $this->getSanitizer()->getString('transitionDirection'));
// Save
$region->save();
// Mark the layout as needing rebuild
$layout->load(\Xibo\Entity\Layout::$loadOptionsMinimum);
$saveOptions = \Xibo\Entity\Layout::$saveOptionsMinimum;
$saveOptions['setBuildRequired'] = true;
$layout->save($saveOptions);
// Return
$this->getState()->hydrate([
'message' => sprintf(__('Edited %s'), $region->name),
'id' => $region->regionId,
'data' => $region
]);
}
/**
* Delete a region
* @param int $regionId
*
* @SWG\Delete(
* path="/region/{regionId}",
* operationId="regionDelete",
* tags={"layout"},
* summary="Region Delete",
* description="Delete an existing region",
* @SWG\Parameter(
* name="regionId",
* in="path",
* description="The Region ID to Delete",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*
* @throws XiboException
*/
public function delete($regionId)
{
$region = $this->regionFactory->getById($regionId);
if (!$this->getUser()->checkDeleteable($region))
throw new AccessDeniedException();
// Check that this Regions Layout is in an editable state
$layout = $this->layoutFactory->getById($region->layoutId);
if (!$layout->isChild())
throw new InvalidArgumentException(__('This Layout is not a Draft, please checkout.'), 'layoutId');
$region->delete();
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Deleted %s'), $region->name)
]);
}
/**
* Update Positions
* @param int $layoutId
* @throws NotFoundException
*
* @SWG\Put(
* path="/region/position/all/{layoutId}",
* operationId="regionPositionAll",
* tags={"layout"},
* summary="Position Regions",
* description="Position all regions for a Layout",
* @SWG\Parameter(
* name="layoutId",
* in="path",
* description="The Layout ID",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="regions",
* in="formData",
* description="Array of regions and their new positions. Each array element should be json encoded and have regionId, top, left, width and height.",
* type="array",
* required=true,
* @SWG\Items(
* type="string"
* )
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/Layout")
* )
* )
*
* @throws XiboException
*/
function positionAll($layoutId)
{
// Create the layout
$layout = $this->layoutFactory->loadById($layoutId);
if (!$this->getUser()->checkEditable($layout))
throw new AccessDeniedException();
// Check that this Layout is a Draft
if (!$layout->isChild())
throw new InvalidArgumentException(__('This Layout is not a Draft, please checkout.'), 'layoutId');
// Pull in the regions and convert them to stdObjects
$regions = $this->getSanitizer()->getParam('regions', null);
if ($regions == null)
throw new \InvalidArgumentException(__('No regions present'));
$regions = json_decode($regions);
// Go through each region and update the region in the layout we have
foreach ($regions as $newCoordinates) {
// Check that the properties we are expecting do actually exist
if (!property_exists($newCoordinates, 'regionid'))
throw new \InvalidArgumentException(__('Missing regionid property'));
if (!property_exists($newCoordinates, 'top'))
throw new \InvalidArgumentException(__('Missing top property'));
if (!property_exists($newCoordinates, 'left'))
throw new \InvalidArgumentException(__('Missing left property'));
if (!property_exists($newCoordinates, 'width'))
throw new \InvalidArgumentException(__('Missing width property'));
if (!property_exists($newCoordinates, 'height'))
throw new \InvalidArgumentException(__('Missing height property'));
$regionId = $this->getSanitizer()->int($newCoordinates->regionid);
// Load the region
$region = $layout->getRegion($regionId);
// Check Permissions
if (!$this->getUser()->checkEditable($region))
throw new AccessDeniedException();
// New coordinates
$region->top = $this->getSanitizer()->double($newCoordinates->top);
$region->left = $this->getSanitizer()->double($newCoordinates->left);
$region->width = $this->getSanitizer()->double($newCoordinates->width);
$region->height = $this->getSanitizer()->double($newCoordinates->height);
$this->getLog()->debug('Set ' . $region);
}
// Mark the layout as having changed
$layout->status = 0;
$layout->save();
// Return
$this->getState()->hydrate([
'message' => sprintf(__('Edited %s'), $layout->layout),
'id' => $layout->layoutId,
'data' => $layout
]);
}
/**
* Represents the Preview inside the Layout Designer
* @param int $regionId
* @throws XiboException
*/
public function preview($regionId)
{
$widgetId = $this->getSanitizer()->getInt('widgetId', null);
$seqGiven = $this->getSanitizer()->getInt('seq', 1);
$seq = $this->getSanitizer()->getInt('seq', 1);
$width = $this->getSanitizer()->getDouble('width', 0);
$height = $this->getSanitizer()->getDouble('height', 0);
$scaleOverride = $this->getSanitizer()->getDouble('scale_override', 0);
// Load our region
try {
$region = $this->regionFactory->getById($regionId);
$region->load();
if ($widgetId !== null) {
// Single Widget Requested
$widget = $this->widgetFactory->getById($widgetId);
$widget->load();
$countWidgets = 1;
} else {
// Get the first playlist we can find
$playlist = $region->getPlaylist()->setModuleFactory($this->moduleFactory);
// Expand this Playlist out to its individual Widgets
$widgets = $playlist->expandWidgets();
$countWidgets = count($widgets);
// We want to load the widget in the given sequence
if ($countWidgets <= 0) {
// No media to preview
throw new NotFoundException(__('No widgets to preview'));
}
$this->getLog()->debug('There are ' . $countWidgets . ' widgets.');
// Select the widget at the required sequence
$widget = $playlist->getWidgetAt($seq, $widgets);
/* @var \Xibo\Entity\Widget $widget */
$widget->load();
}
// Output a preview
$module = $this->moduleFactory->createWithWidget($widget, $region);
$this->getState()->extra['empty'] = false;
$this->getState()->html = $module->preview($width, $height, $scaleOverride);
$this->getState()->extra['type'] = $widget->type;
$this->getState()->extra['duration'] = $widget->calculatedDuration;
$this->getState()->extra['number_items'] = $countWidgets;
$this->getState()->extra['current_item'] = $seqGiven;
$this->getState()->extra['moduleName'] = $module->getName();
$this->getState()->extra['regionDuration'] = $region->duration;
$this->getState()->extra['useDuration'] = $widget->useDuration;
$this->getState()->extra['zIndex'] = $region->zIndex;
$this->getState()->extra['tempId'] = $widget->tempId;
} catch (NotFoundException $e) {
// No media to preview
$this->getState()->extra['empty'] = true;
$this->getState()->extra['text'] = __('Empty Region');
} catch (InvalidArgumentException $e) {
$this->getState()->extra['empty'] = true;
$this->getState()->extra['text'] = __('Please correct the error with this Widget');
}
}
/**
* @return array
*/
private function transitionData()
{
return [
'in' => $this->transitionFactory->getEnabledByType('in'),
'out' => $this->transitionFactory->getEnabledByType('out'),
'compassPoints' => array(
array('id' => 'N', 'name' => __('North')),
array('id' => 'NE', 'name' => __('North East')),
array('id' => 'E', 'name' => __('East')),
array('id' => 'SE', 'name' => __('South East')),
array('id' => 'S', 'name' => __('South')),
array('id' => 'SW', 'name' => __('South West')),
array('id' => 'W', 'name' => __('West')),
array('id' => 'NW', 'name' => __('North West'))
)
];
}
} Tag.php 0000644 00000044146 14716415766 0006022 0 ustar 00 .
*/
namespace Xibo\Controller;
use Xibo\Exception\AccessDeniedException;
use Xibo\Exception\NotFoundException;
use Xibo\Factory\CampaignFactory;
use Xibo\Factory\DisplayFactory;
use Xibo\Factory\DisplayGroupFactory;
use Xibo\Factory\LayoutFactory;
use Xibo\Factory\MediaFactory;
use Xibo\Factory\PlaylistFactory;
use Xibo\Factory\ScheduleFactory;
use Xibo\Factory\TagFactory;
use Xibo\Factory\UserFactory;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
use Xibo\Storage\StorageServiceInterface;
/**
* Class Tag
* @package Xibo\Controller
*/
class Tag extends Base
{
/** @var CampaignFactory */
private $campaignFactory;
/**
* @var DisplayFactory
*/
private $displayFactory;
/**
* @var DisplayGroupFactory
*/
private $displayGroupFactory;
/**
* @var LayoutFactory
*/
private $layoutFactory;
/**
* @var MediaFactory
*/
private $mediaFactory;
/** @var PlaylistFactory */
private $playlistFactory;
/**
* @var ScheduleFactory
*/
private $scheduleFactory;
/**
* @var TagFactory
*/
private $tagFactory;
/** @var UserFactory */
private $userFactory;
/** @var StorageServiceInterface */
private $store;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param StorageServiceInterface $store
* @param DisplayGroupFactory $displayGroupFactory
* @param LayoutFactory $layoutFactory
* @param TagFactory $tagFactory
* @param UserFactory $userFactory
* @param DisplayFactory $displayFactory
* @param MediaFactory $mediaFactory
* @param ScheduleFactory $scheduleFactory
* @param CampaignFactory $campaignFactory
* @param PlaylistFactory $playlistFactory
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $store, $displayGroupFactory, $layoutFactory, $tagFactory, $userFactory, $displayFactory, $mediaFactory, $scheduleFactory, $campaignFactory, $playlistFactory) {
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->store = $store;
$this->displayGroupFactory = $displayGroupFactory;
$this->layoutFactory = $layoutFactory;
$this->tagFactory = $tagFactory;
$this->userFactory = $userFactory;
$this->displayFactory = $displayFactory;
$this->mediaFactory = $mediaFactory;
$this->scheduleFactory = $scheduleFactory;
$this->campaignFactory = $campaignFactory;
$this->playlistFactory = $playlistFactory;
}
public function displayPage()
{
$this->getState()->template = 'tag-page';
$this->getState()->setData([
'users' => $this->userFactory->query()
]);
}
/**
* Tag Search
*
* @SWG\Get(
* path="/tag",
* operationId="tagSearch",
* tags={"tags"},
* summary="Search Tags",
* description="Search for Tags viewable by this user",
* @SWG\Parameter(
* name="tagId",
* in="query",
* description="Filter by Tag Id",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="tag",
* in="query",
* description="Filter by partial Tag",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="exactTag",
* in="query",
* description="Filter by exact Tag",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="isSystem",
* in="query",
* description="Filter by isSystem flag",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="isRequired",
* in="query",
* description="Filter by isRequired flag",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="haveOptions",
* in="query",
* description="Set to 1 to show only results that have options set",
* type="integer",
* required=false
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(
* type="array",
* @SWG\Items(ref="#/definitions/Tag")
* )
* )
* )
*/
function grid()
{
$filter = [
'tagId' => $this->getSanitizer()->getInt('tagId'),
'tag' => $this->getSanitizer()->getString('tag'),
'useRegexForName' => $this->getSanitizer()->getCheckbox('useRegexForName'),
'isSystem' => $this->getSanitizer()->getCheckbox('isSystem'),
'isRequired' => $this->getSanitizer()->getCheckbox('isRequired'),
'haveOptions' => $this->getSanitizer()->getCheckbox('haveOptions')
];
$tags = $this->tagFactory->query($this->gridRenderSort(), $this->gridRenderFilter($filter));
foreach ($tags as $tag) {
/* @var \Xibo\Entity\Tag $tag */
if ($this->isApi()) {
$tag->excludeProperty('layouts');
$tag->excludeProperty('playlists');
$tag->excludeProperty('campaigns');
$tag->excludeProperty('medias');
$tag->excludeProperty('displayGroups');
continue;
}
$tag->includeProperty('buttons');
$tag->buttons = [];
//Show buttons for non system tags
if ($tag->isSystem === 0) {
// Edit the Tag
$tag->buttons[] = [
'id' => 'tag_button_edit',
'url' => $this->urlFor('tag.edit.form', ['id' => $tag->tagId]),
'text' => __('Edit')
];
// Delete Tag
$tag->buttons[] = [
'id' => 'tag_button_delete',
'url' => $this->urlFor('tag.delete.form', ['id' => $tag->tagId]),
'text' => __('Delete'),
'multi-select' => true,
'dataAttributes' => [
['name' => 'commit-url', 'value' => $this->urlFor('tag.delete', ['id' => $tag->tagId])],
['name' => 'commit-method', 'value' => 'delete'],
['name' => 'id', 'value' => 'tag_button_delete'],
['name' => 'text', 'value' => __('Delete')],
['name' => 'rowtitle', 'value' => $tag->tag]
]
];
}
}
$this->getState()->template = 'grid';
$this->getState()->recordsTotal = $this->tagFactory->countLast();
$this->getState()->setData($tags);
}
/**
* Tag Add Form
*/
public function addForm()
{
$this->getState()->template = 'tag-form-add';
$this->getState()->setData([
'help' => $this->getHelp()->link('Tags', 'Add')
]);
}
/**
* Add a Tag
*
* @SWG\Post(
* path="/tag",
* operationId="tagAdd",
* tags={"tags"},
* summary="Add a new Tag",
* description="Add a new Tag",
* @SWG\Parameter(
* name="name",
* in="formData",
* description="Tag name",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="isRequired",
* in="formData",
* description="A flag indicating whether value selection on assignment is required",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="options",
* in="formData",
* description="A comma separated string of Tag options",
* type="string",
* required=false
* ),
* @SWG\Response(
* response=201,
* description="successful operation",
* @SWG\Schema(
* type="array",
* @SWG\Items(ref="#/definitions/Tag")
* )
* )
* )
*/
public function add()
{
if (!$this->getUser()->isSuperAdmin()) {
throw new AccessDeniedException();
}
$values = [];
$tag = $this->tagFactory->create($this->getSanitizer()->getString('name'));
$tag->options = [];
$tag->isRequired = $this->getSanitizer()->getCheckbox('isRequired');
$optionValues = $this->getSanitizer()->getString('options');
if ($optionValues != '') {
$optionValuesArray = explode(',', $optionValues);
foreach ($optionValuesArray as $options) {
$values[] = $options;
}
$tag->options = json_encode($values);
} else {
$tag->options = null;
}
$tag->save(['validate' => true]);
// Return
$this->getState()->hydrate([
'httpStatus' => 201,
'message' => sprintf(__('Added %s'), $tag->tag),
'id' => $tag->tagId,
'data' => $tag
]);
}
/**
* Edit a Tag
*
* @SWG\Put(
* path="/tag/{tagId}",
* operationId="tagEdit",
* tags={"tags"},
* summary="Edit existing Tag",
* description="Edit existing Tag",
* @SWG\Parameter(
* name="name",
* in="formData",
* description="Tag name",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="isRequired",
* in="formData",
* description="A flag indicating whether value selection on assignment is required",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="options",
* in="formData",
* description="A comma separated string of Tag options",
* type="string",
* required=false
* ),
* @SWG\Response(
* response=201,
* description="successful operation",
* @SWG\Schema(
* type="array",
* @SWG\Items(ref="#/definitions/Tag")
* )
* )
* )
*
*
* @param $tagId
* @throws \Xibo\Exception\NotFoundException
*/
public function editForm($tagId)
{
$tag = $this->tagFactory->getById($tagId);
$tagOptions = '';
if (isset($tag->options)) {
$tagOptions = implode(',', json_decode($tag->options));
}
$this->getState()->template = 'tag-form-edit';
$this->getState()->setData([
'tag' => $tag,
'options' => $tagOptions,
'help' => $this->getHelp()->link('Tags', 'Add')
]);
}
/**
* Edit a Tag
*
* @param $tagId
* @throws \Xibo\Exception\NotFoundException
*/
public function edit($tagId)
{
if (!$this->getUser()->isSuperAdmin()) {
throw new AccessDeniedException();
}
$tag = $this->tagFactory->getById($tagId);
$tag->load();
if ($tag->isSystem === 1) {
throw new AccessDeniedException(__('Access denied System tags cannot be edited'));
}
if(isset($tag->options)) {
$tagOptionsCurrent = implode(',', json_decode($tag->options));
$tagOptionsArrayCurrent = explode(',', $tagOptionsCurrent);
}
$values = [];
$tag->tag = $this->getSanitizer()->getString('name');
$tag->isRequired = $this->getSanitizer()->getCheckbox('isRequired');
$optionValues = $this->getSanitizer()->getString('options');
if ($optionValues != '') {
$optionValuesArray = explode(',', $optionValues);
foreach ($optionValuesArray as $option) {
$values[] = trim($option);
}
$tag->options = json_encode($values);
} else {
$tag->options = null;
}
// if option were changed, we need to compare the array of options before and after edit
if($tag->hasPropertyChanged('options')) {
if (isset($tagOptionsArrayCurrent)) {
if(isset($tag->options)) {
$tagOptions = implode(',', json_decode($tag->options));
$tagOptionsArray = explode(',', $tagOptions);
} else {
$tagOptionsArray = [];
}
// compare array of options before and after the Tag edit was made
$tagValuesToRemove = array_diff($tagOptionsArrayCurrent, $tagOptionsArray);
// go through every element of the new array and set the value to null if removed value was assigned to one of the lktag tables
$tag->updateTagValues($tagValuesToRemove);
}
}
$tag->save(['validate' => true]);
// Return
$this->getState()->hydrate([
'httpStatus' => 201,
'message' => sprintf(__('Edited %s'), $tag->tag),
'id' => $tag->tagId,
'data' => $tag
]);
}
/**
* Shows the Delete Group Form
* @param int $tagId
* @throws \Xibo\Exception\NotFoundException
*/
function deleteForm($tagId)
{
$tag = $this->tagFactory->getById($tagId);
$this->getState()->template = 'tag-form-delete';
$this->getState()->setData([
'tag' => $tag,
'help' => $this->getHelp()->link('Tag', 'Delete')
]);
}
/**
* Delete Tag
*
* @SWG\Delete(
* path="/tag/{tagId}",
* operationId="tagDelete",
* tags={"tags"},
* summary="Delete Tag",
* description="Delete a Tag",
* @SWG\Parameter(
* name="tagId",
* in="path",
* description="The Tag ID to delete",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*
* @param int $tagId
*
* @throws \Xibo\Exception\InvalidArgumentException
* @throws \Xibo\Exception\NotFoundException
* @throws \Xibo\Exception\XiboException
*/
public function delete($tagId)
{
if (!$this->getUser()->isSuperAdmin()) {
throw new AccessDeniedException();
}
$tag = $this->tagFactory->getById($tagId);
$tag->load();
if ($tag->isSystem === 1) {
throw new AccessDeniedException(__('Access denied System tags cannot be deleted'));
}
// get all the linked items to the tag we want to delete
$linkedLayoutsIds = $tag->layouts;
$linkedDisplayGroupsIds = $tag->displayGroups;
$linkedCampaignsIds = $tag->campaigns;
$linkedPlaylistsIds = $tag->playlists;
$linkedMediaIds = $tag->medias;
// go through each linked layout and unassign the tag
foreach($linkedLayoutsIds as $layoutId => $value) {
$layout = $this->layoutFactory->getById($layoutId);
$tag->unassignLayout($layoutId);
$layout->save();
}
// go through each linked displayGroup and unassign the tag
foreach ($linkedDisplayGroupsIds as $displayGroupId => $value) {
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
$displayGroup->setChildObjectDependencies($this->displayFactory, $this->layoutFactory, $this->mediaFactory, $this->scheduleFactory);
$tag->unassignDisplayGroup($displayGroupId);
$displayGroup->save();
}
// go through each linked campaign and unassign the tag
foreach ($linkedCampaignsIds as $campaignId => $value) {
$campaign = $this->campaignFactory->getById($campaignId);
$campaign->setChildObjectDependencies($this->layoutFactory);
$tag->unassignCampaign($campaignId);
$campaign->save();
}
// go through each linked playlist and unassign the tag
foreach ($linkedPlaylistsIds as $playlistId => $value) {
$playlist = $this->playlistFactory->getById($playlistId);
$tag->unassignPlaylist($playlistId);
$playlist->save();
}
// go through each linked media and unassign the tag
foreach($linkedMediaIds as $mediaId => $value) {
$media = $this->mediaFactory->getById($mediaId);
$tag->unassignMedia($mediaId);
$media->save();
}
// finally call delete tag, which also removes the links from lktag tables
$tag->delete();
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Deleted %s'), $tag->tag)
]);
}
/**
* @throws NotFoundException
*/
public function loadTagOptions()
{
$tagName = $this->getSanitizer()->getString('name');
try {
$tag = $this->tagFactory->getByTag($tagName);
} catch (NotFoundException $e) {
// User provided new tag, which is fine
$tag = null;
}
$this->getState()->setData([
'tag' => ($tag === null) ? null : $tag
]);
}
} PlayerSoftware.php 0000644 00000042626 14716415766 0010257 0 ustar 00 .
*/
namespace Xibo\Controller;
use Xibo\Entity\Media;
use Xibo\Entity\PlayerVersion;
use Xibo\Exception\AccessDeniedException;
use Xibo\Exception\InvalidArgumentException;
use Xibo\Exception\NotFoundException;
use Xibo\Exception\XiboException;
use Xibo\Factory\DisplayFactory;
use Xibo\Factory\DisplayGroupFactory;
use Xibo\Factory\DisplayProfileFactory;
use Xibo\Factory\LayoutFactory;
use Xibo\Factory\MediaFactory;
use Xibo\Factory\ModuleFactory;
use Xibo\Factory\PlayerVersionFactory;
use Xibo\Factory\ScheduleFactory;
use Xibo\Factory\WidgetFactory;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
/**
* Class PlayerSoftware
* @package Xibo\Controller
*/
class PlayerSoftware extends Base
{
/** @var \Stash\Interfaces\PoolInterface */
private $pool;
/** @var DisplayProfileFactory */
private $displayProfileFactory;
/** @var MediaFactory */
private $mediaFactory;
/** @var ModuleFactory */
private $moduleFactory;
/** @var PlayerVersionFactory */
private $playerVersionFactory;
/** @var LayoutFactory */
private $layoutFactory;
/** @var WidgetFactory */
private $widgetFactory;
/** @var DisplayGroupFactory */
private $displayGroupFactory;
/** @var DisplayFactory */
private $displayFactory;
/** @var ScheduleFactory */
private $scheduleFactory;
/**
* Notification constructor.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param \Stash\Interfaces\PoolInterface $pool
* @param MediaFactory $mediaFactory
* @param PlayerVersionFactory $playerVersionFactory
* @param DisplayProfileFactory $displayProfileFactory
* @param ModuleFactory $moduleFactory
* @param LayoutFactory $layoutFactory
* @param WidgetFactory $widgetFactory
* @param DisplayGroupFactory $displayGroupFactory
* @param DisplayFactory $displayFactory
* @param ScheduleFactory $scheduleFactory
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $pool, $mediaFactory, $playerVersionFactory, $displayProfileFactory, $moduleFactory, $layoutFactory, $widgetFactory, $displayGroupFactory, $displayFactory, $scheduleFactory)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->pool = $pool;
$this->mediaFactory = $mediaFactory;
$this->playerVersionFactory = $playerVersionFactory;
$this->displayProfileFactory = $displayProfileFactory;
$this->moduleFactory = $moduleFactory;
$this->layoutFactory = $layoutFactory;
$this->widgetFactory = $widgetFactory;
$this->displayGroupFactory = $displayGroupFactory;
$this->displayFactory = $displayFactory;
$this->scheduleFactory = $scheduleFactory;
}
/**
* Displays the page logic
*/
function displayPage()
{
$this->getState()->template = 'playersoftware-page';
$this->getState()->setData([
'versions' => $this->playerVersionFactory->getDistinctVersion(),
'validExt' => implode('|', $this->moduleFactory->getValidExtensions(['type' => 'playersoftware'])),
'warningLabel' => __("Please set Player Software Version")
]);
}
/**
* @throws NotFoundException
*/
function grid()
{
$user = $this->getUser();
$filter = [
'playerType' => $this->getSanitizer()->getString('playerType'),
'playerVersion' => $this->getSanitizer()->getString('playerVersion'),
'playerCode' => $this->getSanitizer()->getInt('playerCode'),
'versionId' => $this->getSanitizer()->getInt('versionId'),
'mediaId' => $this->getSanitizer()->getInt('mediaId'),
'playerShowVersion' => $this->getSanitizer()->getString('playerShowVersion'),
'useRegexForName' => $this->getSanitizer()->getCheckbox('useRegexForName')
];
$versions = $this->playerVersionFactory->query($this->gridRenderSort(), $this->gridRenderFilter($filter));
// add row buttons
foreach ($versions as $version) {
if ($this->isApi())
break;
$media = $this->mediaFactory->getById($version->mediaId);
$version->includeProperty('buttons');
$version->buttons = [];
// Buttons
if ($user->checkEditable($media)) {
// Edit
$version->buttons[] = [
'id' => 'content_button_edit',
'url' => $this->urlFor('playersoftware.edit.form', ['id' => $version->versionId]),
'text' => __('Edit')
];
}
if ($user->checkDeleteable($media)) {
// Delete Button
$version->buttons[] = array(
'id' => 'content_button_delete',
'url' => $this->urlFor('playersoftware.delete.form', ['id' => $version->versionId]),
'text' => __('Delete')
);
}
if ($user->checkPermissionsModifyable($media)) {
// Permissions
$version->buttons[] = array(
'id' => 'content_button_permissions',
'url' => $this->urlFor('user.permissions.form', ['entity' => 'Media', 'id' => $media->mediaId]),
'text' => __('Permissions')
);
}
// Download
$version->buttons[] = array(
'id' => 'content_button_download',
'linkType' => '_self', 'external' => true,
'url' => $this->urlFor('library.download', ['id' => $media->mediaId]) . '?attachment=' . $media->fileName,
'text' => __('Download')
);
}
$this->getState()->template = 'grid';
$this->getState()->recordsTotal = $this->playerVersionFactory->countLast();
$this->getState()->setData($versions);
}
/**
* Version Delete Form
* @param int $versionId
* @throws NotFoundException
* @throws XiboException
*/
public function deleteForm($versionId)
{
$version = $this->playerVersionFactory->getById($versionId);
$media = $this->mediaFactory->getById($version->mediaId);
if (!$this->getUser()->checkDeleteable($media))
throw new AccessDeniedException();
$version->load();
$this->getState()->template = 'playersoftware-form-delete';
$this->getState()->setData([
'version' => $version,
'help' => $this->getHelp()->link('Player Software', 'Delete')
]);
}
/**
* Delete Version
* @param int $versionId
*
* @throws NotFoundException
* @throws XiboException
* @SWG\Delete(
* path="/playersoftware/{versionId}",
* operationId="playerSoftwareDelete",
* tags={"Player Software"},
* summary="Delete Version",
* description="Delete Version file from the Library and Player Versions table",
* @SWG\Parameter(
* name="versionId",
* in="path",
* description="The Version ID to Delete",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*/
public function delete($versionId)
{
/** @var PlayerVersion $version */
$version = $this->playerVersionFactory->getById($versionId);
/** @var Media $media */
$media = $this->mediaFactory->getById($version->mediaId);
if (!$this->getUser()->checkDeleteable($media))
throw new AccessDeniedException();
$version->load();
$media->load();
// Delete
$version->delete();
$media->setChildObjectDependencies($this->layoutFactory, $this->widgetFactory, $this->displayGroupFactory, $this->displayFactory, $this->scheduleFactory, $this->playerVersionFactory);
$media->delete();
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Deleted %s'), $version->playerShowVersion)
]);
}
/**
* Edit Form
* @param int $versionId
* @throws NotFoundException
*/
public function editForm($versionId)
{
$version = $this->playerVersionFactory->getById($versionId);
$media = $this->mediaFactory->getById($version->mediaId);
if (!$this->getUser()->checkEditable($media))
throw new AccessDeniedException();
$this->getState()->template = 'playersoftware-form-edit';
$this->getState()->setData([
'media' => $media,
'version' => $version,
'validExtensions' => implode('|', $this->moduleFactory->getValidExtensions(['type' => 'playersoftware'])),
'help' => $this->getHelp()->link('Player Software', 'Edit')
]);
}
/**
* Edit Player Version
* @param int $versionId
*
* @throws NotFoundException
* @SWG\Put(
* path="/playersoftware/{versionId}",
* operationId="playersoftwareEdit",
* tags={"Player Software"},
* summary="Edit Player Version",
* description="Edit a Player Version file information",
* @SWG\Parameter(
* name="versionId",
* in="path",
* description="The Version ID to Edit",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="playerShowVersion",
* in="formData",
* description="The Name of the player version application, this will be displayed in Version dropdowns in Display Profile and Display",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="version",
* in="formData",
* description="The Version number",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="code",
* in="formData",
* description="The Code number",
* type="integer",
* required=false
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/Media")
* )
* )
*/
public function edit($versionId)
{
$version = $this->playerVersionFactory->getById($versionId);
$media = $this->mediaFactory->getById($version->mediaId);
if (!$this->getUser()->checkEditable($media))
throw new AccessDeniedException();
$version->version = $this->getSanitizer()->getString('version');
$version->code = $this->getSanitizer()->getInt('code');
$version->playerShowVersion = $this->getSanitizer()->getString('playerShowVersion');
$version->save();
// Return
$this->getState()->hydrate([
'message' => sprintf(__('Edited %s'), $version->playerShowVersion),
'id' => $version->versionId,
'data' => $version
]);
}
/**
* Install Route for SSSP XML
* @throws \Xibo\Exception\NotFoundException
*/
public function getSsspInstall()
{
// Get the default SSSP display profile
$profile = $this->displayProfileFactory->getDefaultByType('sssp');
// See if it has a version file (if not or we can't load it, 404)
$mediaId = $profile->getSetting('versionMediaId');
if ($mediaId !== null) {
$media = $this->mediaFactory->getById($mediaId);
$versionInformation = $this->playerVersionFactory->getByMediaId($mediaId);
$this->outputSsspXml($versionInformation->version . '.' . $versionInformation->code, $media->fileSize);
} else {
$app = $this->getApp();
$app->status(404);
}
$this->setNoOutput(true);
}
/**
* Install Route for SSSP WGT
* @throws \Xibo\Exception\NotFoundException
*/
public function getSsspInstallDownload()
{
// Get the default SSSP display profile
$profile = $this->displayProfileFactory->getDefaultByType('sssp');
// See if it has a version file (if not or we can't load it, 404)
$mediaId = $profile->getSetting('versionMediaId');
if ($mediaId !== null) {
$media = $this->mediaFactory->getById($mediaId);
// Create a widget from media and call getResource on it
$widget = $this->moduleFactory->createWithMedia($media);
$widget->getResource(0);
} else {
$app = $this->getApp();
$app->status(404);
}
$this->setNoOutput(true);
}
/**
* Upgrade Route for SSSP XML
* @param string $nonce
* @throws InvalidArgumentException
* @throws NotFoundException
* @throws \Xibo\Exception\ConfigurationException
*/
public function getSssp($nonce)
{
// Use the cache to get the displayId for this nonce
$cache = $this->pool->getItem('/playerVersion/' . $nonce);
if ($cache->isMiss()) {
$app = $this->getApp();
$app->status(404);
$this->setNoOutput(true);
return;
}
$displayId = $cache->get();
// Get the Display
$display = $this->displayFactory->getById($displayId);
// Check if display is SSSP, throw Exception if it's not
if ($display->clientType != 'sssp') {
throw new InvalidArgumentException(__('File available only for SSSP displays'), 'clientType');
}
// Add the correct header
$app = $this->getApp();
$app->response()->header('content-type', 'application/xml');
// get the media ID from display profile
$mediaId = $display->getSetting('versionMediaId', null, ['displayOverride' => true]);
if ($mediaId !== null) {
$media = $this->mediaFactory->getById($mediaId);
$versionInformation = $this->playerVersionFactory->getByMediaId($mediaId);
$this->outputSsspXml($versionInformation->version . '.' . $versionInformation->code, $media->fileSize);
} else {
$app = $this->getApp();
$app->status(404);
}
$this->setNoOutput(true);
}
/**
* Upgrade Route for SSSP WGT
* @param string $nonce
* @throws NotFoundException
*/
public function getVersionFile($nonce)
{
// Use the cache to get the displayId for this nonce
$cache = $this->pool->getItem('/playerVersion/' . $nonce);
if ($cache->isMiss()) {
$app = $this->getApp();
$app->status(404);
$this->setNoOutput(true);
return;
}
$displayId = $cache->get();
// Get display and media
$display = $this->displayFactory->getById($displayId);
$mediaId = $display->getSetting('versionMediaId', null, ['displayOverride' => true]);
if ($mediaId !== null) {
$media = $this->mediaFactory->getById($mediaId);
// Create a widget from media and call getResource on it
$widget = $this->moduleFactory->createWithMedia($media);
$widget->getResource($displayId);
} else {
$app = $this->getApp();
$app->status(404);
}
$this->setNoOutput(true);
}
/**
* Output the SSP XML
* @param $version
* @param $size
* @param $widgetName
*/
private function outputSsspXml($version, $size)
{
// create sssp_config XML file with provided information
$ssspDocument = new \DOMDocument('1.0', 'UTF-8');
$versionNode = $ssspDocument->createElement('widget');
$version = $ssspDocument->createElement('ver', $version);
$size = $ssspDocument->createElement('size', $size);
// Our widget name is always sssp_dl (this is appended to both the install and upgrade routes)
$name = $ssspDocument->createElement('widgetname', 'sssp_dl');
$ssspDocument->appendChild($versionNode);
$versionNode->appendChild($version);
$versionNode->appendChild($size);
$versionNode->appendChild($name);
$versionNode->appendChild($ssspDocument->createElement('webtype', 'tizen'));
$ssspDocument->formatOutput = true;
$this->getApp()->response()->header('Content-Type', 'application/xml');
echo $ssspDocument->saveXML();
}
} Task.php 0000644 00000042651 14716415766 0006210 0 ustar 00 .
*/
namespace Xibo\Controller;
use Stash\Interfaces\PoolInterface;
use Xibo\Exception\NotFoundException;
use Xibo\Factory\DisplayFactory;
use Xibo\Factory\LayoutFactory;
use Xibo\Factory\MediaFactory;
use Xibo\Factory\NotificationFactory;
use Xibo\Factory\TaskFactory;
use Xibo\Factory\UserFactory;
use Xibo\Factory\UserGroupFactory;
use Xibo\Factory\UserNotificationFactory;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
use Xibo\Storage\StorageServiceInterface;
use Xibo\Storage\TimeSeriesStoreInterface;
use Xibo\XTR\TaskInterface;
/**
* Class Task
* @package Xibo\Controller
*/
class Task extends Base
{
/** @var TaskFactory */
private $taskFactory;
/** @var StorageServiceInterface */
private $store;
/** @var TimeSeriesStoreInterface */
private $timeSeriesStore;
/** @var PoolInterface */
private $pool;
/** @var UserFactory */
private $userFactory;
/** @var UserGroupFactory */
private $userGroupFactory;
/** @var LayoutFactory */
private $layoutFactory;
/** @var DisplayFactory */
private $displayFactory;
/** @var MediaFactory */
private $mediaFactory;
/** @var NotificationFactory */
private $notificationFactory;
/** @var UserNotificationFactory */
private $userNotificationFactory;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param StorageServiceInterface $store
* @param TimeSeriesStoreInterface $timeSeriesStore
* @param PoolInterface $pool
* @param TaskFactory $taskFactory
* @param UserFactory $userFactory
* @param UserGroupFactory $userGroupFactory
* @param LayoutFactory $layoutFactory
* @param DisplayFactory $displayFactory
* @param MediaFactory $mediaFactory
* @param NotificationFactory $notificationFactory
* @param UserNotificationFactory $userNotificationFactory
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $store, $timeSeriesStore, $pool, $taskFactory, $userFactory, $userGroupFactory, $layoutFactory, $displayFactory, $mediaFactory, $notificationFactory, $userNotificationFactory)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->taskFactory = $taskFactory;
$this->store = $store;
$this->timeSeriesStore = $timeSeriesStore;
$this->userGroupFactory = $userGroupFactory;
$this->pool = $pool;
$this->userFactory = $userFactory;
$this->layoutFactory = $layoutFactory;
$this->displayFactory = $displayFactory;
$this->mediaFactory = $mediaFactory;
$this->notificationFactory = $notificationFactory;
$this->userNotificationFactory = $userNotificationFactory;
}
/**
* Display Page
*/
public function displayPage()
{
$this->getState()->template = 'task-page';
}
/**
* Grid
*/
public function grid()
{
$tasks = $this->taskFactory->query($this->gridRenderSort(), $this->gridRenderFilter());
foreach ($tasks as $task) {
/** @var \Xibo\Entity\Task $task */
$task->nextRunDt = $task->nextRunDate();
if ($this->isApi())
continue;
$task->includeProperty('buttons');
$task->buttons[] = array(
'id' => 'task_button_run.now',
'url' => $this->urlFor('task.runNow.form', ['id' => $task->taskId]),
'text' => __('Run Now')
);
// Don't show any edit buttons if the config is locked.
if ($this->getConfig()->getSetting('TASK_CONFIG_LOCKED_CHECKB') == 1 || $this->getConfig()->getSetting('TASK_CONFIG_LOCKED_CHECKB') == 'Checked')
continue;
// Edit Button
$task->buttons[] = array(
'id' => 'task_button_edit',
'url' => $this->urlFor('task.edit.form', ['id' => $task->taskId]),
'text' => __('Edit')
);
// Delete Button
$task->buttons[] = array(
'id' => 'task_button_delete',
'url' => $this->urlFor('task.delete.form', ['id' => $task->taskId]),
'text' => __('Delete')
);
}
$this->getState()->template = 'grid';
$this->getState()->recordsTotal = $this->taskFactory->countLast();
$this->getState()->setData($tasks);
}
/**
* Add form
*/
public function addForm()
{
// Provide a list of possible task classes by searching for .task file in /tasks and /custom
$data = ['tasksAvailable' => []];
// Do we have any modules to install?!
if ($this->getConfig()->getSetting('TASK_CONFIG_LOCKED_CHECKB') != 1 && $this->getConfig()->getSetting('TASK_CONFIG_LOCKED_CHECKB') != 'Checked') {
// Get a list of matching files in the modules folder
$files = array_merge(glob(PROJECT_ROOT . '/tasks/*.task'), glob(PROJECT_ROOT . '/custom/*.task'));
// Add to the list of available tasks
foreach ($files as $file) {
$config = json_decode(file_get_contents($file));
$config->file = str_replace_first(PROJECT_ROOT, '', $file);
$data['tasksAvailable'][] = $config;
}
}
$this->getState()->template = 'task-form-add';
$this->getState()->setData($data);
}
/**
* Add
*/
public function add()
{
$task = $this->taskFactory->create();
$task->name = $this->getSanitizer()->getString('name');
$task->configFile = $this->getSanitizer()->getString('file');
$task->schedule = $this->getSanitizer()->getString('schedule');
$task->status = \Xibo\Entity\Task::$STATUS_IDLE;
$task->lastRunStatus = 0;
$task->isActive = 0;
$task->runNow = 0;
$task->setClassAndOptions();
$task->save();
// Return
$this->getState()->hydrate([
'httpStatus' => 201,
'message' => sprintf(__('Added %s'), $task->name),
'id' => $task->taskId,
'data' => $task
]);
}
/**
* Edit Form
* @param $taskId
*/
public function editForm($taskId)
{
$task = $this->taskFactory->getById($taskId);
$task->setClassAndOptions();
$this->getState()->template = 'task-form-edit';
$this->getState()->setData([
'task' => $task
]);
}
/**
* @param $taskId
*/
public function edit($taskId)
{
$task = $this->taskFactory->getById($taskId);
$task->setClassAndOptions();
$task->name = $this->getSanitizer()->getString('name');
$task->schedule = $this->getSanitizer()->getString('schedule');
$task->isActive = $this->getSanitizer()->getCheckbox('isActive');
// Loop through each option and see if a new value is provided
foreach ($task->options as $option => $value) {
$provided = $this->getSanitizer()->getString($option);
if ($provided !== null) {
$this->getLog()->debug('Setting ' . $option . ' to ' . $provided);
$task->options[$option] = $provided;
}
}
$this->getLog()->debug('New options = ' . var_export($task->options, true));
$task->save();
// Return
$this->getState()->hydrate([
'httpStatus' => 200,
'message' => sprintf(__('Edited %s'), $task->name),
'id' => $task->taskId,
'data' => $task
]);
}
/**
* Delete Form
* @param $taskId
*/
public function deleteForm($taskId)
{
$task = $this->taskFactory->getById($taskId);
$this->getState()->template = 'task-form-delete';
$this->getState()->setData([
'task' => $task
]);
}
/**
* @param $taskId
*/
public function delete($taskId)
{
$task = $this->taskFactory->getById($taskId);
$task->delete();
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Deleted %s'), $task->name)
]);
}
/**
* Delete Form
* @param $taskId
*/
public function runNowForm($taskId)
{
$task = $this->taskFactory->getById($taskId);
$this->getState()->template = 'task-form-run-now';
$this->getState()->setData([
'task' => $task
]);
}
/**
* @param $taskId
*/
public function runNow($taskId)
{
$task = $this->taskFactory->getById($taskId);
$task->runNow = 1;
$task->save();
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Run Now set on %s'), $task->name)
]);
}
/**
* @param $taskId
* @throws \Exception
*/
public function run($taskId)
{
// Get this task
$task = $this->taskFactory->getById($taskId);
// Set to running
$this->getLog()->debug('Running Task ' . $task->name . ' [' . $task->taskId . '], Class = ' . $task->class);
// Run
try {
// Instantiate
if (!class_exists($task->class))
throw new NotFoundException('Task with class name ' . $task->class . ' not found');
/** @var TaskInterface $taskClass */
$taskClass = new $task->class();
// Record the start time
$start = time();
$taskClass
->setSanitizer($this->getSanitizer())
->setUser($this->getUser())
->setConfig($this->getConfig())
->setLogger($this->getLog())
->setDate($this->getDate())
->setPool($this->pool)
->setStore($this->store)
->setTimeSeriesStore($this->timeSeriesStore)
->setFactories($this->getApp()->container)
->setTask($task)
->run();
// We should commit anything this task has done
$this->store->commitIfNecessary();
// Collect results
$task->lastRunDuration = time() - $start;
$task->lastRunMessage = $taskClass->getRunMessage();
$task->lastRunStatus = \Xibo\Entity\Task::$STATUS_SUCCESS;
}
catch (\Exception $e) {
$this->getLog()->error($e->getMessage());
$this->getLog()->debug($e->getTraceAsString());
// We should rollback anything we've done so far
if ($this->store->getConnection()->inTransaction())
$this->store->getConnection()->rollBack();
// Set the results to error
$task->lastRunMessage = $e->getMessage();
$task->lastRunStatus = \Xibo\Entity\Task::$STATUS_ERROR;
}
$task->lastRunDt = $this->getDate()->getLocalDate(null, 'U');
$task->runNow = 0;
// Save (on the XTR connection)
$task->save(['connection' => 'xtr', 'validate' => false, 'reconnect' => true]);
$this->getLog()->debug('Finished Task ' . $task->name . ' [' . $task->taskId . '] Run Dt: ' . $this->getDate()->getLocalDate());
// No output
$this->setNoOutput(true);
}
/**
* Poll for tasks to run
* continue polling until there aren't any more to run
* allow for multiple polls to run at the same time
*/
public function poll()
{
$this->getLog()->debug('XTR poll started');
// Process timeouts
$this->pollProcessTimeouts();
// Keep track of tasks we've run during this poll period
// we will use this as a catch all so that we do not run a task more than once.
$tasksRun = [];
// The getting/updating of tasks runs in a separate DB connection
$sqlForActiveTasks = 'SELECT taskId, `schedule`, runNow, lastRunDt FROM `task` WHERE isActive = 1 AND `status` <> :status ORDER BY lastRunDuration';
// Update statements
$updateSth = 'UPDATE `task` SET status = :status WHERE taskId = :taskId';
// We loop until we have gone through without running a task
// we select new tasks each time
while (true) {
// Get tasks that aren't running currently
$tasks = $this->store->select($sqlForActiveTasks, ['status' => \Xibo\Entity\Task::$STATUS_RUNNING], 'xtr', true);
// Assume we wont run anything
$taskRun = false;
foreach ($tasks as $task) {
/** @var \Xibo\Entity\Task $task */
$taskId = $task['taskId'];
// Skip tasks that have already been run
if (in_array($taskId, $tasksRun)) {
continue;
}
$cron = \Cron\CronExpression::factory($task['schedule']);
// Is the next run date of this event earlier than now, or is the task set to runNow
$nextRunDt = $cron->getNextRunDate(\DateTime::createFromFormat('U', $task['lastRunDt']))->format('U');
if ($task['runNow'] == 1 || $nextRunDt <= time()) {
$this->getLog()->info('Running Task ' . $taskId);
// Set to running
$this->store->update('UPDATE `task` SET status = :status, lastRunStartDt = :lastRunStartDt WHERE taskId = :taskId', [
'taskId' => $taskId,
'status' => \Xibo\Entity\Task::$STATUS_RUNNING,
'lastRunStartDt' => $this->getDate()->getLocalDate(null, 'U')
], 'xtr');
$this->store->commitIfNecessary('xtr');
// Pass to run.
try {
// Run is isolated
$this->run($taskId);
// Set to idle
$this->store->update($updateSth, ['taskId' => $taskId, 'status' => \Xibo\Entity\Task::$STATUS_IDLE], 'xtr', true);
} catch (\Exception $exception) {
// This is a completely unexpected exception, and we should disable the task
$this->getLog()->error('Task run error for taskId ' . $taskId . '. E = ' . $exception->getMessage());
// Set to error
$this->store->update('
UPDATE `task` SET status = :status, isActive = :isActive, lastRunMessage = :lastRunMessage
WHERE taskId = :taskId
', [
'taskId' => $taskId,
'status' => \Xibo\Entity\Task::$STATUS_ERROR,
'isActive' => 0,
'lastRunMessage' => 'Fatal Error: ' . $exception->getMessage()
], 'xtr', true);
}
$this->store->commitIfNecessary('xtr');
// We have run a task
$taskRun = true;
// We've run this task during this polling period
$tasksRun[] = $taskId;
break;
}
}
// If we haven't run a task, then stop
if (!$taskRun)
break;
}
$this->getLog()->debug('XTR poll stopped');
}
private function pollProcessTimeouts()
{
$db = $this->store->getConnection('xtr');
// Get timed out tasks and deal with them
$command = $db->prepare('
SELECT taskId, lastRunStartDt
FROM `task`
WHERE isActive = 1
AND `status` = :status
AND lastRunStartDt < :timeout
');
$updateFatalErrorSth = $db->prepare('UPDATE `task` SET `status` = :status WHERE taskId = :taskId');
$command->execute([
'status' => \Xibo\Entity\Task::$STATUS_RUNNING,
'timeout' => $this->getDate()->parse()->subHours(12)->format('U')
]);
foreach ($command->fetchAll(\PDO::FETCH_ASSOC) as $task) {
$this->getLog()->error('Timed out task detected, marking as timed out. TaskId: ' . $task['taskId']);
$updateFatalErrorSth->execute([
'taskId' => intval($task['taskId']),
'status' => \Xibo\Entity\Task::$STATUS_TIMEOUT
]);
}
}
} Command.php 0000644 00000025163 14716415766 0006663 0 ustar 00 setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->commandFactory = $commandFactory;
$this->displayProfileFactory = $displayProfileFactory;
}
public function displayPage()
{
$this->getState()->template = 'command-page';
}
/**
* @SWG\Get(
* path="/command",
* operationId="commandSearch",
* tags={"command"},
* summary="Command Search",
* description="Search this users Commands",
* @SWG\Parameter(
* name="commandId",
* in="query",
* description="Filter by Command Id",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="command",
* in="query",
* description="Filter by Command Name",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="code",
* in="query",
* description="Filter by Command Code",
* type="string",
* required=false
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(
* type="array",
* @SWG\Items(ref="#/definitions/Command")
* )
* )
* )
*/
function grid()
{
$filter = [
'commandId' => $this->getSanitizer()->getInt('commandId'),
'command' => $this->getSanitizer()->getString('command'),
'code' => $this->getSanitizer()->getString('code')
];
$commands = $this->commandFactory->query($this->gridRenderSort(), $this->gridRenderFilter($filter));
foreach ($commands as $command) {
/* @var \Xibo\Entity\Command $command */
if ($this->isApi())
break;
$command->includeProperty('buttons');
// Command edit
if ($this->getUser()->checkEditable($command)) {
$command->buttons[] = array(
'id' => 'command_button_edit',
'url' => $this->urlFor('command.edit.form', ['id' => $command->commandId]),
'text' => __('Edit')
);
}
// Command delete
if ($this->getUser()->checkDeleteable($command)) {
$command->buttons[] = array(
'id' => 'command_button_delete',
'url' => $this->urlFor('command.delete.form', ['id' => $command->commandId]),
'text' => __('Delete'),
'multi-select' => true,
'dataAttributes' => array(
array('name' => 'commit-url', 'value' => $this->urlFor('command.delete', ['id' => $command->commandId])),
array('name' => 'commit-method', 'value' => 'delete'),
array('name' => 'id', 'value' => 'command_button_delete'),
array('name' => 'text', 'value' => __('Delete')),
array('name' => 'rowtitle', 'value' => $command->command)
)
);
}
// Command Permissions
if ($this->getUser()->checkPermissionsModifyable($command)) {
// Permissions button
$command->buttons[] = array(
'id' => 'command_button_permissions',
'url' => $this->urlFor('user.permissions.form', ['entity' => 'Command', 'id' => $command->commandId]),
'text' => __('Permissions')
);
}
}
$this->getState()->template = 'grid';
$this->getState()->recordsTotal = $this->commandFactory->countLast();
$this->getState()->setData($commands);
}
/**
* Add Command Form
*/
public function addForm()
{
$this->getState()->template = 'command-form-add';
}
/**
* Edit Command
* @param int $commandId
* @throws XiboException
*/
public function editForm($commandId)
{
$command = $this->commandFactory->getById($commandId);
if (!$this->getUser()->checkEditable($command)) {
throw new AccessDeniedException();
}
$this->getState()->template = 'command-form-edit';
$this->getState()->setData([
'command' => $command
]);
}
/**
* Delete Command
* @param int $commandId
* @throws XiboException
*/
public function deleteForm($commandId)
{
$command = $this->commandFactory->getById($commandId);
if (!$this->getUser()->checkDeleteable($command)) {
throw new AccessDeniedException();
}
$this->getState()->template = 'command-form-delete';
$this->getState()->setData([
'command' => $command
]);
}
/**
* Add Command
*
* @SWG\Post(
* path="/command",
* operationId="commandAdd",
* tags={"command"},
* summary="Command Add",
* description="Add a Command",
* @SWG\Parameter(
* name="command",
* in="formData",
* description="The Command Name",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="description",
* in="formData",
* description="A description for the command",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="code",
* in="formData",
* description="A unique code for this command",
* type="string",
* required=true
* ),
* @SWG\Response(
* response=201,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/Command"),
* @SWG\Header(
* header="Location",
* description="Location of the new record",
* type="string"
* )
* )
* )
*/
public function add()
{
$command = $this->commandFactory->create();
$command->command = $this->getSanitizer()->getString('command');
$command->description = $this->getSanitizer()->getString('description');
$command->code = $this->getSanitizer()->getString('code');
$command->userId = $this->getUser()->userId;
$command->save();
// Return
$this->getState()->hydrate([
'httpStatus' => 201,
'message' => sprintf(__('Added %s'), $command->command),
'id' => $command->commandId,
'data' => $command
]);
}
/**
* Edit Command
* @param int $commandId
*
* @SWG\Put(
* path="/command/{commandId}",
* operationId="commandEdit",
* tags={"command"},
* summary="Edit Command",
* description="Edit the provided command",
* @SWG\Parameter(
* name="commandId",
* in="path",
* description="The Command Id to Edit",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="command",
* in="formData",
* description="The Command Name",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="description",
* in="formData",
* description="A description for the command",
* type="string",
* required=false
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/Command")
* )
* )
*
* @throws XiboException
*/
public function edit($commandId)
{
$command = $this->commandFactory->getById($commandId);
if (!$this->getUser()->checkEditable($command)) {
throw new AccessDeniedException();
}
$command->command = $this->getSanitizer()->getString('command');
$command->description = $this->getSanitizer()->getString('description');
$command->save();
// Return
$this->getState()->hydrate([
'httpStatus' => 200,
'message' => sprintf(__('Edited %s'), $command->command),
'id' => $command->commandId,
'data' => $command
]);
}
/**
* Delete Command
* @param int $commandId
*
* @SWG\Delete(
* path="/command/{commandId}",
* operationId="commandDelete",
* tags={"command"},
* summary="Delete Command",
* description="Delete the provided command",
* @SWG\Parameter(
* name="commandId",
* in="path",
* description="The Command Id to Delete",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*/
public function delete($commandId)
{
$command = $this->commandFactory->getById($commandId);
if (!$this->getUser()->checkDeleteable($command)) {
throw new AccessDeniedException();
}
$command->setChildObjectDependencies($this->displayProfileFactory);
$command->delete();
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Deleted %s'), $command->command)
]);
}
} DisplayProfile.php 0000644 00000045356 14716415766 0010241 0 ustar 00 .
*/
namespace Xibo\Controller;
use Stash\Interfaces\PoolInterface;
use Xibo\Exception\AccessDeniedException;
use Xibo\Exception\NotFoundException;
use Xibo\Factory\CommandFactory;
use Xibo\Factory\DayPartFactory;
use Xibo\Factory\DisplayProfileFactory;
use Xibo\Factory\PlayerVersionFactory;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
/**
* Class DisplayProfile
* @package Xibo\Controller
*/
class DisplayProfile extends Base
{
use DisplayProfileConfigFields;
/** @var PoolInterface */
private $pool;
/**
* @var DayPartFactory
*/
private $dayPartFactory;
/**
* @var DisplayProfileFactory
*/
private $displayProfileFactory;
/**
* @var CommandFactory
*/
private $commandFactory;
/** @var PlayerVersionFactory */
private $playerVersionFactory;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param PoolInterface $pool
* @param DisplayProfileFactory $displayProfileFactory
* @param CommandFactory $commandFactory
* @param PlayerVersionFactory $playerVersionFactory
* @param DayPartFactory $dayPartFactory
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $pool, $displayProfileFactory, $commandFactory, $playerVersionFactory, $dayPartFactory)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->pool = $pool;
$this->displayProfileFactory = $displayProfileFactory;
$this->commandFactory = $commandFactory;
$this->playerVersionFactory = $playerVersionFactory;
$this->dayPartFactory = $dayPartFactory;
}
/**
* Include display page template page based on sub page selected
*/
function displayPage()
{
$this->getState()->template = 'displayprofile-page';
}
/**
* @SWG\Get(
* path="/displayprofile",
* operationId="displayProfileSearch",
* tags={"displayprofile"},
* summary="Display Profile Search",
* description="Search this users Display Profiles",
* @SWG\Parameter(
* name="displayProfileId",
* in="query",
* description="Filter by DisplayProfile Id",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="displayProfile",
* in="query",
* description="Filter by DisplayProfile Name",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="type",
* in="query",
* description="Filter by DisplayProfile Type (windows|android|lg)",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="embed",
* in="query",
* description="Embed related data such as config,commands,configWithDefault",
* type="string",
* required=false
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(
* type="array",
* @SWG\Items(ref="#/definitions/DisplayProfile")
* )
* )
* )
* @throws \Xibo\Exception\NotFoundException
*/
function grid()
{
$filter = [
'displayProfileId' => $this->getSanitizer()->getInt('displayProfileId'),
'displayProfile' => $this->getSanitizer()->getString('displayProfile'),
'useRegexForName' => $this->getSanitizer()->getCheckbox('useRegexForName'),
'type' => $this->getSanitizer()->getString('type')
];
$embed = ($this->getSanitizer()->getString('embed') != null) ? explode(',', $this->getSanitizer()->getString('embed')) : [];
$profiles = $this->displayProfileFactory->query($this->gridRenderSort(), $this->gridRenderFilter($filter));
if (count($profiles) <= 0)
throw new NotFoundException('Display Profile not found', 'DisplayProfile');
foreach ($profiles as $profile) {
/* @var \Xibo\Entity\DisplayProfile $profile */
// Load the config
$profile->load([
'loadConfig' => in_array('config', $embed),
'loadCommands' => in_array('commands', $embed),
]);
if (in_array('configWithDefault', $embed)) {
$profile->includeProperty('configDefault');
}
if (!in_array('config', $embed)) {
$profile->excludeProperty('config');
}
if ($this->isApi()) {
continue;
}
$profile->includeProperty('buttons');
// Default Layout
$profile->buttons[] = array(
'id' => 'displayprofile_button_edit',
'url' => $this->urlFor('displayProfile.edit.form', ['id' => $profile->displayProfileId]),
'text' => __('Edit')
);
$profile->buttons[] = array(
'id' => 'displayprofile_button_copy',
'url' => $this->urlFor('displayProfile.copy.form', ['id' => $profile->displayProfileId]),
'text' => __('Copy')
);
if ($this->getUser()->checkDeleteable($profile)) {
$profile->buttons[] = array(
'id' => 'displayprofile_button_delete',
'url' => $this->urlFor('displayProfile.delete.form', ['id' => $profile->displayProfileId]),
'text' => __('Delete')
);
}
}
$this->getState()->template = 'grid';
$this->getState()->recordsTotal = $this->displayProfileFactory->countLast();
$this->getState()->setData($profiles);
}
/**
* Display Profile Add Form
*/
function addForm()
{
$this->getState()->template = 'displayprofile-form-add';
}
/**
* Display Profile Add
*
* @SWG\Post(
* path="/displayprofile",
* operationId="displayProfileAdd",
* tags={"displayprofile"},
* summary="Add Display Profile",
* description="Add a Display Profile",
* @SWG\Parameter(
* name="name",
* in="formData",
* description="The Name of the Display Profile",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="type",
* in="formData",
* description="The Client Type this Profile will apply to",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="isDefault",
* in="formData",
* description="Flag indicating if this is the default profile for the client type",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=201,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/DisplayProfile"),
* @SWG\Header(
* header="Location",
* description="Location of the new record",
* type="string"
* )
* )
* )
*/
public function add()
{
$displayProfile = $this->displayProfileFactory->createEmpty();
$displayProfile->name = $this->getSanitizer()->getString('name');
$displayProfile->type = $this->getSanitizer()->getString('type');
$displayProfile->isDefault = $this->getSanitizer()->getCheckbox('isDefault');
$displayProfile->userId = $this->getUser()->userId;
// We do not set any config at this point, so that unless the user chooses to edit the display profile
// our defaults in the Display Profile Entity take effect
$displayProfile->save();
// Return
$this->getState()->hydrate([
'httpStatus' => 201,
'message' => sprintf(__('Added %s'), $displayProfile->name),
'id' => $displayProfile->displayProfileId,
'data' => $displayProfile
]);
}
/**
* Edit Profile Form
* @param int $displayProfileId
* @throws \Xibo\Exception\XiboException
*/
public function editForm($displayProfileId)
{
// Create a form out of the config object.
$displayProfile = $this->displayProfileFactory->getById($displayProfileId);
// Check permissions
if ($this->getUser()->userTypeId != 1 && $this->getUser()->userId != $displayProfile->userId) {
throw new AccessDeniedException(__('You do not have permission to edit this profile'));
}
// Player Version Setting
$versionId = $displayProfile->getSetting('versionMediaId');
$playerVersions = [];
// Daypart - Operating Hours
$dayPartId = $displayProfile->getSetting('dayPartId');
$dayparts = [];
// Get the Player Version for this display profile type
if ($versionId !== null) {
try {
$playerVersions[] = $this->playerVersionFactory->getByMediaId($versionId);
} catch (NotFoundException $e) {
$this->getLog()->debug('Unknown versionId set on Display Profile. ' . $displayProfile->displayProfileId);
}
}
if ($dayPartId !== null) {
try {
$dayparts[] = $this->dayPartFactory->getById($dayPartId);
} catch (NotFoundException $e) {
$this->getLog()->debug('Unknown dayPartId set on Display Profile. ' . $displayProfile->displayProfileId);
}
}
// Get a list of unassigned Commands
$unassignedCommands = array_udiff($this->commandFactory->query(), $displayProfile->commands, function($a, $b) {
/** @var \Xibo\Entity\Command $a */
/** @var \Xibo\Entity\Command $b */
return $a->getId() - $b->getId();
});
$this->getState()->template = 'displayprofile-form-edit';
$this->getState()->setData([
'displayProfile' => $displayProfile,
'commands' => array_merge($displayProfile->commands, $unassignedCommands),
'versions' => $playerVersions,
'lockOptions' => json_decode($displayProfile->getSetting('lockOptions', '[]'), true),
'dayParts' => $dayparts
]);
}
/**
* Edit
* @param $displayProfileId
* @throws \Xibo\Exception\XiboException
*
* @SWG\Put(
* path="/displayprofile/{displayProfileId}",
* operationId="displayProfileEdit",
* tags={"displayprofile"},
* summary="Edit Display Profile",
* description="Edit a Display Profile",
* @SWG\Parameter(
* name="displayProfileId",
* in="path",
* description="The Display Profile ID",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="name",
* in="formData",
* description="The Name of the Display Profile",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="type",
* in="formData",
* description="The Client Type this Profile will apply to",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="isDefault",
* in="formData",
* description="Flag indicating if this is the default profile for the client type",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*/
public function edit($displayProfileId)
{
// Create a form out of the config object.
$displayProfile = $this->displayProfileFactory->getById($displayProfileId);
if ($this->getUser()->userTypeId != 1 && $this->getUser()->userId != $displayProfile->userId)
throw new AccessDeniedException(__('You do not have permission to edit this profile'));
$displayProfile->name = $this->getSanitizer()->getString('name');
$displayProfile->isDefault = $this->getSanitizer()->getCheckbox('isDefault');
// Different fields for each client type
$this->editConfigFields($displayProfile);
// Capture and update commands
foreach ($this->commandFactory->query() as $command) {
/* @var \Xibo\Entity\Command $command */
if ($this->getSanitizer()->getString('commandString_' . $command->commandId) != null) {
// Set and assign the command
$command->commandString = $this->getSanitizer()->getString('commandString_' . $command->commandId);
$command->validationString = $this->getSanitizer()->getString('validationString_' . $command->commandId, null);
$displayProfile->assignCommand($command);
} else {
$displayProfile->unassignCommand($command);
}
}
// Save the changes
$displayProfile->save();
// Clear the display cached
$this->pool->deleteItem('display/');
// Return
$this->getState()->hydrate([
'message' => sprintf(__('Edited %s'), $displayProfile->name),
'id' => $displayProfile->displayProfileId,
'data' => $displayProfile
]);
}
/**
* Delete Form
* @param int $displayProfileId
* @throws \Xibo\Exception\NotFoundException
*/
function deleteForm($displayProfileId)
{
// Create a form out of the config object.
$displayProfile = $this->displayProfileFactory->getById($displayProfileId);
if ($this->getUser()->userTypeId != 1 && $this->getUser()->userId != $displayProfile->userId)
throw new AccessDeniedException(__('You do not have permission to edit this profile'));
$this->getState()->template = 'displayprofile-form-delete';
$this->getState()->setData([
'displayProfile' => $displayProfile,
'help' => $this->getHelp()->link('DisplayProfile', 'Delete')
]);
}
/**
* Delete Display Profile
* @param int $displayProfileId
* @throws \Xibo\Exception\XiboException
*
* @SWG\Delete(
* path="/displayprofile/{displayProfileId}",
* operationId="displayProfileDelete",
* tags={"displayprofile"},
* summary="Delete Display Profile",
* description="Delete an existing Display Profile",
* @SWG\Parameter(
* name="displayProfileId",
* in="path",
* description="The Display Profile ID",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*/
function delete($displayProfileId)
{
// Create a form out of the config object.
$displayProfile = $this->displayProfileFactory->getById($displayProfileId);
if ($this->getUser()->userTypeId != 1 && $this->getUser()->userId != $displayProfile->userId) {
throw new AccessDeniedException(__('You do not have permission to delete this profile'));
}
$displayProfile->delete();
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Deleted %s'), $displayProfile->name)
]);
}
/**
* @param $displayProfileId
* @throws \Xibo\Exception\NotFoundException
*/
public function copyForm($displayProfileId)
{
// Create a form out of the config object.
$displayProfile = $this->displayProfileFactory->getById($displayProfileId);
if ($this->getUser()->userTypeId != 1 && $this->getUser()->userId != $displayProfile->userId)
throw new AccessDeniedException(__('You do not have permission to delete this profile'));
$this->getState()->template = 'displayprofile-form-copy';
$this->getState()->setData([
'displayProfile' => $displayProfile
]);
}
/**
* Copy Display Profile
* @param int $displayProfileId
* @throws \Xibo\Exception\XiboException
*
* @SWG\Post(
* path="/displayprofile/{displayProfileId}/copy",
* operationId="displayProfileCopy",
* tags={"displayprofile"},
* summary="Copy Display Profile",
* description="Copy an existing Display Profile",
* @SWG\Parameter(
* name="displayProfileId",
* in="path",
* description="The Display Profile ID",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="name",
* in="path",
* description="The name for the copy",
* type="string",
* required=true
* ),
* @SWG\Response(
* response=201,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/DisplayProfile"),
* @SWG\Header(
* header="Location",
* description="Location of the new record",
* type="string"
* )
* )
* )
*/
public function copy($displayProfileId)
{
// Create a form out of the config object.
$displayProfile = $this->displayProfileFactory->getById($displayProfileId);
if ($this->getUser()->userTypeId != 1 && $this->getUser()->userId != $displayProfile->userId)
throw new AccessDeniedException(__('You do not have permission to delete this profile'));
$new = clone $displayProfile;
$new->name = $this->getSanitizer()->getString('name');
$new->save();
// Return
$this->getState()->hydrate([
'httpStatus' => 201,
'message' => sprintf(__('Added %s'), $new->name),
'id' => $new->displayProfileId,
'data' => $new
]);
}
} Error.php 0000644 00000016745 14716415766 0006404 0 ustar 00 setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
}
/**
* @throws ConfigurationException
* @throws \Slim\Exception\Stop
* @throws \Xibo\Exception\ControllerNotImplemented
*/
public function notFound()
{
$app = $this->getApp();
// Not found controller happens outside the normal middleware stack for some reason
// Setup the translations for gettext
Translate::InitLocale($this->getConfig());
// Configure the locale for date/time
if (Translate::GetLocale(2) != '')
$this->getDate()->setLocale(Translate::GetLocale(2));
$this->getLog()->debug('Page Not Found. %s', $app->request()->getResourceUri());
$message = __('Page not found');
// Different action depending on the app name
switch ($app->getName()) {
case 'web':
// Set up theme
\Xibo\Middleware\Theme::setTheme($app);
if ($app->request()->isAjax()) {
$this->getState()->hydrate([
'success' => false,
'message' => $message,
'template' => ''
]);
}
else {
$app->flashNow('globalError', $message);
$this->getState()->template = 'not-found';
}
$this->render();
break;
case 'auth':
case 'api':
case 'test':
$this->getState()->hydrate([
'httpStatus' => 404,
'success' => false,
'message' => $message
]);
$this->render();
break;
case 'console':
case 'maint':
// Render the error page.
echo $message;
$app->stop();
break;
}
}
/**
* @param \Exception $e
* @throws ConfigurationException
* @throws \Slim\Exception\Stop
* @throws \Xibo\Exception\ControllerNotImplemented
*/
public function handler(\Exception $e)
{
$app = $this->getApp();
$handled = $this->handledError($e);
$app->commit = false;
if ($handled) {
$this->getLog()->debug($e->getMessage() . $e->getTraceAsString());
}
else {
// Log the full error
$this->getLog()->debug($e->getMessage() . $e->getTraceAsString());
$this->getLog()->error($e->getMessage() . ' Exception Type: ' . get_class($e));
}
// Different action depending on the app name
switch ($app->getName()) {
case 'web':
$message = ($handled) ? $e->getMessage() : __('Unexpected Error, please contact support.');
// Just in case our theme has not been set by the time the exception was raised.
$this->getState()->setData([
'theme' => $this->getConfig(),
'version' => Environment::$WEBSITE_VERSION_NAME
]);
if ($app->request()->isAjax()) {
$this->getState()->hydrate([
'success' => false,
'message' => $message,
'template' => ''
]);
}
else {
// Template depending on whether one exists for the type of exception
// get the exception class
$exceptionClass = 'error-' . strtolower(str_replace('\\', '-', get_class($e)));
// An upgrade might be pending
if ($e instanceof UpgradePendingException)
$exceptionClass = 'upgrade-in-progress-page';
$this->getLog()->debug('Loading error template ' . $exceptionClass);
if (file_exists(PROJECT_ROOT . '/views/' . $exceptionClass . '.twig')) {
$this->getState()->template = $exceptionClass;
} else {
$this->getState()->template = 'error';
}
$app->flashNow('globalError', $message);
}
$this->render();
break;
case 'auth':
case 'api':
$status = 500;
if ($e instanceof OAuthException) {
$status = $e->httpStatusCode;
foreach ($e->getHttpHeaders() as $header) {
$app->response()->header($header);
}
}
else if ($e instanceof \InvalidArgumentException) {
$status = 422;
}
else if (property_exists(get_class($e), 'httpStatusCode')) {
$status = $e->httpStatusCode;
}
$this->getState()->hydrate([
'httpStatus' => $status,
'success' => false,
'message' => (($handled) ? __($e->getMessage()) : __('Unexpected Error, please contact support.')),
'data' => (method_exists($e, 'getErrorData')) ? $e->getErrorData() : []
]);
$this->render();
break;
case 'console':
case 'maint':
// Render the error page.
if ($handled) {
echo $e->getMessage();
}
else
echo __('Unknown Error');
$app->stop();
break;
}
}
/**
* Determine if we are a handled exception
* @param $e
* @return bool
*/
private function handledError($e)
{
if (method_exists($e, 'handledException'))
return $e->handledException();
return ($e instanceof \InvalidArgumentException
|| $e instanceof OAuthException
|| $e instanceof FormExpiredException
|| $e instanceof AccessDeniedException
|| $e instanceof InstanceSuspendedException
|| $e instanceof UpgradePendingException
|| $e instanceof TokenExpiredException
);
}
} DisplayGroup.php 0000644 00000222043 14716415766 0007723 0 ustar 00 .
*/
namespace Xibo\Controller;
use Xibo\Entity\Display;
use Xibo\Exception\AccessDeniedException;
use Xibo\Exception\ConfigurationException;
use Xibo\Exception\InvalidArgumentException;
use Xibo\Exception\NotFoundException;
use Xibo\Exception\XiboException;
use Xibo\Factory\CampaignFactory;
use Xibo\Factory\CommandFactory;
use Xibo\Factory\DisplayFactory;
use Xibo\Factory\DisplayGroupFactory;
use Xibo\Factory\LayoutFactory;
use Xibo\Factory\MediaFactory;
use Xibo\Factory\ModuleFactory;
use Xibo\Factory\ScheduleFactory;
use Xibo\Factory\TagFactory;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\PlayerActionServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
use Xibo\XMR\ChangeLayoutAction;
use Xibo\XMR\CollectNowAction;
use Xibo\XMR\CommandAction;
use Xibo\XMR\OverlayLayoutAction;
use Xibo\XMR\RevertToSchedule;
/**
* Class DisplayGroup
* @package Xibo\Controller
*/
class DisplayGroup extends Base
{
/**
* @var PlayerActionServiceInterface
*/
private $playerAction;
/**
* @var DisplayGroupFactory
*/
private $displayGroupFactory;
/**
* @var DisplayFactory
*/
private $displayFactory;
/**
* @var ModuleFactory
*/
private $moduleFactory;
/**
* @var MediaFactory
*/
private $mediaFactory;
/**
* @var LayoutFactory
*/
private $layoutFactory;
/**
* @var CommandFactory
*/
private $commandFactory;
/**
* @var ScheduleFactory
*/
private $scheduleFactory;
/**
* @var TagFactory
*/
private $tagFactory;
/**
* @var CampaignFactory
*/
private $campaignFactory;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param PlayerActionServiceInterface $playerAction
* @param DisplayFactory $displayFactory
* @param DisplayGroupFactory $displayGroupFactory
* @param LayoutFactory $layoutFactory
* @param ModuleFactory $moduleFactory
* @param MediaFactory $mediaFactory
* @param CommandFactory $commandFactory
* @param ScheduleFactory $scheduleFactory
* @param TagFactory $tagFactory
* @param CampaignFactory $campaignFactory
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $playerAction, $displayFactory, $displayGroupFactory, $layoutFactory, $moduleFactory, $mediaFactory, $commandFactory, $scheduleFactory, $tagFactory, $campaignFactory)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->playerAction = $playerAction;
$this->displayFactory = $displayFactory;
$this->displayGroupFactory = $displayGroupFactory;
$this->layoutFactory = $layoutFactory;
$this->moduleFactory = $moduleFactory;
$this->mediaFactory = $mediaFactory;
$this->commandFactory = $commandFactory;
$this->scheduleFactory = $scheduleFactory;
$this->tagFactory = $tagFactory;
$this->campaignFactory = $campaignFactory;
}
/**
* Display Group Page Render
*/
public function displayPage()
{
$this->getState()->template = 'displaygroup-page';
}
/**
* @SWG\Get(
* path="/displaygroup",
* summary="Get Display Groups",
* tags={"displayGroup"},
* operationId="displayGroupSearch",
* @SWG\Parameter(
* name="displayGroupId",
* in="query",
* description="Filter by DisplayGroup Id",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="displayGroup",
* in="query",
* description="Filter by DisplayGroup Name",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="displayId",
* in="query",
* description="Filter by DisplayGroups containing a specific display",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="nestedDisplayId",
* in="query",
* description="Filter by DisplayGroups containing a specific display in there nesting",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="dynamicCriteria",
* in="query",
* description="Filter by DisplayGroups containing a specific dynamic criteria",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="isDisplaySpecific",
* in="query",
* description="Filter by whether the Display Group belongs to a Display or is user created",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="forSchedule",
* in="query",
* description="Should the list be refined for only those groups the User can Schedule against?",
* type="integer",
* required=false
* ),
* @SWG\Response(
* response=200,
* description="a successful response",
* @SWG\Schema(
* type="array",
* @SWG\Items(ref="#/definitions/DisplayGroup")
* ),
* @SWG\Header(
* header="X-Total-Count",
* description="The total number of records",
* type="integer"
* )
* )
* )
*/
public function grid()
{
$filter = [
'displayGroupId' => $this->getSanitizer()->getInt('displayGroupId'),
'displayGroup' => $this->getSanitizer()->getString('displayGroup'),
'useRegexForName' => $this->getSanitizer()->getCheckbox('useRegexForName'),
'displayId' => $this->getSanitizer()->getInt('displayId'),
'nestedDisplayId' => $this->getSanitizer()->getInt('nestedDisplayId'),
'dynamicCriteria' => $this->getSanitizer()->getString('dynamicCriteria'),
'tags' => $this->getSanitizer()->getString('tags'),
'exactTags' => $this->getSanitizer()->getCheckbox('exactTags'),
'useRegexForName' => $this->getSanitizer()->getCheckbox('useRegexForName'),
'isDisplaySpecific' => $this->getSanitizer()->getInt('isDisplaySpecific'),
'displayGroupIdMembers' => $this->getSanitizer()->getInt('displayGroupIdMembers'),
'userId' => $this->getSanitizer()->getInt('userId'),
'isDynamic' => $this->getSanitizer()->getInt('isDynamic')
];
$scheduleWithView = ($this->getConfig()->getSetting('SCHEDULE_WITH_VIEW_PERMISSION') == 1);
$displayGroups = $this->displayGroupFactory->query($this->gridRenderSort(), $this->gridRenderFilter($filter));
foreach ($displayGroups as $group) {
/* @var \Xibo\Entity\DisplayGroup $group */
// Check to see if we're getting this data for a Schedule attempt, or for a general list
if ($this->getSanitizer()->getCheckbox('forSchedule') == 1) {
// Can't schedule with view, but no edit permissions
if (!$scheduleWithView && !$this->getUser()->checkEditable($group))
continue;
}
if ($this->isApi())
continue;
$group->includeProperty('buttons');
if ($this->getUser()->checkEditable($group)) {
// Show the edit button, members button
if ($group->isDynamic == 0) {
// Group Members
$group->buttons[] = array(
'id' => 'displaygroup_button_group_members',
'url' => $this->urlFor('displayGroup.members.form', ['id' => $group->displayGroupId]),
'text' => __('Members')
);
$group->buttons[] = ['divider' => true];
}
// Edit
$group->buttons[] = array(
'id' => 'displaygroup_button_edit',
'url' => $this->urlFor('displayGroup.edit.form', ['id' => $group->displayGroupId]),
'text' => __('Edit')
);
$group->buttons[] = array(
'id' => 'displaygroup_button_copy',
'url' => $this->urlFor('displayGroup.copy.form', ['id' => $group->displayGroupId]),
'text' => __('Copy')
);
}
if ($this->getUser()->checkDeleteable($group)) {
// Show the delete button
$group->buttons[] = array(
'id' => 'displaygroup_button_delete',
'url' => $this->urlFor('displayGroup.delete.form', ['id' => $group->displayGroupId]),
'text' => __('Delete'),
'multi-select' => true,
'dataAttributes' => array(
array('name' => 'commit-url', 'value' => $this->urlFor('displayGroup.delete', ['id' => $group->displayGroupId])),
array('name' => 'commit-method', 'value' => 'delete'),
array('name' => 'id', 'value' => 'displaygroup_button_delete'),
array('name' => 'text', 'value' => __('Delete')),
array('name' => 'rowtitle', 'value' => $group->displayGroup),
['name' => 'form-callback', 'value' => 'setDeleteMultiSelectFormOpen'],
['name' => 'form-confirm', 'value' => true]
)
);
}
$group->buttons[] = ['divider' => true];
if ($this->getUser()->checkEditable($group)) {
// File Associations
$group->buttons[] = array(
'id' => 'displaygroup_button_fileassociations',
'url' => $this->urlFor('displayGroup.media.form', ['id' => $group->displayGroupId]),
'text' => __('Assign Files')
);
// Layout Assignments
$group->buttons[] = array(
'id' => 'displaygroup_button_layout_associations',
'url' => $this->urlFor('displayGroup.layout.form', ['id' => $group->displayGroupId]),
'text' => __('Assign Layouts')
);
}
if ($this->getUser()->checkPermissionsModifyable($group)) {
// Show the modify permissions button
$group->buttons[] = array(
'id' => 'displaygroup_button_permissions',
'url' => $this->urlFor('user.permissions.form', ['entity' => 'DisplayGroup', 'id' => $group->displayGroupId]),
'text' => __('Permissions')
);
}
if ($this->getUser()->checkEditable($group)) {
$group->buttons[] = ['divider' => true];
$group->buttons[] = array(
'id' => 'displaygroup_button_command',
'url' => $this->urlFor('displayGroup.command.form', ['id' => $group->displayGroupId]),
'text' => __('Send Command')
);
$group->buttons[] = array(
'id' => 'displaygroup_button_collectNow',
'url' => $this->urlFor('displayGroup.collectNow.form', ['id' => $group->displayGroupId]),
'text' => __('Collect Now')
);
}
}
$this->getState()->template = 'grid';
$this->getState()->recordsTotal = $this->displayGroupFactory->countLast();
$this->getState()->setData($displayGroups);
}
/**
* Shows an add form for a display group
*/
public function addForm()
{
$this->getState()->template = 'displaygroup-form-add';
$this->getState()->setData([
'help' => $this->getHelp()->link('DisplayGroup', 'Add')
]);
}
/**
* Shows an edit form for a display group
* @param int $displayGroupId
*/
public function editForm($displayGroupId)
{
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
if (!$this->getUser()->checkEditable($displayGroup))
throw new AccessDeniedException();
$tags = '';
$arrayOfTags = array_filter(explode(',', $displayGroup->tags));
$arrayOfTagValues = array_filter(explode(',', $displayGroup->tagValues));
for ($i=0; $igetState()->template = 'displaygroup-form-edit';
$this->getState()->setData([
'displayGroup' => $displayGroup,
'help' => $this->getHelp()->link('DisplayGroup', 'Edit'),
'tags' => $tags
]);
}
/**
* Shows the Delete Group Form
* @param int $displayGroupId
*/
function deleteForm($displayGroupId)
{
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
if (!$this->getUser()->checkDeleteable($displayGroup))
throw new AccessDeniedException();
$this->getState()->template = 'displaygroup-form-delete';
$this->getState()->setData([
'displayGroup' => $displayGroup,
'help' => $this->getHelp()->link('DisplayGroup', 'Delete')
]);
}
/**
* Display Group Members form
* @param int $displayGroupId
*/
public function membersForm($displayGroupId)
{
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
if (!$this->getUser()->checkEditable($displayGroup))
throw new AccessDeniedException();
// Displays in Group
$displaysAssigned = $this->displayFactory->getByDisplayGroupId($displayGroup->displayGroupId);
// Get all the DisplayGroups assigned to this Group directly
$groupsAssigned = $this->displayGroupFactory->getByParentId($displayGroup->displayGroupId);
$this->getState()->template = 'displaygroup-form-members';
$this->getState()->setData([
'displayGroup' => $displayGroup,
'extra' => [
'displaysAssigned' => $displaysAssigned,
'displayGroupsAssigned' => $groupsAssigned
],
'tree' => $this->displayGroupFactory->getRelationShipTree($displayGroupId),
'help' => $this->getHelp()->link('DisplayGroup', 'Members')
]);
}
/**
* Adds a Display Group
* @SWG\Post(
* path="/displaygroup",
* operationId="displayGroupAdd",
* tags={"displayGroup"},
* summary="Add a Display Group",
* description="Add a new Display Group to the CMS",
* @SWG\Parameter(
* name="displayGroup",
* in="formData",
* description="The Display Group Name",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="description",
* in="formData",
* description="The Display Group Description",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="tags",
* in="formData",
* description="A comma separated list of tags for this item",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="isDynamic",
* in="formData",
* description="Flag indicating whether this DisplayGroup is Dynamic",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="dynamicCriteria",
* in="formData",
* description="The filter criteria for this dynamic group. A comma separated set of regular expressions to apply",
* type="string",
* required=false
* ),
* @SWG\Response(
* response=201,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/DisplayGroup"),
* @SWG\Header(
* header="Location",
* description="Location of the new DisplayGroup",
* type="string"
* )
* )
* )
*/
public function add()
{
$displayGroup = $this->displayGroupFactory->createEmpty();
$displayGroup->setChildObjectDependencies($this->displayFactory, $this->layoutFactory, $this->mediaFactory, $this->scheduleFactory);
$displayGroup->displayGroup = $this->getSanitizer()->getString('displayGroup');
$displayGroup->description = $this->getSanitizer()->getString('description');
$displayGroup->tags = $this->tagFactory->tagsFromString($this->getSanitizer()->getString('tags'));
$displayGroup->isDynamic = $this->getSanitizer()->getCheckbox('isDynamic');
$displayGroup->dynamicCriteria = $this->getSanitizer()->getString('dynamicCriteria');
$displayGroup->dynamicCriteriaTags = $this->getSanitizer()->getString('dynamicCriteriaTags');
$displayGroup->userId = $this->getUser()->userId;
$displayGroup->save();
// Return
$this->getState()->hydrate([
'httpState' => 201,
'message' => sprintf(__('Added %s'), $displayGroup->displayGroup),
'id' => $displayGroup->displayGroupId,
'data' => $displayGroup
]);
}
/**
* Edits a Display Group
* @param int $displayGroupId
*
* @throws XiboException
* @throws \Xibo\Exception\NotFoundException
*
* @SWG\Put(
* path="/displaygroup/{displayGroupId}",
* operationId="displayGroupEdit",
* tags={"displayGroup"},
* summary="Edit a Display Group",
* description="Edit an existing Display Group identified by its Id",
* @SWG\Parameter(
* name="displayGroupId",
* type="integer",
* in="path",
* description="The displayGroupId to edit.",
* required=true
* ),
* @SWG\Parameter(
* name="displayGroup",
* in="formData",
* description="The Display Group Name",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="description",
* in="formData",
* description="The Display Group Description",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="tags",
* in="formData",
* description="A comma separated list of tags for this item",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="isDynamic",
* in="formData",
* description="Flag indicating whether this DisplayGroup is Dynamic",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="dynamicCriteria",
* in="formData",
* description="The filter criteria for this dynamic group. A command separated set of regular expressions to apply",
* type="string",
* required=false
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/DisplayGroup")
* )
* )
*/
public function edit($displayGroupId)
{
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
$preEditIsDynamic = $displayGroup->getOriginalValue('isDynamic');
if (!$this->getUser()->checkEditable($displayGroup)) {
throw new AccessDeniedException();
}
$displayGroup->setChildObjectDependencies($this->displayFactory, $this->layoutFactory, $this->mediaFactory, $this->scheduleFactory);
$displayGroup->displayGroup = $this->getSanitizer()->getString('displayGroup');
$displayGroup->description = $this->getSanitizer()->getString('description');
$displayGroup->replaceTags($this->tagFactory->tagsFromString($this->getSanitizer()->getString('tags')));
$displayGroup->isDynamic = $this->getSanitizer()->getCheckbox('isDynamic');
$displayGroup->dynamicCriteria = ($displayGroup->isDynamic == 1) ? $this->getSanitizer()->getString('dynamicCriteria') : null;
$displayGroup->dynamicCriteriaTags = ($displayGroup->isDynamic == 1) ? $this->getSanitizer()->getString('dynamicCriteriaTags') : null;
// if we have changed the type from dynamic to non-dynamic or other way around, clear display/dg members
if ($preEditIsDynamic != $displayGroup->isDynamic) {
$this->getLog()->debug('Display Group Id ' . $displayGroup->displayGroupId . ' switched is dynamic from ' . $preEditIsDynamic . ' To ' . $displayGroup->isDynamic . ' Clearing members for this Display Group.');
// get an array of assigned displays
$membersDisplays = $this->displayFactory->getByDisplayGroupId($displayGroupId);
// get an array of assigned display groups
$membersDisplayGroups = $this->displayGroupFactory->getByParentId($displayGroupId);
// unassign Displays
foreach ($membersDisplays as $display) {
$displayGroup->unassignDisplay($display);
}
// unassign Display Groups
foreach ($membersDisplayGroups as $dg) {
$displayGroup->unassignDisplayGroup($dg);
}
}
$displayGroup->save();
// Return
$this->getState()->hydrate([
'message' => sprintf(__('Edited %s'), $displayGroup->displayGroup),
'id' => $displayGroup->displayGroupId,
'data' => $displayGroup
]);
}
/**
* Deletes a Group
* @param int $displayGroupId
*
* @throws \Xibo\Exception\NotFoundException
*
* @SWG\Delete(
* path="/displaygroup/{displayGroupId}",
* operationId="displayGroupDelete",
* tags={"displayGroup"},
* summary="Delete a Display Group",
* description="Delete an existing Display Group identified by its Id",
* @SWG\Parameter(
* name="displayGroupId",
* type="integer",
* in="path",
* description="The displayGroupId to delete",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*/
function delete($displayGroupId)
{
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
$displayGroup->setChildObjectDependencies($this->displayFactory, $this->layoutFactory, $this->mediaFactory, $this->scheduleFactory);
if (!$this->getUser()->checkDeleteable($displayGroup))
throw new AccessDeniedException();
$displayGroup->delete();
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Deleted %s'), $displayGroup->displayGroup)
]);
}
/**
* Sets the Members of a group
* @param int $displayGroupId
* @throws InvalidArgumentException
*
* @SWG\Post(
* path="/displaygroup/{displayGroupId}/display/assign",
* operationId="displayGroupDisplayAssign",
* tags={"displayGroup"},
* summary="Assign one or more Displays to a Display Group",
* description="Adds the provided Displays to the Display Group",
* @SWG\Parameter(
* name="displayGroupId",
* type="integer",
* in="path",
* description="The Display Group to assign to",
* required=true
* ),
* @SWG\Parameter(
* name="displayId",
* type="array",
* in="formData",
* description="The Display Ids to assign",
* required=true,
* @SWG\Items(
* type="integer"
* )
* ),
* @SWG\Parameter(
* name="unassignDisplayId",
* in="formData",
* description="An optional array of Display IDs to unassign",
* type="array",
* required=false,
* @SWG\Items(type="integer")
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*
* @throws XiboException
*/
public function assignDisplay($displayGroupId)
{
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
if ($displayGroup->isDisplaySpecific == 1)
throw new InvalidArgumentException(__('This is a Display specific Display Group and its assignments cannot be modified.'), 'displayGroupId');
$displayGroup->setChildObjectDependencies($this->displayFactory, $this->layoutFactory, $this->mediaFactory, $this->scheduleFactory);
if (!$this->getUser()->checkEditable($displayGroup))
throw new AccessDeniedException();
if ($displayGroup->isDynamic == 1)
throw new \InvalidArgumentException(__('Displays cannot be manually assigned to a Dynamic Group'));
$modifiedDisplays = [];
$displays = $this->getSanitizer()->getIntArray('displayId');
foreach ($displays as $displayId) {
$display = $this->displayFactory->getById($displayId);
if (!$this->getUser()->checkViewable($this->displayGroupFactory->getById($display->displayGroupId)))
throw new AccessDeniedException(__('Access Denied to Display'));
$displayGroup->assignDisplay($display);
// Store so that we can flag as incomplete
if (!in_array($display, $modifiedDisplays))
$modifiedDisplays[] = $display;
}
// Have we been provided with unassign id's as well?
$displays = $this->getSanitizer()->getIntArray('unassignDisplayId');
foreach ($displays as $displayId) {
$display = $this->displayFactory->getById($displayId);
if (!$this->getUser()->checkViewable($this->displayGroupFactory->getById($display->displayGroupId)))
throw new AccessDeniedException(__('Access Denied to Display'));
$displayGroup->unassignDisplay($display);
// Store so that we can flag as incomplete
if (!in_array($display, $modifiedDisplays))
$modifiedDisplays[] = $display;
}
// Save the result
$displayGroup->save(['validate' => false, 'saveTags' => false]);
// Save the displays themselves
foreach ($modifiedDisplays as $display) {
/** @var Display $display */
$display->notify();
}
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Displays assigned to %s'), $displayGroup->displayGroup),
'id' => $displayGroup->displayGroupId
]);
}
/**
* Unassign displays from a Display Group
* @param int $displayGroupId
* @throws InvalidArgumentException
*
* @SWG\Post(
* path="/displaygroup/{displayGroupId}/display/unassign",
* operationId="displayGroupDisplayUnassign",
* tags={"displayGroup"},
* summary="Unassigns one or more Displays to a Display Group",
* description="Removes the provided Displays from the Display Group",
* @SWG\Parameter(
* name="displayGroupId",
* type="integer",
* in="path",
* description="The Display Group to unassign from",
* required=true
* ),
* @SWG\Parameter(
* name="displayId",
* type="array",
* in="formData",
* description="The Display Ids to unassign",
* required=true,
* @SWG\Items(
* type="integer"
* )
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*
* @throws XiboException
*/
public function unassignDisplay($displayGroupId)
{
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
if ($displayGroup->isDisplaySpecific == 1)
throw new InvalidArgumentException(__('This is a Display specific Display Group and its assignments cannot be modified.'), 'displayGroupId');
$displayGroup->setChildObjectDependencies($this->displayFactory, $this->layoutFactory, $this->mediaFactory, $this->scheduleFactory);
if (!$this->getUser()->checkEditable($displayGroup))
throw new AccessDeniedException();
if ($displayGroup->isDynamic == 1)
throw new \InvalidArgumentException(__('Displays cannot be manually unassigned to a Dynamic Group'));
$displays = $this->getSanitizer()->getIntArray('displayId');
foreach ($displays as $displayId) {
$display = $this->displayFactory->getById($displayId);
if (!$this->getUser()->checkViewable($this->displayGroupFactory->getById($display->displayGroupId)))
throw new AccessDeniedException(__('Access Denied to Display'));
$this->getLog()->debug('Unassigning ' . $display->display);
$displayGroup->unassignDisplay($display);
}
$displayGroup->save(['validate' => false, 'saveTags' => false]);
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Displays unassigned from %s'), $displayGroup->displayGroup),
'id' => $displayGroup->displayGroupId
]);
}
/**
* Sets the Members of a group
* @param int $displayGroupId
* @throws InvalidArgumentException
*
* @SWG\Post(
* path="/displaygroup/{displayGroupId}/displayGroup/assign",
* operationId="displayGroupDisplayGroupAssign",
* tags={"displayGroup"},
* summary="Assign one or more DisplayGroups to a Display Group",
* description="Adds the provided DisplayGroups to the Display Group",
* @SWG\Parameter(
* name="displayGroupId",
* type="integer",
* in="path",
* description="The Display Group to assign to",
* required=true
* ),
* @SWG\Parameter(
* name="displayGroupId",
* type="array",
* in="formData",
* description="The displayGroup Ids to assign",
* required=true,
* @SWG\Items(
* type="integer"
* )
* ),
* @SWG\Parameter(
* name="unassignDisplayGroupId",
* in="formData",
* description="An optional array of displayGroup IDs to unassign",
* type="array",
* required=false,
* @SWG\Items(type="integer")
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*
* @throws XiboException
*/
public function assignDisplayGroup($displayGroupId)
{
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
if ($displayGroup->isDisplaySpecific == 1)
throw new InvalidArgumentException(__('This is a Display specific Display Group and its assignments cannot be modified.'), 'displayGroupId');
$displayGroup->setChildObjectDependencies($this->displayFactory, $this->layoutFactory, $this->mediaFactory, $this->scheduleFactory);
if (!$this->getUser()->checkEditable($displayGroup))
throw new AccessDeniedException();
if ($displayGroup->isDynamic == 1)
throw new \InvalidArgumentException(__('DisplayGroups cannot be manually assigned to a Dynamic Group'));
$displayGroups = $this->getSanitizer()->getIntArray('displayGroupId');
foreach ($displayGroups as $assignDisplayGroupId) {
$displayGroupAssign = $this->displayGroupFactory->getById($assignDisplayGroupId);
if (!$this->getUser()->checkViewable($displayGroupAssign))
throw new AccessDeniedException(__('Access Denied to DisplayGroup'));
$displayGroup->assignDisplayGroup($displayGroupAssign);
}
// Have we been provided with unassign id's as well?
$displayGroups = $this->getSanitizer()->getIntArray('unassignDisplayGroupId');
foreach ($displayGroups as $assignDisplayGroupId) {
$displayGroupUnassign = $this->displayGroupFactory->getById($assignDisplayGroupId);
if (!$this->getUser()->checkViewable($displayGroupUnassign))
throw new AccessDeniedException(__('Access Denied to DisplayGroup'));
$displayGroup->unassignDisplayGroup($displayGroupUnassign);
}
// Save the result
$displayGroup->save(['validate' => false, 'saveTags' => false]);
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('DisplayGroups assigned to %s'), $displayGroup->displayGroup),
'id' => $displayGroup->displayGroupId
]);
}
/**
* Unassign DisplayGroups from a Display Group
* @param int $displayGroupId
* @throws InvalidArgumentException
*
* @SWG\Post(
* path="/displaygroup/{displayGroupId}/displayGroup/unassign",
* operationId="displayGroupDisplayGroupUnassign",
* tags={"displayGroup"},
* summary="Unassigns one or more DisplayGroups to a Display Group",
* description="Removes the provided DisplayGroups from the Display Group",
* @SWG\Parameter(
* name="displayGroupId",
* type="integer",
* in="path",
* description="The Display Group to unassign from",
* required=true
* ),
* @SWG\Parameter(
* name="displayGroupId",
* type="array",
* in="formData",
* description="The DisplayGroup Ids to unassign",
* required=true,
* @SWG\Items(
* type="integer"
* )
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*
* @throws XiboException
*/
public function unassignDisplayGroup($displayGroupId)
{
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
if ($displayGroup->isDisplaySpecific == 1)
throw new InvalidArgumentException(__('This is a Display specific Display Group and its assignments cannot be modified.'), 'displayGroupId');
$displayGroup->setChildObjectDependencies($this->displayFactory, $this->layoutFactory, $this->mediaFactory, $this->scheduleFactory);
if (!$this->getUser()->checkEditable($displayGroup))
throw new AccessDeniedException();
if ($displayGroup->isDynamic == 1)
throw new \InvalidArgumentException(__('DisplayGroups cannot be manually unassigned to a Dynamic Group'));
$displayGroups = $this->getSanitizer()->getIntArray('displayGroupId');
foreach ($displayGroups as $assignDisplayGroupId) {
$displayGroup->unassignDisplayGroup($this->displayGroupFactory->getById($assignDisplayGroupId));
}
$displayGroup->save(['validate' => false, 'saveTags' => false]);
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('DisplayGroups unassigned from %s'), $displayGroup->displayGroup),
'id' => $displayGroup->displayGroupId
]);
}
/**
* Media Form (media linked to displays)
* @param int $displayGroupId
* @throws XiboException
*/
public function mediaForm($displayGroupId)
{
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
if (!$this->getUser()->checkEditable($displayGroup))
throw new AccessDeniedException();
// Load the groups details
$displayGroup->setChildObjectDependencies($this->displayFactory, $this->layoutFactory, $this->mediaFactory, $this->scheduleFactory);
$displayGroup->load();
$this->getState()->template = 'displaygroup-form-media';
$this->getState()->setData([
'displayGroup' => $displayGroup,
'modules' => $this->moduleFactory->query(null, ['regionSpecific' => 0]),
'media' => $this->mediaFactory->getByDisplayGroupId($displayGroup->displayGroupId),
'help' => $this->getHelp()->link('DisplayGroup', 'FileAssociations')
]);
}
/**
* Assign Media
* @param int $displayGroupId
*
* @SWG\Post(
* path="/displaygroup/{displayGroupId}/media/assign",
* operationId="displayGroupMediaAssign",
* tags={"displayGroup"},
* summary="Assign one or more Media items to a Display Group",
* description="Adds the provided Media to the Display Group",
* @SWG\Parameter(
* name="displayGroupId",
* type="integer",
* in="path",
* description="The Display Group to assign to",
* required=true
* ),
* @SWG\Parameter(
* name="mediaId",
* type="array",
* in="formData",
* description="The Media Ids to assign",
* required=true,
* @SWG\Items(
* type="integer"
* )
* ),
* @SWG\Parameter(
* name="unassignMediaId",
* type="array",
* in="formData",
* description="Optional array of Media Id to unassign",
* required=false,
* @SWG\Items(
* type="integer"
* )
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*
* @throws XiboException
*/
public function assignMedia($displayGroupId)
{
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
if (!$this->getUser()->checkEditable($displayGroup))
throw new AccessDeniedException();
// Load the groups details
$displayGroup->setChildObjectDependencies($this->displayFactory, $this->layoutFactory, $this->mediaFactory, $this->scheduleFactory);
$displayGroup->load();
$mediaIds = $this->getSanitizer()->getIntArray('mediaId');
// Loop through all the media
foreach ($mediaIds as $mediaId) {
$media = $this->mediaFactory->getById($mediaId);
if (!$this->getUser()->checkViewable($media))
throw new AccessDeniedException(__('You have selected media that you no longer have permission to use. Please reload the form.'));
$displayGroup->assignMedia($media);
}
// Check for unassign
foreach ($this->getSanitizer()->getIntArray('unassignMediaId') as $mediaId) {
// Get the media record
$media = $this->mediaFactory->getById($mediaId);
if (!$this->getUser()->checkViewable($media))
throw new AccessDeniedException(__('You have selected media that you no longer have permission to use. Please reload the form.'));
$displayGroup->unassignMedia($media);
}
$displayGroup->setCollectRequired(false);
$displayGroup->save(['validate' => false, 'saveTags' => false]);
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Files assigned to %s'), $displayGroup->displayGroup),
'id' => $displayGroup->displayGroupId
]);
}
/**
* Unassign Media
* @param int $displayGroupId
*
* @SWG\Post(
* path="/displaygroup/{displayGroupId}/media/unassign",
* operationId="displayGroupMediaUnassign",
* tags={"displayGroup"},
* summary="Unassign one or more Media items from a Display Group",
* description="Removes the provided from the Display Group",
* @SWG\Parameter(
* name="displayGroupId",
* type="integer",
* in="path",
* description="The Display Group to unassign from",
* required=true
* ),
* @SWG\Parameter(
* name="mediaId",
* type="array",
* in="formData",
* description="The Media Ids to unassign",
* required=true,
* @SWG\Items(
* type="integer"
* )
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*
* @throws XiboException
*/
public function unassignMedia($displayGroupId)
{
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
if (!$this->getUser()->checkEditable($displayGroup))
throw new AccessDeniedException();
// Load the groups details
$displayGroup->setChildObjectDependencies($this->displayFactory, $this->layoutFactory, $this->mediaFactory, $this->scheduleFactory);
$displayGroup->load();
$mediaIds = $this->getSanitizer()->getIntArray('mediaId');
// Loop through all the media
foreach ($mediaIds as $mediaId) {
$displayGroup->unassignMedia($this->mediaFactory->getById($mediaId));
}
$displayGroup->setCollectRequired(false);
$displayGroup->save(['validate' => false, 'saveTags' => false]);
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Files unassigned from %s'), $displayGroup->displayGroup),
'id' => $displayGroup->displayGroupId
]);
}
/**
* Layouts Form (layouts linked to displays)
* @param int $displayGroupId
*
* @throws XiboException
*/
public function LayoutsForm($displayGroupId)
{
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
if (!$this->getUser()->checkEditable($displayGroup))
throw new AccessDeniedException();
// Load the groups details
$displayGroup->setChildObjectDependencies($this->displayFactory, $this->layoutFactory, $this->mediaFactory, $this->scheduleFactory);
$displayGroup->load();
$this->getState()->template = 'displaygroup-form-layouts';
$this->getState()->setData([
'displayGroup' => $displayGroup,
'modules' => $this->moduleFactory->query(null, ['regionSpecific' => 0]),
'layouts' => $this->layoutFactory->getByDisplayGroupId($displayGroup->displayGroupId),
'help' => $this->getHelp()->link('DisplayGroup', 'FileAssociations')
]);
}
/**
* Assign Layouts
* @param int $displayGroupId
*
* @SWG\Post(
* path="/displaygroup/{displayGroupId}/layout/assign",
* operationId="displayGroupLayoutsAssign",
* tags={"displayGroup"},
* summary="Assign one or more Layouts items to a Display Group",
* description="Adds the provided Layouts to the Display Group",
* @SWG\Parameter(
* name="displayGroupId",
* type="integer",
* in="path",
* description="The Display Group to assign to",
* required=true
* ),
* @SWG\Parameter(
* name="layoutId",
* type="array",
* in="formData",
* description="The Layouts Ids to assign",
* required=true,
* @SWG\Items(
* type="integer"
* )
* ),
* @SWG\Parameter(
* name="unassignLayoutId",
* type="array",
* in="formData",
* description="Optional array of Layouts Id to unassign",
* required=false,
* @SWG\Items(
* type="integer"
* )
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*
* @throws XiboException
*/
public function assignLayouts($displayGroupId)
{
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
if (!$this->getUser()->checkEditable($displayGroup))
throw new AccessDeniedException();
// Load the groups details
$displayGroup->setChildObjectDependencies($this->displayFactory, $this->layoutFactory, $this->mediaFactory, $this->scheduleFactory);
$displayGroup->load();
$layoutIds = $this->getSanitizer()->getIntArray('layoutId');
// Loop through all the media
foreach ($layoutIds as $layoutId) {
$layout = $this->layoutFactory->getById($layoutId);
if (!$this->getUser()->checkViewable($layout))
throw new AccessDeniedException(__('You have selected a layout that you no longer have permission to use. Please reload the form.'));
$displayGroup->assignLayout($layout);
}
// Check for unassign
foreach ($this->getSanitizer()->getIntArray('unassignLayoutId') as $layoutId) {
// Get the layout record
$layout = $this->layoutFactory->getById($layoutId);
if (!$this->getUser()->checkViewable($layout))
throw new AccessDeniedException(__('You have selected a layout that you no longer have permission to use. Please reload the form.'));
$displayGroup->unassignLayout($layout);
}
$displayGroup->setCollectRequired(false);
$displayGroup->save(['validate' => false, 'saveTags' => false]);
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Layouts assigned to %s'), $displayGroup->displayGroup),
'id' => $displayGroup->displayGroupId
]);
}
/**
* Unassign Layout
* @param int $displayGroupId
*
* @SWG\Post(
* path="/displaygroup/{displayGroupId}/layout/unassign",
* operationId="displayGroupLayoutUnassign",
* tags={"displayGroup"},
* summary="Unassign one or more Layout items from a Display Group",
* description="Removes the provided from the Display Group",
* @SWG\Parameter(
* name="displayGroupId",
* type="integer",
* in="path",
* description="The Display Group to unassign from",
* required=true
* ),
* @SWG\Parameter(
* name="layoutId",
* type="array",
* in="formData",
* description="The Layout Ids to unassign",
* required=true,
* @SWG\Items(
* type="integer"
* )
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*
* @throws XiboException
*/
public function unassignLayouts($displayGroupId)
{
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
if (!$this->getUser()->checkEditable($displayGroup))
throw new AccessDeniedException();
// Load the groups details
$displayGroup->setChildObjectDependencies($this->displayFactory, $this->layoutFactory, $this->mediaFactory, $this->scheduleFactory);
$displayGroup->load();
$layoutIds = $this->getSanitizer()->getIntArray('layoutId');
// Loop through all the media
foreach ($layoutIds as $layoutId) {
$this->getLog()->debug('Unassign layoutId ' . $layoutId . ' from ' . $displayGroupId);
$displayGroup->unassignLayout($this->layoutFactory->getById($layoutId));
}
$displayGroup->setCollectRequired(false);
$displayGroup->save(['validate' => false]);
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Layouts unassigned from %s'), $displayGroup->displayGroup),
'id' => $displayGroup->displayGroupId
]);
}
/**
* @param int $displayGroupId
*/
public function collectNowForm($displayGroupId)
{
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
if (!$this->getUser()->checkEditable($displayGroup))
throw new AccessDeniedException();
$this->getState()->template = 'displaygroup-form-collect-now';
$this->getState()->setData([
'displayGroup' => $displayGroup
]);
}
/**
* Cause the player to collect now
* @param int $displayGroupId
* @throws ConfigurationException when the message cannot be sent
*
* @SWG\Post(
* path="/displaygroup/{displayGroupId}/action/collectNow",
* operationId="displayGroupActionCollectNow",
* tags={"displayGroup"},
* summary="Action: Collect Now",
* description="Send the collect now action to this DisplayGroup",
* @SWG\Parameter(
* name="displayGroupId",
* in="path",
* description="The display group id",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*/
public function collectNow($displayGroupId)
{
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
if (!$this->getUser()->checkEditable($displayGroup))
throw new AccessDeniedException();
$this->playerAction->sendAction($this->displayFactory->getByDisplayGroupId($displayGroupId), new CollectNowAction());
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Command Sent to %s'), $displayGroup->displayGroup),
'id' => $displayGroup->displayGroupId
]);
}
/**
* Cause the player to collect now
* @param int $displayGroupId
* @throws ConfigurationException when the message cannot be sent
*
* @SWG\Post(
* path="/displaygroup/{displayGroupId}/action/clearStatsAndLogs",
* operationId="displayGroupActionClearStatsAndLogs",
* tags={"displayGroup"},
* summary="Action: Clear Stats and Logs",
* description="Clear all stats and logs on this Group",
* @SWG\Parameter(
* name="displayGroupId",
* in="path",
* description="The display group id",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*/
public function clearStatsAndLogs($displayGroupId)
{
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
if (!$this->getUser()->checkEditable($displayGroup))
throw new AccessDeniedException();
$this->playerAction->sendAction($this->displayFactory->getByDisplayGroupId($displayGroupId), new CollectNowAction());
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Command Sent to %s'), $displayGroup->displayGroup),
'id' => $displayGroup->displayGroupId
]);
}
/**
* Change to a new Layout
* @param $displayGroupId
* @throws ConfigurationException
* @throws \Xibo\Exception\NotFoundException
*
* @SWG\Post(
* path="/displaygroup/{displayGroupId}/action/changeLayout",
* operationId="displayGroupActionChangeLayout",
* tags={"displayGroup"},
* summary="Action: Change Layout",
* description="Send a change layout action to the provided Display Group. This will be sent to Displays in that Group via XMR.",
* @SWG\Parameter(
* name="displayGroupId",
* in="path",
* description="This can be either a Display Group or the Display specific Display Group",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="layoutId",
* in="formData",
* description="The ID of the Layout to change to. Either this or a campaignId must be provided.",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="campaignId",
* in="formData",
* description="The Layout specific campaignId of the Layout to change to. Either this or a layoutId must be provided.",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="duration",
* in="formData",
* description="The duration in seconds for this Layout change to remain in effect, after which normal scheduling is resumed.",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="downloadRequired",
* in="formData",
* description="Flag indicating whether the player should perform a collect before playing the Layout.",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="changeMode",
* in="formData",
* description="Whether to queue or replace with this action. Queuing will keep the current change layout action and switch after it is finished. If no active change layout action is present, both options are actioned immediately",
* type="string",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*
* @throws XiboException
*/
public function changeLayout($displayGroupId)
{
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
if (!$this->getUser()->checkEditable($displayGroup)) {
throw new AccessDeniedException();
}
// Get the layoutId or campaignId
$layoutId = $this->getSanitizer()->getInt('layoutId');
$campaignId = $this->getSanitizer()->getInt('campaignId');
$downloadRequired = ($this->getSanitizer()->getCheckbox('downloadRequired') == 1);
if ($layoutId == 0 && $campaignId == 0) {
throw new InvalidArgumentException(__('Please provide a Layout ID or Campaign ID'), 'layoutId');
}
// Check that this user has permissions to see this layout
if ($layoutId != 0 && $campaignId == 0) {
$layout = $this->layoutFactory->getById($layoutId);
} elseif ($layoutId == 0 && $campaignId != 0) {
$campaign = $this->campaignFactory->getById($campaignId);
if ($campaign->isLayoutSpecific == 0) {
throw new NotFoundException(__('Please provide Layout specific campaign ID'));
}
$layouts = $this->layoutFactory->getByCampaignId($campaignId);
if (count($layouts) <= 0) {
throw new NotFoundException(__('Cannot find layout by campaignId'));
}
$layout = $layouts[0];
} else {
throw new InvalidArgumentException(__('Please provide Layout id or Campaign id'), 'layoutId');
}
if (!$this->getUser()->checkViewable($layout)) {
throw new AccessDeniedException();
}
// Check to see if this layout is assigned to this display group.
if (count($this->layoutFactory->query(null, ['disableUserCheck' => 1, 'layoutId' => $layout->layoutId, 'displayGroupId' => $displayGroupId])) <= 0) {
// Assign
$displayGroup->setChildObjectDependencies($this->displayFactory, $this->layoutFactory, $this->mediaFactory, $this->scheduleFactory);
$displayGroup->load();
$displayGroup->assignLayout($layout);
// Don't collect now, this player action will cause a download.
// notify will still occur if the layout isn't already assigned (which is shouldn't be)
$displayGroup->setCollectRequired(false);
$displayGroup->save(['validate' => false, 'saveTags' => false]);
// Convert into a download required
$downloadRequired = true;
} else {
// The layout may not be built at this point
if ($downloadRequired) {
// in this case we should build it and notify before we send the action
// notify should NOT collect now, as we will do that during our own action.
$layout->xlfToDisk(['notify' => true, 'collectNow' => false]);
}
}
// Create and send the player action
$this->playerAction->sendAction($this->displayFactory->getByDisplayGroupId($displayGroupId), (new ChangeLayoutAction())->setLayoutDetails(
$layout->layoutId,
$this->getSanitizer()->getInt('duration'),
$downloadRequired,
$this->getSanitizer()->getString('changeMode', 'queue')
));
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Command Sent to %s'), $displayGroup->displayGroup),
'id' => $displayGroup->displayGroupId
]);
}
/**
* Cause the player to revert to its scheduled content
* @param int $displayGroupId
* @throws ConfigurationException when the message cannot be sent
* @throws \Xibo\Exception\NotFoundException
*
* @SWG\Post(
* path="/displaygroup/{displayGroupId}/action/revertToSchedule",
* operationId="displayGroupActionRevertToSchedule",
* tags={"displayGroup"},
* summary="Action: Revert to Schedule",
* description="Send the revert to schedule action to this DisplayGroup",
* @SWG\Parameter(
* name="displayGroupId",
* in="path",
* description="This can be either a Display Group or the Display specific Display Group",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*/
public function revertToSchedule($displayGroupId)
{
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
if (!$this->getUser()->checkEditable($displayGroup))
throw new AccessDeniedException();
$this->playerAction->sendAction($this->displayFactory->getByDisplayGroupId($displayGroupId), new RevertToSchedule());
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Command Sent to %s'), $displayGroup->displayGroup),
'id' => $displayGroup->displayGroupId
]);
}
/**
* Add an Overlay Layout
* @param $displayGroupId
* @throws ConfigurationException
* @throws \Xibo\Exception\NotFoundException
*
* @SWG\Post(
* path="/displaygroup/{displayGroupId}/action/overlayLayout",
* operationId="displayGroupActionOverlayLayout",
* tags={"displayGroup"},
* summary="Action: Overlay Layout",
* description="Send the overlay layout action to this DisplayGroup, you can pass layoutId or layout specific campaignId",
* @SWG\Parameter(
* name="displayGroupId",
* in="path",
* description="This can be either a Display Group or the Display specific Display Group",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="layoutId",
* in="formData",
* description="The ID of the Layout to change to. Either this or a campaignId must be provided.",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="campaignId",
* in="formData",
* description="The Layout specific campaignId of the Layout to change to. Either this or a layoutId must be provided.",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="duration",
* in="formData",
* description="The duration in seconds for this Overlay to remain in effect",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="downloadRequired",
* in="formData",
* description="Whether to queue or replace with this action. Queuing will keep the current change layout action and switch after it is finished. If no active change layout action is present, both options are actioned immediately",
* type="integer",
* required=false
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*
* @throws XiboException
*/
public function overlayLayout($displayGroupId)
{
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
if (!$this->getUser()->checkEditable($displayGroup)) {
throw new AccessDeniedException();
}
// Get the layoutId
$layoutId = $this->getSanitizer()->getInt('layoutId');
$campaignId = $this->getSanitizer()->getInt('campaignId');
$downloadRequired = ($this->getSanitizer()->getCheckbox('downloadRequired') == 1);
if ($layoutId == 0 && $campaignId == 0) {
throw new \InvalidArgumentException(__('Please provide a Layout ID or Campaign ID'));
}
// Check that this user has permissions to see this layout
if ($layoutId != 0 && $campaignId == 0) {
$layout = $this->layoutFactory->getById($layoutId);
} elseif ($layoutId == 0 && $campaignId != 0) {
$campaign = $this->campaignFactory->getById($campaignId);
if ($campaign->isLayoutSpecific == 0) {
throw new NotFoundException(__('Please provide Layout specific campaign ID'));
}
$layouts = $this->layoutFactory->getByCampaignId($campaignId);
if (count($layouts) <= 0) {
throw new NotFoundException(__('Cannot find layout by campaignId'));
}
$layout = $layouts[0];
} else {
throw new InvalidArgumentException(__('Please provide Layout id or Campaign id'), 'layoutId');
}
if (!$this->getUser()->checkViewable($layout)) {
throw new AccessDeniedException();
}
// Check to see if this layout is assigned to this display group.
if (count($this->layoutFactory->query(null, ['disableUserCheck' => 1, 'layoutId' => $layout->layoutId, 'displayGroupId' => $displayGroupId])) <= 0) {
// Assign
$displayGroup->setChildObjectDependencies($this->displayFactory, $this->layoutFactory, $this->mediaFactory, $this->scheduleFactory);
$displayGroup->load();
$displayGroup->assignLayout($layout);
// Don't notify, this player action will cause a download.
$displayGroup->setCollectRequired(false);
$displayGroup->save(['validate' => false, 'saveTags' => false]);
// Convert into a download required
$downloadRequired = true;
} else {
// The layout may not be built at this point
if ($downloadRequired) {
// in this case we should build it and notify before we send the action
// notify should NOT collect now, as we will do that during our own action.
$layout->xlfToDisk(['notify' => true, 'collectNow' => false]);
}
}
$this->playerAction->sendAction($this->displayFactory->getByDisplayGroupId($displayGroupId), (new OverlayLayoutAction())->setLayoutDetails(
$layout->layoutId,
$this->getSanitizer()->getInt('duration'),
$downloadRequired
));
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Command Sent to %s'), $displayGroup->displayGroup),
'id' => $displayGroup->displayGroupId
]);
}
/**
* Command Form
* @param int $displayGroupId
* @throws \Xibo\Exception\NotFoundException
*/
public function commandForm($displayGroupId)
{
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
if (!$this->getUser()->checkEditable($displayGroup))
throw new AccessDeniedException();
$this->getState()->template = 'displaygroup-form-command';
$this->getState()->setData([
'displayGroup' => $displayGroup,
'commands' => $this->commandFactory->query()
]);
}
/**
* @param $displayGroupId
* @throws ConfigurationException
* @throws XiboException
* @throws \Xibo\Exception\NotFoundException
*
* @SWG\Post(
* path="/displaygroup/{displayGroupId}/action/command",
* operationId="displayGroupActionCommand",
* tags={"displayGroup"},
* summary="Send Command",
* description="Send a predefined command to this Group of Displays",
* @SWG\Parameter(
* name="displayGroupId",
* in="path",
* description="The display group id",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="commandId",
* in="formData",
* description="The Command Id",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*/
public function command($displayGroupId)
{
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
if (!$this->getUser()->checkEditable($displayGroup))
throw new AccessDeniedException();
$command = $this->commandFactory->getById($this->getSanitizer()->getInt('commandId'));
$displays = $this->displayFactory->getByDisplayGroupId($displayGroupId);
$this->playerAction->sendAction($displays, (new CommandAction())->setCommandCode($command->code));
// Update the flag
foreach ($displays as $display) {
/* @var \Xibo\Entity\Display $display */
$display->lastCommandSuccess = 0;
$display->save(['validate' => false, 'audit' => false]);
}
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Command Sent to %s'), $displayGroup->displayGroup),
'id' => $displayGroup->displayGroupId
]);
}
/**
* @param $displayGroupId
* @throws \Xibo\Exception\NotFoundException
*/
public function copyForm($displayGroupId)
{
// Create a form out of the config object.
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
if ($this->getUser()->userTypeId != 1 && $this->getUser()->userId != $displayGroup->userId)
throw new AccessDeniedException(__('You do not have permission to delete this profile'));
$this->getState()->template = 'displaygroup-form-copy';
$this->getState()->setData([
'displayGroup' => $displayGroup
]);
}
/**
* Copy Display Group
* @param int $displayGroupId
* @throws \Xibo\Exception\XiboException
*
* @SWG\Post(
* path="/displaygroup/{displayGroupId}/copy",
* operationId="displayGroupCopy",
* tags={"displayGroup"},
* summary="Copy Display Group",
* description="Copy an existing Display Group",
* @SWG\Parameter(
* name="displayGroupId",
* in="path",
* description="The Display Group ID",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="displayGroup",
* in="formData",
* description="The name for the copy",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="description",
* in="formData",
* description="The description for the copy",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="copyMembers",
* in="formData",
* description="Flag indicating whether to copy all display and display group members",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="copyAssignments",
* in="formData",
* description="Flag indicating whether to copy all layout and media assignments",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="copyTags",
* in="formData",
* description="Flag indicating whether to copy all tags",
* type="integer",
* required=false
* ),
* @SWG\Response(
* response=201,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/DisplayGroup"),
* @SWG\Header(
* header="Location",
* description="Location of the new record",
* type="string"
* )
* )
* )
*/
public function copy($displayGroupId)
{
// get display group object
$displayGroup = $this->displayGroupFactory->getById($displayGroupId);
if (!$this->getUser()->checkEditable($displayGroup)) {
throw new AccessDeniedException();
}
// get an array of assigned displays
$membersDisplays = $this->displayFactory->getByDisplayGroupId($displayGroupId);
// get an array of assigned display groups
$membersDisplayGroups = $this->displayGroupFactory->getByParentId($displayGroupId);
// get an array of assigned layouts
$assignedLayouts = $this->layoutFactory->getByDisplayGroupId($displayGroupId);
// get an array of assigned media files
$assignedFiles = $this->mediaFactory->getByDisplayGroupId($displayGroupId);
$copyMembers = $this->getSanitizer()->getCheckbox('copyMembers', 0);
$copyTags = $this->getSanitizer()->getCheckbox('copyTags', 0);
$copyAssignments = $this->getSanitizer()->getCheckbox('copyAssignments', 0);
$new = clone $displayGroup;
// handle display group members
if ($copyMembers && !$displayGroup->isDynamic) {
//copy display members
foreach ($membersDisplays as $display) {
$new->assignDisplay($display);
}
// copy display group members
foreach ($membersDisplayGroups as $dg) {
$new->assignDisplayGroup($dg);
}
}
// handle layout and file assignment
if ($copyAssignments) {
// copy layout assignments
foreach ($assignedLayouts as $layout) {
$new->assignLayout($layout);
}
// copy media assignments
foreach ($assignedFiles as $media) {
$new->assignMedia($media);
}
}
// Dynamic display group needs to have at least one criteria specified to be added, we always want to copy criteria when we copy dynamic display group
if ($displayGroup->isDynamic) {
$new->dynamicCriteria = $displayGroup->dynamicCriteria;
$new->dynamicCriteriaTags = $displayGroup->dynamicCriteriaTags;
}
// handle tags
if ($copyTags) {
$tags = '';
$arrayOfTags = array_filter(explode(',', $displayGroup->tags));
$arrayOfTagValues = array_filter(explode(',', $displayGroup->tagValues));
for ($i=0; $ireplaceTags($this->tagFactory->tagsFromString($tags));
}
$new->displayGroup = $this->getSanitizer()->getString('displayGroup');
$new->description = $this->getSanitizer()->getString('description');
$new->setOwner($this->getUser()->userId);
// save without managing links, we need to save for new display group to get an ID, which is then used in next save to manage links - for dynamic groups.
// we also don't want to call notify at this point (for file/layout assignment)
$new->save(['manageDisplayLinks' => false, 'allowNotify' => false]);
// load the created display group and save along with display links and notify
$new->setChildObjectDependencies($this->displayFactory, $this->layoutFactory, $this->mediaFactory, $this->scheduleFactory);
$new->load();
$new->save();
// Return
$this->getState()->hydrate([
'httpStatus' => 201,
'message' => sprintf(__('Added %s'), $new->displayGroup),
'id' => $new->displayGroupId,
'data' => $new
]);
}
}
DataSet.php 0000644 00000116175 14716415766 0006636 0 ustar 00 .
*/
namespace Xibo\Controller;
use Xibo\Exception\AccessDeniedException;
use Xibo\Exception\InvalidArgumentException;
use Xibo\Exception\NotFoundException;
use Xibo\Exception\XiboException;
use Xibo\Factory\DataSetColumnFactory;
use Xibo\Factory\DataSetFactory;
use Xibo\Helper\DataSetUploadHandler;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
/**
* Class DataSet
* @package Xibo\Controller
*/
class DataSet extends Base
{
/** @var DataSetFactory */
private $dataSetFactory;
/** @var DataSetColumnFactory */
private $dataSetColumnFactory;
/** @var \Xibo\Factory\UserFactory */
private $userFactory;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param DataSetFactory $dataSetFactory
* @param DataSetColumnFactory $dataSetColumnFactory
* @param \Xibo\Factory\UserFactory $userFactory
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $dataSetFactory, $dataSetColumnFactory, $userFactory)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->dataSetFactory = $dataSetFactory;
$this->dataSetColumnFactory = $dataSetColumnFactory;
$this->userFactory = $userFactory;
}
/**
* @return SanitizerServiceInterface
*/
public function getSanitizer()
{
return parent::getSanitizer();
}
/**
* @return DataSetFactory
*/
public function getDataSetFactory()
{
return $this->dataSetFactory;
}
/**
* View Route
*/
public function displayPage()
{
$this->getState()->template = 'dataset-page';
$this->getState()->setData([
'users' => $this->userFactory->query(),
]);
}
/**
* Search Data
* @throws \Xibo\Exception\NotFoundException
*
* @SWG\Get(
* path="/dataset",
* operationId="dataSetSearch",
* tags={"dataset"},
* summary="DataSet Search",
* description="Search this users DataSets",
* @SWG\Parameter(
* name="dataSetId",
* in="query",
* description="Filter by DataSet Id",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="dataSet",
* in="query",
* description="Filter by DataSet Name",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="code",
* in="query",
* description="Filter by DataSet Code",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="userId",
* in="query",
* description="Filter by user Id",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="embed",
* in="query",
* description="Embed related data such as columns",
* type="string",
* required=false
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(
* type="array",
* @SWG\Items(ref="#/definitions/DataSet")
* )
* )
* )
*/
public function grid()
{
$user = $this->getUser();
// Embed?
$embed = ($this->getSanitizer()->getString('embed') != null) ? explode(',', $this->getSanitizer()->getString('embed')) : [];
$filter = [
'dataSetId' => $this->getSanitizer()->getInt('dataSetId'),
'dataSet' => $this->getSanitizer()->getString('dataSet'),
'useRegexForName' => $this->getSanitizer()->getCheckbox('useRegexForName'),
'code' => $this->getSanitizer()->getString('code'),
'userId' => $this->getSanitizer()->getInt('userId'),
];
$dataSets = $this->dataSetFactory->query($this->gridRenderSort(), $this->gridRenderFilter($filter));
foreach ($dataSets as $dataSet) {
/* @var \Xibo\Entity\DataSet $dataSet */
if (in_array('columns', $embed)) {
$dataSet->load();
}
if ($this->isApi())
break;
$dataSet->includeProperty('buttons');
$dataSet->buttons = [];
// Load the dataSet to get the columns
$dataSet->load();
if ($user->checkEditable($dataSet)) {
// View Data
$dataSet->buttons[] = array(
'id' => 'dataset_button_viewdata',
'class' => 'XiboRedirectButton',
'url' => $this->urlFor('dataSet.view.data', ['id' => $dataSet->dataSetId]),
'text' => __('View Data')
);
// View Columns
$dataSet->buttons[] = array(
'id' => 'dataset_button_viewcolumns',
'url' => $this->urlFor('dataSet.column.view', ['id' => $dataSet->dataSetId]),
'class' => 'XiboRedirectButton',
'text' => __('View Columns')
);
// View RSS
$dataSet->buttons[] = array(
'id' => 'dataset_button_viewrss',
'url' => $this->urlFor('dataSet.rss.view', ['id' => $dataSet->dataSetId]),
'class' => 'XiboRedirectButton',
'text' => __('View RSS')
);
// Divider
$dataSet->buttons[] = ['divider' => true];
// Import DataSet
if ($dataSet->isRemote !== 1) {
$dataSet->buttons[] = array(
'id' => 'dataset_button_import',
'class' => 'dataSetImportForm',
'url' => $this->urlFor('dataSet.import.form', ['id' => $dataSet->dataSetId]),
'text' => __('Import CSV')
);
}
// Copy
$dataSet->buttons[] = array(
'id' => 'dataset_button_copy',
'url' => $this->urlFor('dataSet.copy.form', ['id' => $dataSet->dataSetId]),
'text' => __('Copy')
);
// Divider
$dataSet->buttons[] = ['divider' => true];
// Edit DataSet
$dataSet->buttons[] = array(
'id' => 'dataset_button_edit',
'url' => $this->urlFor('dataSet.edit.form', ['id' => $dataSet->dataSetId]),
'text' => __('Edit')
);
}
if ($user->checkDeleteable($dataSet) && $dataSet->isLookup == 0) {
// Delete DataSet
$dataSet->buttons[] = [
'id' => 'dataset_button_delete',
'url' => $this->urlFor('dataSet.delete.form', ['id' => $dataSet->dataSetId]),
'text' => __('Delete'),
'multi-select' => true,
'dataAttributes' => [
['name' => 'commit-url', 'value' => $this->urlFor('dataSet.delete', ['id' => $dataSet->dataSetId])],
['name' => 'commit-method', 'value' => 'delete'],
['name' => 'id', 'value' => 'dataset_button_delete'],
['name' => 'text', 'value' => __('Delete')],
['name' => 'rowtitle', 'value' => $dataSet->dataSet],
['name' => 'form-callback', 'value' => 'deleteMultiSelectFormOpen']
]
];
}
// Divider
$dataSet->buttons[] = ['divider' => true];
if ($user->checkPermissionsModifyable($dataSet)) {
// Edit Permissions
$dataSet->buttons[] = array(
'id' => 'dataset_button_permissions',
'url' => $this->urlFor('user.permissions.form', ['entity' => 'DataSet', 'id' => $dataSet->dataSetId]),
'text' => __('Permissions')
);
}
}
$this->getState()->template = 'grid';
$this->getState()->recordsTotal = $this->dataSetFactory->countLast();
$this->getState()->setData($dataSets);
}
/**
* Add DataSet Form
*/
public function addForm()
{
$this->getState()->template = 'dataset-form-add';
$this->getState()->setData([
'dataSets' => $this->dataSetFactory->query(),
'help' => $this->getHelp()->link('DataSet', 'Add')
]);
}
/**
* Add dataSet
*
* @SWG\Post(
* path="/dataset",
* operationId="dataSetAdd",
* tags={"dataset"},
* summary="Add DataSet",
* description="Add a DataSet",
* @SWG\Parameter(
* name="dataSet",
* in="formData",
* description="The DataSet Name",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="description",
* in="formData",
* description="A description of this DataSet",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="code",
* in="formData",
* description="A code for this DataSet",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="isRemote",
* in="formData",
* description="Is this a remote DataSet?",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="method",
* in="formData",
* description="The Request Method GET or POST",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="uri",
* in="formData",
* description="The URI, without query parameters",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="postData",
* in="formData",
* description="query parameter encoded data to add to the request",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="authentication",
* in="formData",
* description="HTTP Authentication method None|Basic|Digest",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="username",
* in="formData",
* description="HTTP Authentication User Name",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="password",
* in="formData",
* description="HTTP Authentication Password",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="customHeaders",
* in="formData",
* description="Comma separated string of custom HTTP headers",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="refreshRate",
* in="formData",
* description="How often in seconds should this remote DataSet be refreshed",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="clearRate",
* in="formData",
* description="How often in seconds should this remote DataSet be truncated",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="runsAfter",
* in="formData",
* description="An optional dataSetId which should be run before this Remote DataSet",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="dataRoot",
* in="formData",
* description="The root of the data in the Remote source which is used as the base for all remote columns",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="summarize",
* in="formData",
* description="Should the data be aggregated? None|Summarize|Count",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="summarizeField",
* in="formData",
* description="Which field should be used to summarize",
* type="string",
* required=false
* ),
* @SWG\Response(
* response=201,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/DataSet"),
* @SWG\Header(
* header="Location",
* description="Location of the new record",
* type="string"
* )
* )
* )
*
* @throws XiboException
*/
public function add()
{
$dataSet = $this->dataSetFactory->createEmpty();
$dataSet->dataSet = $this->getSanitizer()->getString('dataSet');
$dataSet->description = $this->getSanitizer()->getString('description');
$dataSet->code = $this->getSanitizer()->getString('code');
$dataSet->isRemote = $this->getSanitizer()->getCheckbox('isRemote');
$dataSet->userId = $this->getUser()->userId;
// Fields for remote
if ($dataSet->isRemote === 1) {
$dataSet->method = $this->getSanitizer()->getString('method');
$dataSet->uri = $this->getSanitizer()->getString('uri');
$dataSet->postData = trim($this->getSanitizer()->getString('postData'));
$dataSet->authentication = $this->getSanitizer()->getString('authentication');
$dataSet->username = $this->getSanitizer()->getString('username');
$dataSet->password = $this->getSanitizer()->getString('password');
$dataSet->customHeaders = $this->getSanitizer()->getString('customHeaders');
$dataSet->refreshRate = $this->getSanitizer()->getInt('refreshRate');
$dataSet->clearRate = $this->getSanitizer()->getInt('clearRate');
$dataSet->runsAfter = $this->getSanitizer()->getInt('runsAfter');
$dataSet->dataRoot = $this->getSanitizer()->getString('dataRoot');
$dataSet->summarize = $this->getSanitizer()->getString('summarize');
$dataSet->summarizeField = $this->getSanitizer()->getString('summarizeField');
$dataSet->sourceId = $this->getSanitizer()->getInt('sourceId');
$dataSet->ignoreFirstRow = $this->getSanitizer()->getCheckbox('ignoreFirstRow');
}
// Also add one column
$dataSetColumn = $this->dataSetColumnFactory->createEmpty();
$dataSetColumn->columnOrder = 1;
$dataSetColumn->heading = 'Col1';
$dataSetColumn->dataSetColumnTypeId = 1;
$dataSetColumn->dataTypeId = 1;
// Add Column
// only when we are not routing through the API
if (!$this->isApi())
$dataSet->assignColumn($dataSetColumn);
// Save
$dataSet->save();
// Return
$this->getState()->hydrate([
'httpStatus' => 201,
'message' => sprintf(__('Added %s'), $dataSet->dataSet),
'id' => $dataSet->dataSetId,
'data' => $dataSet
]);
}
/**
* Edit DataSet Form
* @param int $dataSetId
* @throws \Xibo\Exception\NotFoundException
*/
public function editForm($dataSetId)
{
$dataSet = $this->dataSetFactory->getById($dataSetId);
if (!$this->getUser()->checkEditable($dataSet))
throw new AccessDeniedException();
// Set the form
$this->getState()->template = 'dataset-form-edit';
$this->getState()->setData([
'dataSet' => $dataSet,
'dataSets' => $this->dataSetFactory->query(),
'help' => $this->getHelp()->link('DataSet', 'Edit')
]);
}
/**
* Edit DataSet
* @param int $dataSetId
*
* @SWG\Put(
* path="/dataset/{dataSetId}",
* operationId="dataSetEdit",
* tags={"dataset"},
* summary="Edit DataSet",
* description="Edit a DataSet",
* @SWG\Parameter(
* name="dataSetId",
* in="path",
* description="The DataSet ID",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="dataSet",
* in="formData",
* description="The DataSet Name",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="description",
* in="formData",
* description="A description of this DataSet",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="code",
* in="formData",
* description="A code for this DataSet",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="isRemote",
* in="formData",
* description="Is this a remote DataSet?",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="method",
* in="formData",
* description="The Request Method GET or POST",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="uri",
* in="formData",
* description="The URI, without query parameters",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="postData",
* in="formData",
* description="query parameter encoded data to add to the request",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="authentication",
* in="formData",
* description="HTTP Authentication method None|Basic|Digest",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="username",
* in="formData",
* description="HTTP Authentication User Name",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="password",
* in="formData",
* description="HTTP Authentication Password",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="customHeaders",
* in="formData",
* description="Comma separated string of custom HTTP headers",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="refreshRate",
* in="formData",
* description="How often in seconds should this remote DataSet be refreshed",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="clearRate",
* in="formData",
* description="How often in seconds should this remote DataSet be truncated",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="runsAfter",
* in="formData",
* description="An optional dataSetId which should be run before this Remote DataSet",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="dataRoot",
* in="formData",
* description="The root of the data in the Remote source which is used as the base for all remote columns",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="summarize",
* in="formData",
* description="Should the data be aggregated? None|Summarize|Count",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="summarizeField",
* in="formData",
* description="Which field should be used to summarize",
* type="string",
* required=false
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/DataSet")
* )
* )
*
* @throws XiboException
*/
public function edit($dataSetId)
{
$dataSet = $this->dataSetFactory->getById($dataSetId);
if (!$this->getUser()->checkEditable($dataSet))
throw new AccessDeniedException();
$dataSet->dataSet = $this->getSanitizer()->getString('dataSet');
$dataSet->description = $this->getSanitizer()->getString('description');
$dataSet->code = $this->getSanitizer()->getString('code');
$dataSet->isRemote = $this->getSanitizer()->getCheckbox('isRemote');
if ($dataSet->isRemote === 1) {
$dataSet->method = $this->getSanitizer()->getString('method');
$dataSet->uri = $this->getSanitizer()->getString('uri');
$dataSet->postData = trim($this->getSanitizer()->getString('postData'));
$dataSet->authentication = $this->getSanitizer()->getString('authentication');
$dataSet->username = $this->getSanitizer()->getString('username');
$dataSet->password = $this->getSanitizer()->getString('password');
$dataSet->customHeaders = $this->getSanitizer()->getString('customHeaders');
$dataSet->refreshRate = $this->getSanitizer()->getInt('refreshRate');
$dataSet->clearRate = $this->getSanitizer()->getInt('clearRate');
$dataSet->runsAfter = $this->getSanitizer()->getInt('runsAfter');
$dataSet->dataRoot = $this->getSanitizer()->getString('dataRoot');
$dataSet->summarize = $this->getSanitizer()->getString('summarize');
$dataSet->summarizeField = $this->getSanitizer()->getString('summarizeField');
$dataSet->sourceId = $this->getSanitizer()->getInt('sourceId');
$dataSet->ignoreFirstRow = $this->getSanitizer()->getCheckbox('ignoreFirstRow');
}
$dataSet->save();
// Return
$this->getState()->hydrate([
'message' => sprintf(__('Edited %s'), $dataSet->dataSet),
'id' => $dataSet->dataSetId,
'data' => $dataSet
]);
}
/**
* DataSet Delete
* @param int $dataSetId
* @throws XiboException
*/
public function deleteForm($dataSetId)
{
$dataSet = $this->dataSetFactory->getById($dataSetId);
if (!$this->getUser()->checkDeleteable($dataSet))
throw new AccessDeniedException();
if ($dataSet->isLookup)
throw new \InvalidArgumentException(__('Lookup Tables cannot be deleted'));
// Set the form
$this->getState()->template = 'dataset-form-delete';
$this->getState()->setData([
'dataSet' => $dataSet,
'help' => $this->getHelp()->link('DataSet', 'Delete')
]);
}
/**
* DataSet Delete
* @param int $dataSetId
*
* @SWG\Delete(
* path="/dataset/{dataSetId}",
* operationId="dataSetDelete",
* tags={"dataset"},
* summary="Delete DataSet",
* description="Delete a DataSet",
* @SWG\Parameter(
* name="dataSetId",
* in="path",
* description="The DataSet ID",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*
* @throws XiboException
*/
public function delete($dataSetId)
{
$dataSet = $this->dataSetFactory->getById($dataSetId);
if (!$this->getUser()->checkDeleteable($dataSet))
throw new AccessDeniedException();
// Is there existing data?
if ($this->getSanitizer()->getCheckbox('deleteData') == 0 && $dataSet->hasData())
throw new InvalidArgumentException(__('There is data assigned to this data set, cannot delete.'), 'dataSetId');
// Otherwise delete
$dataSet->delete();
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Deleted %s'), $dataSet->dataSet)
]);
}
/**
* Copy DataSet Form
* @param int $dataSetId
* @throws \Xibo\Exception\NotFoundException
*/
public function copyForm($dataSetId)
{
$dataSet = $this->dataSetFactory->getById($dataSetId);
if (!$this->getUser()->checkEditable($dataSet))
throw new AccessDeniedException();
// Set the form
$this->getState()->template = 'dataset-form-copy';
$this->getState()->setData([
'dataSet' => $dataSet,
'help' => $this->getHelp()->link('DataSet', 'Edit')
]);
}
/**
* Copy DataSet
* @param int $dataSetId
*
* @SWG\Post(
* path="/dataset/copy/{dataSetId}",
* operationId="dataSetCopy",
* tags={"dataset"},
* summary="Copy DataSet",
* description="Copy a DataSet",
* @SWG\Parameter(
* name="dataSetId",
* in="path",
* description="The DataSet ID",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="dataSet",
* in="formData",
* description="The DataSet Name",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="description",
* in="formData",
* description="A description of this DataSet",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="code",
* in="formData",
* description="A code for this DataSet",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="copyRows",
* in="formData",
* description="Flag whether to copy all the row data from the original dataSet",
* type="integer",
* required=false
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/DataSet")
* )
* )
*
* @throws XiboException
*/
public function copy($dataSetId)
{
$dataSet = $this->dataSetFactory->getById($dataSetId);
$copyRows = $this->getSanitizer()->getCheckbox('copyRows', 0);
if (!$this->getUser()->checkEditable($dataSet))
throw new AccessDeniedException();
// Load for the Copy
$dataSet->load();
$oldName = $dataSet->dataSet;
// Clone and reset parameters
$dataSet = clone $dataSet;
$dataSet->dataSet = $this->getSanitizer()->getString('dataSet');
$dataSet->description = $this->getSanitizer()->getString('description');
$dataSet->code = $this->getSanitizer()->getString('code');
$dataSet->userId = $this->getUser()->userId;
$dataSet->save();
if ($copyRows === 1)
$dataSet->copyRows($dataSetId, $dataSet->dataSetId);
// Return
$this->getState()->hydrate([
'message' => sprintf(__('Copied %s as %s'), $oldName, $dataSet->dataSet),
'id' => $dataSet->dataSetId,
'data' => $dataSet
]);
}
/**
* Import CSV
* @param int $dataSetId
*
* @SWG\Post(
* path="/dataset/import/{dataSetId}",
* operationId="dataSetImport",
* tags={"dataset"},
* summary="Import CSV",
* description="Import a CSV into a DataSet",
* @SWG\Parameter(
* name="dataSetId",
* in="path",
* description="The DataSet ID to import into.",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="files",
* in="formData",
* description="The file",
* type="file",
* required=true
* ),
* @SWG\Parameter(
* name="csvImport_{dataSetColumnId}",
* in="formData",
* description="You need to provide dataSetColumnId after csvImport_, to know your dataSet columns Ids, you will need to use the GET /dataset/{dataSetId}/column call first. The value of this parameter is the index of the column in your csv file, where the first column is 1",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="overwrite",
* in="formData",
* description="flag (0,1) Set to 1 to erase all content in the dataSet and overwrite it with new content in this import",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="ignorefirstrow",
* in="formData",
* description="flag (0,1), Set to 1 to Ignore first row, useful if the CSV file has headings",
* type="integer",
* required=false
* ),
* @SWG\Response(
* response=200,
* description="successful operation"
* )
* )
*
* @throws XiboException
* @throws \Exception
*/
public function import($dataSetId)
{
$this->getLog()->debug('Import DataSet');
$libraryFolder = $this->getConfig()->getSetting('LIBRARY_LOCATION');
// Make sure the library exists
Library::ensureLibraryExists($this->getConfig()->getSetting('LIBRARY_LOCATION'));
$options = array(
'userId' => $this->getUser()->userId,
'dataSetId' => $dataSetId,
'controller' => $this,
'upload_dir' => $libraryFolder . 'temp/',
'download_via_php' => true,
'script_url' => $this->urlFor('dataSet.import'),
'upload_url' => $this->urlFor('dataSet.import'),
'image_versions' => array(),
'accept_file_types' => '/\.csv/i'
);
try {
// Hand off to the Upload Handler provided by jquery-file-upload
new DataSetUploadHandler($options);
} catch (\Exception $e) {
// We must not issue an error, the file upload return should have the error object already
$this->getApp()->commit = false;
}
$this->setNoOutput(true);
}
/**
* Import Json schema
*
* @SWG\Definition(definition="importJsonSchema", type="object",
* @SWG\Property(property="uniqueKeys", type="array", description="A name of the unique column", @SWG\Items(type="string", @SWG\Property(property="colName", type="string"))),
* @SWG\Property(property="truncate", type="array", description="Flag True or False, whether to truncate existing data on import", @SWG\Items(type="string", @SWG\Property(property="truncate", type="string"))),
* @SWG\Property(property="rows", type="array", description="An array of objects with pairs: ColumnName:Value", @SWG\Items(type="object", @SWG\Property(property="colName", type="string"))),
* )
*/
/**
* Import JSON
* @param int $dataSetId
* @throws \Exception
*
* @SWG\Post(
* path="/dataset/importjson/{dataSetId}",
* operationId="dataSetImportJson",
* tags={"dataset"},
* summary="Import JSON",
* description="Import JSON into a DataSet",
* @SWG\Parameter(
* name="dataSetId",
* in="path",
* description="The DataSet ID to import into.",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="data",
* in="body",
* description="The row data, field name vs field data format. e.g. { uniqueKeys: [col1], rows: [{col1: value1}]}",
* required=true,
* @SWG\Schema(ref="#/definitions/importJsonSchema")
* ),
* @SWG\Response(
* response=200,
* description="successful operation"
* )
* )
*/
public function importJson($dataSetId)
{
$dataSet = $this->dataSetFactory->getById($dataSetId);
if (!$this->getUser()->checkEditable($dataSet))
throw new AccessDeniedException();
$body = $this->getApp()->request()->getBody();
if (empty($body))
throw new \InvalidArgumentException(__('Missing JSON Body'));
// Expect 2 parameters
$data = json_decode($body, true);
if (!isset($data['rows']) || !isset($data['uniqueKeys']))
throw new \InvalidArgumentException(__('Malformed JSON body, rows and uniqueKeys are required'));
$this->getLog()->debug('Import JSON into DataSet with ' . count($data['rows']) . ' and unique keys ' . json_encode($data['uniqueKeys']));
// Should we truncate?
if (isset($data['truncate']) && $data['truncate']) {
$dataSet->deleteData();
}
// Get the columns for this dataset
$columns = [];
foreach ($dataSet->getColumn() as $column) {
/* @var \Xibo\Entity\DataSetColumn $column */
if ($column->dataSetColumnTypeId == 1) {
$columns[$column->heading] = $column->dataTypeId;
}
}
$takenSomeAction = false;
// Parse and validate each data row we've been provided
foreach ($data['rows'] as $row) {
// Parse each property
$sanitizedRow = null;
foreach ($row as $key => $value) {
// Does the property in the provided row exist as a column?
if (isset($columns[$key])) {
// Sanitize accordingly
if ($columns[$key] == 2) {
// Number
$value = $this->getSanitizer()->double($value);
}
else if ($columns[$key] == 3) {
// Date
$value = $this->getDate()->getLocalDate($this->getDate()->parse($value));
}
else if ($columns[$key] == 5) {
// Media Id
$value = $this->getSanitizer()->int($value);
}
else {
// String
$value = $this->getSanitizer()->string($value);
}
// Data is sanitized, add to the sanitized row
$sanitizedRow[$key] = $value;
}
}
if (count($sanitizedRow) > 0) {
$takenSomeAction = true;
// Check unique keys to see if this is an update
if (!empty($data['uniqueKeys']) && is_array($data['uniqueKeys'])) {
// Build a filter to select existing records
$filter = '';
foreach ($data['uniqueKeys'] as $uniqueKey) {
if (isset($sanitizedRow[$uniqueKey])) {
$filter .= 'AND `' . $uniqueKey . '` = \'' . $sanitizedRow[$uniqueKey] . '\' ';
}
}
$filter = trim($filter, 'AND');
// Use the unique keys to look up this row and see if it exists
$existingRows = $dataSet->getData(['filter' => $filter], ['includeFormulaColumns' => false, 'requireTotal' => false]);
if (count($existingRows) > 0) {
foreach ($existingRows as $existingRow) {
$dataSet->editRow($existingRow['id'], array_merge($existingRow, $sanitizedRow));
}
}
else {
$dataSet->addRow($sanitizedRow);
}
} else {
$dataSet->addRow($sanitizedRow);
}
}
}
if (!$takenSomeAction)
throw new NotFoundException(__('No data found in request body'));
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('Imported JSON into %s'), $dataSet->dataSet)
]);
}
/**
* Sends out a Test Request and returns the Data as JSON to the Client so it can be shown in the Dialog
* @throws XiboException
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function testRemoteRequest()
{
$testDataSetId = $this->getSanitizer()->getInt('testDataSetId');
if ($testDataSetId !== null) {
$dataSet = $this->dataSetFactory->getById($testDataSetId);
} else {
$dataSet = $this->dataSetFactory->createEmpty();
}
$dataSet->dataSet = $this->getSanitizer()->getString('dataSet');
$dataSet->method = $this->getSanitizer()->getString('method');
$dataSet->uri = $this->getSanitizer()->getString('uri');
$dataSet->postData = $this->getSanitizer()->getString('postData');
$dataSet->authentication = $this->getSanitizer()->getString('authentication');
$dataSet->username = $this->getSanitizer()->getString('username');
$dataSet->password = $this->getSanitizer()->getString('password');
$dataSet->dataRoot = $this->getSanitizer()->getString('dataRoot');
$dataSet->sourceId = $this->getSanitizer()->getInt('sourceId');
$dataSet->ignoreFirstRow = $this->getSanitizer()->getCheckbox('ignoreFirstRow');
// Set this DataSet as active.
$dataSet->setActive();
// Getting the dependant DataSet to process the current DataSet on
$dependant = null;
if ($dataSet->runsAfter != null && $dataSet->runsAfter != $dataSet->dataSetId) {
$dependant = $this->dataSetFactory->getById($dataSet->runsAfter);
}
// Call the remote service requested
$data = $this->dataSetFactory->callRemoteService($dataSet, $dependant, false);
if ($data->number > 0) {
// Process the results, but don't record them
if ($dataSet->sourceId === 1) {
$this->dataSetFactory->processResults($dataSet, $data, false);
} else {
$this->dataSetFactory->processCsvEntries($dataSet, $data, false);
}
}
$this->getLog()->debug('Results: ' . var_export($data, true));
// Return
$this->getState()->hydrate([
'message' => __('Run Test-Request for %s', $dataSet->dataSet),
'id' => $dataSet->dataSetId,
'data' => $data
]);
}
}
Base.php 0000644 00000031727 14716415766 0006162 0 ustar 00 .
*/
namespace Xibo\Controller;
use Slim\Slim;
use Slim\Views\Twig;
use Xibo\Entity\User;
use Xibo\Exception\ConfigurationException;
use Xibo\Exception\ControllerNotImplemented;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
/**
* Class Base
* @package Xibo\Controller
*
* Base for all Controllers.
*
* Controllers are initialised with setApp($app) where $app is the hosting Slim application.
* Controllers should manipulate the Slim applications $app->state object to represent the data which will be output
* to the view layer (either app or API).
*/
class Base
{
/**
* @var Slim
*/
protected $app;
/**
* @var LogServiceInterface
*/
private $log;
/**
* @var SanitizerServiceInterface
*/
private $sanitizerService;
/**
* @var \Xibo\Helper\ApplicationState
*/
private $state;
/**
* @var \Xibo\Service\HelpServiceInterface
*/
private $helpService;
/**
* @var \Xibo\Service\DateServiceInterface
*/
private $dateService;
/**
* @var ConfigServiceInterface
*/
private $configService;
/**
* @var User
*/
private $user;
/**
* Automatically output a full page if non-ajax request arrives
* @var bool
*/
private $fullPage = true;
/**
* Have we already rendered this controller.
* @var bool
*/
private $rendered = false;
/**
* Is this controller expected to output anything?
* @var bool
*/
private $noOutput = false;
/**
* Called by Slim when the Controller is instantiated from a route definition
* @param Slim $app
* @param bool $setController
* @return $this
*/
public function setApp($app, $setController = true)
{
$this->app = $app;
// Reference back to this from the app
// but only the first time
if ($app->controller == null && $setController)
$app->controller = $this;
return $this;
}
/**
* Get the App
* @return Slim
* @throws ConfigurationException
*/
public function getApp()
{
if ($this->app == null)
throw new ConfigurationException(__('Controller called before Slim has been setup'));
return $this->app;
}
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @return $this
*/
protected function setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config)
{
$this->log = $log;
$this->sanitizerService = $sanitizerService;
$this->state = $state;
$this->user = $user;
$this->helpService = $help;
$this->dateService = $date;
$this->configService = $config;
return $this;
}
/**
* Get the Current User
* @return \Xibo\Entity\User
*/
public function getUser()
{
return $this->user;
}
/**
* Get the Application State
* @return \Xibo\Helper\ApplicationState
*/
protected function getState()
{
return $this->state;
}
/**
* Get Log
* @return LogServiceInterface
*/
public function getLog()
{
return $this->log;
}
/**
* Get Sanitizer
* @return SanitizerServiceInterface
*/
protected function getSanitizer()
{
return $this->sanitizerService;
}
/**
* Get Help
* @return \Xibo\Service\HelpServiceInterface
*/
protected function getHelp()
{
return $this->helpService;
}
/**
* Get Date
* @return DateServiceInterface
*/
protected function getDate()
{
return $this->dateService;
}
/**
* Get Config
* @return ConfigServiceInterface
*/
public function getConfig()
{
return $this->configService;
}
/**
* Is this the Api?
* @return bool
*/
protected function isApi()
{
return ($this->getApp()->getName() != 'web');
}
/**
* Get Url For Route
* @param string $route
* @param array[mixed] $params
* @return string
*/
protected function urlFor($route, $params = array())
{
return $this->getApp()->urlFor($route, $params);
}
/**
* Get Flash Message
* @param $key
* @return string
*/
protected function getFlash($key)
{
$template = $this->getApp()->view()->get('flash');
return isset($template[$key]) ? $template[$key] : '';
}
/**
* Set to not output a full page automatically
*/
public function setNotAutomaticFullPage()
{
$this->fullPage = false;
}
/**
* Set No output
* @param bool $bool
*/
public function setNoOutput($bool = true)
{
$this->noOutput = $bool;
}
/**
* End the controller execution, calling render
* @throws ControllerNotImplemented if the controller is not implemented correctly
*/
public function render()
{
if ($this->rendered || $this->noOutput)
return;
$app = $this->getApp();
// State will contain the current ApplicationState, including a success flag that can be used to determine
// if we are in error or not.
$state = $this->getState();
$data = $state->getData();
// Grid requests require some extra info appended.
// they can come from any application, hence being dealt with first
$grid = ($state->template === 'grid');
if ($grid) {
$recordsTotal = ($state->recordsTotal == null) ? count($data) : $state->recordsTotal;
$recordsFiltered = ($state->recordsFiltered == null) ? $recordsTotal : $state->recordsFiltered;
$data = [
'draw' => intval($this->getSanitizer()->getInt('draw')),
'recordsTotal' => $recordsTotal,
'recordsFiltered' => $recordsFiltered,
'data' => $data
];
}
// API Request
if ($this->isApi()) {
// Envelope by default - the APIView will un-pack if necessary
$data = [
'grid' => $grid,
'success' => $state->success,
'status' => $state->httpStatus,
'message' => $state->message,
'id' => $state->id,
'data' => $data
];
$this->getApp()->render('', $data, $state->httpStatus);
}
else if ($this->getApp()->request->isAjax()) {
// WEB Ajax
$app->response()->header('Content-Type', 'application/json');
// Are we a template that should be rendered to HTML
// and then returned?
if ($state->template != '' && $state->template != 'grid') {
$this->renderTwigAjaxReturn($data, $app, $state);
}
// We always return 200's
// TODO: we might want to change this (we'd need to change the javascript to suit)
$app->status(200);
$app->response()->body(($grid) ? json_encode($data) : $state->asJson());
}
else {
// WEB Normal
if (empty($state->template)) {
$this->getLog()->debug('Template Missing. State: %s', json_encode($state));
throw new ControllerNotImplemented(__('Template Missing'));
}
// Append the side bar content
$data['clock'] = $this->getDate()->getLocalDate(null, 'H:i T');
$data['currentUser'] = $this->getUser();
$app->render($state->template . '.twig', $data, $state->httpStatus);
}
$this->rendered = true;
}
/**
* Set the filter
* @param array[Optional] $extraFilter
* @return array
*/
protected function gridRenderFilter($extraFilter = [])
{
$app = $this->getApp();
// Handle filtering
$filter = [
'start' => $this->getSanitizer()->getInt('start', 0),
'length' => $this->getSanitizer()->getInt('length', 10)
];
$search = $app->request->get('search', array());
if (is_array($search) && isset($search['value'])) {
$filter['search'] = $search['value'];
}
else if ($search != '') {
$filter['search'] = $search;
}
// Merge with any extra filter items that have been provided
$filter = array_merge($extraFilter, $filter);
return $filter;
}
/**
* Set the sort order
* @return array
* @throws \Xibo\Exception\ConfigurationException
*/
protected function gridRenderSort()
{
$app = $this->getApp();
$columns = $app->request()->get('columns');
if ($columns === null || !is_array($columns) || count($columns) <= 0) {
return null;
}
$order = $app->request()->get('order');
if ($order === null || !is_array($order) || count($order) <= 0) {
return null;
}
return array_map(function ($element) use ($columns) {
return ((isset($columns[$element['column']]['name']) && $columns[$element['column']]['name'] != '')
? '`' . $columns[$element['column']]['name'] . '`'
: '`' . $columns[$element['column']]['data'] . '`')
. (($element['dir'] == 'desc') ? ' DESC' : '');
}, $order);
}
/**
* @param $data
* @param $app
* @param $state
* @throws ControllerNotImplemented
*/
public function renderTwigAjaxReturn($data, $app, $state)
{
// Supply the current user to the view
$data['currentUser'] = $this->getUser();
// Render the view manually with Twig, parse it and pull out various bits
$view = $app->view()->render($state->template . '.twig', $data);
// Log Rendered View
// $this->getLog()->debug('%s View: %s', $state->template, $view);
if (!$view = json_decode($view, true)) {
$this->getLog()->error('Problem with Template: View = %s ', $state->template);
throw new ControllerNotImplemented(__('Problem with Form Template'));
}
$state->html = $view['html'];
$state->dialogTitle = trim($view['title']);
$state->callBack = $view['callBack'];
$state->extra = $view['extra'];
// Process the buttons
$state->buttons = [];
// Expect each button on a new line
if (trim($view['buttons']) != '') {
// Convert to an array
$view['buttons'] = str_replace("\n\r", "\n", $view['buttons']);
$buttons = explode("\n", $view['buttons']);
foreach ($buttons as $button) {
if ($button == '')
continue;
$this->getLog()->debug('Button is ' . $button);
$button = explode(',', trim($button));
if (count($button) != 2) {
$this->getLog()->error('There is a problem with the buttons in the template: %s. Buttons: %s.', $state->template, var_export($view['buttons'], true));
throw new ControllerNotImplemented(__('Problem with Form Template'));
}
$state->buttons[trim($button[0])] = str_replace('|', ',', trim($button[1]));
}
}
// Process the fieldActions
if (trim($view['fieldActions']) == '') {
$state->fieldActions = [];
} else {
// Convert to an array
$state->fieldActions = json_decode($view['fieldActions']);
}
}
/**
* Render a template to string
* @param string $template
* @param array $data
* @return string
* @throws ConfigurationException
*/
public function renderTemplateToString($template, $data)
{
/** @var Twig $view */
$view = $this->getApp()->view();
return $view->render($template . '.twig', $data);
}
} PlaylistDashboard.php 0000644 00000021745 14716415766 0010720 0 ustar 00 .
*/
namespace Xibo\Controller;
use Xibo\Exception\AccessDeniedException;
use Xibo\Exception\XiboException;
use Xibo\Helper\XiboUploadHandler;
/**
* Class PlaylistDashboard
* @package Xibo\Controller
*/
class PlaylistDashboard extends Base
{
/** @var \Xibo\Factory\PlaylistFactory */
private $playlistFactory;
/** @var \Xibo\Factory\ModuleFactory */
private $moduleFactory;
/** @var \Xibo\Factory\WidgetFactory */
private $widgetFactory;
/** @var \Xibo\Factory\LayoutFactory */
private $layoutFactory;
/** @var \Xibo\Factory\DisplayGroupFactory */
private $displayGroupFactory;
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $playlistFactory, $moduleFactory, $widgetFactory, $layoutFactory, $displayGroupFactory)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->playlistFactory = $playlistFactory;
$this->moduleFactory = $moduleFactory;
$this->widgetFactory = $widgetFactory;
$this->layoutFactory = $layoutFactory;
$this->displayGroupFactory = $displayGroupFactory;
}
public function displayPage()
{
// Do we have a Playlist already in our User Preferences?
$playlist = null;
try {
$playlistId = $this->getUser()->getOption('playlistDashboardSelectedPlaylistId');
if ($playlistId->value != 0) {
$playlist = $this->playlistFactory->getById($playlistId->value);
}
} catch (XiboException $exception) {
$this->getLog()->error('Problem getting playlistDashboardSelectedPlaylistId user option. e = ' . $exception->getMessage());
}
$this->getState()->template = 'playlist-dashboard';
$this->getState()->setData([
'playlist' => $playlist,
'validExtensions' => implode('|', $this->moduleFactory->getValidExtensions())
]);
}
/**
* Grid used for the Playlist drop down list
*/
public function grid()
{
// Playlists
$playlists = $this->playlistFactory->query($this->gridRenderSort(), $this->gridRenderFilter([
'name' => $this->getSanitizer()->getString('name'),
'regionSpecific' => 0
]));
$this->getState()->template = 'grid';
$this->getState()->recordsTotal = $this->playlistFactory->countLast();
$this->getState()->setData($playlists);
}
/**
* Show a particular playlist
* the output from this is very much like a form.
* @param $playlistId
* @throws \Xibo\Exception\NotFoundException
*/
public function show($playlistId)
{
// Record this Playlist as the one we have currently selected.
try {
$this->getUser()->setOptionValue('playlistDashboardSelectedPlaylistId', $playlistId);
$this->getUser()->save();
} catch (XiboException $exception) {
$this->getLog()->error('Problem setting playlistDashboardSelectedPlaylistId user option. e = ' . $exception->getMessage());
}
// Spots
$spotsFound = 0;
$playlist = $this->playlistFactory->getById($playlistId);
// Only edit permissions
if (!$this->getUser()->checkEditable($playlist)) {
throw new AccessDeniedException();
}
// Load my Playlist and information about its widgets
$playlist->load();
foreach ($playlist->widgets as $widget) {
// Create a module for the widget and load in some extra data
$widget->module = $this->moduleFactory->createWithWidget($widget);
// Check my permissions
if ($widget->module->getModule()->regionSpecific == 0) {
$widget->viewble = $this->getUser()->checkViewable($widget->module->getMedia());
$widget->editable = $this->getUser()->checkEditable($widget->module->getMedia());
$widget->deletable = $this->getUser()->checkDeleteable($widget->module->getMedia());
} else {
$widget->viewble = $this->getUser()->checkViewable($widget);
$widget->editable = $this->getUser()->checkEditable($widget);
$widget->deletable = $this->getUser()->checkDeleteable($widget);
}
}
// Work out the slot size of the first sub-playlist we are in.
foreach ($this->playlistFactory->query(null, ['childId' => $playlist->playlistId, 'depth' => 1, 'disableUserCheck' => 1]) as $parent) {
// $parent is a playlist to which we belong.
$this->getLog()->debug('This playlist is a sub-playlist in ' . $parent->name . '.');
$parent->load();
foreach ($parent->widgets as $parentWidget) {
if ($parentWidget->type === 'subplaylist') {
// Create a SubPlaylist widget so we can easily get the items we want.
$subPlaylist = $this->moduleFactory->createWithWidget($parentWidget);
$subPlaylistOptions = $subPlaylist->getSubPlaylistOptions($playlist->playlistId);
// This will be included?
$spotCount = isset($subPlaylistOptions['subPlaylistIdSpots']) ? intval($subPlaylistOptions['subPlaylistIdSpots']) : 0;
// Take the highest number of Spots we can find out of all the assignments.
$spotsFound = ($spotCount > $spotsFound) ? $spotCount : $spotsFound;
// Assume this one isn't in the list more than one time.
break;
}
}
}
$this->getState()->template = 'playlist-dashboard-spots';
$this->getState()->setData([
'playlist' => $playlist,
'spotsFound' => $spotsFound
]);
}
/**
* Delete Playlist Widget Form
* @param int $widgetId
* @throws XiboException
*/
public function deletePlaylistWidgetForm($widgetId)
{
$module = $this->moduleFactory->createWithWidget($this->widgetFactory->loadByWidgetId($widgetId));
if (!$this->getUser()->checkDeleteable($module->widget))
throw new AccessDeniedException();
// Set some dependencies that are used in the delete
$module->setChildObjectDependencies($this->layoutFactory, $this->widgetFactory, $this->displayGroupFactory);
// Pass to view
$this->getState()->template = 'playlist-module-form-delete';
$this->getState()->setData([
'module' => $module,
'help' => $this->getHelp()->link('Media', 'Delete')
]);
}
/**
* Upload adding/replacing accordingly
* @throws \Exception
*/
public function upload()
{
$libraryFolder = $this->getConfig()->GetSetting('LIBRARY_LOCATION');
// Get Valid Extensions
$validExt = $this->moduleFactory->getValidExtensions();
// pass in a library controller to handle the extra functions needed
$libraryController = $this->getApp()->container->get('\Xibo\Controller\Library');
$options = [
'userId' => $this->getUser()->userId,
'controller' => $libraryController,
'oldMediaId' => $this->getSanitizer()->getInt('oldMediaId'),
'widgetId' => $this->getSanitizer()->getInt('widgetId'),
'updateInLayouts' => 1,
'deleteOldRevisions' => 1,
'allowMediaTypeChange' => 1,
'playlistId' => $this->getSanitizer()->getInt('playlistId'),
'upload_dir' => $libraryFolder . 'temp/',
'download_via_php' => true,
'script_url' => $this->urlFor('library.add'),
'upload_url' => $this->urlFor('library.add'),
'image_versions' => [],
'accept_file_types' => '/\.' . implode('|', $validExt) . '$/i',
'libraryLimit' => ($this->getConfig()->GetSetting('LIBRARY_SIZE_LIMIT_KB') * 1024),
'libraryQuotaFull' => false,
'expires' => 0
];
// Output handled by UploadHandler
$this->setNoOutput(true);
$this->getLog()->debug('Hand off to Upload Handler with options: ' . json_encode($options));
// Hand off to the Upload Handler provided by jquery-file-upload
new XiboUploadHandler($options);
}
} Help.php 0000644 00000014101 14716415766 0006163 0 ustar 00 .
*/
namespace Xibo\Controller;
use Xibo\Exception\AccessDeniedException;
use Xibo\Factory\HelpFactory;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
/**
* Class Help
* @package Xibo\Controller
*/
class Help extends Base
{
/**
* @var HelpFactory
*/
private $helpFactory;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param HelpFactory $helpFactory
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $helpFactory)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->helpFactory = $helpFactory;
}
/**
* Help Page
*/
function displayPage()
{
$this->getState()->template = 'help-page';
}
public function grid()
{
$helpLinks = $this->helpFactory->query($this->gridRenderSort(), $this->gridRenderFilter());
foreach ($helpLinks as $row) {
/* @var \Xibo\Entity\Help $row */
// we only want to show certain buttons, depending on the user logged in
if ($this->getUser()->userTypeId == 1) {
// Edit
$row->buttons[] = array(
'id' => 'help_button_edit',
'url' => $this->urlFor('help.edit.form', ['id' => $row->helpId]),
'text' => __('Edit')
);
// Delete
$row->buttons[] = array(
'id' => 'help_button_delete',
'url' => $this->urlFor('help.delete.form', ['id' => $row->helpId]),
'text' => __('Delete')
);
// Test
$row->buttons[] = array(
'id' => 'help_button_test',
'linkType' => '_self', 'external' => true,
'url' => $this->getHelp()->link($row->topic, $row->category),
'text' => __('Test')
);
}
}
$this->getState()->template = 'grid';
$this->getState()->recordsTotal = $this->helpFactory->countLast();
$this->getState()->setData($helpLinks);
}
/**
* Add Form
*/
public function addForm()
{
if ($this->getUser()->userTypeId != 1)
throw new AccessDeniedException();
$this->getState()->template = 'help-form-add';
}
/**
* Help Edit form
* @param int $helpId
*/
public function editForm($helpId)
{
if ($this->getUser()->userTypeId != 1)
throw new AccessDeniedException();
$help = $this->helpFactory->getById($helpId);
$this->getState()->template = 'help-form-edit';
$this->getState()->setData([
'help' => $help
]);
}
/**
* Delete Help Link Form
* @param int $helpId
*/
public function deleteForm($helpId)
{
if ($this->getUser()->userTypeId != 1)
throw new AccessDeniedException();
$help = $this->helpFactory->getById($helpId);
$this->getState()->template = 'help-form-delete';
$this->getState()->setData([
'help' => $help
]);
}
/**
* Adds a help link
*/
public function add()
{
if ($this->getUser()->userTypeId != 1)
throw new AccessDeniedException();
$help = $this->helpFactory->createEmpty();
$help->topic = $this->getSanitizer()->getString('topic');
$help->category = $this->getSanitizer()->getString('category');
$help->link = $this->getSanitizer()->getString('link');
$help->save();
// Return
$this->getState()->hydrate([
'message' => sprintf(__('Added %s'), $help->topic),
'id' => $help->helpId,
'data' => $help
]);
}
/**
* Edits a help link
* @param int $helpId
*/
public function edit($helpId)
{
if ($this->getUser()->userTypeId != 1)
throw new AccessDeniedException();
$help = $this->helpFactory->getById($helpId);
$help->topic = $this->getSanitizer()->getString('topic');
$help->category = $this->getSanitizer()->getString('category');
$help->link = $this->getSanitizer()->getString('link');
$help->save();
// Return
$this->getState()->hydrate([
'message' => sprintf(__('Edited %s'), $help->topic),
'id' => $help->helpId,
'data' => $help
]);
}
/**
* Delete
* @param int $helpId
* @throws \Xibo\Exception\NotFoundException
*/
public function delete($helpId)
{
if ($this->getUser()->userTypeId != 1)
throw new AccessDeniedException();
$help = $this->helpFactory->getById($helpId);
$help->delete();
// Return
$this->getState()->hydrate([
'message' => sprintf(__('Deleted %s'), $help->topic)
]);
}
}
Sessions.php 0000644 00000010617 14716415766 0007111 0 ustar 00 .
*/
namespace Xibo\Controller;
use Jenssegers\Date\Date;
use Xibo\Exception\AccessDeniedException;
use Xibo\Factory\SessionFactory;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
use Xibo\Storage\StorageServiceInterface;
/**
* Class Sessions
* @package Xibo\Controller
*/
class Sessions extends Base
{
/**
* @var StorageServiceInterface
*/
private $store;
/**
* @var SessionFactory
*/
private $sessionFactory;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param StorageServiceInterface $store
* @param SessionFactory $sessionFactory
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $store, $sessionFactory)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->store = $store;
$this->sessionFactory = $sessionFactory;
}
function displayPage()
{
$this->getState()->template = 'sessions-page';
}
function grid()
{
$sessions = $this->sessionFactory->query($this->gridRenderSort(), $this->gridRenderFilter([
'type' => $this->getSanitizer()->getString('type'),
'fromDt' => $this->getSanitizer()->getString('fromDt')
]));
foreach ($sessions as $row) {
/* @var \Xibo\Entity\Session $row */
// Normalise the date
$row->lastAccessed = $this->getDate()->getLocalDate(Date::createFromFormat($this->getDate()->getSystemFormat(), $row->lastAccessed));
if (!$this->isApi() && $this->getUser()->isSuperAdmin()) {
$row->includeProperty('buttons');
// Edit
$row->buttons[] = array(
'id' => 'sessions_button_logout',
'url' => $this->urlFor('sessions.confirm.logout.form', ['id' => $row->sessionId]),
'text' => __('Logout')
);
}
}
$this->getState()->template = 'grid';
$this->getState()->recordsTotal = $this->sessionFactory->countLast();
$this->getState()->setData($sessions);
}
/**
* Confirm Logout Form
* @param int $sessionId
*/
function confirmLogoutForm($sessionId)
{
if ($this->getUser()->userTypeId != 1)
throw new AccessDeniedException();
$this->getState()->template = 'sessions-form-confirm-logout';
$this->getState()->setData([
'sessionId' => $sessionId,
'help' => $this->getHelp()->link('Sessions', 'Logout')
]);
}
/**
* Logout
* @param int $sessionId
*/
function logout($sessionId)
{
if ($this->getUser()->userTypeId != 1)
throw new AccessDeniedException();
$session = $this->sessionFactory->getById($sessionId);
if ($session->userId != 0)
$this->store->update('UPDATE `session` SET IsExpired = 1 WHERE userID = :userId ', ['userId' => $session->userId]);
else
$this->store->update('UPDATE `session` SET IsExpired = 1 WHERE session_id = :session_id ', ['session_id' => $sessionId]);
// Return
$this->getState()->hydrate([
'message' => __('User Logged Out.')
]);
}
}
Logging.php 0000644 00000012176 14716415766 0006673 0 ustar 00 .
*/
namespace Xibo\Controller;
use Jenssegers\Date\Date;
use Xibo\Exception\AccessDeniedException;
use Xibo\Factory\DisplayFactory;
use Xibo\Factory\LogFactory;
use Xibo\Factory\UserFactory;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
use Xibo\Storage\StorageServiceInterface;
/**
* Class Logging
* @package Xibo\Controller
*/
class Logging extends Base
{
/**
* @var LogFactory
*/
private $logFactory;
/** @var StorageServiceInterface */
private $store;
/**
* @var DisplayFactory
*/
private $displayFactory;
/** @var UserFactory */
private $userFactory;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param StorageServiceInterface $store
* @param LogFactory $logFactory
* @param DisplayFactory $displayFactory
* @param UserFactory $userFactory
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $store, $logFactory, $displayFactory, $userFactory)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->store = $store;
$this->logFactory = $logFactory;
$this->displayFactory = $displayFactory;
$this->userFactory = $userFactory;
}
public function displayPage()
{
$this->getState()->template = 'log-page';
$this->getState()->setData([
'users' => $this->userFactory->query()
]);
}
function grid()
{
// Date time criteria
$seconds = $this->getSanitizer()->getInt('seconds', 120);
$intervalType = $this->getSanitizer()->getInt('intervalType', 1);
$fromDt = $this->getSanitizer()->getDate('fromDt', $this->getDate()->getLocalDate());
$logs = $this->logFactory->query($this->gridRenderSort(), $this->gridRenderFilter([
'fromDt' => $fromDt->format('U') - ($seconds * $intervalType),
'toDt' => $fromDt->format('U'),
'type' => $this->getSanitizer()->getString('level'),
'page' => $this->getSanitizer()->getString('page'),
'channel' => $this->getSanitizer()->getString('channel'),
'function' => $this->getSanitizer()->getString('function'),
'displayId' => $this->getSanitizer()->getInt('displayId'),
'userId' => $this->getSanitizer()->getInt('userId'),
'excludeLog' => $this->getSanitizer()->getCheckbox('excludeLog'),
'runNo' => $this->getSanitizer()->getString('runNo'),
'message' => $this->getSanitizer()->getString('message'),
'display' => $this->getSanitizer()->getString('display'),
'useRegexForName' => $this->getSanitizer()->getCheckbox('useRegexForName'),
'displayGroupId' => $this->getSanitizer()->getInt('displayGroupId'),
]));
foreach ($logs as $log) {
// Normalise the date
$log->logDate = $this->getDate()->getLocalDate(Date::createFromFormat($this->getDate()->getSystemFormat(), $log->logDate));
}
$this->getState()->template = 'grid';
$this->getState()->recordsTotal = $this->logFactory->countLast();
$this->getState()->setData($logs);
}
/**
* Truncate Log Form
*/
public function truncateForm()
{
if ($this->getUser()->userTypeId != 1)
throw new AccessDeniedException(__('Only Administrator Users can truncate the log'));
$this->getState()->template = 'log-form-truncate';
$this->getState()->setData([
'help' => $this->getHelp()->link('Log', 'Truncate')
]);
}
/**
* Truncate the Log
*/
public function truncate()
{
if ($this->getUser()->userTypeId != 1)
throw new AccessDeniedException(__('Only Administrator Users can truncate the log'));
$this->store->update('TRUNCATE TABLE log', array());
// Return
$this->getState()->hydrate([
'message' => __('Log Truncated')
]);
}
}
Clock.php 0000644 00000005431 14716415766 0006334 0 ustar 00 .
*/
namespace Xibo\Controller;
use Xibo\Helper\Session;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
/**
* Class Clock
* @package Xibo\Controller
*/
class Clock extends Base
{
/**
* @var Session
*/
private $session;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param Session $session
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $session)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->session = $session;
}
/**
* Gets the Time
*
* @SWG\Get(
* path="/clock",
* operationId="clock",
* tags={"misc"},
* description="The Time",
* summary="The current CMS time",
* @SWG\Response(
* response=200,
* description="successful response",
* @SWG\Schema(
* type="object",
* additionalProperties={"title":"time", "type":"string"}
* )
* )
* )
*
* @throws \Exception
*/
public function clock()
{
$this->session->refreshExpiry = false;
if ($this->getApp()->request()->isAjax() || $this->isApi()) {
$output = $this->getDate()->getLocalDate(null, 'H:i T');
$this->getState()->setData(array('time' => $output));
$this->getState()->html = $output;
$this->getState()->clockUpdate = true;
$this->getState()->success = true;
} else {
$this->setNoOutput(true);
echo $this->getDate()->getLocalDate(null, 'c');
}
}
}
User.php 0000644 00000173501 14716415766 0006223 0 ustar 00 .
*/
namespace Xibo\Controller;
use RobThree\Auth\TwoFactorAuth;
use Xibo\Entity\Campaign;
use Xibo\Entity\Layout;
use Xibo\Entity\Media;
use Xibo\Entity\Permission;
use Xibo\Entity\Playlist;
use Xibo\Entity\Region;
use Xibo\Entity\Widget;
use Xibo\Exception\AccessDeniedException;
use Xibo\Exception\ConfigurationException;
use Xibo\Exception\InvalidArgumentException;
use Xibo\Exception\XiboException;
use Xibo\Factory\ApplicationFactory;
use Xibo\Factory\CampaignFactory;
use Xibo\Factory\DataSetFactory;
use Xibo\Factory\DisplayFactory;
use Xibo\Factory\DisplayGroupFactory;
use Xibo\Factory\LayoutFactory;
use Xibo\Factory\MediaFactory;
use Xibo\Factory\PageFactory;
use Xibo\Factory\PermissionFactory;
use Xibo\Factory\PlayerVersionFactory;
use Xibo\Factory\PlaylistFactory;
use Xibo\Factory\ScheduleFactory;
use Xibo\Factory\SessionFactory;
use Xibo\Factory\UserFactory;
use Xibo\Factory\UserGroupFactory;
use Xibo\Factory\UserTypeFactory;
use Xibo\Factory\WidgetFactory;
use Xibo\Helper\ByteFormatter;
use Xibo\Helper\QuickChartQRProvider;
use Xibo\Helper\Random;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
/**
* Class User
* @package Xibo\Controller
*/
class User extends Base
{
/**
* @var UserFactory
*/
private $userFactory;
/**
* @var UserTypeFactory
*/
private $userTypeFactory;
/**
* @var UserGroupFactory
*/
private $userGroupFactory;
/**
* @var PageFactory
*/
private $pageFactory;
/**
* @var PermissionFactory
*/
private $permissionFactory;
/**
* @var LayoutFactory
*/
private $layoutFactory;
/**
* @var ApplicationFactory
*/
private $applicationFactory;
/**
* @var CampaignFactory
*/
private $campaignFactory;
/**
* @var MediaFactory
*/
private $mediaFactory;
/**
* @var ScheduleFactory
*/
private $scheduleFactory;
/** @var DisplayFactory */
private $displayFactory;
/** @var SessionFactory */
private $sessionFactory;
/** @var DisplayGroupFactory */
private $displayGroupFactory;
/** @var WidgetFactory */
private $widgetFactory;
/** @var PlayerVersionFactory */
private $playerVersionFactory;
/** @var PlaylistFactory */
private $playlistFactory;
/** @var DataSetFactory */
private $dataSetFactory;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param UserFactory $userFactory
* @param UserTypeFactory $userTypeFactory
* @param UserGroupFactory $userGroupFactory
* @param PageFactory $pageFactory
* @param PermissionFactory $permissionFactory
* @param LayoutFactory $layoutFactory
* @param ApplicationFactory $applicationFactory
* @param CampaignFactory $campaignFactory
* @param MediaFactory $mediaFactory
* @param ScheduleFactory $scheduleFactory
* @param DisplayFactory $displayFactory
* @param SessionFactory $sessionFactory
* @param DisplayGroupFactory $displayGroupFactory
* @param WidgetFactory $widgetFactory
* @param PlayerVersionFactory $playerVersionFactory
* @param PlaylistFactory $playlistFactory
* @param DataSetFactory $dataSetFactory
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $userFactory,
$userTypeFactory, $userGroupFactory, $pageFactory, $permissionFactory,
$layoutFactory, $applicationFactory, $campaignFactory, $mediaFactory, $scheduleFactory, $displayFactory, $sessionFactory, $displayGroupFactory, $widgetFactory, $playerVersionFactory, $playlistFactory, $dataSetFactory)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->userFactory = $userFactory;
$this->userTypeFactory = $userTypeFactory;
$this->userGroupFactory = $userGroupFactory;
$this->pageFactory = $pageFactory;
$this->permissionFactory = $permissionFactory;
$this->layoutFactory = $layoutFactory;
$this->applicationFactory = $applicationFactory;
$this->campaignFactory = $campaignFactory;
$this->mediaFactory = $mediaFactory;
$this->scheduleFactory = $scheduleFactory;
$this->displayFactory = $displayFactory;
$this->sessionFactory = $sessionFactory;
$this->displayGroupFactory = $displayGroupFactory;
$this->widgetFactory = $widgetFactory;
$this->playerVersionFactory = $playerVersionFactory;
$this->playlistFactory = $playlistFactory;
$this->dataSetFactory = $dataSetFactory;
}
/**
* Controls which pages are to be displayed
*/
function displayPage()
{
$this->getState()->template = 'user-page';
$this->getState()->setData([
'userTypes' => $this->userTypeFactory->query()
]);
}
/**
* Me
*
* @SWG\Get(
* path="/user/me",
* operationId="userMe",
* tags={"user"},
* summary="Get Me",
* description="Get my details",
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/User")
* )
* )
*/
public function myDetails()
{
// Return
$this->getState()->hydrate([
'httpStatus' => 200,
'data' => $this->getUser()
]);
}
/**
* Prints the user information in a table based on a check box selection
*
* @SWG\Get(
* path="/user",
* operationId="userSearch",
* tags={"user"},
* summary="User Search",
* description="Search users",
* @SWG\Parameter(
* name="userId",
* in="query",
* description="Filter by User Id",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="userName",
* in="query",
* description="Filter by User Name",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="userTypeId",
* in="query",
* description="Filter by UserType Id",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="retired",
* in="query",
* description="Filter by Retired",
* type="integer",
* required=false
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(
* type="array",
* @SWG\Items(ref="#/definitions/User")
* )
* )
* )
*/
function grid()
{
// Filter our users?
$filterBy = [
'userId' => $this->getSanitizer()->getInt('userId'),
'userTypeId' => $this->getSanitizer()->getInt('userTypeId'),
'userName' => $this->getSanitizer()->getString('userName'),
'useRegexForName' => $this->getSanitizer()->getCheckbox('useRegexForName'),
'retired' => $this->getSanitizer()->getInt('retired')
];
// Load results into an array
$users = $this->userFactory->query($this->gridRenderSort(), $this->gridRenderFilter($filterBy));
foreach ($users as $user) {
/* @var \Xibo\Entity\User $user */
$user->libraryQuotaFormatted = ByteFormatter::format($user->libraryQuota * 1024);
$user->loggedIn = $this->sessionFactory->getActiveSessionsForUser($user->userId);
$this->getLog()->debug('Logged in status for user ID ' . $user->userId . ' with name ' . $user->userName . ' is ' . $user->loggedIn);
// Set some text for the display status
switch ($user->twoFactorTypeId) {
case 1:
$user->twoFactorDescription = __('Email');
break;
case 2:
$user->twoFactorDescription = __('Google Authenticator');
break;
default:
$user->twoFactorDescription = __('Disabled');
}
if ($this->isApi()) {
continue;
}
$user->includeProperty('buttons');
$user->homePage = __($user->homePage);
// Super admins have some buttons
if ($this->getUser()->checkEditable($user)) {
// Edit
$user->buttons[] = [
'id' => 'user_button_edit',
'url' => $this->getApp()->urlFor('user.edit.form', ['id' => $user->userId]),
'text' => __('Edit')
];
}
if ($this->getUser()->isSuperAdmin()) {
// Delete
$user->buttons[] = [
'id' => 'user_button_delete',
'url' => $this->getApp()->urlFor('user.delete.form', ['id' => $user->userId]),
'text' => __('Delete')
];
}
if ($this->getUser()->checkPermissionsModifyable($user)) {
$user->buttons[] = ['divider' => true];
// User Groups
$user->buttons[] = array(
'id' => 'user_button_group_membership',
'url' => $this->urlFor('user.membership.form', ['id' => $user->userId]),
'text' => __('User Groups')
);
}
if ($this->getUser()->isSuperAdmin()) {
$user->buttons[] = ['divider' => true];
// Page Security
$user->buttons[] = [
'id' => 'user_button_page_security',
'url' => $this->urlFor('group.acl.form', ['id' => $user->groupId]),
'text' => __('Page Security')
];
}
}
$this->getState()->template = 'grid';
$this->getState()->recordsTotal = $this->userFactory->countLast();
$this->getState()->setData($users);
}
/**
* Adds a user
*
* @SWG\Post(
* path="/user",
* operationId="userAdd",
* tags={"user"},
* summary="Add User",
* description="Add a new User",
* @SWG\Parameter(
* name="userName",
* in="formData",
* description="The User Name",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="email",
* in="formData",
* description="The user email address",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="userTypeId",
* in="formData",
* description="The user type ID",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="homePageId",
* in="formData",
* description="The homepage to use for this User",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="libraryQuota",
* in="formData",
* description="The users library quota in kilobytes",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="password",
* in="formData",
* description="The users password",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="groupId",
* in="formData",
* description="The inital user group for this User",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="firstName",
* in="formData",
* description="The users first name",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="lastName",
* in="formData",
* description="The users last name",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="phone",
* in="formData",
* description="The users phone number",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="ref1",
* in="formData",
* description="Reference 1",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="ref2",
* in="formData",
* description="Reference 2",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="ref3",
* in="formData",
* description="Reference 3",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="ref4",
* in="formData",
* description="Reference 4",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="ref5",
* in="formData",
* description="Reference 5",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="newUserWizard",
* in="formData",
* description="Flag indicating whether to show the new user guide",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="hideNavigation",
* in="formData",
* description="Flag indicating whether to hide the navigation",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="isPasswordChangeRequired",
* in="formData",
* description="A flag indicating whether password change should be forced for this user",
* type="integer",
* required=false
* ),
* @SWG\Response(
* response=201,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/User"),
* @SWG\Header(
* header="Location",
* description="Location of the new record",
* type="string"
* )
* )
* )
*/
public function add()
{
// Only group admins or super admins can create Users.
if (!$this->getUser()->isSuperAdmin() && !$this->getUser()->isGroupAdmin())
throw new AccessDeniedException(__('Only super and group admins can create users'));
// Build a user entity and save it
$user = $this->userFactory->create();
$user->setChildAclDependencies($this->userGroupFactory, $this->pageFactory);
$user->userName = $this->getSanitizer()->getUserName('userName');
$user->email = $this->getSanitizer()->getString('email');
$user->homePageId = $this->getSanitizer()->getInt('homePageId');
$user->libraryQuota = $this->getSanitizer()->getInt('libraryQuota', 0);
$user->setNewPassword($this->getSanitizer()->getString('password'));
if ($this->getUser()->isSuperAdmin()) {
$user->userTypeId = $this->getSanitizer()->getInt('userTypeId');
$user->isSystemNotification = $this->getSanitizer()->getCheckbox('isSystemNotification');
$user->isDisplayNotification = $this->getSanitizer()->getCheckbox('isDisplayNotification');
} else {
$user->userTypeId = 3;
$user->isSystemNotification = 0;
$user->isDisplayNotification = 0;
}
$user->firstName = $this->getSanitizer()->getString('firstName');
$user->lastName = $this->getSanitizer()->getString('lastName');
$user->phone = $this->getSanitizer()->getString('phone');
$user->ref1 = $this->getSanitizer()->getString('ref1');
$user->ref2 = $this->getSanitizer()->getString('ref2');
$user->ref3 = $this->getSanitizer()->getString('ref3');
$user->ref4 = $this->getSanitizer()->getString('ref4');
$user->ref5 = $this->getSanitizer()->getString('ref5');
// Options
$user->newUserWizard = $this->getSanitizer()->getCheckbox('newUserWizard');
$user->setOptionValue('hideNavigation', $this->getSanitizer()->getCheckbox('hideNavigation'));
$user->isPasswordChangeRequired = $this->getSanitizer()->getCheckbox('isPasswordChangeRequired');
// Initial user group
$group = $this->userGroupFactory->getById($this->getSanitizer()->getInt('groupId'));
if ($group->isUserSpecific == 1)
throw new InvalidArgumentException(__('Invalid user group selected'), 'groupId');
// Save the user
$user->save();
// Assign the initial group
$group->assignUser($user);
$group->save(['validate' => false]);
// Test to see if the user group selected has permissions to see the homepage selected
// Make sure the user has permission to access this page.
if (!$user->checkViewable($this->pageFactory->getById($user->homePageId)))
throw new InvalidArgumentException(__('User does not have permission for this homepage'), 'homePageId');
// Return
$this->getState()->hydrate([
'httpStatus' => 201,
'message' => sprintf(__('Added %s'), $user->userName),
'id' => $user->userId,
'data' => $user
]);
}
/**
* Edit a user
*
* @SWG\Put(
* path="/user/{userId}",
* operationId="userEdit",
* tags={"user"},
* summary="Edit User",
* description="Edit existing User",
* @SWG\Parameter(
* name="userId",
* in="path",
* description="The user ID to edit",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="userName",
* in="formData",
* description="The User Name",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="email",
* in="formData",
* description="The user email address",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="userTypeId",
* in="formData",
* description="The user type ID",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="homePageId",
* in="formData",
* description="The homepage to use for this User",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="libraryQuota",
* in="formData",
* description="The users library quota in kilobytes",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="newPassword",
* in="formData",
* description="New User password",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="retypeNewPassword",
* in="formData",
* description="Repeat the new User password",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="retired",
* in="formData",
* description="Flag indicating whether to retire this user",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="firstName",
* in="formData",
* description="The users first name",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="lastName",
* in="formData",
* description="The users last name",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="phone",
* in="formData",
* description="The users phone number",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="ref1",
* in="formData",
* description="Reference 1",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="ref2",
* in="formData",
* description="Reference 2",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="ref3",
* in="formData",
* description="Reference 3",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="ref4",
* in="formData",
* description="Reference 4",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="ref5",
* in="formData",
* description="Reference 5",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="newUserWizard",
* in="formData",
* description="Flag indicating whether to show the new user guide",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="hideNavigation",
* in="formData",
* description="Flag indicating whether to hide the navigation",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="isPasswordChangeRequired",
* in="formData",
* description="A flag indicating whether password change should be forced for this user",
* type="integer",
* required=false
* ),
* @SWG\Response(
* response=201,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/User"),
* @SWG\Header(
* header="Location",
* description="Location of the new record",
* type="string"
* )
* )
* )
* @param $userId
* @throws \Xibo\Exception\NotFoundException
*/
public function edit($userId)
{
$user = $this->userFactory->getById($userId);
if (!$this->getUser()->checkEditable($user))
throw new AccessDeniedException();
// Build a user entity and save it
$user->setChildAclDependencies($this->userGroupFactory, $this->pageFactory);
$user->load();
$user->userName = $this->getSanitizer()->getUserName('userName');
$user->email = $this->getSanitizer()->getString('email');
$user->homePageId = $this->getSanitizer()->getInt('homePageId');
$user->libraryQuota = $this->getSanitizer()->getInt('libraryQuota');
$user->retired = $this->getSanitizer()->getCheckbox('retired');
if ($this->getUser()->isSuperAdmin()) {
$user->userTypeId = $this->getSanitizer()->getInt('userTypeId');
$user->isSystemNotification = $this->getSanitizer()->getCheckbox('isSystemNotification');
$user->isDisplayNotification = $this->getSanitizer()->getCheckbox('isDisplayNotification');
}
$user->firstName = $this->getSanitizer()->getString('firstName');
$user->lastName = $this->getSanitizer()->getString('lastName');
$user->phone = $this->getSanitizer()->getString('phone');
$user->ref1 = $this->getSanitizer()->getString('ref1');
$user->ref2 = $this->getSanitizer()->getString('ref2');
$user->ref3 = $this->getSanitizer()->getString('ref3');
$user->ref4 = $this->getSanitizer()->getString('ref4');
$user->ref5 = $this->getSanitizer()->getString('ref5');
// Options
$user->newUserWizard = $this->getSanitizer()->getCheckbox('newUserWizard');
$user->setOptionValue('hideNavigation', $this->getSanitizer()->getCheckbox('hideNavigation'));
$user->isPasswordChangeRequired = $this->getSanitizer()->getCheckbox('isPasswordChangeRequired');
// Make sure the user has permission to access this page.
if (!$user->checkViewable($this->pageFactory->getById($user->homePageId)))
throw new \InvalidArgumentException(__('User does not have permission for this homepage'));
// If we are a super admin
if ($this->getUser()->userTypeId == 1) {
$newPassword = $this->getSanitizer()->getString('newPassword');
$retypeNewPassword = $this->getSanitizer()->getString('retypeNewPassword');
$disableTwoFactor = $this->getSanitizer()->getCheckbox('disableTwoFactor');
if ($newPassword != null && $newPassword != '') {
// Make sure they are the same
if ($newPassword != $retypeNewPassword)
throw new \InvalidArgumentException(__('Passwords do not match'));
// Set the new password
$user->setNewPassword($newPassword);
}
// super admin can clear the twoFactorTypeId and secret for the user.
if ($disableTwoFactor) {
$user->clearTwoFactor();
}
}
// Save the user
$user->save();
// Return
$this->getState()->hydrate([
'message' => sprintf(__('Edited %s'), $user->userName),
'id' => $user->userId,
'data' => $user
]);
}
/**
* Deletes a User
*
* @SWG\Delete(
* path="/user/{userId}",
* operationId="userDelete",
* tags={"user"},
* summary="User Delete",
* description="Delete user",
* @SWG\Parameter(
* name="userId",
* in="path",
* description="Id of the user to delete",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="deleteAllItems",
* in="formData",
* description="Flag indicating whether to delete all items owned by that user",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="reassignUserId",
* in="formData",
* description="Reassign all items owned by this user to the specified user ID",
* type="integer",
* required=false
* ),
* @SWG\Response(
* response=204,
* description="successful operation",
* @SWG\Schema(
* type="array",
* @SWG\Items(ref="#/definitions/User")
* )
* )
* )
* @param $userId
* @throws \Xibo\Exception\NotFoundException
*/
public function delete($userId)
{
$user = $this->userFactory->getById($userId);
if (!$this->getUser()->checkDeleteable($user))
throw new AccessDeniedException();
$user->setChildAclDependencies($this->userGroupFactory, $this->pageFactory);
$user->setChildObjectDependencies($this->campaignFactory, $this->layoutFactory, $this->mediaFactory, $this->scheduleFactory, $this->displayFactory, $this->displayGroupFactory, $this->widgetFactory, $this->playerVersionFactory, $this->playlistFactory, $this->dataSetFactory);
if ($this->getSanitizer()->getCheckbox('deleteAllItems') != 1) {
// Do we have a userId to reassign content to?
if ($this->getSanitizer()->getInt('reassignUserId') != null) {
// Reassign all content owned by this user to the provided user
$this->getLog()->debug('Reassigning content to new userId: %d', $this->getSanitizer()->getInt('reassignUserId'));
$user->reassignAllTo($this->userFactory->getById($this->getSanitizer()->getInt('reassignUserId')));
} else {
// Check to see if we have any child data that would prevent us from deleting
$children = $user->countChildren();
if ($children > 0)
throw new \InvalidArgumentException(sprintf(__('This user cannot be deleted as it has %d child items'), $children));
}
}
// Delete the user
$user->delete();
// Return
$this->getState()->hydrate([
'message' => sprintf(__('Deleted %s'), $user->userName),
'id' => $user->userId
]);
}
/**
* User Add Form
*/
public function addForm()
{
// Only group admins or super admins can create Users.
if (!$this->getUser()->isSuperAdmin() && !$this->getUser()->isGroupAdmin())
throw new AccessDeniedException(__('Only super and group admins can create users'));
$defaultUserTypeId = 3;
foreach ($this->userTypeFactory->query(null, ['userType' => $this->getConfig()->getSetting('defaultUsertype')] ) as $defaultUserType) {
$defaultUserTypeId = $defaultUserType->userTypeId;
}
$this->getState()->template = 'user-form-add';
$this->getState()->setData([
'options' => [
'homepage' => $this->pageFactory->query(null, ['asHome' => 1]),
'groups' => $this->userGroupFactory->query(),
'userTypes' => ($this->getUser()->isSuperAdmin()) ? $this->userTypeFactory->getAllRoles() : $this->userTypeFactory->getNonAdminRoles(),
'defaultGroupId' => $this->getConfig()->getSetting('DEFAULT_USERGROUP'),
'defaultUserType' => $defaultUserTypeId
],
'help' => [
'add' => $this->getHelp()->link('User', 'Add')
]
]);
}
/**
* User Edit Form
* @param $userId
* @throws \Xibo\Exception\NotFoundException
*/
public function editForm($userId)
{
$user = $this->userFactory->getById($userId);
$user->setChildAclDependencies($this->userGroupFactory, $this->pageFactory);
if (!$this->getUser()->checkEditable($user))
throw new AccessDeniedException();
$this->getState()->template = 'user-form-edit';
$this->getState()->setData([
'user' => $user,
'options' => [
'homepage' => $this->pageFactory->getForHomepage(),
'userTypes' => $this->userTypeFactory->query()
],
'help' => [
'edit' => $this->getHelp()->link('User', 'Edit')
]
]);
}
/**
* User Delete Form
* @param $userId
* @throws \Xibo\Exception\NotFoundException
*/
public function deleteForm($userId)
{
$user = $this->userFactory->getById($userId);
if (!$this->getUser()->checkDeleteable($user))
throw new AccessDeniedException();
$this->getState()->template = 'user-form-delete';
$this->getState()->setData([
'user' => $user,
'users' => $this->userFactory->query(null, ['notUserId' => $userId]),
'help' => [
'delete' => $this->getHelp()->link('User', 'Delete')
]
]);
}
/**
* Change my password form
* @throws \RobThree\Auth\TwoFactorAuthException
*/
public function editProfileForm()
{
$user = $this->getUser();
$this->getState()->template = 'user-form-edit-profile';
$this->getState()->setData([
'user' => $user,
'help' => [
'editProfile' => $this->getHelp()->link('User', 'EditProfile')
],
'data' => [
'setup' => $this->urlFor('user.setup.profile'),
'generate' => $this->urlFor('user.recovery.generate.profile'),
'show' => $this->urlFor('user.recovery.show.profile'),
]
]);
}
/**
* Change my Password
* @throws InvalidArgumentException
* @throws \RobThree\Auth\TwoFactorAuthException
* @throws XiboException
*/
public function editProfile()
{
$user = $this->getUser();
// get all other values from the form
$oldPassword = $this->getSanitizer()->getString('password');
$newPassword = $this->getSanitizer()->getString('newPassword');
$retypeNewPassword = $this->getSanitizer()->getString('retypeNewPassword');
$user->email = $this->getSanitizer()->getString('email');
$user->twoFactorTypeId = $this->getSanitizer()->getInt('twoFactorTypeId');
$code = $this->getSanitizer()->getString('code');
$recoveryCodes = $this->getSanitizer()->getStringArray('twoFactorRecoveryCodes');
if ($recoveryCodes != null || $recoveryCodes != []) {
$user->twoFactorRecoveryCodes = json_decode($this->getSanitizer()->getStringArray('twoFactorRecoveryCodes'));
}
// What situations do we need to check the old password is correct?
if ($user->hasPropertyChanged('twoFactorTypeId')
|| ($user->hasPropertyChanged('email') && $user->twoFactorTypeId === 1)
|| ($user->hasPropertyChanged('email') && $user->getOriginalValue('twoFactorTypeId') === 1)
) {
$user->checkPassword($oldPassword);
}
// check if we have a new password provided, if so check if it was correctly entered
if ($newPassword != $retypeNewPassword) {
throw new InvalidArgumentException(__('Passwords do not match'), 'password');
}
// check if we have saved secret, for google auth that is done on jQuery side
if (!isset($user->twoFactorSecret) && $user->twoFactorTypeId === 1) {
$this->tfaSetup();
$user->twoFactorSecret = $_SESSION['tfaSecret'];
unset($_SESSION['tfaSecret']);
}
// if we are setting up email two factor auth, check if the email is entered on the form as well
if ($user->twoFactorTypeId === 1 && $user->email == '') {
throw new InvalidArgumentException(__('Please provide valid email address'), 'email');
}
// if we are setting up email two factor auth, check if the sending email address is entered in CMS Settings.
if ($user->twoFactorTypeId === 1 && $this->getConfig()->getSetting('mail_from') == '') {
throw new InvalidArgumentException(__('Please provide valid sending email address in CMS Settings on Network tab'), 'mail_from');
}
// if we have a new password provided, update the user record
if ($newPassword != null && $newPassword == $retypeNewPassword) {
$user->setNewPassword($newPassword, $oldPassword);
$user->isPasswordChangeRequired = 0;
$user->save([
'passwordUpdate' => true
]);
}
// if we are setting up Google auth, we are expecting a code from the form, validate the code here
// we want to show QR code and validate the access code also with the previous auth method was set to email
if ($user->twoFactorTypeId === 2
&& ($user->twoFactorSecret === null || $user->getOriginalValue('twoFactorTypeId') === 1)
) {
if (!isset($code)) {
throw new InvalidArgumentException(__('Access Code is empty'), 'code');
}
$validation = $this->tfaValidate($code);
if (!$validation) {
unset($_SESSION['tfaSecret']);
throw new InvalidArgumentException(__('Access Code is incorrect'), 'code');
}
if ($validation) {
// if access code is correct, we want to set the secret to our user - either from session for new 2FA setup or leave it as it is for user changing from email to google auth
if (!isset($user->twoFactorSecret)) {
$secret = $_SESSION['tfaSecret'];
} else {
$secret = $user->twoFactorSecret;
}
$user->twoFactorSecret = $secret;
unset($_SESSION['tfaSecret']);
}
}
// if the two factor type is set to Off, clear any saved secrets and set the twoFactorTypeId to 0 in database.
if ($user->twoFactorTypeId == 0) {
$user->clearTwoFactor();
}
$user->save();
// Return
$this->getState()->hydrate([
'message' => __('User Profile Saved'),
'id' => $user->userId,
'data' => $user
]);
}
/**
* @throws XiboException
* @throws \RobThree\Auth\TwoFactorAuthException
*/
public function tfaSetup()
{
$user = $this->getUser();
$issuerSettings = $this->getConfig()->getSetting('TWOFACTOR_ISSUER');
$appName = $this->getConfig()->getThemeConfig('app_name');
$quickChartUrl = $this->getConfig()->getSetting('QUICK_CHART_URL', 'https://quickchart.io');
if ($issuerSettings !== '') {
$issuer = $issuerSettings;
} else {
$issuer = $appName;
}
$tfa = new TwoFactorAuth($issuer, 6, 30, 'sha1', new QuickChartQRProvider($quickChartUrl));
// create two factor secret and store it in user record
if (!isset($user->twoFactorSecret)) {
$secret = $tfa->createSecret();
$_SESSION['tfaSecret'] = $secret;
} else {
$secret = $user->twoFactorSecret;
}
// generate the QR code to scan, we only show it at first set up and only for Google auth
$qRUrl = $tfa->getQRCodeImageAsDataUri($user->userName, $secret, 150);
$this->getState()->setData([
'qRUrl' => $qRUrl
]);
}
/**
* @param string $code The Code to validate
* @return bool
* @throws \RobThree\Auth\TwoFactorAuthException
*/
public function tfaValidate($code)
{
$user = $this->getUser();
$issuerSettings = $this->getConfig()->getSetting('TWOFACTOR_ISSUER');
$appName = $this->getConfig()->getThemeConfig('app_name');
if ($issuerSettings !== '') {
$issuer = $issuerSettings;
} else {
$issuer = $appName;
}
$tfa = new TwoFactorAuth($issuer);
if (isset($_SESSION['tfaSecret'])) {
// validate the provided two factor code with secret for this user
$result = $tfa->verifyCode($_SESSION['tfaSecret'], $code, 2);
} elseif (isset($user->twoFactorSecret)) {
$result = $tfa->verifyCode($user->twoFactorSecret, $code, 2);
} else {
$result = false;
}
return $result;
}
public function tfaRecoveryGenerate()
{
$user = $this->getUser();
// clear any existing codes when we generate new ones
$user->twoFactorRecoveryCodes = [];
$count = 4;
$codes = [];
for ($i = 0; $i < $count; $i++) {
$codes[] = $this->getSanitizer()->string(Random::generateString(50));
}
$user->twoFactorRecoveryCodes = $codes;
$this->getState()->setData([
'codes' => json_encode($codes, JSON_PRETTY_PRINT)
]);
return $codes;
}
public function tfaRecoveryShow()
{
$user = $this->getUser();
$user->twoFactorRecoveryCodes = json_decode($user->twoFactorRecoveryCodes);
if (isset($_GET["generatedCodes"]) && !empty($_GET["generatedCodes"])) {
$generatedCodes = $_GET["generatedCodes"];
$user->twoFactorRecoveryCodes = json_encode($generatedCodes);
}
$this->getState()->setData([
'codes' => $user->twoFactorRecoveryCodes
]);
}
/**
* Force User Password Change
*/
public function forceChangePasswordPage()
{
$user = $this->getUser();
// if the flag to force change password is not set to 1 then redirect to the Homepage
if ($user->isPasswordChangeRequired != 1) {
$this->getApp()->redirectTo('home');
}
$this->getState()->template = 'user-force-change-password-page';
}
/**
* Force change my Password
* @throws InvalidArgumentException
*/
public function forceChangePassword()
{
// Save the user
$user = $this->getUser();
$newPassword = $this->getSanitizer()->getString('newPassword');
$retypeNewPassword = $this->getSanitizer()->getString('retypeNewPassword');
if ($newPassword == null || $retypeNewPassword == '')
throw new InvalidArgumentException(__('Please enter the password'), 'password');
if ($newPassword != $retypeNewPassword)
throw new InvalidArgumentException(__('Passwords do not match'), 'password');
$user->setNewPassword($newPassword);
$user->save([
'passwordUpdate' => true
]);
$user->isPasswordChangeRequired = 0;
$user->save();
// Return
$this->getState()->hydrate([
'message' => __('Password Changed'),
'id' => $user->userId,
'data' => $user
]);
}
/**
* @SWG\Get(
* path="/user/permissions/{entity}/{objectId}",
* operationId="userPermissionsSearch",
* tags={"user"},
* summary="Permission Data",
* description="Permission data for the Entity and Object Provided.",
* @SWG\Parameter(
* name="entity",
* in="path",
* description="The Entity",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="objectId",
* in="path",
* description="The ID of the Object to return permissions for",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(
* type="array",
* @SWG\Items(ref="#/definitions/Permission")
* )
* )
* )
*
* @param string $entity
* @param int $objectId
* @throws \Xibo\Exception\NotFoundException
*/
public function permissionsGrid($entity, $objectId)
{
$entity = $this->parsePermissionsEntity($entity, $objectId);
// Load our object
$object = $entity->getById($objectId);
// Does this user have permission to edit the permissions?!
if (!$this->getUser()->checkPermissionsModifyable($object))
throw new AccessDeniedException(__('You do not have permission to edit these permissions.'));
// List of all Groups with a view / edit / delete check box
$permissions = $this->permissionFactory->getAllByObjectId($this->getUser(), $object->permissionsClass(), $objectId, $this->gridRenderSort(), $this->gridRenderFilter(['name' => $this->getSanitizer()->getString('name')]));
$this->getState()->template = 'grid';
$this->getState()->setData($permissions);
$this->getState()->recordsTotal = $this->permissionFactory->countLast();
}
/**
* Permissions to users for the provided entity
* @param $entity
* @param $objectId
* @throws \Xibo\Exception\NotFoundException
*/
public function permissionsForm($entity, $objectId)
{
$requestEntity = $entity;
$entity = $this->parsePermissionsEntity($entity, $objectId);
// Load our object
$object = $entity->getById($objectId);
// Does this user have permission to edit the permissions?!
if (!$this->getUser()->checkPermissionsModifyable($object))
throw new AccessDeniedException(__('You do not have permission to edit these permissions.'));
$currentPermissions = [];
foreach ($this->permissionFactory->getAllByObjectId($this->getUser(), $object->permissionsClass(), $objectId, ['groupId'], ['setOnly' => 1]) as $permission) {
/* @var Permission $permission */
$currentPermissions[$permission->groupId] = [
'view' => ($permission->view == null) ? 0 : $permission->view,
'edit' => ($permission->edit == null) ? 0 : $permission->edit,
'delete' => ($permission->delete == null) ? 0 : $permission->delete
];
}
$data = [
'entity' => $requestEntity,
'objectId' => $objectId,
'permissions' => $currentPermissions,
'canSetOwner' => $object->canChangeOwner(),
'owners' => $this->userFactory->query(),
'object' => $object,
'help' => [
'permissions' => $this->getHelp()->link('Campaign', 'Permissions')
]
];
$this->getState()->template = 'user-form-permissions';
$this->getState()->setData($data);
}
/**
* @SWG\Post(
* path="/user/permissions/{entity}/{objectId}",
* operationId="userPermissionsSet",
* tags={"user"},
* summary="Permission Set",
* description="Set Permissions to users/groups for the provided entity.",
* @SWG\Parameter(
* name="entity",
* in="path",
* description="The Entity",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="objectId",
* in="path",
* description="The ID of the Object to set permissions on",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="groupIds",
* in="formData",
* description="Array of permissions with groupId as the key",
* type="array",
* required=true,
* @SWG\Items(type="string")
* ),
* @SWG\Parameter(
* name="ownerId",
* in="formData",
* description="Change the owner of this item. Leave empty to keep the current owner",
* type="integer",
* required=false
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*
* @param string $entity
* @param int $objectId
* @throws XiboException
*/
public function permissions($entity, $objectId)
{
$entity = $this->parsePermissionsEntity($entity, $objectId);
// Load our object
$object = $entity->getById($objectId);
// Does this user have permission to edit the permissions?!
if (!$this->getUser()->checkPermissionsModifyable($object))
throw new AccessDeniedException(__('You do not have permission to edit these permissions.'));
// Get all current permissions
$permissions = $this->permissionFactory->getAllByObjectId($this->getUser(), $object->permissionsClass(), $objectId);
// Get the provided permissions
$groupIds = $this->getSanitizer()->getStringArray('groupIds');
// Run the update
$this->updatePermissions($permissions, $groupIds);
// Should we update the owner?
if ($this->getSanitizer()->getInt('ownerId') != 0) {
$ownerId = $this->getSanitizer()->getInt('ownerId');
$this->getLog()->debug('Requesting update to a new Owner - id = ' . $ownerId);
if ($object->canChangeOwner()) {
$object->setOwner($ownerId);
$object->save(['notify' => false, 'manageDynamicDisplayLinks' => false]);
} else {
throw new ConfigurationException(__('Cannot change owner on this Object'));
}
// Nasty handling for ownerId on the Layout
// ideally we'd remove that column and rely on the campaign ownerId in 1.9 onward
if ($object->permissionsClass() == 'Xibo\Entity\Campaign') {
$this->getLog()->debug('Changing owner on child Layout');
foreach ($this->layoutFactory->getByCampaignId($object->getId(), true, true) as $layout) {
$layout->setOwner($ownerId, true);
$layout->save(['notify' => false]);
}
}
}
// Cascade permissions
if ($object->permissionsClass() == 'Xibo\Entity\Campaign' && $this->getSanitizer()->getCheckbox('cascade') == 1) {
/* @var Campaign $object */
$this->getLog()->debug('Cascade permissions down');
// Define a function that can be called for each layout we find
$updatePermissionsOnLayout = function($layout) use ($object, $groupIds) {
// Regions
foreach ($layout->regions as $region) {
/* @var Region $region */
$this->updatePermissions($this->permissionFactory->getAllByObjectId($this->getUser(), get_class($region), $region->getId()), $groupIds);
// Playlists
/* @var Playlist $playlist */
$playlist = $region->regionPlaylist;
$this->updatePermissions($this->permissionFactory->getAllByObjectId($this->getUser(), get_class($playlist), $playlist->getId()), $groupIds);
// Widgets
foreach ($playlist->widgets as $widget) {
/* @var Widget $widget */
$this->updatePermissions($this->permissionFactory->getAllByObjectId($this->getUser(), get_class($widget), $widget->getId()), $groupIds);
}
}
};
foreach ($this->layoutFactory->getByCampaignId($object->campaignId, true, true) as $layout) {
/* @var Layout $layout */
// Assign the same permissions to the Layout
$this->updatePermissions($this->permissionFactory->getAllByObjectId($this->getUser(), get_class($object), $layout->campaignId), $groupIds);
// Load the layout
$layout->load();
$updatePermissionsOnLayout($layout);
}
} else if ($object->permissionsClass() == 'Xibo\Entity\Region') {
// We always cascade region permissions down to the Playlist
$object->load(['loadPlaylists' => true]);
$this->updatePermissions($this->permissionFactory->getAllByObjectId($this->getUser(), get_class($object->regionPlaylist), $object->regionPlaylist->getId()), $groupIds);
} else if ($object->permissionsClass() == 'Xibo\Entity\Playlist' && $this->getSanitizer()->getCheckbox('cascade') == 1) {
$object->load();
// Push the permissions down to each Widget
foreach ($object->widgets as $widget) {
$this->updatePermissions($this->permissionFactory->getAllByObjectId($this->getUser(), get_class($widget), $widget->getId()), $groupIds);
}
} else if ($object->permissionsClass() == 'Xibo\Entity\Media') {
// Are we a font?
/** @var $object Media */
if ($object->mediaType === 'font') {
// Drop permissions (we need to reassess).
$this->getApp()->container->get('\Xibo\Controller\Library')->setApp($this->getApp())->installFonts(['invalidateCache' => true]);
}
}
// Return
$this->getState()->hydrate([
'httpCode' => 204,
'message' => __('Permissions Updated')
]);
}
/**
* Parse the Permissions Entity
* //TODO: this does some nasty service location via $app, if anyone has a better idea, please submit a PR
* @param string $entity
* @param int $objectId
* @return string
*/
private function parsePermissionsEntity($entity, $objectId)
{
if ($entity == '')
throw new \InvalidArgumentException(__('Permissions requested without an entity'));
if ($objectId == 0)
throw new \InvalidArgumentException(__('Permissions form requested without an object'));
// Check to see that we can resolve the entity
$entity = lcfirst($entity) . 'Factory';
if (!$this->getApp()->container->has($entity) || !method_exists($this->getApp()->container->get($entity), 'getById')) {
$this->getLog()->error('Invalid Entity %s', $entity);
throw new \InvalidArgumentException(__('Permissions form requested with an invalid entity'));
}
return $this->getApp()->container->get($entity);
}
/**
* Updates a set of permissions from a set of groupIds
* @param array[Permission] $permissions
* @param array $groupIds
*/
private function updatePermissions($permissions, $groupIds)
{
$this->getLog()->debug('Received Permissions Array to update: %s', var_export($groupIds, true));
// List of groupIds with view, edit and del assignments
foreach ($permissions as $row) {
/* @var \Xibo\Entity\Permission $row */
// Check and see what permissions we have been provided for this selection
// If all permissions are 0, then the record is deleted
if (array_key_exists($row->groupId, $groupIds)) {
$row->view = (array_key_exists('view', $groupIds[$row->groupId]) ? $groupIds[$row->groupId]['view'] : 0);
$row->edit = (array_key_exists('edit', $groupIds[$row->groupId]) ? $groupIds[$row->groupId]['edit'] : 0);
$row->delete = (array_key_exists('delete', $groupIds[$row->groupId]) ? $groupIds[$row->groupId]['delete'] : 0);
$row->save();
}
}
}
/**
* User Applications
*/
public function myApplications()
{
$this->getState()->template = 'user-applications-form';
$this->getState()->setData([
'applications' => $this->applicationFactory->getByUserId($this->getUser()->userId),
'help' => $this->getHelp()->link('User', 'Applications')
]);
}
/**
* @SWG\Get(
* path="/user/pref",
* operationId="userPrefGet",
* tags={"user"},
* summary="Retrieve User Preferences",
* description="User preferences for non-state information, such as Layout designer zoom levels",
* @SWG\Parameter(
* name="preference",
* in="query",
* description="An optional preference",
* type="string",
* required=false
* ),
* @SWG\Response(
* response=200,
* description="successful response",
* @SWG\Schema(
* type="array",
* @SWG\Items(ref="#/definitions/UserOption")
* )
* )
* )
*/
public function pref()
{
$requestedPreference = $this->getSanitizer()->getString('preference');
if ($requestedPreference != '') {
$this->getState()->setData($this->getUser()->getOption($requestedPreference));
}
else {
$this->getState()->setData($this->getUser()->getUserOptions());
}
}
/**
* @SWG\Post(
* path="/user/pref",
* operationId="userPrefEdit",
* tags={"user"},
* summary="Save User Preferences",
* description="Save User preferences for non-state information, such as Layout designer zoom levels",
* @SWG\Parameter(
* name="preference",
* in="body",
* required=true,
* @SWG\Schema(
* type="array",
* @SWG\Items(ref="#/definitions/UserOption")
* )
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
*/
public function prefEdit()
{
// Update this user preference with the preference array
$i = 0;
foreach ($this->getSanitizer()->getStringArray('preference') as $pref) {
$i++;
$option = $this->getSanitizer()->string($pref['option']);
$value = $this->getSanitizer()->string($pref['value']);
$this->getUser()->setOptionValue($option, $value);
}
if ($i > 0)
$this->getUser()->save();
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => ($i == 1) ? __('Updated Preference') : __('Updated Preferences')
]);
}
/**
* @param $userId
*/
public function membershipForm($userId)
{
$user = $this->userFactory->getById($userId);
if (!$this->getUser()->checkEditable($user))
throw new AccessDeniedException();
// Groups we are assigned to
$groupsAssigned = $this->userGroupFactory->getByUserId($user->userId);
// All Groups
$allGroups = $this->userGroupFactory->query();
// The available users are all users except users already in assigned users
$checkboxes = array();
foreach ($allGroups as $group) {
/* @var \Xibo\Entity\UserGroup $group */
// Check to see if it exists in $usersAssigned
$exists = false;
foreach ($groupsAssigned as $groupAssigned) {
/* @var \Xibo\Entity\UserGroup $groupAssigned */
if ($groupAssigned->groupId == $group->groupId) {
$exists = true;
break;
}
}
// Store this checkbox
$checkbox = array(
'id' => $group->groupId,
'name' => $group->group,
'value_checked' => (($exists) ? 'checked' : '')
);
$checkboxes[] = $checkbox;
}
$this->getState()->template = 'user-form-membership';
$this->getState()->setData([
'user' => $user,
'checkboxes' => $checkboxes,
'help' => $this->getHelp()->link('User', 'Members')
]);
}
/**
* @param $userId
*/
public function assignUserGroup($userId)
{
$user = $this->userFactory->getById($userId);
if (!$this->getUser()->checkEditable($user))
throw new AccessDeniedException();
// Go through each ID to assign
foreach ($this->getSanitizer()->getIntArray('userGroupId') as $userGroupId) {
$userGroup = $this->userGroupFactory->getById($userGroupId);
if (!$this->getUser()->checkEditable($userGroup))
throw new AccessDeniedException(__('Access Denied to UserGroup'));
$userGroup->assignUser($user);
$userGroup->save(['validate' => false]);
}
// Have we been provided with unassign id's as well?
foreach ($this->getSanitizer()->getIntArray('unassignUserGroupId') as $userGroupId) {
$userGroup = $this->userGroupFactory->getById($userGroupId);
if (!$this->getUser()->checkEditable($userGroup))
throw new AccessDeniedException(__('Access Denied to UserGroup'));
$userGroup->unassignUser($user);
$userGroup->save(['validate' => false]);
}
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('%s assigned to User Groups'), $user->userName),
'id' => $user->userId
]);
}
/**
* Update the User Welcome Tutorial to Seen
*/
public function userWelcomeSetUnSeen()
{
$this->getUser()->newUserWizard = 0;
$this->getUser()->save(['validate' => false]);
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('%s has started the welcome tutorial'), $this->getUser()->userName)
]);
}
/**
* Update the User Welcome Tutorial to Seen
*/
public function userWelcomeSetSeen()
{
$this->getUser()->newUserWizard = 1;
$this->getUser()->save(['validate' => false]);
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => sprintf(__('%s has seen the welcome tutorial'), $this->getUser()->userName)
]);
}
/**
* Preferences Form
*/
public function preferencesForm()
{
$this->getState()->template = 'user-form-preferences';
}
/**
* @SWG\Put(
* path="/user/pref",
* operationId="userPrefEditFromForm",
* tags={"user"},
* summary="Save User Preferences",
* description="Save User preferences from the Preferences form.",
* @SWG\Parameter(
* name="navigationMenuPosition",
* in="formData",
* required=true,
* type="string"
* ),
* @SWG\Parameter(
* name="useLibraryDuration",
* in="formData",
* required=false,
* type="integer"
* ),
* @SWG\Parameter(
* name="showThumbnailColumn",
* in="formData",
* required=false,
* type="integer"
* ),
* @SWG\Response(
* response=204,
* description="successful operation"
* )
* )
* @throws InvalidArgumentException
* @throws XiboException
*/
public function prefEditFromForm()
{
$this->getUser()->setOptionValue('navigationMenuPosition', $this->getSanitizer()->getString('navigationMenuPosition'));
$this->getUser()->setOptionValue('useLibraryDuration', $this->getSanitizer()->getCheckbox('useLibraryDuration'));
$this->getUser()->setOptionValue('showThumbnailColumn', $this->getSanitizer()->getCheckbox('showThumbnailColumn'));
if ($this->getUser()->isSuperAdmin()) {
$this->getUser()->showContentFrom = $this->getSanitizer()->getInt('showContentFrom');
}
if (!$this->getUser()->isSuperAdmin() && $this->getSanitizer()->getInt('showContentFrom') == 2) {
throw new InvalidArgumentException(__('Option available only for Super Admins'), 'showContentFrom');
}
$this->getUser()->save();
// Return
$this->getState()->hydrate([
'httpStatus' => 204,
'message' => __('Updated Preferences')
]);
}
}
Module.php 0000644 00000130336 14716415766 0006531 0 ustar 00 .
*/
namespace Xibo\Controller;
use Xibo\Entity\Permission;
use Xibo\Entity\Widget;
use Xibo\Event\WidgetAddEvent;
use Xibo\Event\WidgetEditEvent;
use Xibo\Exception\AccessDeniedException;
use Xibo\Exception\ConfigurationException;
use Xibo\Exception\InvalidArgumentException;
use Xibo\Exception\NotFoundException;
use Xibo\Exception\XiboException;
use Xibo\Factory\DataSetFactory;
use Xibo\Factory\DisplayFactory;
use Xibo\Factory\DisplayGroupFactory;
use Xibo\Factory\LayoutFactory;
use Xibo\Factory\MediaFactory;
use Xibo\Factory\ModuleFactory;
use Xibo\Factory\PermissionFactory;
use Xibo\Factory\PlayerVersionFactory;
use Xibo\Factory\PlaylistFactory;
use Xibo\Factory\RegionFactory;
use Xibo\Factory\ScheduleFactory;
use Xibo\Factory\TransitionFactory;
use Xibo\Factory\UserGroupFactory;
use Xibo\Factory\WidgetAudioFactory;
use Xibo\Factory\WidgetFactory;
use Xibo\Service\ConfigServiceInterface;
use Xibo\Service\DateServiceInterface;
use Xibo\Service\LogServiceInterface;
use Xibo\Service\SanitizerServiceInterface;
use Xibo\Storage\StorageServiceInterface;
/**
* Class Module
* @package Xibo\Controller
*/
class Module extends Base
{
/**
* @var StorageServiceInterface
*/
private $store;
/**
* @var ModuleFactory
*/
private $moduleFactory;
/**
* @var PlaylistFactory
*/
private $playlistFactory;
/**
* @var MediaFactory
*/
private $mediaFactory;
/**
* @var PermissionFactory
*/
private $permissionFactory;
/**
* @var UserGroupFactory
*/
private $userGroupFactory;
/**
* @var WidgetFactory
*/
private $widgetFactory;
/**
* @var TransitionFactory
*/
private $transitionFactory;
/**
* @var RegionFactory
*/
private $regionFactory;
/** @var LayoutFactory */
protected $layoutFactory;
/** @var DisplayGroupFactory */
protected $displayGroupFactory;
/** @var WidgetAudioFactory */
protected $widgetAudioFactory;
/** @var DisplayFactory */
private $displayFactory;
/** @var ScheduleFactory */
private $scheduleFactory;
/** @var DataSetFactory */
private $dataSetFactory;
/** @var PlayerVersionFactory */
private $playerVersionFactory;
/**
* Set common dependencies.
* @param LogServiceInterface $log
* @param SanitizerServiceInterface $sanitizerService
* @param \Xibo\Helper\ApplicationState $state
* @param \Xibo\Entity\User $user
* @param \Xibo\Service\HelpServiceInterface $help
* @param DateServiceInterface $date
* @param ConfigServiceInterface $config
* @param StorageServiceInterface $store
* @param ModuleFactory $moduleFactory
* @param PlaylistFactory $playlistFactory
* @param MediaFactory $mediaFactory
* @param PermissionFactory $permissionFactory
* @param UserGroupFactory $userGroupFactory
* @param WidgetFactory $widgetFactory
* @param TransitionFactory $transitionFactory
* @param RegionFactory $regionFactory
* @param LayoutFactory $layoutFactory
* @param DisplayGroupFactory $displayGroupFactory
* @param WidgetAudioFactory $widgetAudioFactory
* @param DisplayFactory $displayFactory
* @param ScheduleFactory $scheduleFactory
*/
public function __construct($log, $sanitizerService, $state, $user, $help, $date, $config, $store, $moduleFactory, $playlistFactory, $mediaFactory, $permissionFactory, $userGroupFactory, $widgetFactory, $transitionFactory, $regionFactory, $layoutFactory, $displayGroupFactory, $widgetAudioFactory, $displayFactory, $scheduleFactory, $dataSetFactory)
{
$this->setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
$this->store = $store;
$this->moduleFactory = $moduleFactory;
$this->playlistFactory = $playlistFactory;
$this->mediaFactory = $mediaFactory;
$this->permissionFactory = $permissionFactory;
$this->userGroupFactory = $userGroupFactory;
$this->widgetFactory = $widgetFactory;
$this->transitionFactory = $transitionFactory;
$this->regionFactory = $regionFactory;
$this->layoutFactory = $layoutFactory;
$this->displayGroupFactory = $displayGroupFactory;
$this->widgetAudioFactory = $widgetAudioFactory;
$this->displayFactory = $displayFactory;
$this->scheduleFactory = $scheduleFactory;
$this->dataSetFactory = $dataSetFactory;
}
/**
* Display the module page
*/
function displayPage()
{
$this->getState()->template = 'module-page';
$this->getState()->setData([
'modulesToInstall' => $this->getInstallableModules()
]);
}
/**
* A grid of modules
* @throws XiboException
*/
public function grid()
{
$filter = [
'name' => $this->getSanitizer()->getString('name'),
'extension' => $this->getSanitizer()->getString('extension'),
'moduleId' => $this->getSanitizer()->getInt('moduleId')
];
$modules = $this->moduleFactory->query($this->gridRenderSort(), $this->gridRenderFilter($filter));
foreach ($modules as $module) {
/* @var \Xibo\Entity\Module $module */
if ($this->isApi())
break;
$module->includeProperty('buttons');
// Edit button
$module->buttons[] = array(
'id' => 'module_button_edit',
'url' => $this->urlFor('module.settings.form', ['id' => $module->moduleId]),
'text' => __('Edit')
);
// Clear cache
if ($module->regionSpecific == 1) {
$module->buttons[] = array(
'id' => 'module_button_clear_cache',
'url' => $this->urlFor('module.clear.cache.form', ['id' => $module->moduleId]),
'text' => __('Clear Cache')
);
}
// Create a module object and return any buttons it may require
$moduleObject = $this->moduleFactory->create($module->type);
// Are there any buttons we need to provide as part of the module?
foreach ($moduleObject->settingsButtons() as $button) {
$button['text'] = __($button['text']);
$module->buttons[] = $button;
}
}
$this->getState()->template = 'grid';
$this->getState()->recordsTotal = $this->moduleFactory->countLast();
$this->getState()->setData($modules);
}
/**
* Settings Form
* @param int $moduleId
* @throws XiboException
*/
public function settingsForm($moduleId)
{
// Can we edit?
$moduleConfigLocked = ($this->getConfig()->getSetting('MODULE_CONFIG_LOCKED_CHECKB') == 1 || $this->getConfig()->getSetting('MODULE_CONFIG_LOCKED_CHECKB') == 'Checked');
if (!$this->getUser()->userTypeId == 1)
throw new AccessDeniedException();
$module = $this->moduleFactory->createById($moduleId);
$moduleFields = $module->settingsForm();
// Pass to view
$this->getState()->template = ($moduleFields == null) ? 'module-form-settings' : $moduleFields;
$this->getState()->setData([
'moduleConfigLocked' => $moduleConfigLocked,
'module' => $module,
'help' => $this->getHelp()->link('Module', 'Edit')
]);
}
/**
* Settings
* @param int $moduleId
* @throws XiboException
*/
public function settings($moduleId)
{
// Can we edit?
$moduleConfigLocked = ($this->getConfig()->getSetting('MODULE_CONFIG_LOCKED_CHECKB') == 1 || $this->getConfig()->getSetting('MODULE_CONFIG_LOCKED_CHECKB') == 'Checked');
if (!$this->getUser()->userTypeId == 1)
throw new AccessDeniedException();
$module = $this->moduleFactory->createById($moduleId);
$module->getModule()->defaultDuration = $this->getSanitizer()->getInt('defaultDuration');
$module->getModule()->validExtensions = $this->getSanitizer()->getString('validExtensions');
$module->getModule()->enabled = $this->getSanitizer()->getCheckbox('enabled');
$module->getModule()->previewEnabled = $this->getSanitizer()->getCheckbox('previewEnabled');
// Install Files for this module
$module->installFiles();
// Get the settings (may throw an exception)
$module->settings();
// Save
$module->getModule()->save();
// Successful
$this->getState()->hydrate([
'message' => sprintf(__('Edited %s'), $module->getModule()->name),
'id' => $module->getModule()->moduleId,
'data' => $module->getModule()
]);
}
/**
* Verify
*/
public function verifyForm()
{
// Pass to view
$this->getState()->template = 'module-form-verify';
$this->getState()->setData([
'help' => $this->getHelp()->link('Module', 'Edit')
]);
}
/**
* Verify Module
* @throws \Exception
*/
public function verify()
{
// Set all files to valid = 0
$this->store->update('UPDATE `media` SET valid = 0 WHERE moduleSystemFile = 1', []);
// Install all files
$this->getApp()->container->get('\Xibo\Controller\Library')->installAllModuleFiles();
// Successful
$this->getState()->hydrate([
'message' => __('Verified')
]);
}
/**
* Form for the install list
* @throws XiboException
*/
public function installListForm()
{
// Use the name to get details about this module.
$modules = $this->getInstallableModules();
if (count($modules) <= 0)
throw new InvalidArgumentException(__('Sorry, no modules available to install'), 'modules');
$this->getState()->template = 'module-form-install-list';
$this->getState()->setData([
'modulesToInstall' => $modules,
'help' => $this->getHelp()->link('Module', 'Install')
]);
}
/**
* @param string $name
* @throws InvalidArgumentException
*/
public function installForm($name)
{
// Check the module hasn't already been installed
if ($this->checkModuleInstalled($name))
throw new InvalidArgumentException(__('Module already installed'), 'install');
// Use the name to get details about this module.
if (file_exists(PROJECT_ROOT . '/modules/' . $name . '.json'))
$module = json_decode(file_get_contents(PROJECT_ROOT . '/modules/' . $name . '.json'));
else if (file_exists(PROJECT_ROOT . '/custom/' . $name . '.json'))
$module = json_decode(file_get_contents(PROJECT_ROOT . '/custom/' . $name . '.json'));
else
throw new \InvalidArgumentException(__('Invalid module'));
$this->getState()->template = 'module-form-install';
$this->getState()->setData([
'module' => $module,
'help' => $this->getHelp()->link('Module', 'Install')
]);
}
/**
* Install Module
* @param string $name
* @throws XiboException
*/
public function install($name)
{
$this->getLog()->notice('Request to install Module: ' . $name);
// Check the module hasn't already been installed
if ($this->checkModuleInstalled($name))
throw new InvalidArgumentException(__('Module already installed'), 'install');
if (file_exists(PROJECT_ROOT . '/modules/' . $name . '.json'))
$moduleDetails = json_decode(file_get_contents(PROJECT_ROOT . '/modules/' . $name . '.json'));
else if (file_exists(PROJECT_ROOT . '/custom/' . $name . '.json'))
$moduleDetails = json_decode(file_get_contents(PROJECT_ROOT . '/custom/' . $name . '.json'));
else
throw new \InvalidArgumentException(__('Invalid module'));
// All modules should be capable of autoload
$module = $this->moduleFactory->createForInstall($moduleDetails->class);
$module->setUser($this->getUser());
$module->installOrUpdate($this->moduleFactory);
$this->getLog()->notice('Module Installed: ' . $module->getModuleType());
// Excellent... capital... success
$this->getState()->hydrate([
'message' => sprintf(__('Installed %s'), $module->getModuleType()),
'data' => $module
]);
}
/**
* Add Widget
*
* * @SWG\Post(
* path="/playlist/widget/{type}/{playlistId}",
* operationId="addWidget",
* tags={"widget"},
* summary="Add a Widget to a Playlist",
* description="Add a new Widget to a Playlist",
* @SWG\Parameter(
* name="type",
* in="path",
* description="The type of the Widget e.g. text. Media based Widgets like Image are added via POST /playlist/library/assign/{playlistId} call.",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="playlistId",
* in="path",
* description="The Playlist ID",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="displayOrder",
* in="formData",
* description="Optional integer to say which position this assignment should occupy in the list. If more than one media item is being added, this will be the position of the first one.",
* type="integer",
* required=false
* ),
* @SWG\Response(
* response=201,
* description="successful operation",
* @SWG\Header(
* header="Location",
* description="Location of the new record",
* type="string"
* )
* )
* )
*
*
* @param string $type
* @param int $playlistId
* @throws XiboException
*/
public function addWidget($type, $playlistId)
{
$playlist = $this->playlistFactory->getById($playlistId);
if (!$this->getUser()->checkEditable($playlist))
throw new AccessDeniedException();
// Check we have a permission factory
if ($this->permissionFactory == null)
throw new ConfigurationException(__('Sorry there is an error with this request, cannot set inherited permissions'));
// If we are a region Playlist, we need to check whether the owning Layout is a draft or editable
if (!$playlist->isEditable())
throw new InvalidArgumentException(__('This Layout is not a Draft, please checkout.'), 'layoutId');
// Load some information about this playlist
// loadWidgets = true to keep the ordering correct
$playlist->load([
'playlistIncludeRegionAssignments' => false,
'loadWidgets' => true,
'loadTags' => false
]);
// Create a module to use
$module = $this->moduleFactory->createForWidget($type, null, $this->getUser()->userId, $playlistId);
// Assign this module to this Playlist in the appropriate place (which could be null)
$displayOrder = $this->getSanitizer()->getInt('displayOrder');
$playlist->assignWidget($module->widget, $displayOrder);
// Inject the Current User
$module->setUser($this->getUser());
// Check that we can call `add()` directly on this module
if ($module->getModule()->regionSpecific != 1) {
throw new InvalidArgumentException(__('Sorry but a file based Widget must be assigned not created'), 'type');
}
// Set an event to be called when we save this module
$module->setSaveEvent(new WidgetAddEvent($module));
// Call module add
$module->add();
// Module add will have saved our widget with the correct playlistId and displayOrder
// if we have provided a displayOrder, then we ought to also save the Playlist so that new orders for those
// existing Widgets are also saved.
if ($displayOrder !== null) {
$playlist->save();
}
// Permissions
if ($this->getConfig()->getSetting('INHERIT_PARENT_PERMISSIONS') == 1) {
// Apply permissions from the Parent
foreach ($playlist->permissions as $permission) {
/* @var Permission $permission */
$permission = $this->permissionFactory->create($permission->groupId, get_class($module->widget), $module->widget->getId(), $permission->view, $permission->edit, $permission->delete);
$permission->save();
}
} else {
foreach ($this->permissionFactory->createForNewEntity($this->getUser(), get_class($module->widget), $module->widget->getId(), $this->getConfig()->getSetting('LAYOUT_DEFAULT'), $this->userGroupFactory) as $permission) {
/* @var Permission $permission */
$permission->save();
}
}
// Successful
$this->getState()->hydrate([
'httpStatus' => 201,
'message' => sprintf(__('Added %s'), $module->getName()),
'id' => $module->widget->widgetId,
'data' => $module->widget
]);
}
/**
* Edit Widget Form
* @param int $widgetId
* @throws XiboException
*/
public function editWidgetForm($widgetId)
{
$module = $this->moduleFactory->createWithWidget($this->widgetFactory->loadByWidgetId($widgetId));
if (!$this->getUser()->checkEditable($module->widget))
throw new AccessDeniedException();
// Media file?
$media = null;
if ($module->getModule()->regionSpecific == 0) {
try {
$media = $module->getMedia();
} catch (NotFoundException $e) {
}
}
// Pass to view
$this->getState()->template = $module->editForm();
$this->getState()->setData($module->setTemplateData([
'module' => $module,
'media' => $media,
'validExtensions' => str_replace(',', '|', $module->getModule()->validExtensions)
]));
}
/**
* Edit a Widget
*
* @param int $widgetId
* @throws XiboException
*/
public function editWidget($widgetId)
{
$module = $this->moduleFactory->createWithWidget($this->widgetFactory->loadByWidgetId($widgetId));
if (!$this->getUser()->checkEditable($module->widget))
throw new AccessDeniedException();
// Test to see if we are on a Region Specific Playlist or a standalone
$playlist = $this->playlistFactory->getById($module->widget->playlistId);
// If we are a region Playlist, we need to check whether the owning Layout is a draft or editable
if (!$playlist->isEditable())
throw new InvalidArgumentException(__('This Layout is not a Draft, please checkout.'), 'layoutId');
// Inject the Current User
$module->setUser($this->getUser());
// Set an event to be called when we save this module
$module->setSaveEvent(new WidgetEditEvent($module));
// Call Module Edit
$module->edit();
// Successful
$this->getState()->hydrate([
'message' => sprintf(__('Edited %s'), $module->getName()),
'id' => $module->widget->widgetId,
'data' => $module->widget
]);
}
/**
* Delete Widget Form
* @param int $widgetId
* @throws XiboException
*/
public function deleteWidgetForm($widgetId)
{
$module = $this->moduleFactory->createWithWidget($this->widgetFactory->loadByWidgetId($widgetId));
if (!$this->getUser()->checkDeleteable($module->widget))
throw new AccessDeniedException();
// Set some dependencies that are used in the delete
$module->setChildObjectDependencies($this->layoutFactory, $this->widgetFactory, $this->displayGroupFactory);
// Pass to view
$this->getState()->template = 'module-form-delete';
$this->getState()->setData([
'module' => $module,
'help' => $this->getHelp()->link('Media', 'Delete')
]);
}
/**
* Delete a Widget
* @SWG\Delete(
* path="/playlist/widget/{widgetId}",
* operationId="WidgetDelete",
* tags={"widget"},
* summary="Delete a Widget",
* description="Deleted a specified widget",
* @SWG\Parameter(
* name="widgetId",
* in="path",
* description="The widget ID to delete",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* )
*)
*
* @param int $widgetId
* @throws XiboException
*/
public function deleteWidget($widgetId)
{
$module = $this->moduleFactory->createWithWidget($this->widgetFactory->loadByWidgetId($widgetId));
if (!$this->getUser()->checkDeleteable($module->widget))
throw new AccessDeniedException();
// Test to see if we are on a Region Specific Playlist or a standalone
$playlist = $this->playlistFactory->getById($module->widget->playlistId);
// If we are a region Playlist, we need to check whether the owning Layout is a draft or editable
if (!$playlist->isEditable())
throw new InvalidArgumentException(__('This Layout is not a Draft, please checkout.'), 'layoutId');
// Set some dependencies that are used in the delete
$module->setChildObjectDependencies($this->layoutFactory, $this->widgetFactory, $this->displayGroupFactory);
$moduleName = $module->getName();
$widgetMedia = $module->widget->mediaIds;
// Inject the Current User
$module->setUser($this->getUser());
// Call Module Delete
$module->delete();
// Call Widget Delete
$module->widget->delete();
// Delete Media?
if ($this->getSanitizer()->getCheckbox('deleteMedia', 0) == 1) {
foreach ($widgetMedia as $mediaId) {
$media = $this->mediaFactory->getById($mediaId);
// Check we have permissions to delete
if (!$this->getUser()->checkDeleteable($media))
throw new AccessDeniedException();
$media->setChildObjectDependencies($this->layoutFactory, $this->widgetFactory, $this->displayGroupFactory, $this->displayFactory, $this->scheduleFactory, $this->playerVersionFactory);
$media->delete();
}
}
// Successful
$this->getState()->hydrate([
'message' => sprintf(__('Deleted %s'), $moduleName)
]);
}
/**
* Edit Widget Transition Form
* @param string $type
* @param int $widgetId
* @throws XiboException
*/
public function editWidgetTransitionForm($type, $widgetId)
{
$module = $this->moduleFactory->createWithWidget($this->widgetFactory->loadByWidgetId($widgetId));
if (!$this->getUser()->checkEditable($module->widget))
throw new AccessDeniedException();
// Pass to view
$this->getState()->template = 'module-form-transition';
$this->getState()->setData([
'type' => $type,
'module' => $module,
'transitions' => [
'in' => $this->transitionFactory->getEnabledByType('in'),
'out' => $this->transitionFactory->getEnabledByType('out'),
'compassPoints' => array(
array('id' => 'N', 'name' => __('North')),
array('id' => 'NE', 'name' => __('North East')),
array('id' => 'E', 'name' => __('East')),
array('id' => 'SE', 'name' => __('South East')),
array('id' => 'S', 'name' => __('South')),
array('id' => 'SW', 'name' => __('South West')),
array('id' => 'W', 'name' => __('West')),
array('id' => 'NW', 'name' => __('North West'))
)
],
'help' => $this->getHelp()->link('Transition', 'Edit')
]);
}
/**
* Edit Widget transition
* @SWG\Put(
* path="/playlist/widget/transition/{type}/{widgetId}",
* operationId="WidgetEditTransition",
* tags={"widget"},
* summary="Adds In/Out transition",
* description="Adds In/Out transition to a specified widget",
* @SWG\Parameter(
* name="type",
* in="path",
* description="Transition type, available options: in, out",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="widgetId",
* in="path",
* description="The widget ID to add the transition to",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="transitionType",
* in="formData",
* description="Type of a transition, available Options: fly, fadeIn, fadeOut",
* type="string",
* required=true
* ),
* @SWG\Parameter(
* name="transitionDuration",
* in="formData",
* description="Duration of this transition in milliseconds",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="transitionDirection",
* in="formData",
* description="The direction for this transition, only appropriate for transitions that move, such as fly. Available options: N, NE, E, SE, S, SW, W, NW",
* 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"
* )
* )
* )
*
* @param string $type
* @param int $widgetId
*
* @throws XiboException
*/
public function editWidgetTransition($type, $widgetId)
{
$widget = $this->widgetFactory->getById($widgetId);
if (!$this->getUser()->checkEditable($widget))
throw new AccessDeniedException();
// Test to see if we are on a Region Specific Playlist or a standalone
$playlist = $this->playlistFactory->getById($widget->playlistId);
// If we are a region Playlist, we need to check whether the owning Layout is a draft or editable
if (!$playlist->isEditable())
throw new InvalidArgumentException(__('This Layout is not a Draft, please checkout.'), 'layoutId');
$widget->load();
switch ($type) {
case 'in':
$widget->setOptionValue('transIn', 'attrib', $this->getSanitizer()->getString('transitionType'));
$widget->setOptionValue('transInDuration', 'attrib', $this->getSanitizer()->getInt('transitionDuration'));
$widget->setOptionValue('transInDirection', 'attrib', $this->getSanitizer()->getString('transitionDirection'));
break;
case 'out':
$widget->setOptionValue('transOut', 'attrib', $this->getSanitizer()->getString('transitionType'));
$widget->setOptionValue('transOutDuration', 'attrib', $this->getSanitizer()->getInt('transitionDuration'));
$widget->setOptionValue('transOutDirection', 'attrib', $this->getSanitizer()->getString('transitionDirection'));
break;
default:
throw new \InvalidArgumentException(__('Unknown transition type'));
}
$widget->save();
// Successful
$this->getState()->hydrate([
'message' => sprintf(__('Edited Transition')),
'id' => $widget->widgetId,
'data' => $widget
]);
}
/**
* Widget Audio Form
* @param int $widgetId
* @throws XiboException
*/
public function widgetAudioForm($widgetId)
{
$module = $this->moduleFactory->createWithWidget($this->widgetFactory->loadByWidgetId($widgetId));
if (!$this->getUser()->checkEditable($module->widget))
throw new AccessDeniedException();
$audioAvailable = true;
if ($module->widget->countAudio() > 0) {
$audio = $this->mediaFactory->getById($module->widget->getAudioIds()[0]);
$this->getLog()->debug('Found audio: ' . $audio->mediaId . ', isEdited = ' . $audio->isEdited . ', retired = ' . $audio->retired);
$audioAvailable = ($audio->isEdited == 0 && $audio->retired == 0);
}
// Pass to view
$this->getState()->template = 'module-form-audio';
$this->getState()->setData([
'module' => $module,
'media' => $this->mediaFactory->getByMediaType('audio'),
'isAudioAvailable' => $audioAvailable
]);
}
/**
* Edit an Audio Widget
* @SWG\Put(
* path="/playlist/widget/{widgetId}/audio",
* operationId="WidgetAssignedAudioEdit",
* tags={"widget"},
* summary="Parameters for edting/adding audio file to a specific widget",
* description="Parameters for edting/adding audio file to a specific widget",
* @SWG\Parameter(
* name="widgetId",
* in="path",
* description="Id of a widget to which you want to add audio or edit existing audio",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="mediaId",
* in="formData",
* description="Id of a audio file in CMS library you wish to add to a widget",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="volume",
* in="formData",
* description="Volume percentage(0-100) for this audio to play at",
* type="integer",
* required=false
* ),
* @SWG\Parameter(
* name="loop",
* in="formData",
* description="Flag (0, 1) Should the audio loop if it finishes before the widget has finished?",
* type="integer",
* required=false
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/Widget"),
* @SWG\Header(
* header="Location",
* description="Location of the new widget",
* type="string"
* )
* )
* )
*
* @param int $widgetId
* @throws XiboException
*/
public function widgetAudio($widgetId)
{
$widget = $this->widgetFactory->getById($widgetId);
if (!$this->getUser()->checkEditable($widget))
throw new AccessDeniedException();
// Test to see if we are on a Region Specific Playlist or a standalone
$playlist = $this->playlistFactory->getById($widget->playlistId);
// If we are a region Playlist, we need to check whether the owning Layout is a draft or editable
if (!$playlist->isEditable())
throw new InvalidArgumentException(__('This Layout is not a Draft, please checkout.'), 'layoutId');
$widget->load();
// Pull in the parameters we are expecting from the form.
$mediaId = $this->getSanitizer()->getInt('mediaId');
$volume = $this->getSanitizer()->getInt('volume', 100);
$loop = $this->getSanitizer()->getCheckbox('loop');
// Remove existing audio records.
foreach ($widget->audio as $audio) {
$widget->unassignAudio($audio);
}
if ($mediaId != 0) {
$widgetAudio = $this->widgetAudioFactory->createEmpty();
$widgetAudio->mediaId = $mediaId;
$widgetAudio->volume = $volume;
$widgetAudio->loop = $loop;
$widget->assignAudio($widgetAudio);
}
$widget->save();
// Successful
$this->getState()->hydrate([
'message' => sprintf(__('Edited Audio')),
'id' => $widget->widgetId,
'data' => $widget
]);
}
/**
* Delete an Assigned Audio Widget
* @SWG\Delete(
* path="/playlist/widget/{widgetId}/audio",
* operationId="WidgetAudioDelete",
* tags={"widget"},
* summary="Delete assigned audio widget",
* description="Delete assigned audio widget from specified widget ID",
* @SWG\Parameter(
* name="widgetId",
* in="path",
* description="Id of a widget from which you want to delete the audio from",
* type="integer",
* required=true
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* )
*)
*
* @param int $widgetId
* @throws XiboException
*/
public function widgetAudioDelete($widgetId)
{
$widget = $this->widgetFactory->getById($widgetId);
if (!$this->getUser()->checkEditable($widget))
throw new AccessDeniedException();
// Test to see if we are on a Region Specific Playlist or a standalone
$playlist = $this->playlistFactory->getById($widget->playlistId);
// If we are a region Playlist, we need to check whether the owning Layout is a draft or editable
if (!$playlist->isEditable())
throw new InvalidArgumentException(__('This Layout is not a Draft, please checkout.'), 'layoutId');
$widget->load();
foreach ($widget->audio as $audio) {
$widget->unassignAudio($audio);
}
$widget->save();
// Successful
$this->getState()->hydrate([
'message' => sprintf(__('Removed Audio')),
'id' => $widget->widgetId,
'data' => $widget
]);
}
/**
* Get Tab
* @param string $tab
* @param int $widgetId
* @throws XiboException
*/
public function getTab($tab, $widgetId)
{
$module = $this->moduleFactory->createWithWidget($this->widgetFactory->loadByWidgetId($widgetId));
if (!$this->getUser()->checkViewable($module->widget))
throw new AccessDeniedException();
// Pass to view
$this->getState()->template = $module->getModuleType() . '-tab-' . $tab;
$this->getState()->setData($module->getTab($tab));
}
public function getDataSets()
{
$this->getState()->template = 'grid';
$filter = [
'dataSet' => $this->getSanitizer()->getString('dataSet')
];
$this->getState()->setData($this->dataSetFactory->query($this->gridRenderSort(), $this->gridRenderFilter($filter)));
$this->getState()->recordsTotal = $this->dataSetFactory->countLast();
}
/**
* @param $type
* @param $templateId
* @throws XiboException
*/
public function getTemplateImage($type, $templateId)
{
$module = $this->moduleFactory->create($type);
$module->getTemplateImage($templateId);
$this->setNoOutput(true);
}
/**
* Get Resource
* @param $regionId
* @param $widgetId
* @throws XiboException
*/
public function getResource($regionId, $widgetId)
{
$module = $this->moduleFactory->createWithWidget($this->widgetFactory->loadByWidgetId($widgetId), $this->regionFactory->getById($regionId));
if (!$this->getUser()->checkViewable($module->widget))
throw new AccessDeniedException();
// Call module GetResource
$module->setUser($this->getUser());
if ($module->getModule()->regionSpecific == 0) {
// Non region specific module - no caching required as this is only ever called via preview.
echo $module->getResource(0);
} else {
// Region-specific module, need to handle caching and locking.
echo $module->getResourceOrCache(0);
}
$this->setNoOutput(true);
}
/**
* @param $moduleId
* @param $formName
* @throws XiboException
*/
public function customFormRender($moduleId, $formName)
{
$module = $this->moduleFactory->createById($moduleId);
if (!method_exists($module, $formName))
throw new ConfigurationException(__('Method does not exist'));
$formDetails = $module->$formName();
$this->getState()->template = $formDetails['template'];
$this->getState()->setData($formDetails['data']);
}
/**
* @param $moduleId
* @param $formName
* @throws XiboException
*/
public function customFormExecute($moduleId, $formName)
{
$module = $this->moduleFactory->createById($moduleId);
if (!method_exists($module, $formName))
throw new ConfigurationException(__('Method does not exist'));
$module->$formName();
$this->setNoOutput(true);
}
/**
* Get installable modules
* @return array
*/
private function getInstallableModules()
{
$modules = [];
// Do we have any modules to install?!
if ($this->getConfig()->getSetting('MODULE_CONFIG_LOCKED_CHECKB') != 1 && $this->getConfig()->getSetting('MODULE_CONFIG_LOCKED_CHECKB') != 'Checked') {
// Get a list of matching files in the modules folder
$files = array_merge(glob(PROJECT_ROOT . '/modules/*.json'), glob(PROJECT_ROOT . '/custom/*.json'));
// Get a list of all currently installed modules
$installed = [];
foreach ($this->moduleFactory->query() as $row) {
/* @var \Xibo\Entity\Module $row */
$installed[] = $row->installName;
}
// Compare the two
foreach ($files as $file) {
// Check to see if the module has already been installed
$fileName = explode('.', basename($file));
if (in_array($fileName[0], $installed))
continue;
// If not, open it up and get some information about it
$modules[] = json_decode(file_get_contents($file));
}
}
return $modules;
}
/**
* Check whether a module is installed or not.
* @param string $name
* @return bool
*/
private function checkModuleInstalled($name)
{
try {
$this->moduleFactory->getByInstallName($name);
return true;
} catch (NotFoundException $notFoundException) {
return false;
}
}
/**
* Clear Cache Form
* @param $moduleId
* @throws XiboException
*/
public function clearCacheForm($moduleId)
{
$module = $this->moduleFactory->getById($moduleId);
$this->getState()->template = 'module-form-clear-cache';
$this->getState()->setData([
'module' => $module,
'help' => $this->getHelp()->link('Module', 'General')
]);
}
/**
* Clear Cache
* @param $moduleId
* @throws XiboException
*/
public function clearCache($moduleId)
{
$module = $this->moduleFactory->createById($moduleId);
$module->dumpCacheForModule();
$this->getState()->hydrate([
'message' => sprintf(__('Cleared the Cache'))
]);
}
/**
* Widget Expiry Form
* @param int $widgetId
* @throws XiboException
*/
public function widgetExpiryForm($widgetId)
{
$module = $this->moduleFactory->createWithWidget($this->widgetFactory->loadByWidgetId($widgetId));
if (!$this->getUser()->checkEditable($module->widget))
throw new AccessDeniedException();
// Pass to view
$this->getState()->template = 'module-form-expiry';
$this->getState()->setData([
'module' => $module,
'fromDt' => ($module->widget->fromDt === Widget::$DATE_MIN) ? '' : $this->getDate()->getLocalDate($module->widget->fromDt),
'toDt' => ($module->widget->toDt === Widget::$DATE_MAX) ? '' : $this->getDate()->getLocalDate($module->widget->toDt),
'deleteOnExpiry' => $module->getOption('deleteOnExpiry', 0)
]);
}
/**
* Edit an Expiry Widget
* @SWG\Put(
* path="/playlist/widget/{widgetId}/expiry",
* operationId="WidgetAssignedExpiryEdit",
* tags={"widget"},
* summary="Set Widget From/To Dates",
* description="Control when this Widget is active on this Playlist",
* @SWG\Parameter(
* name="widgetId",
* in="path",
* description="Id of a widget to which you want to add audio or edit existing audio",
* type="integer",
* required=true
* ),
* @SWG\Parameter(
* name="fromDt",
* in="formData",
* description="The From Date in Y-m-d H::i:s format",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="toDt",
* in="formData",
* description="The To Date in Y-m-d H::i:s format",
* type="string",
* required=false
* ),
* @SWG\Parameter(
* name="deleteOnExpiry",
* in="formData",
* description="Delete this Widget when it expires?",
* type="integer",
* required=false
* ),
* @SWG\Response(
* response=200,
* description="successful operation",
* @SWG\Schema(ref="#/definitions/Widget"),
* @SWG\Header(
* header="Location",
* description="Location of the new widget",
* type="string"
* )
* )
* )
*
* @param int $widgetId
* @throws XiboException
*/
public function widgetExpiry($widgetId)
{
$widget = $this->widgetFactory->getById($widgetId);
if (!$this->getUser()->checkEditable($widget))
throw new AccessDeniedException();
// Test to see if we are on a Region Specific Playlist or a standalone
$playlist = $this->playlistFactory->getById($widget->playlistId);
// If we are a region Playlist, we need to check whether the owning Layout is a draft or editable
if (!$playlist->isEditable())
throw new InvalidArgumentException(__('This Layout is not a Draft, please checkout.'), 'layoutId');
$widget->load();
// Pull in the parameters we are expecting from the form.
$fromDt = $this->getSanitizer()->getDate('fromDt');
$toDt = $this->getSanitizer()->getDate('toDt');
if ($fromDt !== null) {
$widget->fromDt = $fromDt->format('U');
} else {
$widget->fromDt = Widget::$DATE_MIN;
}
if ($toDt !== null) {
$widget->toDt = $toDt->format('U');
} else {
$widget->toDt = Widget::$DATE_MAX;
}
// Delete on expiry?
$widget->setOptionValue('deleteOnExpiry', 'attrib', ($this->getSanitizer()->getCheckbox('deleteOnExpiry') ? 1 : 0));
// Save
$widget->save([
'saveWidgetOptions' => true,
'saveWidgetAudio' => false,
'saveWidgetMedia' => false,
'notify' => true,
'notifyPlaylists' => true,
'notifyDisplays' => false,
'audit' => true
]);
if ($this->isApi()) {
$widget->createdDt = $this->getDate()->getLocalDate($widget->createdDt);
$widget->modifiedDt = $this->getDate()->getLocalDate($widget->modifiedDt);
$widget->fromDt = $this->getDate()->getLocalDate($widget->fromDt);
$widget->toDt = $this->getDate()->getLocalDate($widget->toDt);
}
// Successful
$this->getState()->hydrate([
'message' => sprintf(__('Edited Expiry')),
'id' => $widget->widgetId,
'data' => $widget
]);
}
}
IconDashboard.php 0000644 00000002125 14716415766 0007776 0 ustar 00 setCommonDependencies($log, $sanitizerService, $state, $user, $help, $date, $config);
}
public function displayPage()
{
$this->getState()->template = 'dashboard-icon-page';
}
}