public function writeResponse(DevblocksHttpResponse $response) { $path = $response->path; // [JAS]: Ajax? // [TODO] Explore outputting whitespace here for Safari // if(empty($path)) // return; $tpl = DevblocksPlatform::getTemplateService(); $session = DevblocksPlatform::getSessionService(); $settings = CerberusSettings::getInstance(); $translate = DevblocksPlatform::getTranslationService(); $active_worker = CerberusApplication::getActiveWorker(); $visit = $session->getVisit(); $page_manifests = $this->_getAllowedPages(); $controller = array_shift($path); // Default page [TODO] This is supposed to come from framework.config.php if (empty($controller)) { $controller = 'home'; } // [JAS]: Require us to always be logged in for Cerberus pages if (empty($visit) && 0 != strcasecmp($controller, 'login')) { $query = array(); if (!empty($response->path)) { $query = array('url' => urlencode(implode('/', $response->path))); } DevblocksPlatform::redirect(new DevblocksHttpRequest(array('login'), $query)); } $page_id = $this->_getPageIdByUri($controller); @($page = DevblocksPlatform::getExtension($page_id, true)); /* @var $page CerberusPageExtension */ if (empty($page)) { header("Status: 404"); return; // [TODO] 404 } // [JAS]: Listeners (Step-by-step guided tour, etc.) $listenerManifests = DevblocksPlatform::getExtensions('devblocks.listener.http'); foreach ($listenerManifests as $listenerManifest) { /* @var $listenerManifest DevblocksExtensionManifest */ $inst = $listenerManifest->createInstance(); /* @var $inst DevblocksHttpRequestListenerExtension */ $inst->run($response, $tpl); } $tpl->assign('active_worker', $active_worker); $tour_enabled = false; if (!empty($visit) && !is_null($active_worker)) { $tour_enabled = intval(DAO_WorkerPref::get($active_worker->id, 'assist_mode', 1)); if (DEMO_MODE) { $tour_enabled = 1; } // override for DEMO $keyboard_shortcuts = intval(DAO_WorkerPref::get($active_worker->id, 'keyboard_shortcuts', 1)); $tpl->assign('pref_keyboard_shortcuts', $keyboard_shortcuts); $active_worker_memberships = $active_worker->getMemberships(); $tpl->assign('active_worker_memberships', $active_worker_memberships); $unread_notifications = DAO_WorkerEvent::getUnreadCountByWorker($active_worker->id); $tpl->assign('active_worker_notify_count', $unread_notifications); DAO_Worker::logActivity($active_worker->id, $page->getActivity()); } $tpl->assign('tour_enabled', $tour_enabled); // [JAS]: Variables provided to all page templates $tpl->assign('settings', $settings); $tpl->assign('session', $_SESSION); $tpl->assign('translate', $translate); $tpl->assign('visit', $visit); $tpl->assign('license', CerberusLicense::getInstance()); $tpl->assign('page_manifests', $page_manifests); $tpl->assign('page', $page); $tpl->assign('response_uri', implode('/', $response->path)); $core_tpl = DEVBLOCKS_PLUGIN_PATH . 'cerberusweb.core/templates/'; $tpl->assign('core_tpl', $core_tpl); // Prebody Renderers $preBodyRenderers = DevblocksPlatform::getExtensions('cerberusweb.renderer.prebody', true); if (!empty($preBodyRenderers)) { $tpl->assign('prebody_renderers', $preBodyRenderers); } // Postbody Renderers $postBodyRenderers = DevblocksPlatform::getExtensions('cerberusweb.renderer.postbody', true); if (!empty($postBodyRenderers)) { $tpl->assign('postbody_renderers', $postBodyRenderers); } // Timings $tpl->assign('render_time', microtime(true) - DevblocksPlatform::getStartTime()); if (function_exists('memory_get_usage') && function_exists('memory_get_peak_usage')) { $tpl->assign('render_memory', memory_get_usage() - DevblocksPlatform::getStartMemory()); $tpl->assign('render_peak_memory', memory_get_peak_usage() - DevblocksPlatform::getStartPeakMemory()); } $tpl->display($core_tpl . 'border.tpl'); // $cache = DevblocksPlatform::getCacheService(); // $cache->printStatistics(); }
function showWorkspaceTabAction() { $tpl = DevblocksPlatform::getTemplateService(); $tpl->assign('path', $this->_TPL_PATH); $visit = PortSensorApplication::getVisit(); $db = DevblocksPlatform::getDatabaseService(); $active_worker = PortSensorApplication::getActiveWorker(); $current_workspace = DevblocksPlatform::importGPC($_REQUEST['workspace'], 'string', ''); $workspaces = DAO_Worklist::getWorkspaces($active_worker->id); // Fix a bad/old cache if (!empty($current_workspace) && false === array_search($current_workspace, $workspaces)) { $current_workspace = ''; } $views = array(); if (empty($current_workspace) && !empty($workspaces)) { // custom dashboards $current_workspace = reset($workspaces); } if (!empty($current_workspace)) { // Remember the tab $visit->set(PortSensorVisit::KEY_HOME_SELECTED_TAB, 'w_' . $current_workspace); $lists = DAO_Worklist::getWhere(sprintf("%s = %d AND %s = %s", DAO_Worklist::WORKER_ID, $active_worker->id, DAO_Worklist::WORKSPACE, $db->qstr($current_workspace))); // Load the workspace sources to map to view renderer $source_manifests = DevblocksPlatform::getExtensions(Extension_WorklistSource::EXTENSION_POINT, false); // Loop through list schemas if (is_array($lists) && !empty($lists)) { foreach ($lists as $list) { /* @var $list Model_Worklist */ $view_id = 'cust_' . $list->id; if (null == ($view = Ps_AbstractViewLoader::getView($view_id))) { $list_view = $list->view; // Make sure we can find the workspace source (plugin not disabled) if (!isset($source_manifests[$list->source_extension]) || null == ($workspace_source = $source_manifests[$list->source_extension]) || !isset($workspace_source->params['view_class'])) { continue; } // Make sure our workspace source has a valid renderer class $view_class = $workspace_source->params['view_class']; if (!class_exists($view_class)) { continue; } $view = new $view_class(); $view->id = $view_id; $view->name = $list_view->title; $view->renderLimit = $list_view->num_rows; $view->renderPage = 0; $view->view_columns = $list_view->columns; $view->params = $list_view->params; $view->renderSortBy = $list_view->sort_by; $view->renderSortAsc = $list_view->sort_asc; Ps_AbstractViewLoader::setView($view_id, $view); } if (!empty($view)) { $views[] = $view; } } } $tpl->assign('current_workspace', $current_workspace); $tpl->assign('views', $views); } // Log activity DAO_Worker::logActivity($active_worker->id, new Model_Activity('activity.mail.workspaces', array('<i>' . $current_workspace . '</i>'))); $tpl->display('file:' . $this->_TPL_PATH . 'home/workspaces/index.tpl'); }
function signoutAction() { $session = DevblocksPlatform::getSessionService(); $visit = $session->getVisit(); if (null != ($worker = CerberusApplication::getActiveWorker())) { DAO_Worker::logActivity($worker->id, new Model_Activity(null)); } $session->clear(); DevblocksPlatform::redirect(new DevblocksHttpResponse(array('login'))); }
function render() { $tpl = DevblocksPlatform::getTemplateService(); $tpl->cache_lifetime = "0"; $tpl->assign('path', $this->_TPL_PATH); $visit = CerberusApplication::getVisit(); /* @var $visit CerberusVisit */ $response = DevblocksPlatform::getHttpResponse(); $active_worker = CerberusApplication::getActiveWorker(); $translate = DevblocksPlatform::getTranslationService(); $url = DevblocksPlatform::getUrlService(); $stack = $response->path; @array_shift($stack); // display @($id = array_shift($stack)); // Tabs $tab_manifests = DevblocksPlatform::getExtensions('cerberusweb.ticket.tab', false); $tpl->assign('tab_manifests', $tab_manifests); @($tab_selected = array_shift($stack)); if (empty($tab_selected)) { $tab_selected = 'conversation'; } $tpl->assign('tab_selected', $tab_selected); switch ($tab_selected) { case 'conversation': @($mail_always_show_all = DAO_WorkerPref::get($active_worker->id, 'mail_always_show_all', 0)); @($tab_option = array_shift($stack)); if ($mail_always_show_all || 0 == strcasecmp("read_all", $tab_option)) { $tpl->assign('expand_all', true); } break; } // [JAS]: Translate Masks if (!is_numeric($id)) { $id = DAO_Ticket::getTicketIdByMask($id); } $ticket = DAO_Ticket::getTicket($id); if (empty($ticket)) { echo "<H1>" . $translate->_('display.invalid_ticket') . "</H1>"; return; } // Permissions $active_worker_memberships = $active_worker->getMemberships(); // Check group membership ACL if (!isset($active_worker_memberships[$ticket->team_id])) { echo "<H1>" . $translate->_('common.access_denied') . "</H1>"; return; } $tpl->assign('ticket', $ticket); // TicketToolbarItem Extensions $ticketToolbarItems = DevblocksPlatform::getExtensions('cerberusweb.ticket.toolbaritem', true); if (!empty($ticketToolbarItems)) { $tpl->assign('ticket_toolbaritems', $ticketToolbarItems); } // Next+Prev: Does a series exist? if (null != ($series_info = $visit->get('ch_display_series', null))) { @($series = $series_info['series']); $cur = 1; $found = false; // Is this ID part of the series? If not, invalidate if (is_array($series)) { while ($mask = current($series)) { // Stop if we find it. if ($mask == $ticket->mask) { $found = true; break; } next($series); $cur++; } } if (!$found) { // not found $visit->set('ch_display_series', null); } else { // found $series_stats = array('title' => $series_info['title'], 'total' => $series_info['total'], 'count' => count($series)); $series_stats['cur'] = $cur; if (false !== prev($series)) { @($series_stats['prev'] = current($series)); next($series); // skip to current } else { reset($series); } next($series); // next @($series_stats['next'] = current($series)); $tpl->assign('series_stats', $series_stats); } } $quick_search_type = $visit->get('quick_search_type'); $tpl->assign('quick_search_type', $quick_search_type); // Comments [TODO] Eventually this can be cached on ticket.num_comments $comments_total = DAO_TicketComment::getCountByTicketId($id); $tpl->assign('comments_total', $comments_total); // Tasks Total [TODO] Eventually this can be ticket.num_tasks $tasks_total = DAO_Task::getCountBySourceObjectId('cerberusweb.tasks.ticket', $id); $tpl->assign('tasks_total', $tasks_total); $workers = DAO_Worker::getAll(); $tpl->assign('workers', $workers); $teams = DAO_Group::getAll(); $tpl->assign('teams', $teams); $team_categories = DAO_Bucket::getTeams(); $tpl->assign('team_categories', $team_categories); // Log Activity DAO_Worker::logActivity($active_worker->id, new Model_Activity('activity.display_ticket', array(sprintf("<a href='%s' title='[%s] %s'>#%s</a>", $url->write("c=display&id=" . $ticket->mask), htmlspecialchars(@$teams[$ticket->team_id]->name, ENT_QUOTES, LANG_CHARSET_CODE), htmlspecialchars($ticket->subject, ENT_QUOTES, LANG_CHARSET_CODE), $ticket->mask)))); $tpl->display('file:' . $this->_TPL_PATH . 'display/index.tpl'); }
public function writeResponse(DevblocksHttpResponse $response) { /* @var $response DevblocksHttpResponse */ $path = $response->path; $uri_prefix = array_shift($path); // should be mobile // [JAS]: Ajax? // [TODO] Explore outputting whitespace here for Safari // if(empty($path)) // return; $tpl = DevblocksPlatform::getTemplateService(); $session = DevblocksPlatform::getSessionService(); $settings = CerberusSettings::getInstance(); $translate = DevblocksPlatform::getTranslationService(); $visit = $session->getVisit(); $controller = array_shift($path); $pages = DevblocksPlatform::getExtensions('cerberusweb.mobile.page', true); // Default page [TODO] This is supposed to come from framework.config.php if (empty($controller)) { $controller = 'tickets'; } // [JAS]: Require us to always be logged in for Cerberus pages // [TODO] This should probably consult with the page itself for ::authenticated() if (empty($visit)) { $controller = 'login'; } $page_id = $this->_getPageIdByUri($controller); /* @var $page CerberusPageExtension */ @($page = $pages[$page_id]); if (empty($page)) { return; } // 404 // [TODO] Reimplement if (!empty($visit) && !is_null($visit->getWorker())) { DAO_Worker::logActivity($visit->getWorker()->id, $page->getActivity()); } // [JAS]: Listeners (Step-by-step guided tour, etc.) $listenerManifests = DevblocksPlatform::getExtensions('devblocks.listener.http'); foreach ($listenerManifests as $listenerManifest) { /* @var $listenerManifest DevblocksExtensionManifest */ $inst = $listenerManifest->createInstance(); /* @var $inst DevblocksHttpRequestListenerExtension */ $inst->run($response, $tpl); } // [JAS]: Pre-translate any dynamic strings $common_translated = array(); if (!empty($visit) && !is_null($visit->getWorker())) { $common_translated['header_signed_in'] = vsprintf($translate->_('header.signed_in'), array('<b>' . $visit->getWorker()->getName() . '</b>')); } $tpl->assign('common_translated', $common_translated); // $tour_enabled = false; // if(!empty($visit) && !is_null($visit->getWorker())) { // $worker = $visit->getWorker(); // $tour_enabled = DAO_WorkerPref::get($worker->id, 'assist_mode'); // $tour_enabled = ($tour_enabled===false) ? 1 : $tour_enabled; // if(DEMO_MODE) $tour_enabled = 1; // override for DEMO // } // $tpl->assign('tour_enabled', $tour_enabled); // [JAS]: Variables provided to all page templates $tpl->assign('settings', $settings); $tpl->assign('session', $_SESSION); $tpl->assign('translate', $translate); $tpl->assign('visit', $visit); $tpl->assign('license', CerberusLicense::getInstance()); $active_worker = CerberusApplication::getActiveWorker(); $tpl->assign('active_worker', $active_worker); if (!empty($active_worker)) { $active_worker_memberships = $active_worker->getMemberships(); $tpl->assign('active_worker_memberships', $active_worker_memberships); } $tpl->assign('pages', $pages); $tpl->assign('page', $page); $tpl->assign('response_uri', implode('/', $response->path)); $tpl_path = DEVBLOCKS_PLUGIN_PATH . 'cerberusweb.mobile/templates/'; $tpl->assign('core_tpl', DEVBLOCKS_PLUGIN_PATH . 'cerberusweb.core/templates/'); // Timings $tpl->assign('render_time', microtime(true) - DevblocksPlatform::getStartTime()); if (function_exists('memory_get_usage') && function_exists('memory_get_peak_usage')) { $tpl->assign('render_memory', memory_get_usage() - DevblocksPlatform::getStartMemory()); $tpl->assign('render_peak_memory', memory_get_peak_usage() - DevblocksPlatform::getStartPeakMemory()); } $tpl->display($tpl_path . 'border.tpl'); }
function showSearchTabAction() { $tpl = DevblocksPlatform::getTemplateService(); $tpl->assign('path', $this->_TPL_PATH); // $db = DevblocksPlatform::getDatabaseService(); $visit = CerberusApplication::getVisit(); $active_worker = CerberusApplication::getActiveWorker(); // Log activity DAO_Worker::logActivity($active_worker->id, new Model_Activity('activity.mail.search')); // Remember the tab $visit->set(CerberusVisit::KEY_MAIL_MODE, 'search'); // Request path // @$request = DevblocksPlatform::importGPC($_REQUEST['request'],'string',''); // $response_path = explode('/', $request); // @array_shift($response_path); // tickets // @array_shift($response_path); // overview $tpl->assign('response_uri', 'tickets/search'); $view = C4_AbstractViewLoader::getView(CerberusApplication::VIEW_SEARCH); if (null == $view) { $view = C4_TicketView::createSearchView(); C4_AbstractViewLoader::setView($view->id, $view); } $tpl->assign('view', $view); $tpl->assign('params', $view->params); $teams = DAO_Group::getAll(); $tpl->assign('teams', $teams); $buckets = DAO_Bucket::getAll(); $tpl->assign('buckets', $buckets); $team_categories = DAO_Bucket::getTeams(); $tpl->assign('team_categories', $team_categories); $tpl->assign('view_fields', C4_TicketView::getFields()); $tpl->assign('view_searchable_fields', C4_TicketView::getSearchFields()); $tpl->display('file:' . $this->_TPL_PATH . 'tickets/search/index.tpl'); }
public function signoffAction() { $session = DevblocksPlatform::getSessionService(); $visit = $session->getVisit(); DAO_Worker::logActivity(new Model_Activity(null)); $session->clear(); // DevblocksHttpResponse:: DevblocksPlatform::redirect(new DevblocksHttpResponse(array('iphone', 'login'))); }