Beispiel #1
0
 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);
 }
Beispiel #2
0
 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);
 }
Beispiel #3
0
 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();
 }
Beispiel #4
0
 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');
 }
Beispiel #5
0
 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;
     }
 }
Beispiel #6
0
 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);
 }
Beispiel #7
0
 /**
  * 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;
 }
Beispiel #8
0
 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');
 }
Beispiel #9
0
 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');
 }
Beispiel #10
0
 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');
 }
Beispiel #11
0
 */
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;
Beispiel #12
0
 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');
 }
Beispiel #13
0
 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');
 }