/** * List the items on a region timeline * @return <XiboAPIResponse> */ public function LayoutRegionTimelineList() { if (!$this->user->PageAuth('layout')) { return $this->Error(1, 'Access Denied'); } $layoutId = $this->GetParam('layoutId', _INT); $regionId = $this->GetParam('regionId', _STRING); // Does the user have permissions to view this region? if (!$this->user->LayoutAuth($layoutId)) { return $this->Error(1, 'Access Denied'); } // Create a region object Kit::ClassLoader('region'); $region = new Region(); // Region Assignment needs the Owner Id $ownerId = $region->GetOwnerId($layoutId, $regionId); $regionAuth = $this->user->RegionAssignmentAuth($ownerId, $layoutId, $regionId, true); if (!$regionAuth->edit) { return $this->Error(1, 'Access Denied'); } // We have permission to be here. // Return a list of media items if (!($items = $region->GetMediaNodeList($layoutId, $regionId))) { return false; } $regionItems = array(); foreach ($items as $mediaNode) { // Get the Type, ID, duration, etc (the generic information) $mediaItem['mediaid'] = $mediaNode->getAttribute('id'); $mediaItem['lkid'] = $mediaNode->getAttribute('lkid'); $mediaItem['mediatype'] = $mediaNode->getAttribute('type'); $mediaItem['mediaduration'] = $mediaNode->getAttribute('duration'); $mediaItem['mediaownerid'] = $mediaNode->getAttribute('userId'); // Permissions for this assignment $auth = $this->user->MediaAssignmentAuth($mediaItem['mediaownerid'], $layoutId, $regionId, $mediaItem['mediaid'], true); // Skip over media assignments that we do not have permission to see if (!$auth->view) { continue; } $mediaItem['permission_edit'] = (int) $auth->edit; $mediaItem['permissions_del'] = (int) $auth->del; $mediaItem['permissions_update_duration'] = (int) $auth->modifyPermissions; $mediaItem['permissions_update_permissions'] = (int) $auth->modifyPermissions; // Add these items to an array $regionItems[] = $mediaItem; } return $this->Respond($this->NodeListFromArray($regionItems, 'media')); }
/** * Returns an array containing all the layouts particulars * @param int $layoutId The layout ID */ public function LayoutInformation($layoutId) { Debug::LogEntry('audit', '[IN]', 'layout', 'LayoutInformation'); // The array to ultimately return $info = array(); $info['regions'] = array(); try { $dbh = PDOConnect::init(); $sth = $dbh->prepare('SELECT * FROM `layout` WHERE layoutid = :layout_id'); $sth->execute(array('layout_id' => $layoutId)); $rows = $sth->fetchAll(); if (count($rows) <= 0) { $this->ThrowError(__('Unable to find layout')); } $row = $rows[0]; $info['layout'] = Kit::ValidateParam($row['layout'], _STRING); $modifiedDt = new DateTime($row['modifiedDT']); $info['updated'] = $modifiedDt->getTimestamp(); } catch (Exception $e) { Debug::LogEntry('error', $e->getMessage()); if (!$this->IsError()) { $this->SetError(1, __('Unknown Error')); } return false; } // Get the width and height $xml = new DOMDocument(); $xml->loadXML($row['xml']); // get the width and the height $info['width'] = $xml->documentElement->getAttribute('width'); $info['height'] = $xml->documentElement->getAttribute('height'); // Use the Region class to help Kit::ClassLoader('region'); // Dummy User Object $user = new User($this->db); $user->userid = 0; $user->usertypeid = 1; // Take the layout, loop through its regions, check them and call LayoutInformation on all media in them. $info['regions'] = $this->GetRegionList($layoutId); if (count($info['regions']) <= 0) { return $info; } // Loop through each and build an array foreach ($info['regions'] as &$region) { $region['media'] = array(); Debug::LogEntry('audit', 'Assessing Region: ' . $region['regionid'], 'layout', 'LayoutInformation'); // Create a layout object $regionObject = new Region($this->db); $mediaNodes = $regionObject->GetMediaNodeList($layoutId, $region['regionid']); // Create a data set to see if there are any requirements to serve an updated date time Kit::ClassLoader('dataset'); $dataSetObject = new DataSet($this->db); foreach ($mediaNodes as $mediaNode) { $node = array('mediaid' => $mediaNode->getAttribute('id'), 'lkid' => $mediaNode->getAttribute('lkid'), 'mediatype' => $mediaNode->getAttribute('type'), 'render' => $mediaNode->getAttribute('render'), 'userid' => $mediaNode->getAttribute('userid'), 'updated' => $info['updated']); // DataSets are a special case. We want to get the last updated time from the dataset. $dataSet = $dataSetObject->GetDataSetFromLayout($layoutId, $region['regionid'], $mediaNode->getAttribute('id')); if (count($dataSet) == 1) { $node['updated'] = $dataSet[0]['LastDataEdit']; } // Put this node vertically in the region time-line $region['media'][] = $node; } Debug::LogEntry('audit', 'Finished with Region', 'layout', 'LayoutInformation'); } return $info; }
public function TimelineGridView() { $user =& $this->user; $response = new ResponseManager(); $layoutId = Kit::GetParam('layoutid', _POST, _INT); $regionId = Kit::GetParam('regionid', _POST, _STRING); // Make sure we have permission to edit this region Kit::ClassLoader('region'); $region = new Region(); $ownerId = $region->GetOwnerId($layoutId, $regionId); $regionAuth = $this->user->RegionAssignmentAuth($ownerId, $layoutId, $regionId, true); if (!$regionAuth->edit) { trigger_error(__('You do not have permissions to edit this region'), E_USER_ERROR); } // Load the XML for this layout and region, we need to get the media nodes. $region = new Region(); $cols = array(array('name' => 'order', 'title' => __('Order')), array('name' => 'name', 'title' => __('Name')), array('name' => 'type', 'title' => __('Type')), array('name' => 'duration', 'title' => __('Duration')), array('name' => 'transition', 'title' => __('Transition'))); Theme::Set('table_cols', $cols); $rows = array(); $i = 0; foreach ($region->GetMediaNodeList($layoutId, $regionId) as $mediaNode) { // Construct an object containing all the layouts, and pass to the theme $row = array(); // Put this node vertically in the region time line $mediaId = $mediaNode->getAttribute('id'); $lkId = $mediaNode->getAttribute('lkid'); $mediaType = $mediaNode->getAttribute('type'); $mediaDuration = $mediaNode->getAttribute('duration'); $ownerId = $mediaNode->getAttribute('userId'); // Permissions for this assignment $auth = $user->MediaAssignmentAuth($ownerId, $layoutId, $regionId, $mediaId, true); // Skip over media assignments that we do not have permission to see if (!$auth->view) { continue; } $i++; // Create a media module to handle all the complex stuff $tmpModule = ModuleFactory::load($mediaType, $layoutId, $regionId, $mediaId, $lkId, $this->db, $this->user); $mediaName = $tmpModule->GetName(); $row['order'] = $i; $row['name'] = $mediaName == '' ? __($tmpModule->displayType) : $mediaName; $row['type'] = __($tmpModule->displayType); $row['duration'] = sprintf('%d seconds', $mediaDuration); $row['transition'] = sprintf('%s / %s', $tmpModule->GetTransition('in'), $tmpModule->GetTransition('out')); if ($auth->edit) { $row['buttons'][] = array('id' => 'timeline_button_edit', 'url' => 'index.php?p=module&mod=' . $mediaType . '&q=Exec&method=EditForm&layoutid=' . $layoutId . '®ionid=' . $regionId . '&mediaid=' . $mediaId . '&lkid=' . $lkId . '"', 'text' => __('Edit')); } if ($auth->del) { $row['buttons'][] = array('id' => 'timeline_button_delete', 'url' => 'index.php?p=module&mod=' . $mediaType . '&q=Exec&method=DeleteForm&layoutid=' . $layoutId . '®ionid=' . $regionId . '&mediaid=' . $mediaId . '&lkid=' . $lkId . '"', 'text' => __('Remove'), 'multi-select' => true, 'dataAttributes' => array(array('name' => 'multiselectlink', 'value' => 'index.php?p=module&mod=' . $mediaType . '&q=Exec&method=DeleteMedia'), array('name' => 'rowtitle', 'value' => $row['name']), array('name' => 'layoutid', 'value' => $layoutId), array('name' => 'regionid', 'value' => $regionId), array('name' => 'mediaid', 'value' => $mediaId), array('name' => 'lkid', 'value' => $lkId), array('name' => 'options', 'value' => 'unassign'))); } if ($auth->modifyPermissions) { $row['buttons'][] = array('id' => 'timeline_button_permissions', 'url' => 'index.php?p=module&mod=' . $mediaType . '&q=Exec&method=PermissionsForm&layoutid=' . $layoutId . '®ionid=' . $regionId . '&mediaid=' . $mediaId . '&lkid=' . $lkId . '"', 'text' => __('Permissions')); } if (count($this->user->TransitionAuth('in')) > 0) { $row['buttons'][] = array('id' => 'timeline_button_trans_in', 'url' => 'index.php?p=module&mod=' . $mediaType . '&q=Exec&method=TransitionEditForm&type=in&layoutid=' . $layoutId . '®ionid=' . $regionId . '&mediaid=' . $mediaId . '&lkid=' . $lkId . '"', 'text' => __('In Transition')); } if (count($this->user->TransitionAuth('out')) > 0) { $row['buttons'][] = array('id' => 'timeline_button_trans_in', 'url' => 'index.php?p=module&mod=' . $mediaType . '&q=Exec&method=TransitionEditForm&type=out&layoutid=' . $layoutId . '®ionid=' . $regionId . '&mediaid=' . $mediaId . '&lkid=' . $lkId . '"', 'text' => __('Out Transition')); } $rows[] = $row; } // Store the table rows Theme::Set('table_rows', $rows); Theme::Set('gridId', Kit::GetParam('gridId', _REQUEST, _STRING)); // Initialise the theme and capture the output $output = Theme::RenderReturn('table_render'); $response->SetGridResponse($output); $response->initialSortColumn = 1; $response->Respond(); }
/** * Shows the TimeLine */ public function Timeline() { $db =& $this->db; $user =& $this->user; $response = new ResponseManager(); $response->html = ''; $layoutId = Kit::GetParam('layoutid', _GET, _INT); $regionId = Kit::GetParam('regionid', _REQUEST, _STRING); // Make sure we have permission to edit this region Kit::ClassLoader('region'); $region = new region($db); $ownerId = $region->GetOwnerId($layoutId, $regionId); $regionAuth = $this->user->RegionAssignmentAuth($ownerId, $layoutId, $regionId, true); if (!$regionAuth->edit) { trigger_error(__('You do not have permissions to edit this region'), E_USER_ERROR); } // Library location $libraryLocation = Config::GetSetting('LIBRARY_LOCATION'); // Present a canvas with 2 columns, left column for the media icons $buttons = array(); // Always output a Library assignment button $buttons[] = array('id' => 'media_button_library', 'url' => 'index.php?p=content&q=LibraryAssignForm&layoutid=' . $layoutId . '®ionid=' . $regionId, 'text' => __('Library')); // Get a list of the enabled modules and then create buttons for them if (!($enabledModules = new ModuleManager($db, $user))) { trigger_error($enabledModules->message, E_USER_ERROR); } // Loop through the buttons we have and output each one while ($modulesItem = $enabledModules->GetNextModule()) { $mod = Kit::ValidateParam($modulesItem['Module'], _STRING); $caption = Kit::ValidateParam($modulesItem['Name'], _STRING); $mod = strtolower($mod); $title = Kit::ValidateParam($modulesItem['Description'], _STRING); $img = Kit::ValidateParam($modulesItem['ImageUri'], _STRING); $buttons[] = array('id' => 'media_button_' . $mod, 'url' => 'index.php?p=module&q=Exec&mod=' . $mod . '&method=AddForm&layoutid=' . $layoutId . '®ionid=' . $regionId, 'text' => __($caption)); } Theme::Set('media_buttons', $buttons); $response->html .= '<div class="container-fluid">'; $response->html .= '<div class="row-fluid">'; $response->html .= Theme::RenderReturn('layout_designer_form_timeline'); // Load the XML for this layout and region, we need to get the media nodes. // These form the timeline and go in the right column // Generate an ID for the list (this is passed into the reorder function) $timeListMediaListId = uniqid('timelineMediaList_'); $response->html .= '<div class="span10">'; $response->html .= '<div id="timelineControl" class="timelineColumn" layoutid="' . $layoutId . '" regionid="' . $regionId . '">'; $response->html .= ' <div class="timelineMediaVerticalList">'; $response->html .= ' <ul id="' . $timeListMediaListId . '" class="timelineSortableListOfMedia">'; // How are we going to colour the bars, my media type or my permissions $timeBarColouring = Config::GetSetting('REGION_OPTIONS_COLOURING'); // Create a layout object $region = new Region($db); foreach ($region->GetMediaNodeList($layoutId, $regionId) as $mediaNode) { // Put this node vertically in the region timeline $mediaId = $mediaNode->getAttribute('id'); $lkId = $mediaNode->getAttribute('lkid'); $mediaType = $mediaNode->getAttribute('type'); $mediaDuration = $mediaNode->getAttribute('duration'); $ownerId = $mediaNode->getAttribute('userId'); // Permissions for this assignment $auth = $user->MediaAssignmentAuth($ownerId, $layoutId, $regionId, $mediaId, true); // Skip over media assignments that we do not have permission to see if (!$auth->view) { continue; } Debug::LogEntry('audit', sprintf('Permission Granted to View MediaID: %s', $mediaId), 'layout', 'TimeLine'); // Create a media module to handle all the complex stuff require_once "modules/{$mediaType}.module.php"; $tmpModule = new $mediaType($db, $user, $mediaId, $layoutId, $regionId, $lkId); $mediaName = $tmpModule->GetName(); $transitionIn = $tmpModule->GetTransition('in'); $transitionOut = $tmpModule->GetTransition('out'); // Colouring for the media block if ($timeBarColouring == 'Permissions') { $mediaBlockColouringClass = 'timelineMediaItemColouring_' . ($auth->edit ? 'enabled' : 'disabled'); } else { $mediaBlockColouringClass = 'timelineMediaItemColouring_' . $mediaType; } // Create the list item $response->html .= '<li class="timelineMediaListItem" mediaid="' . $mediaId . '" lkid="' . $lkId . '">'; // In transition $response->html .= ' <div class="timelineMediaInTransition">'; if ($transitionIn != 'None') { $response->html .= '<span>' . $transitionIn . '</span>'; } $response->html .= ' </div>'; // Media Bar $response->html .= ' <div class="timelineMediaItem">'; $response->html .= ' <ul class="timelineMediaItemLinks">'; // Create some links if ($auth->edit) { $response->html .= '<li><a class="XiboFormButton timelineMediaBarLink" href="index.php?p=module&mod=' . $mediaType . '&q=Exec&method=EditForm&layoutid=' . $layoutId . '®ionid=' . $regionId . '&mediaid=' . $mediaId . '&lkid=' . $lkId . '" title="' . __('Click to edit this media') . '">' . __('Edit') . '</a></li>'; } if ($auth->del) { $response->html .= '<li><a class="XiboFormButton timelineMediaBarLink" href="index.php?p=module&mod=' . $mediaType . '&q=Exec&method=DeleteForm&layoutid=' . $layoutId . '®ionid=' . $regionId . '&mediaid=' . $mediaId . '&lkid=' . $lkId . '" title="' . __('Click to delete this media') . '">' . __('Delete') . '</a></li>'; } if ($auth->modifyPermissions) { $response->html .= '<li><a class="XiboFormButton timelineMediaBarLink" href="index.php?p=module&mod=' . $mediaType . '&q=Exec&method=PermissionsForm&layoutid=' . $layoutId . '®ionid=' . $regionId . '&mediaid=' . $mediaId . '&lkid=' . $lkId . '" title="Click to change permissions for this media">' . __('Permissions') . '</a></li>'; } if (count($this->user->TransitionAuth('in')) > 0) { $response->html .= '<li><a class="XiboFormButton timelineMediaBarLink" href="index.php?p=module&mod=' . $mediaType . '&q=Exec&method=TransitionEditForm&type=in&layoutid=' . $layoutId . '®ionid=' . $regionId . '&mediaid=' . $mediaId . '&lkid=' . $lkId . '" title="' . __('Click to edit this transition') . '">' . __('In Transition') . '</a></li>'; } if (count($this->user->TransitionAuth('out')) > 0) { $response->html .= '<li><a class="XiboFormButton timelineMediaBarLink" href="index.php?p=module&mod=' . $mediaType . '&q=Exec&method=TransitionEditForm&type=out&layoutid=' . $layoutId . '®ionid=' . $regionId . '&mediaid=' . $mediaId . '&lkid=' . $lkId . '" title="' . __('Click to edit this transition') . '">' . __('Out Transition') . '</a></li>'; } $response->html .= ' </ul>'; // Put the media name in $response->html .= ' <div class="timelineMediaDetails ' . $mediaBlockColouringClass . '">'; $response->html .= ' <h3>' . ($mediaName == '' ? $tmpModule->displayType : $mediaName) . ' (' . $mediaDuration . ' seconds)</h3>'; $response->html .= ' </div>'; // Put the media hover preview in $mediaHoverPreview = $tmpModule->HoverPreview(); $response->html .= ' <div class="timelineMediaPreview">' . $mediaHoverPreview . '</div>'; // End the time line media item $response->html .= ' </div>'; // Out transition $response->html .= ' <div class="timelineMediaOutTransition">'; if ($transitionOut != 'None') { $response->html .= '<span>' . $transitionOut . '</span>'; } $response->html .= ' </div>'; // End of this media item $response->html .= '</li>'; } $response->html .= ' </ul>'; $response->html .= ' </div>'; // Output a div to contain the preview for this media item $response->html .= ' <div id="timelinePreview"></div>'; $response->html .= ' </div>'; $response->html .= '</div>'; $response->html .= '</div>'; $response->html .= '</div>'; // Finish constructing the response $response->callBack = 'LoadTimeLineCallback'; $response->dialogClass = 'modal-big'; $response->dialogTitle = __('Region Timeline'); $response->dialogSize = true; $response->dialogWidth = '1000px'; $response->dialogHeight = '550px'; $response->focusInFirstInput = false; // Add some buttons $response->AddButton(__('Help'), 'XiboHelpRender("' . HelpManager::Link('Layout', 'RegionOptions') . '")'); $response->AddButton(__('Close'), 'XiboDialogClose()'); $response->AddButton(__('Save Order'), 'XiboTimelineSaveOrder("' . $timeListMediaListId . '","' . $layoutId . '","' . $regionId . '")'); $response->Respond(); }
/** * Returns an array containing all the layouts particulars * @param int $layoutId The layout ID */ public function LayoutInformation($layoutId) { Debug::LogEntry('audit', '[IN]', 'layout', 'LayoutInformation'); // The array to ultimately return $info = array(); $info['regions'] = array(); // Use the Region class to help Kit::ClassLoader('region'); // Dummy User Object $user = new User($this->db); $user->userid = 0; $user->usertypeid = 1; // Take the layout, loop through its regions, check them and call LayoutInformation on all media in them. $info['regions'] = $this->GetRegionList($layoutId); if (count($info['regions']) <= 0) { return $info; } // Loop through each and build an array foreach ($info['regions'] as &$region) { $region['media'] = array(); Debug::LogEntry('audit', 'Assessing Region: ' . $region['regionid'], 'layout', 'LayoutInformation'); // Create a layout object $regionObject = new Region($this->db); $mediaNodes = $regionObject->GetMediaNodeList($layoutId, $region['regionid']); foreach ($mediaNodes as $mediaNode) { // Put this node vertically in the region timeline $region['media'][] = array('mediaid' => $mediaNode->getAttribute('id'), 'lkid' => $mediaNode->getAttribute('lkid'), 'mediatype' => $mediaNode->getAttribute('type')); } Debug::LogEntry('audit', 'Finished with Region', 'layout', 'LayoutInformation'); } return $info; }