示例#1
0
文件: tickets.php 项目: Hildy/cerb5
 function showWorkflowTabAction()
 {
     $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, 'workflow');
     $views = array();
     // Request path
     @($request = DevblocksPlatform::importGPC($_REQUEST['request'], 'string', ''));
     $response_path = explode('/', $request);
     @array_shift($response_path);
     // tickets
     @($controller = array_shift($response_path));
     // workflow
     // Make sure the global URL was for us
     if (0 != strcasecmp('workflow', $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_WorkflowView::getGroupTotals();
     $tpl->assign('group_counts', $group_counts);
     // View
     $title = $translate->_('mail.overview.all_groups');
     $defaults = new C4_AbstractViewModel();
     $defaults->class_name = 'C4_TicketView';
     $defaults->id = CerberusApplication::VIEW_MAIL_WORKFLOW;
     $defaults->name = $title;
     $defaults->view_columns = array(SearchFields_Ticket::TICKET_LAST_ACTION_CODE, SearchFields_Ticket::TICKET_UPDATED_DATE, SearchFields_Ticket::TICKET_TEAM_ID, SearchFields_Ticket::TICKET_CATEGORY_ID);
     $defaults->renderLimit = 10;
     $defaults->renderSortBy = SearchFields_Ticket::TICKET_UPDATED_DATE;
     $defaults->renderSortAsc = 0;
     $workflowView = C4_AbstractViewLoader::getView(CerberusApplication::VIEW_MAIL_WORKFLOW, $defaults);
     $workflowView->renderPage = 0;
     // Filter persistence
     if (empty($response_path)) {
         @($response_path = explode('/', $visit->get(CerberusVisit::KEY_WORKFLOW_FILTER, 'all')));
     } else {
         // View Filter
         $visit->set(CerberusVisit::KEY_WORKFLOW_FILTER, implode('/', $response_path));
     }
     @($filter = array_shift($response_path));
     switch ($filter) {
         case 'group':
             @($filter_group_id = array_shift($response_path));
             $workflowView->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::TICKET_NEXT_WORKER_ID => new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_NEXT_WORKER_ID, '=', 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;
                 $workflowView->params[SearchFields_Ticket::TICKET_TEAM_ID] = new DevblocksSearchCriteria(SearchFields_Ticket::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));
                     $workflowView->params[SearchFields_Ticket::TICKET_CATEGORY_ID] = new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_CATEGORY_ID, '=', $filter_bucket_id);
                 } else {
                     $assignable_buckets = DAO_Bucket::getAssignableBuckets($filter_group_id);
                     $assignable_bucket_ids = array_keys($assignable_buckets);
                     // Does this manager want the inbox assignable?
                     if (DAO_GroupSettings::get($filter_group_id, DAO_GroupSettings::SETTING_INBOX_IS_ASSIGNABLE, 1)) {
                         array_unshift($assignable_bucket_ids, 0);
                     }
                     $workflowView->params[SearchFields_Ticket::TICKET_CATEGORY_ID] = new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_CATEGORY_ID, 'in', $assignable_bucket_ids);
                 }
             }
             break;
         case 'all':
         default:
             $workflowView->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::TICKET_NEXT_WORKER_ID => new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_NEXT_WORKER_ID, '=', 0));
             $subparams = array(DevblocksSearchCriteria::GROUP_OR);
             if (is_array($memberships)) {
                 foreach ($memberships as $group_id => $member) {
                     $assignable_buckets = DAO_Bucket::getAssignableBuckets($group_id);
                     $assignable_bucket_ids = array_keys($assignable_buckets);
                     // Does this manager want the inbox assignable?
                     if (DAO_GroupSettings::get($group_id, DAO_GroupSettings::SETTING_INBOX_IS_ASSIGNABLE, 1)) {
                         array_unshift($assignable_bucket_ids, 0);
                     }
                     // Don't push empty groups into the param stack
                     if (empty($assignable_bucket_ids)) {
                         continue;
                     }
                     $subparams[] = array(DevblocksSearchCriteria::GROUP_AND, SearchFields_Ticket::TICKET_TEAM_ID => new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_TEAM_ID, '=', $group_id), SearchFields_Ticket::TICKET_CATEGORY_ID => new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_CATEGORY_ID, 'in', $assignable_bucket_ids));
                 }
             }
             // If we had subgroups from memberships
             if (1 < count($subparams)) {
                 $workflowView->params['tmp_GrpBkt'] = $subparams;
             } else {
                 // We're not in any groups
                 $workflowView->params[SearchFields_Ticket::TICKET_TEAM_ID] = new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_TEAM_ID, '=', -1);
             }
             break;
     }
     $workflowView->name = $title;
     C4_AbstractViewLoader::setView($workflowView->id, $workflowView);
     $views[] = $workflowView;
     $tpl->assign('views', $views);
     // Log activity
     DAO_Worker::logActivity($active_worker->id, new Model_Activity('activity.mail.workflow', array('<i>' . $workflowView->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/workflow/index.tpl');
 }