/** * Vertical page nav for pages tab in review portal. * * @param Zend_Db_Table_Rowset_Abstract $pages * @param integer $currentPageId * @return string */ public static function pageNav($pages, $currentPageId = false, $isAdmin = true) { $html = Functions_View::HTML_DEFAULT_EMPTY; $baseLink = $isAdmin ? '/admin/review-portal' : '/client/review-portal'; if ($pages && $pages->count()) { $html .= '<div style="max-height: 800px; overflow-y: auto; overflow-x: hidden;"><div id="page-thumbnail" class="list-group">'; foreach ($pages as $_p) { $_page = new Object_Page($_p->id); $status = Repo_PageStatus::getInstance()->getLabel($_p->portal_page_status); $html .= '<a href="' . $baseLink . '/pages/id/' . $_p->portal_id . '/page/' . $_p->id . '" rel="' . $_p->id . '" class="list-group-item' . ($currentPageId == $_p->id ? ' active' : '') . '" title="' . $status . '">'; $html .= '<img src="' . $_page->getThumbImageLink(false) . '" width="100%" />'; $html .= '<span class="page name">' . $_p->name . '</span>'; $icon = "progress"; if ($status == "In progress") { $icon = "progress"; } else { if ($status == "Ready for Review") { $icon = "complete"; } else { if ($status == "Approved") { $icon = "approved"; } else { if ($status == "Unapproved") { $icon = "unapproved"; } } } } $html .= '<div class="page status ' . $icon . '"></div>'; $html .= '</a>'; } $html .= '</div></div>'; } return $html; }
/** * Generate a page screenshot. * * @param integer $pageId * @return array | false */ protected function _generateScreenshot($pageId) { $page = new Object_Page($pageId); if (!$page->getId()) { return false; } if (!$page->getPreviewLink()) { return false; } $url = $page->getPreviewLink(); if (!$page->cloud_file_container) { $url = Functions_Common::hostUrl() . $url; } $capturedImage = $this->getAdapter()->setWorkingDir($page->getStaticContentFolder())->capture($url, self::$defaultImageName, array('delay' => self::$defaultDelay)); return $capturedImage; }
/** * Get page info by id. * * Example requeset: /admin/ajax/page-info */ public function pageInfoAction() { $ids = $this->_request->getParam('id'); if (!is_array($ids) || empty($ids)) { $this->_responseErrorString = 'Invalid ids'; $this->_sendAjaxResponse(); } $infos = array(); foreach ($ids as $_id) { // It is the page id that is passed in $_pageId = Repo_Page::getInstance()->getIdByPageId($_id); $_object = new Object_Page($_pageId); if (!$_object->getId()) { continue; } $_info = array('id' => $_id, 'name' => $_object->name, 'description' => $_object->internal_desc ? $_object->internal_desc : ''); $infos[] = $_info; } $this->_responseArray = array('pages' => $infos); $this->_sendAjaxResponse(); }
/** * Generate a page manifest. * * @param integer $pageId * @return array | false */ protected function _generateManifest($pageId) { $page = new Object_Page($pageId); if (!$page->getId()) { return false; } $pageVersion = $page->getMostLatestApprovedVersionAsActive(); $version = $pageVersion ? $pageVersion->version : false; $cloudFileContainer = $pageVersion ? $pageVersion->cloud_file_container : $page->cloud_file_container; if ($cloudFileContainer) { $files = $page->getCloudFilePaths($version, $cloudFileContainer); } else { // Get the files $files = $this->_folderFilePaths($page->getStaticContentFolder() . DS . $page->page_id, $page->page_id . '.html'); } // Prepare the pdf templates $pdfTemplateRows = Repo_PagePdfTemplate::getInstance()->getPagePdfTemplates($page->getId()); $pdfTemplates = array(); if ($pdfTemplateRows && $pdfTemplateRows->count()) { foreach ($pdfTemplateRows as $_tRow) { $_template = new Object_PdfTemplate($_tRow->id); $pdfTemplates[] = array('id' => $_template->getId(), 'name' => $_template->name, 'tokens' => $_template->getTokens(), 'preview' => $_template->getManifestPreviewFilePath()); } } return array('version' => $pageVersion ? $pageVersion->version : $page->version, 'id' => $page->page_id, 'uid' => $page->id, 'legalPageUid' => (int) $page->legal_page_id > 0 ? (int) $page->legal_page_id : '', 'linkedPageUids' => $page->getManifestPageGroupPages(), 'title' => $page->name, 'fileType' => 'htmlEdge', 'type' => 'html', 'typename' => $page->type, 'baseHost' => $page->getBaseHost($cloudFileContainer), 'baseUri' => $page->getBaseUrl($version), 'hash' => Manager_Page_StaticContent::getPageFolderName($page->page_id, $version), 'instructions' => $page->description ? $page->description : '', 'description' => $page->internal_desc ? $page->internal_desc : '', 'navigation' => array(), 'language' => $page->page_language, 'defaultPath' => $page->page_id . '.html', 'width' => $page->getWidth(), 'height' => $page->getHeight(), 'transcript' => $page->transcript ? $page->transcript : '', 'audio' => $page->audio_url, 'filePaths' => $files, 'navigation' => $page->navigation ? unserialize($page->navigation) : array(), 'content_type' => $page->content_type ? Repo_Page::$contentTypeLabels[$page->content_type] : Repo_Page::$contentTypeLabels[Repo_Page::PAGE_CONTENT_TYPE_DEFAULT], 'editor_behaviors' => $page->editor_behaviors ? $page->editor_behaviors : '', 'pdf_templates' => $pdfTemplates, 'tags' => $page->getTags()); }
/** * Generate a review portal pdf. * * @param integer $portalId * @return string The pdf name */ protected function _generatePdf($portalId) { $portal = new Object_ReviewPortal($portalId); if (!$portal->getId()) { return false; } // Get the screenshots of all the portal pages. $pages = Repo_ReviewPortalPage::getInstance()->getPortalPages($portalId); if (!$pages || $pages->count() == 0) { return false; } $pdf = new Zend_Pdf(); $pageNumber = 1; $font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA); $fontSize = 10; foreach ($pages as $_p) { $_images = array(); $_page = new Object_Page($_p->id); // Try get static screenshots if the setting is set. if ($_page->screenshot_type == Repo_Page::SCREENSHOT_TYPE_STATIC) { $_images = $_page->getStaticScreenshots(true); } // Get dynamic one. if (empty($_images)) { $_images[] = Manager_ScreenCapture_Page::getInstance()->getScreenshot($_p->id); } foreach ($_images as $_image) { $_pdfImage = Zend_Pdf_Image::imageWithPath($_image); $_pdfPage = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_LETTER_LANDSCAPE); $_pdfPage->drawImage($_pdfImage, 20, 36, $_pdfPage->getWidth() - 20, $_pdfPage->getHeight() - 20); $_pdfPage->setFont($font, 16); $_pdfPage->setFillColor(Zend_Pdf_Color_Html::color('#333333'))->drawText($pageNumber, $_pdfPage->getWidth() / 2, 10); $pageNumber++; $pdf->pages[] = $_pdfPage; } } $pdfName = $portalId . '_' . time() . '.pdf'; $path = $this->_rootPath . DS . $pdfName; $pdf->save($path); return $pdfName; }
/** * Generate pages based on the language folder. * * @param string $folderPath * @param string $language * @return false array */ protected function _generatePagesForLanguageFolder($folderPath, $language) { $pages = array(); $dir = dir($folderPath); while (false !== ($entry = $dir->read())) { if ($entry == '.' || $entry == '..' || $entry == '.DS_Store') { continue; } // We deal with each page $_pageFolder = $folderPath . DS . $entry; $_pageId = $entry; $_id = (int) Repo_Page::getInstance()->addNew($this->_currentClientId, $_pageId, Repo_Page::PAGE_TYPE_STATIC, Repo_Page::PAGE_STATUS_IN_PROGRESS, '', false, false, false, false, $language, $_pageId, false); if (empty($_id)) { // OK, we are deal with existing page $_id = Repo_Page::getInstance()->clientPageExists($this->_currentClientId, $_pageId, $language); $_existingPage = new Object_Page($_id); $_existingPage->cloud_file_container = null; $_existingPage->version++; $_existingPage->save(); } // Copy to a path $_pageStorageFolder = $this->getClientFolderPath($this->_currentClientId) . DS . self::getPageFolderName($_pageId); if (!file_exists($_pageStorageFolder)) { mkdir($_pageStorageFolder, 0777); } else { // Remove the existing content since we are updating. if (file_exists($_pageStorageFolder . DS . $_pageId)) { Functions_File::rrmdir($_pageStorageFolder . DS . $_pageId); } } Functions_File::recurse_copy($_pageFolder, $_pageStorageFolder . DS . $_pageId); // Check whether successfully if (!file_exists($_pageStorageFolder . DS . $_pageId)) { throw new Zend_Exception('Can not copy page content from a zip file: ' . $_pageStorageFolder); } $pages[] = $_id; // In case we upload a thumb image, use it. $page = new Object_Page($_id); $page->useStaticThumb(); } $dir->close(); return $pages; }
/** * Result detail page: view all results for selected survey/question. */ public function resultDetailAction() { //if export to excel button was selected if ($this->_request->getParam('export')) { $this->view->exporting = $this->_request->getParam('export'); if ($this->_request->getParam('export') == "students") { if ($this->_request->getParam('studentprintfields')) { $this->view->studentprintfields = $this->_request->getParam('studentprintfields'); } } } $id = $this->_request->getParam('id'); $page = new Object_Page($id); $pageId = $page->getId(); $clientId = $this->_request->getParam('client'); $fromDate = $toDate = ""; //if range calendar was changed if ($this->_request->isPost()) { $fromDate = $this->_request->getParam('input-filter-date-from'); $toDate = $this->_request->getParam('input-filter-date-to'); $this->view->currentTab = $this->_request->getParam('current-tab'); } else { $this->view->currentTab = "#averages"; } if (empty($pageId)) { // if no page id, may be a survey id // $this->_request->getParam('survey'); // code here if a survey id has been passed // No page defined, redirect to result page $this->_redirect('/admin/client/result'); return false; } else { // ** CE Student Quizzes code **** if ($fromDate == "" && $toDate == "") { //if no dates were posted, create $toDate = date('Y-m-d'); //add 1 day $toDate = date('Y-m-d', strtotime('+1 day', strtotime($toDate))); $courseBegin = Repo_UserSurvey::getInstance()->getDateOfFirstQuizCompletion($pageId); if ($courseBegin) { if (strtotime($courseBegin) >= strtotime($toDate)) { $courseBegin = date('Y-m-d', strtotime('-1 day', strtotime($courseBegin))); } } //if no quizzes completed yet, default to one week $fromDate = is_null($courseBegin) ? date('Y-m-d', strtotime('-1 week', strtotime($toDate))) : $courseBegin; } $this->view->quizLayout = true; $this->view->dateRange = array($fromDate, $toDate); $pageType = Repo_Page::getInstance()->getPageType($pageId); $this->view->pageType = $pageType; //collect statistics according to page type switch ($pageType) { case "survey": //Tab 1 data: Totals and averages $quizResultsGeneral = Repo_UserSurvey::getInstance()->getResultsQuizGeneral($pageId, $fromDate, $toDate); $this->view->quizResultsGeneral = $quizResultsGeneral; //Tab 2 data: Question data $quizResultsQuestion = Repo_UserSurvey::getInstance()->getResultsQuizQuestions($pageId, $fromDate, $toDate); $this->view->quizResultsQuestion = $quizResultsQuestion; //Tab 3 data: Student details $quizResultsStudent = Repo_UserSurvey::getInstance()->getStudentQuizProgress($pageId, $fromDate, $toDate); $this->view->quizResultsStudent = $quizResultsStudent; break; case "cefeedback": $this->view->currentTab = "#cefeedback"; //Get Question Type: $feedbackData = Repo_UserSurvey::getInstance()->getResultsCEFeedback($pageId, $fromDate, $toDate); //Tab 1 data: feedback results $this->view->CEFeedback = $feedbackData[1]; $this->view->CEFeedbackRespondents = $feedbackData[0]; break; } } if ($clientId > 0) { $client = new Object_Client($clientId); $this->view->clientName = $client->name; } $this->view->page = $page; }
/** * Generate pages based on the language folder. * * @param string $folderPath * @param string $language * @return false array */ protected function _generatePagesForLanguageFolder($folderPath, $language) { // Set client id Manager_File_Rackspace::getInstance()->setClientId($this->_currentClientId); $pages = array(); $dir = dir($folderPath); while (false !== ($entry = $dir->read())) { if ($entry == '.' || $entry == '..' || $entry == '.DS_Store') { continue; } // We deal with each page $_pageFolder = $folderPath . DS . $entry; $_pageId = $entry; $_id = (int) Repo_Page::getInstance()->addNew($this->_currentClientId, $_pageId, Repo_Page::PAGE_TYPE_STATIC, Repo_Page::PAGE_STATUS_IN_PROGRESS, '', false, false, false, false, $language, $_pageId, Manager_File_Rackspace::getInstance()->getGeneralContainer()); if (empty($_id)) { // OK, we are deal with existing page $_id = Repo_Page::getInstance()->clientPageExists($this->_currentClientId, $_pageId, $language); $_existingPage = new Object_Page($_id); $_existingPage->version++; $_existingPage->cloud_file_container = Manager_File_Rackspace::getInstance()->getGeneralContainer(); $_existingPage->save(); } // Copy to a path $_pageStorageFolder = $this->getClientFolderPath($this->_currentClientId) . self::PS . parent::getPageFolderName($_pageId); // Cleanup first Manager_File_Rackspace::getInstance()->deletePeudoFolder($_pageStorageFolder); // Store Functions_File::recurse_copy_cloud($_pageFolder, $_pageStorageFolder . self::PS . $_pageId); // Check whether successfully $pages[] = $_id; // In case we upload a thumb image, use it. $page = new Object_Page($_id); $page->useStaticThumb(); } $dir->close(); return $pages; }