function authenticateAction() { // Pull from $_POST @($original_path = explode(',', DevblocksPlatform::importGPC($_POST['original_path']))); @($email = DevblocksPlatform::importGPC($_POST['email'])); @($password = DevblocksPlatform::importGPC($_POST['password'])); $url_service = DevblocksPlatform::getUrlService(); $worker = DAO_Worker::login($email, $password); if (!is_null($worker)) { $session = DevblocksPlatform::getSessionService(); $visit = new UsermeetVisit(); $visit->setWorker($worker); $session->setVisit($visit); //authentication passed if ($original_path[0] == '') { unset($original_path[0]); } $devblocks_response = new DevblocksHttpResponse($original_path); // Worker $worker = UsermeetApplication::getActiveWorker(); // Timezone if (null != ($timezone = DAO_WorkerPref::get($worker->id, 'timezone'))) { $_SESSION['timezone'] = $timezone; @date_default_timezone_set($timezone); } // Language if (null != ($lang_code = DAO_WorkerPref::get($worker->id, 'locale'))) { $_SESSION['locale'] = $lang_code; DevblocksPlatform::setLocale($lang_code); } if (empty($devblocks_response->path)) { $tour_enabled = intval(DAO_WorkerPref::get($worker->id, 'assist_mode', 1)); $next_page = $tour_enabled ? 'welcome' : 'home'; $devblocks_response = new DevblocksHttpResponse(array($next_page)); } } else { //authentication failed $devblocks_response = new DevblocksHttpResponse(array('login', 'failed')); } DevblocksPlatform::redirect($devblocks_response); }
function authenticateAction() { @($original_path = explode(',', DevblocksPlatform::importGPC($_POST['original_path']))); $manifest = DevblocksPlatform::getExtension('login.default'); $inst = $manifest->createInstance(); /* @var $inst Extension_LoginAuthenticator */ $url_service = DevblocksPlatform::getUrlService(); if ($inst->authenticate()) { //authentication passed if ($original_path[0] == '') { unset($original_path[0]); } $devblocks_response = new DevblocksHttpResponse($original_path); // Worker $worker = CerberusApplication::getActiveWorker(); // Timezone if (null != ($timezone = DAO_WorkerPref::get($worker->id, 'timezone'))) { $_SESSION['timezone'] = $timezone; @date_default_timezone_set($timezone); } // Language if (null != ($lang_code = DAO_WorkerPref::get($worker->id, 'locale'))) { $_SESSION['locale'] = $lang_code; DevblocksPlatform::setLocale($lang_code); } if (!empty($devblocks_response->path) && $devblocks_response->path[0] == 'login') { $tour_enabled = intval(DAO_WorkerPref::get($worker->id, 'assist_mode', 1)); $next_page = $tour_enabled ? 'welcome' : 'home'; $devblocks_response = new DevblocksHttpResponse(array($next_page)); } } else { //authentication failed $devblocks_response = new DevblocksHttpResponse(array('login', 'failed')); } DevblocksPlatform::redirect($devblocks_response); }
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 showConversationAction() { @($id = DevblocksPlatform::importGPC($_REQUEST['ticket_id'], 'integer')); @($expand_all = DevblocksPlatform::importGPC($_REQUEST['expand_all'], 'integer', '0')); @($active_worker = CerberusApplication::getActiveWorker()); $tpl = DevblocksPlatform::getTemplateService(); $tpl->assign('path', $this->_TPL_PATH); $tpl->assign('expand_all', $expand_all); $ticket = DAO_Ticket::getTicket($id); $tpl->assign('ticket', $ticket); $tpl->assign('requesters', $ticket->getRequesters()); $messages = $ticket->getMessages(); arsort($messages); $tpl->assign('latest_message_id', key($messages)); $tpl->assign('messages', $messages); // Thread comments and messages on the same level $convo_timeline = array(); // Track senders and their orgs $message_senders = array(); $message_sender_orgs = array(); // Loop messages foreach ($messages as $message_id => $message) { /* @var $message CerberusMessage */ $key = $message->created_date . '_m' . $message_id; // build a chrono index of messages $convo_timeline[$key] = array('m', $message_id); // If we haven't cached this sender address yet if (!isset($message_senders[$message->address_id])) { if (null != ($sender_addy = DAO_Address::get($message->address_id))) { $message_senders[$sender_addy->id] = $sender_addy; // If we haven't cached this sender org yet if (!isset($message_sender_orgs[$sender_addy->contact_org_id])) { if (null != ($sender_org = DAO_ContactOrg::get($sender_addy->contact_org_id))) { $message_sender_orgs[$sender_org->id] = $sender_org; } } } } } $tpl->assign('message_senders', $message_senders); $tpl->assign('message_sender_orgs', $message_sender_orgs); @($mail_inline_comments = DAO_WorkerPref::get($active_worker->id, 'mail_inline_comments', 1)); if ($mail_inline_comments) { // if inline comments are enabled $comments = DAO_TicketComment::getByTicketId($id); arsort($comments); $tpl->assign('comments', $comments); // build a chrono index of comments foreach ($comments as $comment_id => $comment) { /* @var $comment Model_TicketComment */ $key = $comment->created . '_c' . $comment_id; $convo_timeline[$key] = array('c', $comment_id); } } // sort the timeline if (!$expand_all) { krsort($convo_timeline); } else { ksort($convo_timeline); } $tpl->assign('convo_timeline', $convo_timeline); // Message Notes $notes = DAO_MessageNote::getByTicketId($id); $message_notes = array(); // Index notes by message id if (is_array($notes)) { foreach ($notes as $note) { if (!isset($message_notes[$note->message_id])) { $message_notes[$note->message_id] = array(); } $message_notes[$note->message_id][$note->id] = $note; } } $tpl->assign('message_notes', $message_notes); // Message toolbar items $messageToolbarItems = DevblocksPlatform::getExtensions('cerberusweb.message.toolbaritem', true); if (!empty($messageToolbarItems)) { $tpl->assign('message_toolbaritems', $messageToolbarItems); } // Workers $workers = DAO_Worker::getAll(); $tpl->assign('workers', $workers); $tpl->register_modifier('makehrefs', array('CerberusUtils', 'smarty_modifier_makehrefs')); $tpl->display('file:' . $this->_TPL_PATH . 'display/modules/conversation/index.tpl'); }
function handleRequest(DevblocksHttpRequest $request) { $worker = CerberusApplication::getActiveWorker(); if (empty($worker)) { return; } $stack = $request->path; array_shift($stack); // print @($object = strtolower(array_shift($stack))); // ticket|message|etc $tpl = DevblocksPlatform::getTemplateService(); $tpl->assign('path', $this->_TPL_PATH); $settings = DevblocksPlatform::getPluginSettingsService(); $tpl->assign('settings', $settings); $translate = DevblocksPlatform::getTranslationService(); $tpl->assign('translate', $translate); $teams = DAO_Group::getAll(); $tpl->assign('teams', $teams); $buckets = DAO_Bucket::getAll(); $tpl->assign('buckets', $buckets); $workers = DAO_Worker::getAll(); $tpl->assign('workers', $workers); // Security $active_worker = CerberusApplication::getActiveWorker(); $active_worker_memberships = $active_worker->getMemberships(); // [TODO] Make this pluggable // Subcontroller switch ($object) { case 'ticket': @($id = array_shift($stack)); @($ticket = is_numeric($id) ? DAO_Ticket::getTicket($id) : DAO_Ticket::getTicketByMask($id)); $convo_timeline = array(); $messages = $ticket->getMessages(); foreach ($messages as $message_id => $message) { /* @var $message CerberusMessage */ $key = $message->created_date . '_m' . $message_id; // build a chrono index of messages $convo_timeline[$key] = array('m', $message_id); } @($mail_inline_comments = DAO_WorkerPref::get($active_worker->id, 'mail_inline_comments', 1)); if ($mail_inline_comments) { // if inline comments are enabled $comments = DAO_TicketComment::getByTicketId($ticket->id); arsort($comments); $tpl->assign('comments', $comments); // build a chrono index of comments foreach ($comments as $comment_id => $comment) { /* @var $comment Model_TicketComment */ $key = $comment->created . '_c' . $comment_id; $convo_timeline[$key] = array('c', $comment_id); } } ksort($convo_timeline); $tpl->assign('convo_timeline', $convo_timeline); // Comment parent addresses $comment_addresses = array(); foreach ($comments as $comment) { /* @var $comment Model_TicketComment */ $address_id = intval($comment->address_id); if (!isset($comment_addresses[$address_id])) { $address = DAO_Address::get($address_id); $comment_addresses[$address_id] = $address; } } $tpl->assign('comment_addresses', $comment_addresses); // Message Notes $notes = DAO_MessageNote::getByTicketId($ticket->id); $message_notes = array(); // Index notes by message id if (is_array($notes)) { foreach ($notes as $note) { if (!isset($message_notes[$note->message_id])) { $message_notes[$note->message_id] = array(); } $message_notes[$note->message_id][$note->id] = $note; } } $tpl->assign('message_notes', $message_notes); // Make sure we're allowed to view this ticket or message if (!isset($active_worker_memberships[$ticket->team_id])) { echo "<H1>" . $translate->_('common.access_denied') . "</H1>"; return; } $tpl->assign('ticket', $ticket); $tpl->display('file:' . $this->_TPL_PATH . 'print/ticket.tpl'); break; case 'message': @($id = array_shift($stack)); @($message = DAO_Ticket::getMessage($id)); @($ticket = DAO_Ticket::getTicket($message->ticket_id)); // Make sure we're allowed to view this ticket or message if (!isset($active_worker_memberships[$ticket->team_id])) { echo "<H1>" . $translate->_('common.access_denied') . "</H1>"; return; } // Message Notes $notes = DAO_MessageNote::getByTicketId($ticket->id); $message_notes = array(); // Index notes by message id if (is_array($notes)) { foreach ($notes as $note) { if (!isset($message_notes[$note->message_id])) { $message_notes[$note->message_id] = array(); } $message_notes[$note->message_id][$note->id] = $note; } } $tpl->assign('message_notes', $message_notes); $tpl->assign('message', $message); $tpl->assign('ticket', $ticket); $tpl->display('file:' . $this->_TPL_PATH . 'print/message.tpl'); break; } }
function authenticateLDAPAction() { @($server = DevblocksPlatform::importGPC($_POST['server'])); @($port = DevblocksPlatform::importGPC($_POST['port'])); @($dn = DevblocksPlatform::importGPC($_POST['dn'])); @($password = DevblocksPlatform::importGPC($_POST['password'])); @($original_path = explode(',', DevblocksPlatform::importGPC($_POST['original_path']))); @($original_query_str = DevblocksPlatform::importGPC($_POST['original_query'])); $manifest = DevblocksPlatform::getExtension('login.ldap'); $inst = $manifest->createInstance(); /* @var $inst CerberusLoginPageExtension */ $url_service = DevblocksPlatform::getUrlService(); if ($inst->authenticate(array('server' => $server, 'port' => $port, 'dn' => $dn, 'password' => $password))) { //authentication passed $original_query = $url_service->parseQueryString($original_query_str); if ($original_path[0] == '') { unset($original_path[0]); } $devblocks_response = new DevblocksHttpResponse($original_path, $original_query); if ($devblocks_response->path[0] == 'login') { $session = DevblocksPlatform::getSessionService(); $visit = $session->getVisit(); $tour_enabled = false; if (!empty($visit) && !is_null($visit->getWorker())) { $worker = $visit->getWorker(); $tour_enabled = intval(DAO_WorkerPref::get($worker->id, 'assist_mode', 1)); } $next_page = $tour_enabled ? 'welcome' : 'home'; $devblocks_response = new DevblocksHttpResponse(array($next_page)); } } else { //authentication failed $devblocks_response = new DevblocksHttpResponse(array('login')); } DevblocksPlatform::redirect($devblocks_response); }
/** * Enter description here... * * @param string $class Feg_AbstractView * @param string $view_label ID * @return Feg_AbstractView instance */ static function getView($view_label, Feg_AbstractViewModel $defaults = null) { $active_worker = FegApplication::getActiveWorker(); if (is_null(self::$views)) { self::_init(); } if (self::exists($view_label)) { $model = self::$views[$view_label]; return self::unserializeAbstractView($model); } else { // See if the worker has their own saved prefs @($prefs = unserialize(DAO_WorkerPref::get($active_worker->id, 'view' . $view_label))); // Sanitize if (!empty($prefs) && $prefs instanceof Feg_AbstractViewModel && !empty($prefs->class_name)) { if (!class_exists($prefs->class_name)) { DAO_WorkerPref::delete($active_worker->id, 'view' . $view_label); } $prefs = null; } // If no worker prefsd, check if we're passed defaults if (!$prefs instanceof Feg_AbstractViewModel && !empty($defaults)) { $prefs = $defaults; } // Create a default view if it doesn't exist if ($prefs instanceof Feg_AbstractViewModel) { if (!empty($prefs->class_name) && class_exists($prefs->class_name)) { $view = new $prefs->class_name(); $view->id = $view_label; if (!empty($prefs->view_columns)) { $view->view_columns = $prefs->view_columns; } if (!empty($prefs->renderLimit)) { $view->renderLimit = $prefs->renderLimit; } if (null !== $prefs->renderSortBy) { $view->renderSortBy = $prefs->renderSortBy; } if (null !== $prefs->renderSortAsc) { $view->renderSortAsc = $prefs->renderSortAsc; } self::setView($view_label, $view); return $view; } } } return null; }
function showTab() { $tpl = DevblocksPlatform::getTemplateService(); $tpl->assign('path', $this->tpl_path); $tpl->cache_lifetime = "0"; $worker = CerberusApplication::getActiveWorker(); $tpl->assign('worker', $worker); $groups = DAO_Group::getAll(); $tpl->assign('groups', $groups); $group_buckets = DAO_Bucket::getTeams(); $tpl->assign('group_buckets', $group_buckets); $memberships = $worker->getMemberships(); $tpl->assign('memberships', $memberships); $addresses = DAO_AddressToWorker::getByWorker($worker->id); $tpl->assign('addresses', $addresses); @($notifications = DAO_WorkerMailForward::getWhere(sprintf("%s = %d", DAO_WorkerMailForward::WORKER_ID, $worker->id))); $tpl->assign('notifications', $notifications); $assign_notify_email = DAO_WorkerPref::get($worker->id, ChWatchersPlugin::WORKER_PREF_ASSIGN_EMAIL, ''); $tpl->assign('assign_notify_email', $assign_notify_email); $tpl->display('file:' . $this->tpl_path . '/preferences/watchers.tpl'); }
function showGeneralAction() { $date_service = DevblocksPlatform::getDateService(); $tpl = DevblocksPlatform::getTemplateService(); $tpl_path = $this->_TPL_PATH; $tpl->assign('path', $tpl_path); $worker = CerberusApplication::getActiveWorker(); $tpl->assign('worker', $worker); $tour_enabled = intval(DAO_WorkerPref::get($worker->id, 'assist_mode', 1)); $tpl->assign('assist_mode', $tour_enabled); $keyboard_shortcuts = intval(DAO_WorkerPref::get($worker->id, 'keyboard_shortcuts', 1)); $tpl->assign('keyboard_shortcuts', $keyboard_shortcuts); $mail_inline_comments = DAO_WorkerPref::get($worker->id, 'mail_inline_comments', 1); $tpl->assign('mail_inline_comments', $mail_inline_comments); $mail_always_show_all = DAO_WorkerPref::get($worker->id, 'mail_always_show_all', 0); $tpl->assign('mail_always_show_all', $mail_always_show_all); $addresses = DAO_AddressToWorker::getByWorker($worker->id); $tpl->assign('addresses', $addresses); // Timezones $tpl->assign('timezones', $date_service->getTimezones()); @($server_timezone = date_default_timezone_get()); $tpl->assign('server_timezone', $server_timezone); // Languages $langs = DAO_Translation::getDefinedLangCodes(); $tpl->assign('langs', $langs); $tpl->assign('selected_language', DAO_WorkerPref::get($worker->id, 'locale', 'en_US')); $tpl->display('file:' . $tpl_path . 'preferences/modules/general.tpl'); }
function showOverviewTabAction() { $tpl = DevblocksPlatform::getTemplateService(); $tpl->assign('path', $this->_TPL_PATH); $db = DevblocksPlatform::getDatabaseService(); $visit = CerberusApplication::getVisit(); $translate = DevblocksPlatform::getTranslationService(); // Remember the tab $visit->set(CerberusVisit::KEY_MAIL_MODE, 'overview'); $views = array(); // Request path @($request = DevblocksPlatform::importGPC($_REQUEST['request'], 'string', '')); $response_path = explode('/', $request); @array_shift($response_path); // tickets @($controller = array_shift($response_path)); // overview // Make sure the global URL was for us if (0 != strcasecmp('overview', $controller)) { $response_path = null; } $workers = DAO_Worker::getAll(); $tpl->assign('workers', $workers); $active_worker = CerberusApplication::getActiveWorker(); $groups = DAO_Group::getAll(); $tpl->assign('groups', $groups); $group_buckets = DAO_Bucket::getTeams(); $tpl->assign('group_buckets', $group_buckets); $workers = DAO_Worker::getAll(); $tpl->assign('workers', $workers); $memberships = $active_worker->getMemberships(); // Totals $group_counts = DAO_Overview::getGroupTotals(); $tpl->assign('group_counts', $group_counts); $waiting_counts = DAO_Overview::getWaitingTotals(); $tpl->assign('waiting_counts', $waiting_counts); $worker_counts = DAO_Overview::getWorkerTotals(); $tpl->assign('worker_counts', $worker_counts); // All Open $overView = C4_AbstractViewLoader::getView('', CerberusApplication::VIEW_OVERVIEW_ALL); $title = $translate->_('mail.overview.all_groups'); // [JAS]: Recover from a bad cached ID. if (null == $overView) { // Defaults $overViewDefaults = new C4_AbstractViewModel(); $overViewDefaults->view_columns = array(SearchFields_Ticket::TICKET_LAST_ACTION_CODE, SearchFields_Ticket::TICKET_UPDATED_DATE, SearchFields_Ticket::TEAM_NAME, SearchFields_Ticket::TICKET_CATEGORY_ID, SearchFields_Ticket::TICKET_NEXT_WORKER_ID); $overViewDefaults->renderLimit = 10; $overViewDefaults->renderSortBy = SearchFields_Ticket::TICKET_UPDATED_DATE; $overViewDefaults->renderSortAsc = 0; // If the worker has other default preferences, load them instead if (!DEMO_MODE && null != ($overViewPrefsStr = DAO_WorkerPref::get($active_worker->id, DAO_WorkerPref::SETTING_OVERVIEW, null))) { @($overViewPrefs = unserialize($overViewPrefsStr)); /* @var C4_AbstractViewModel $overViewPrefs */ if ($overViewPrefs instanceof C4_AbstractViewModel) { if (!is_null($overViewPrefs->view_columns)) { $overViewDefaults->view_columns = $overViewPrefs->view_columns; } if (!is_null($overViewPrefs->renderLimit)) { $overViewDefaults->renderLimit = $overViewPrefs->renderLimit; } if (!is_null($overViewPrefs->renderSortBy)) { $overViewDefaults->renderSortBy = $overViewPrefs->renderSortBy; } if (!is_null($overViewPrefs->renderSortAsc)) { $overViewDefaults->renderSortAsc = $overViewPrefs->renderSortAsc; } } } $overView = new C4_TicketView(); $overView->id = CerberusApplication::VIEW_OVERVIEW_ALL; $overView->name = $title; $overView->view_columns = $overViewDefaults->view_columns; $overView->params = array(); $overView->renderLimit = $overViewDefaults->renderLimit; $overView->renderPage = 0; $overView->renderSortBy = $overViewDefaults->renderSortBy; $overView->renderSortAsc = $overViewDefaults->renderSortAsc; C4_AbstractViewLoader::setView($overView->id, $overView); } $overView->renderPage = 0; // Filter persistence if (empty($response_path)) { @($response_path = explode('/', $visit->get(CerberusVisit::KEY_OVERVIEW_FILTER, 'all'))); } else { // View Filter $visit->set(CerberusVisit::KEY_OVERVIEW_FILTER, implode('/', $response_path)); } @($filter = array_shift($response_path)); switch ($filter) { case 'group': @($filter_group_id = array_shift($response_path)); $overView->params = array(SearchFields_Ticket::TICKET_CLOSED => new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_CLOSED, '=', CerberusTicketStatus::OPEN), SearchFields_Ticket::TICKET_WAITING => new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_WAITING, '=', 0)); if (!is_null($filter_group_id) && isset($groups[$filter_group_id])) { $tpl->assign('filter_group_id', $filter_group_id); $title = $groups[$filter_group_id]->name; $overView->params[SearchFields_Ticket::TEAM_ID] = new DevblocksSearchCriteria(SearchFields_Ticket::TEAM_ID, '=', $filter_group_id); @($filter_bucket_id = array_shift($response_path)); if (!is_null($filter_bucket_id)) { $tpl->assign('filter_bucket_id', $filter_bucket_id); @($title .= ': ' . ($filter_bucket_id == 0 ? $translate->_('common.inbox') : $group_buckets[$filter_group_id][$filter_bucket_id]->name)); $overView->params[SearchFields_Ticket::TICKET_CATEGORY_ID] = new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_CATEGORY_ID, '=', $filter_bucket_id); } } break; case 'waiting': @($filter_group_id = array_shift($response_path)); $overView->params = array(SearchFields_Ticket::TICKET_CLOSED => new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_CLOSED, '=', CerberusTicketStatus::OPEN), SearchFields_Ticket::TICKET_WAITING => new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_WAITING, '=', 1)); if (!is_null($filter_group_id) && isset($groups[$filter_group_id])) { $tpl->assign('filter_group_id', $filter_group_id); $title = vsprintf($translate->_('mail.overview.waiting.title'), $groups[$filter_group_id]->name); $overView->params[SearchFields_Ticket::TEAM_ID] = new DevblocksSearchCriteria(SearchFields_Ticket::TEAM_ID, '=', $filter_group_id); } break; case 'worker': @($filter_worker_id = array_shift($response_path)); $overView->params = array(SearchFields_Ticket::TICKET_CLOSED => new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_CLOSED, '=', CerberusTicketStatus::OPEN), SearchFields_Ticket::TICKET_WAITING => new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_WAITING, '=', 0), $overView->params[SearchFields_Ticket::TEAM_ID] = new DevblocksSearchCriteria(SearchFields_Ticket::TEAM_ID, 'in', array_keys($memberships))); if (!is_null($filter_worker_id)) { $title = vsprintf($translate->_('mail.overview.assigned.title'), $workers[$filter_worker_id]->getName()); $overView->params[SearchFields_Ticket::TICKET_NEXT_WORKER_ID] = new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_NEXT_WORKER_ID, '=', $filter_worker_id); @($filter_group_id = array_shift($response_path)); if (!is_null($filter_group_id) && isset($groups[$filter_group_id])) { $overView->params[SearchFields_Ticket::TEAM_ID] = new DevblocksSearchCriteria(SearchFields_Ticket::TEAM_ID, '=', $filter_group_id); } } break; case 'all': default: $overView->params = array(SearchFields_Ticket::TICKET_CLOSED => new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_CLOSED, '=', CerberusTicketStatus::OPEN), SearchFields_Ticket::TICKET_WAITING => new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_WAITING, '=', 0), SearchFields_Ticket::TEAM_ID => new DevblocksSearchCriteria(SearchFields_Ticket::TEAM_ID, 'in', array_keys($memberships))); break; } $overView->name = $title; C4_AbstractViewLoader::setView($overView->id, $overView); $views[] = $overView; $tpl->assign('views', $views); // Log activity DAO_Worker::logActivity($active_worker->id, new Model_Activity('activity.mail.overview', array('<i>' . $overView->name . '</i>'))); // ====== Who's Online $whos_online = DAO_Worker::getAllOnline(); if (!empty($whos_online)) { $tpl->assign('whos_online', $whos_online); $tpl->assign('whos_online_count', count($whos_online)); } $tpl->display('file:' . $this->_TPL_PATH . 'tickets/overview/index.tpl'); }
*/ require getcwd() . '/framework.config.php'; require DEVBLOCKS_PATH . 'Devblocks.class.php'; require APP_PATH . '/api/Application.class.php'; header("Content-type: text/html; charset=" . LANG_CHARSET_CODE); $request = DevblocksPlatform::readRequest(); DevblocksPlatform::init(); DevblocksPlatform::setExtensionDelegate('C4_DevblocksExtensionDelegate'); $session = DevblocksPlatform::getSessionService(); $settings = DevblocksPlatform::getPluginSettingsService(); $worker = CerberusApplication::getActiveWorker(); // Localization DevblocksPlatform::setLocale(isset($_SESSION['locale']) && !empty($_SESSION['locale']) ? $_SESSION['locale'] : 'en_US'); if (isset($_SESSION['timezone'])) { @date_default_timezone_set($_SESSION['timezone']); } $tpl = DevblocksPlatform::getTemplateService(); $tpl->assign('translate', DevblocksPlatform::getTranslationService()); $tpl->assign('session', $_SESSION); $tpl->assign('visit', $session->getVisit()); $tpl->assign('active_worker', $worker); $tpl->assign('settings', $settings); $tpl->assign('core_tpl', APP_PATH . '/features/cerberusweb.core/templates/'); if (!empty($worker)) { $active_worker_memberships = $worker->getMemberships(); $tpl->assign('active_worker_memberships', $active_worker_memberships); $keyboard_shortcuts = intval(DAO_WorkerPref::get($worker->id, 'keyboard_shortcuts', 1)); $tpl->assign('pref_keyboard_shortcuts', $keyboard_shortcuts); } CerberusApplication::processRequest($request, true); exit;
function showTabGeneralAction() { $date_service = DevblocksPlatform::getDateService(); $tpl = DevblocksPlatform::getTemplateService(); $tpl_path = $this->_TPL_PATH; $tpl->assign('path', $tpl_path); $worker = PortSensorApplication::getActiveWorker(); $tpl->assign('worker', $worker); $assist_mode = intval(DAO_WorkerPref::get($worker->id, 'assist_mode', 1)); $tpl->assign('assist_mode', $assist_mode); $keyboard_shortcuts = intval(DAO_WorkerPref::get($worker->id, 'keyboard_shortcuts', 1)); $tpl->assign('keyboard_shortcuts', $keyboard_shortcuts); // Timezones $tpl->assign('timezones', $date_service->getTimezones()); @($server_timezone = date_default_timezone_get()); $tpl->assign('server_timezone', $server_timezone); // Languages $langs = DAO_Translation::getDefinedLangCodes(); $tpl->assign('langs', $langs); $tpl->assign('selected_language', DAO_WorkerPref::get($worker->id, 'locale', 'en_US')); $tpl->display('file:' . $tpl_path . 'preferences/tabs/general.tpl'); }
function showTab() { $response = DevblocksPlatform::getHttpResponse(); $path = $response->path; array_shift($path); // iphone array_shift($path); // tickets array_shift($path); // current ('display') $id = array_shift($path); // ticket id @($active_worker = CerberusApplication::getActiveWorker()); $tpl = DevblocksPlatform::getTemplateService(); $tpl->assign('path', $this->_TPL_PATH); $tpl->assign('expand_all', $expand_all); $ticket = DAO_Ticket::getTicket($id); $tpl->assign('requesters', $ticket->getRequesters()); // Drafts $drafts = DAO_MailQueue::getWhere(sprintf("%s = %d AND %s = %s", DAO_MailQueue::TICKET_ID, $id, DAO_MailQueue::TYPE, C4_ORMHelper::qstr(Model_MailQueue::TYPE_TICKET_REPLY))); if (!empty($drafts)) { $tpl->assign('drafts', $drafts); } // Only unqueued drafts $pending_drafts = array(); if (!empty($drafts) && is_array($drafts)) { foreach ($drafts as $draft_id => $draft) { if (!$draft->is_queued) { $pending_drafts[$draft_id] = $draft; } } } if (!empty($pending_drafts)) { $tpl->assign('pending_drafts', $pending_drafts); } // Messages $messages = $ticket->getMessages(); arsort($messages); $tpl->assign('latest_message_id', key($messages)); $tpl->assign('messages', $messages); // Thread comments and messages on the same level $convo_timeline = array(); // Track senders and their orgs $message_senders = array(); $message_sender_orgs = array(); // Loop messages foreach ($messages as $message_id => $message) { /* @var $message Model_Message */ $key = $message->created_date . '_m' . $message_id; // build a chrono index of messages $convo_timeline[$key] = array('m', $message_id); // If we haven't cached this sender address yet if (!isset($message_senders[$message->address_id])) { if (null != ($sender_addy = DAO_Address::get($message->address_id))) { $message_senders[$sender_addy->id] = $sender_addy; // If we haven't cached this sender org yet if (!isset($message_sender_orgs[$sender_addy->contact_org_id])) { if (null != ($sender_org = DAO_ContactOrg::get($sender_addy->contact_org_id))) { $message_sender_orgs[$sender_org->id] = $sender_org; } } } } } $tpl->assign('message_senders', $message_senders); $tpl->assign('message_sender_orgs', $message_sender_orgs); @($mail_inline_comments = DAO_WorkerPref::get($active_worker->id, 'mail_inline_comments', 1)); if ($mail_inline_comments) { // if inline comments are enabled $comments = DAO_TicketComment::getByTicketId($id); arsort($comments); $tpl->assign('comments', $comments); // build a chrono index of comments foreach ($comments as $comment_id => $comment) { /* @var $comment Model_TicketComment */ $key = $comment->created . '_c' . $comment_id; $convo_timeline[$key] = array('c', $comment_id); } } // Thread drafts into conversation if (!empty($drafts)) { foreach ($drafts as $draft_id => $draft) { /* @var $draft Model_MailQueue */ $key = $draft->updated . '_d' . $draft_id; $convo_timeline[$key] = array('d', $draft_id); } } // sort the timeline if (!$expand_all) { krsort($convo_timeline); } else { ksort($convo_timeline); } $tpl->assign('convo_timeline', $convo_timeline); // Message Notes $notes = DAO_MessageNote::getByTicketId($id); $message_notes = array(); // Index notes by message id if (is_array($notes)) { foreach ($notes as $note) { if (!isset($message_notes[$note->message_id])) { $message_notes[$note->message_id] = array(); } $message_notes[$note->message_id][$note->id] = $note; } } $tpl->assign('message_notes', $message_notes); // Message toolbar items $messageToolbarItems = DevblocksPlatform::getExtensions('cerberusweb.message.toolbaritem', true); if (!empty($messageToolbarItems)) { $tpl->assign('message_toolbaritems', $messageToolbarItems); } // Workers $workers = DAO_Worker::getAll(); $tpl->assign('workers', $workers); $tpl->display('file:' . $this->_TPL_PATH . 'tickets/display/conversation.tpl'); }