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'); }