function showWatcherPanelAction() { @($id = DevblocksPlatform::importGPC($_REQUEST['id'], 'integer', 0)); @($view_id = DevblocksPlatform::importGPC($_REQUEST['view_id'])); $tpl = DevblocksPlatform::getTemplateService(); $tpl->assign('path', $this->_TPL_PATH); $tpl->assign('view_id', $view_id); $active_worker = CerberusApplication::getActiveWorker(); if (null != ($filter = DAO_WatcherMailFilter::get($id))) { $tpl->assign('filter', $filter); } $groups = DAO_Group::getAll(); $tpl->assign('groups', $groups); $buckets = DAO_Bucket::getAll(); $tpl->assign('buckets', $buckets); $group_buckets = DAO_Bucket::getTeams(); $tpl->assign('group_buckets', $group_buckets); $memberships = $active_worker->getMemberships(); $tpl->assign('memberships', $memberships); if (null == @($worker_id = $filter->worker_id)) { $worker_id = $active_worker->id; } $addresses = DAO_AddressToWorker::getByWorker($worker_id); $tpl->assign('addresses', $addresses); $tpl->assign('workers', DAO_Worker::getAllActive()); $tpl->assign('all_workers', DAO_Worker::getAll()); // Custom Fields: Ticket $ticket_fields = DAO_CustomField::getBySource(ChCustomFieldSource_Ticket::ID); $tpl->assign('ticket_fields', $ticket_fields); // Custom Fields: Address $address_fields = DAO_CustomField::getBySource(ChCustomFieldSource_Address::ID); $tpl->assign('address_fields', $address_fields); // Custom Fields: Orgs $org_fields = DAO_CustomField::getBySource(ChCustomFieldSource_Org::ID); $tpl->assign('org_fields', $org_fields); $tpl->display('file:' . $this->_TPL_PATH . 'preferences/peek.tpl'); }
function showInboxFilterPanelAction() { @($id = DevblocksPlatform::importGPC($_REQUEST['id'], 'integer', 0)); @($group_id = DevblocksPlatform::importGPC($_REQUEST['group_id'], 'integer', 0)); @($ticket_id = DevblocksPlatform::importGPC($_REQUEST['ticket_id'], 'integer', 0)); @($view_id = DevblocksPlatform::importGPC($_REQUEST['view_id'], 'string', '')); $active_worker = CerberusApplication::getActiveWorker(); $tpl = DevblocksPlatform::getTemplateService(); $tpl_path = $this->_TPL_PATH; $tpl->assign('path', $tpl_path); $tpl->assign('group_id', $group_id); $tpl->assign('view_id', $view_id); if (null != ($filter = DAO_GroupInboxFilter::get($id))) { $tpl->assign('filter', $filter); } // Make sure we're allowed to change this group's setup if (!$active_worker->isTeamManager($group_id) && !$active_worker->is_superuser) { return; } // Load the example ticket + headers if provided if (!empty($ticket_id)) { $ticket = DAO_Ticket::getTicket($ticket_id); $tpl->assign('ticket', $ticket); $messages = $ticket->getMessages(); $message = array_shift($messages); /* @var $message CerberusMessage */ $message_headers = $message->getHeaders(); $tpl->assign('message', $message); $tpl->assign('message_headers', $message_headers); } $category_name_hash = DAO_Bucket::getCategoryNameHash(); $tpl->assign('category_name_hash', $category_name_hash); $groups = DAO_Group::getAll(); $tpl->assign('groups', $groups); $team_categories = DAO_Bucket::getTeams(); $tpl->assign('team_categories', $team_categories); $workers = DAO_Worker::getAll(); $tpl->assign('workers', $workers); // Custom Fields: Address $address_fields = DAO_CustomField::getBySource(ChCustomFieldSource_Address::ID); $tpl->assign('address_fields', $address_fields); // Custom Fields: Orgs $org_fields = DAO_CustomField::getBySource(ChCustomFieldSource_Org::ID); $tpl->assign('org_fields', $org_fields); // Custom Fields: Tickets $ticket_fields = DAO_CustomField::getBySource(ChCustomFieldSource_Ticket::ID); $tpl->assign('ticket_fields', $ticket_fields); $tpl->display('file:' . $tpl_path . 'groups/manage/filters/peek.tpl'); }
function showContactHistoryAction() { $translate = DevblocksPlatform::getTranslationService(); @($ticket_id = DevblocksPlatform::importGPC($_REQUEST['ticket_id'], 'integer')); $tpl = DevblocksPlatform::getTemplateService(); $tpl->assign('path', $this->_TPL_PATH); $ticket = DAO_Ticket::getTicket($ticket_id); $requesters = $ticket->getRequesters(); $contact = DAO_Address::get($ticket->first_wrote_address_id); $tpl->assign('contact', $contact); $visit = CerberusApplication::getVisit(); /* @var $visit CerberusVisit */ $view = C4_AbstractViewLoader::getView('', 'contact_history'); if (null == $view) { $view = new C4_TicketView(); $view->id = 'contact_history'; $view->name = $translate->_('addy_book.history.view.title'); $view->view_columns = array(SearchFields_Ticket::TICKET_LAST_ACTION_CODE, SearchFields_Ticket::TICKET_CREATED_DATE, SearchFields_Ticket::TICKET_TEAM_ID, SearchFields_Ticket::TICKET_CATEGORY_ID); $view->params = array(); $view->renderLimit = 10; $view->renderSortBy = SearchFields_Ticket::TICKET_CREATED_DATE; $view->renderSortAsc = false; } $view->name = vsprintf($translate->_('addy_book.history.view.requester'), intval(count($requesters))); $view->params = array(SearchFields_Ticket::REQUESTER_ID => new DevblocksSearchCriteria(SearchFields_Ticket::REQUESTER_ID, 'in', array_keys($requesters)), SearchFields_Ticket::TICKET_DELETED => new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_DELETED, DevblocksSearchCriteria::OPER_EQ, 0)); $view->renderPage = 0; $tpl->assign('view', $view); C4_AbstractViewLoader::setView($view->id, $view); $workers = DAO_Worker::getAll(); $tpl->assign('workers', $workers); $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->display('file:' . $this->_TPL_PATH . 'display/modules/history/index.tpl'); }
function showTabHistoryAction() { $translate = DevblocksPlatform::getTranslationService(); @($org = DevblocksPlatform::importGPC($_REQUEST['org'])); $tpl = DevblocksPlatform::getTemplateService(); $tpl->assign('path', $this->_TPL_PATH); $contact = DAO_ContactOrg::get($org); $tpl->assign('contact', $contact); $visit = CerberusApplication::getVisit(); /* @var $visit CerberusVisit */ $tickets_view = C4_AbstractViewLoader::getView('contact_history'); // All org contacts $people = DAO_Address::getWhere(sprintf("%s = %d", DAO_Address::CONTACT_ORG_ID, $contact->id)); if (null == $tickets_view) { $tickets_view = new C4_TicketView(); $tickets_view->id = 'contact_history'; $tickets_view->name = $translate->_('addy_book.history.view_title'); $tickets_view->view_columns = array(SearchFields_Ticket::TICKET_LAST_ACTION_CODE, SearchFields_Ticket::TICKET_CREATED_DATE, SearchFields_Ticket::TICKET_TEAM_ID, SearchFields_Ticket::TICKET_CATEGORY_ID); $tickets_view->params = array(); $tickets_view->renderLimit = 10; $tickets_view->renderPage = 0; $tickets_view->renderSortBy = SearchFields_Ticket::TICKET_CREATED_DATE; $tickets_view->renderSortAsc = false; } @($tickets_view->name = $translate->_('ticket.requesters') . ": " . htmlspecialchars($contact->name) . ' - ' . intval(count($people)) . ' contact(s)'); $tickets_view->params = array(SearchFields_Ticket::REQUESTER_ID => new DevblocksSearchCriteria(SearchFields_Ticket::REQUESTER_ID, 'in', array_keys($people)), SearchFields_Ticket::TICKET_DELETED => new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_DELETED, DevblocksSearchCriteria::OPER_EQ, 0)); $tpl->assign('contact_history', $tickets_view); C4_AbstractViewLoader::setView($tickets_view->id, $tickets_view); $workers = DAO_Worker::getAll(); $tpl->assign('workers', $workers); $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->display('file:' . $this->_TPL_PATH . 'contacts/orgs/tabs/history.tpl'); exit; }
function render() { $tpl = DevblocksPlatform::getTemplateService(); $active_worker = CerberusApplication::getActiveWorker(); $memberships = $active_worker->getMemberships(); $response = DevblocksPlatform::getHttpResponse(); @($section = $response->path[1]); //print_r($_REQUEST);exit(); //@$page = DevblocksPlatform::importGPC($_GET['password']); @($page = DevblocksPlatform::importGPC($_REQUEST['page'], 'integer')); if ($page == NULL) { $page = 0; } if (isset($_POST['a2'])) { @($section = $_POST['a2']); } else { @($section = $response->path[2]); } //print_r($section); //echo $section; switch ($section) { case 'search': $title = 'Search'; $query = $_POST['query']; if ($query && false === strpos($query, '*')) { $query = '*' . $query . '*'; } if (!is_null($query)) { $params = array(); $type = $_POST['type']; switch ($type) { case "mask": $params[SearchFields_Ticket::TICKET_MASK] = new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_MASK, DevblocksSearchCriteria::OPER_LIKE, strtoupper($query)); break; case "sender": $params[SearchFields_Ticket::TICKET_FIRST_WROTE] = new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_FIRST_WROTE, DevblocksSearchCriteria::OPER_LIKE, strtolower($query)); break; case "subject": $params[SearchFields_Ticket::TICKET_SUBJECT] = new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_SUBJECT, DevblocksSearchCriteria::OPER_LIKE, $query); break; case "content": $params[SearchFields_Ticket::TICKET_MESSAGE_CONTENT] = new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_MESSAGE_CONTENT, DevblocksSearchCriteria::OPER_LIKE, $query); break; } } else { //show the search form because no search has been submitted $tpl->display('file:' . dirname(__FILE__) . '/templates/tickets/search.tpl'); return; } break; case 'sidebar': $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); $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); $tpl->display('file:' . dirname(__FILE__) . '/templates/tickets/sidebar.tpl'); return; break; case 'overview': default: $workers = DAO_Worker::getAll(); $group_buckets = DAO_Bucket::getTeams(); $groups = DAO_Group::getAll(); @($filter = $response->path[3]); switch ($filter) { case 'group': @($filter_group_id = $response->path[4]); $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; $params[SearchFields_Ticket::TICKET_TEAM_ID] = new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_TEAM_ID, '=', $filter_group_id); @($filter_bucket_id = $response->path[5]); if (!is_null($filter_bucket_id)) { $tpl->assign('filter_bucket_id', $filter_bucket_id); @($title .= ': ' . ($filter_bucket_id == 0 ? 'Inbox' : $group_buckets[$filter_group_id][$filter_bucket_id]->name)); $params[SearchFields_Ticket::TICKET_CATEGORY_ID] = new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_CATEGORY_ID, '=', $filter_bucket_id); } else { @($title .= ' (Spam Filtered)'); $params[SearchFields_Ticket::TICKET_SPAM_SCORE] = new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_SPAM_SCORE, '<=', '0.9000'); } } break; case 'waiting': @($filter_waiting_id = $response->path[4]); $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_waiting_id) && isset($groups[$filter_waiting_id])) { $tpl->assign('filter_waiting_id', $filter_waiting_id); $title = '[Waiting] ' . $groups[$filter_waiting_id]->name; $params[SearchFields_Ticket::TICKET_TEAM_ID] = new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_TEAM_ID, '=', $filter_waiting_id); @($filter_bucket_id = $response->path[5]); if (!is_null($filter_bucket_id)) { $tpl->assign('filter_bucket_id', $filter_bucket_id); @($title .= ': ' . ($filter_bucket_id == 0 ? 'Inbox' : $group_buckets[$filter_waiting_id][$filter_bucket_id]->name)); $params[SearchFields_Ticket::TICKET_CATEGORY_ID] = new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_CATEGORY_ID, '=', $filter_bucket_id); } } break; case 'worker': @($filter_worker_id = $response->path[4]); $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), $params[SearchFields_Ticket::TICKET_TEAM_ID] = new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_TEAM_ID, 'in', array_keys($memberships))); if (!is_null($filter_worker_id)) { $tpl->assign('filter_bucket_id', $filter_bucket_id); $title = "For " . $workers[$filter_worker_id]->getName(); $params[SearchFields_Ticket::TICKET_NEXT_WORKER_ID] = new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_NEXT_WORKER_ID, '=', $filter_worker_id); @($filter_group_id = $response->path[5]); if (!is_null($filter_group_id) && isset($groups[$filter_group_id])) { $title .= ' in ' . $groups[$filter_group_id]->name; $params[SearchFields_Ticket::TICKET_TEAM_ID] = new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_TEAM_ID, '=', $filter_group_id); } } break; case 'all': default: $title = 'All (Spam Filtered)'; $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), SearchFields_Ticket::TICKET_SPAM_SCORE => new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_SPAM_SCORE, '<=', '0.9000'), SearchFields_Ticket::TICKET_TEAM_ID => new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_TEAM_ID, 'in', array_keys($memberships))); break; } // $params = array( // new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_CLOSED,'=',CerberusTicketStatus::OPEN), // new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_NEXT_WORKER_ID,'=',0), // new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_SPAM_SCORE,'<=','0.9000'), // new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_TEAM_ID,'in',array_keys($memberships)) // ); // $title = "Overview"; break; } $mobileView = C4_AbstractViewLoader::getView('', "VIEW_MOBILE"); //print_r($mobileView); if ($mobileView == NULL) { $mobileView = new C4_MobileTicketView(); //C4_TicketView(); } $mobileView->id = "VIEW_MOBILE"; $mobileView->name = $title; $mobileView->view_columns = array(SearchFields_Ticket::TICKET_LAST_ACTION_CODE); $mobileView->params = $params; $mobileView->renderLimit = 10; //$overViewDefaults->renderLimit; $mobileView->renderPage = $page; $mobileView->renderSortBy = SearchFields_Ticket::TICKET_UPDATED_DATE; $mobileView->renderSortAsc = 0; C4_AbstractViewLoader::setView($mobileView->id, $mobileView); $views[] = $mobileView; $tpl->assign('views', $views); if ($filter == null) { $filter = 'all'; } $tpl->assign('filter', $filter); $fid = $response->path[4]; if ($fid == null) { $fid = '0'; } $tpl->assign('fid', $fid); $bucket_id = $response->path[5]; if ($bucket_id == null) { $buket_id = 0; } $tpl->assign('bid', $bucket_id); $tpl->assign('title', $title); $tpl->assign('tickets', $tickets[0]); $tpl->assign('next_page', $page + 1); $tpl->assign('prev_page', $page - 1); //print_r($tickets);exit(); $tpl->display('file:' . dirname(__FILE__) . '/templates/tickets.tpl'); }
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 renderCriteria($field) { $tpl = DevblocksPlatform::getTemplateService(); $tpl->assign('id', $this->id); $tpl_path = DEVBLOCKS_PLUGIN_PATH . 'cerberusweb.core/templates/'; switch ($field) { case SearchFields_Ticket::TICKET_ID: case SearchFields_Ticket::TICKET_MASK: case SearchFields_Ticket::TICKET_SUBJECT: case SearchFields_Ticket::TICKET_FIRST_WROTE: case SearchFields_Ticket::TICKET_LAST_WROTE: case SearchFields_Ticket::REQUESTER_ADDRESS: case SearchFields_Ticket::TICKET_INTERESTING_WORDS: case SearchFields_Ticket::ORG_NAME: $tpl->display('file:' . $tpl_path . 'internal/views/criteria/__string.tpl'); break; case SearchFields_Ticket::TICKET_MESSAGE_CONTENT: $tpl->display('file:' . $tpl_path . 'internal/views/criteria/__fulltext.tpl'); break; case SearchFields_Ticket::TICKET_FIRST_WROTE_SPAM: case SearchFields_Ticket::TICKET_FIRST_WROTE_NONSPAM: $tpl->display('file:' . $tpl_path . 'internal/views/criteria/__number.tpl'); break; case SearchFields_Ticket::TICKET_WAITING: case SearchFields_Ticket::TICKET_DELETED: case SearchFields_Ticket::TICKET_CLOSED: $tpl->display('file:' . $tpl_path . 'internal/views/criteria/__bool.tpl'); break; case SearchFields_Ticket::TICKET_CREATED_DATE: case SearchFields_Ticket::TICKET_UPDATED_DATE: case SearchFields_Ticket::TICKET_DUE_DATE: $tpl->display('file:' . $tpl_path . 'internal/views/criteria/__date.tpl'); break; case SearchFields_Ticket::TICKET_SPAM_TRAINING: $tpl->display('file:' . $tpl_path . 'tickets/search/criteria/ticket_spam_training.tpl'); break; case SearchFields_Ticket::TICKET_SPAM_SCORE: $tpl->display('file:' . $tpl_path . 'tickets/search/criteria/ticket_spam_score.tpl'); break; case SearchFields_Ticket::TICKET_LAST_ACTION_CODE: $tpl->display('file:' . $tpl_path . 'tickets/search/criteria/ticket_last_action.tpl'); break; case SearchFields_Ticket::TICKET_NEXT_WORKER_ID: case SearchFields_Ticket::TICKET_LAST_WORKER_ID: $workers = DAO_Worker::getAll(); $tpl->assign('workers', $workers); $tpl->display('file:' . $tpl_path . 'internal/views/criteria/__worker.tpl'); break; case SearchFields_Ticket::TICKET_TEAM_ID: $teams = DAO_Group::getAll(); $tpl->assign('teams', $teams); $team_categories = DAO_Bucket::getTeams(); $tpl->assign('team_categories', $team_categories); $tpl->display('file:' . $tpl_path . 'tickets/search/criteria/ticket_team.tpl'); break; default: // Custom Fields if ('cf_' == substr($field, 0, 3)) { $this->_renderCriteriaCustomField($tpl, substr($field, 3)); } else { echo ' '; } break; } }
function showBatchPanelAction() { @($ids = DevblocksPlatform::importGPC($_REQUEST['ids'])); @($view_id = DevblocksPlatform::importGPC($_REQUEST['view_id'])); $tpl = DevblocksPlatform::getTemplateService(); $tpl->assign('path', $this->_TPL_PATH); $tpl->assign('view_id', $view_id); $unique_sender_ids = array(); $unique_subjects = array(); if (!empty($ids)) { $ticket_ids = DevblocksPlatform::parseCsvString($ids); if (empty($ticket_ids)) { break; } $tickets = DAO_Ticket::getTickets($ticket_ids); if (is_array($tickets)) { foreach ($tickets as $ticket) { /* @var $ticket CerberusTicket */ $ptr =& $unique_sender_ids[$ticket->first_wrote_address_id]; $ptr = intval($ptr) + 1; $ptr =& $unique_subjects[$ticket->subject]; $ptr = intval($ptr) + 1; } } arsort($unique_subjects); // sort by occurrences $senders = DAO_Address::getWhere(sprintf("%s IN (%s)", DAO_Address::ID, implode(',', array_keys($unique_sender_ids)))); foreach ($senders as $sender) { $ptr =& $unique_senders[$sender->email]; $ptr = intval($ptr) + 1; } arsort($unique_senders); unset($senders); unset($unique_sender_ids); @$tpl->assign('ticket_ids', $ticket_ids); @$tpl->assign('unique_senders', $unique_senders); @$tpl->assign('unique_subjects', $unique_subjects); } // Teams $teams = DAO_Group::getAll(); $tpl->assign('teams', $teams); // Categories $team_categories = DAO_Bucket::getTeams(); // [TODO] Cache these $tpl->assign('team_categories', $team_categories); $workers = DAO_Worker::getAllActive(); $tpl->assign('workers', $workers); // Custom Fields $custom_fields = DAO_CustomField::getBySource(ChCustomFieldSource_Ticket::ID); $tpl->assign('custom_fields', $custom_fields); $tpl->display('file:' . $this->_TPL_PATH . 'tickets/rpc/batch_panel.tpl'); }
function getTopTicketsReportAction() { @($age = DevblocksPlatform::importGPC($_REQUEST['age'], 'string', '30d')); $db = DevblocksPlatform::getDatabaseService(); @($start = DevblocksPlatform::importGPC($_REQUEST['start'], 'string', '')); @($end = DevblocksPlatform::importGPC($_REQUEST['end'], 'string', '')); @($countonly = DevblocksPlatform::importGPC($_REQUEST['countonly'], 'integer', 0)); @($by_address = DevblocksPlatform::importGPC($_REQUEST['by_address'], 'integer', 0)); // use date range if specified, else use duration prior to now $start_time = 0; $end_time = 0; if (empty($start) && empty($end)) { $start = "-30 days"; $end = "now"; $start_time = strtotime($start); $end_time = strtotime($end); } else { $start_time = strtotime($start); $end_time = strtotime($end); } $tpl = DevblocksPlatform::getTemplateService(); $tpl->cache_lifetime = "0"; $tpl->assign('path', $this->tpl_path); // Top Buckets $groups = DAO_Group::getAll(); $tpl->assign('groups', $groups); $group_buckets = DAO_Bucket::getTeams(); $tpl->assign('group_buckets', $group_buckets); if ($by_address) { $sql = sprintf("SELECT count(*) AS hits, a.id as contact_id, a.email as contact_name, t.team_id, t.category_id " . "FROM ticket t " . "INNER JOIN address a ON t.first_wrote_address_id = a.id " . "WHERE created_date > %d AND created_date <= %d " . "AND is_deleted = 0 " . "AND spam_score < 0.9000 " . "AND spam_training != 'S' " . "AND t.team_id != 0 " . "GROUP BY a.email, t.team_id, t.category_id ORDER BY hits DESC ", $start_time, $end_time); } else { //default is by org $sql = sprintf("SELECT count(*) AS hits, a.contact_org_id as contact_id, o.name as contact_name, t.team_id, t.category_id " . "FROM ticket t " . "INNER JOIN address a ON t.first_wrote_address_id = a.id " . "INNER JOIN contact_org o ON a.contact_org_id = o.id " . "WHERE created_date > %d AND created_date <= %d " . "AND is_deleted = 0 " . "AND spam_score < 0.9000 " . "AND spam_training != 'S' " . "AND a.contact_org_id != 0 " . "AND t.team_id != 0 " . "GROUP BY a.contact_org_id, o.name, t.team_id, t.category_id " . "ORDER BY hits DESC ", $start_time, $end_time); } $rs_buckets = $db->Execute($sql); $group_counts = array(); $max_orgs = 100; $current_orgs = 0; while (!$rs_buckets->EOF && $current_orgs <= $max_orgs) { $org_id = intval($rs_buckets->fields['contact_id']); $org_name = $rs_buckets->fields['contact_name']; $team_id = intval($rs_buckets->fields['team_id']); $category_id = intval($rs_buckets->fields['category_id']); $hits = intval($rs_buckets->fields['hits']); if (!isset($group_counts[$org_id])) { $group_counts[$org_id] = array(); $current_orgs++; } if (!isset($group_counts[$org_id]['teams'])) { $group_counts[$org_id]['teams'] = array(); } if (!isset($group_counts[$org_id]['teams'][$team_id])) { $group_counts[$org_id]['teams'][$team_id] = array(); } if (!isset($group_counts[$org_id]['teams'][$team_id]['buckets'])) { $group_counts[$org_id]['teams'][$team_id]['buckets'] = array(); } $group_counts[$org_id]['name'] = $org_name; $group_counts[$org_id]['teams'][$team_id]['buckets'][$category_id] = $hits; @($group_counts[$org_id]['teams'][$team_id]['total'] = intval($group_counts[$org_id]['teams'][$team_id]['total']) + $hits); @($group_counts[$org_id]['total'] = intval($group_counts[$org_id]['total']) + $hits); $rs_buckets->MoveNext(); } uasort($group_counts, array("ChReportTopTicketsByContact", "sortCountsArrayByHits")); //echo "<pre>";print_r($group_counts);echo "</pre>"; $tpl->assign('group_counts', $group_counts); $tpl->display('file:' . $this->tpl_path . '/reports/ticket/top_contacts_tickets/html.tpl'); }
function render() { $tpl = DevblocksPlatform::getTemplateService(); $tpl->cache_lifetime = "0"; $tpl->assign('path', $this->tpl_path); $tpl->assign('start', '-30 days'); $tpl->assign('end', 'now'); $db = DevblocksPlatform::getDatabaseService(); $workers = DAO_Worker::getAll(); $tpl->assign('workers', $workers); // Teams $teams = DAO_Group::getAll(); $tpl->assign('teams', $teams); // Categories $team_categories = DAO_Bucket::getTeams(); // [TODO] Cache these $tpl->assign('team_categories', $team_categories); // Security if (null == ($active_worker = CerberusApplication::getActiveWorker())) { die($translate->_('common.access_denied')); } $tpl->assign('active_worker', $active_worker); $filename = "report-plus1-" . $active_worker->id . ".csv"; $href_filename = 'storage/answernet/' . $filename; $tpl->assign('href_filename', $href_filename); $tpl->display('file:' . $this->tpl_path . '/report_plus1_time.tpl'); }
function showContactHistoryAction() { $visit = CerberusApplication::getVisit(); /* @var $visit CerberusVisit */ $translate = DevblocksPlatform::getTranslationService(); @($ticket_id = DevblocksPlatform::importGPC($_REQUEST['ticket_id'], 'integer')); $tpl = DevblocksPlatform::getTemplateService(); $tpl->assign('path', $this->_TPL_PATH); // Ticket $ticket = DAO_Ticket::getTicket($ticket_id); $tpl->assign('ticket', $ticket); $requesters = $ticket->getRequesters(); // Addy $contact = DAO_Address::get($ticket->first_wrote_address_id); $tpl->assign('contact', $contact); // Scope $scope = $visit->get('display.history.scope', ''); // [TODO] Sanitize scope preference // Defaults $defaults = new C4_AbstractViewModel(); $defaults->class_name = 'C4_TicketView'; $defaults->id = 'contact_history'; $defaults->name = $translate->_('addy_book.history.view.title'); $defaults->view_columns = array(SearchFields_Ticket::TICKET_LAST_ACTION_CODE, SearchFields_Ticket::TICKET_CREATED_DATE, SearchFields_Ticket::TICKET_TEAM_ID, SearchFields_Ticket::TICKET_CATEGORY_ID); $defaults->params = array(); $defaults->renderLimit = 10; $defaults->renderSortBy = SearchFields_Ticket::TICKET_CREATED_DATE; $defaults->renderSortAsc = false; // View $view = C4_AbstractViewLoader::getView('contact_history', $defaults); // Sanitize scope options if ('org' == $scope) { if (empty($contact->contact_org_id)) { $scope = ''; } if (null == ($contact_org = DAO_ContactOrg::get($contact->contact_org_id))) { $scope = ''; } } if ('domain' == $scope) { $email_parts = explode('@', $contact->email); if (!is_array($email_parts) || 2 != count($email_parts)) { $scope = ''; } } switch ($scope) { case 'org': $view->params = array(SearchFields_Ticket::TICKET_FIRST_CONTACT_ORG_ID => new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_FIRST_CONTACT_ORG_ID, '=', $contact->contact_org_id), SearchFields_Ticket::TICKET_DELETED => new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_DELETED, '=', 0)); $view->name = ucwords($translate->_('contact_org.name')) . ": " . $contact_org->name; break; case 'domain': $view->params = array(SearchFields_Ticket::REQUESTER_ADDRESS => new DevblocksSearchCriteria(SearchFields_Ticket::REQUESTER_ADDRESS, 'like', '*@' . $email_parts[1]), SearchFields_Ticket::TICKET_DELETED => new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_DELETED, '=', 0)); $view->name = ucwords($translate->_('common.email')) . ": *@" . $email_parts[1]; break; default: case 'email': $scope = 'email'; $view->params = array(SearchFields_Ticket::REQUESTER_ID => new DevblocksSearchCriteria(SearchFields_Ticket::REQUESTER_ID, 'in', array_keys($requesters)), SearchFields_Ticket::TICKET_DELETED => new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_DELETED, '=', 0)); $view->name = ucwords($translate->_('common.email')) . ": " . $contact->email; break; } $tpl->assign('scope', $scope); $view->renderPage = 0; $tpl->assign('view', $view); C4_AbstractViewLoader::setView($view->id, $view); $workers = DAO_Worker::getAll(); $tpl->assign('workers', $workers); $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->display('file:' . $this->_TPL_PATH . 'display/modules/history/index.tpl'); }
function render() { $db = DevblocksPlatform::getDatabaseService(); $tpl = DevblocksPlatform::getTemplateService(); $tpl->assign('path', $this->tpl_path); // Year shortcuts $years = array(); $sql = "SELECT date_format(from_unixtime(created_date),'%Y') as year FROM ticket WHERE created_date > 0 GROUP BY year having year <= date_format(now(),'%Y') ORDER BY year desc limit 0,10"; $rs = $db->query($sql); if (is_a($rs, 'ADORecordSet')) { while (!$rs->EOF) { $years[] = intval($rs->fields['year']); $rs->MoveNext(); } } $tpl->assign('years', $years); // Dates @($start = DevblocksPlatform::importGPC($_REQUEST['start'], 'string', '-30 days')); @($end = DevblocksPlatform::importGPC($_REQUEST['end'], 'string', 'now')); // use date range if specified, else use duration prior to now $start_time = 0; $end_time = 0; if (empty($start) && empty($end)) { $start = "-30 days"; $end = "now"; $start_time = strtotime($start); $end_time = strtotime($end); } else { $start_time = strtotime($start); $end_time = strtotime($end); } $tpl->assign('start', $start); $tpl->assign('end', $end); // Table @($age = DevblocksPlatform::importGPC($_REQUEST['age'], 'string', '30d')); @($by_address = DevblocksPlatform::importGPC($_REQUEST['by_address'], 'integer', 0)); $tpl->assign('by_address', $by_address); // Top Buckets $groups = DAO_Group::getAll(); $tpl->assign('groups', $groups); $group_buckets = DAO_Bucket::getTeams(); $tpl->assign('group_buckets', $group_buckets); if ($by_address) { $sql = sprintf("SELECT count(*) AS hits, a.id as contact_id, a.email as contact_name, t.team_id, t.category_id " . "FROM ticket t " . "INNER JOIN address a ON t.first_wrote_address_id = a.id " . "WHERE created_date > %d AND created_date <= %d " . "AND is_deleted = 0 " . "AND spam_score < 0.9000 " . "AND spam_training != 'S' " . "AND t.team_id != 0 " . "GROUP BY a.email, t.team_id, t.category_id ORDER BY hits DESC ", $start_time, $end_time); } else { //default is by org $sql = sprintf("SELECT count(*) AS hits, a.contact_org_id as contact_id, o.name as contact_name, t.team_id, t.category_id " . "FROM ticket t " . "INNER JOIN address a ON t.first_wrote_address_id = a.id " . "INNER JOIN contact_org o ON a.contact_org_id = o.id " . "WHERE created_date > %d AND created_date <= %d " . "AND is_deleted = 0 " . "AND spam_score < 0.9000 " . "AND spam_training != 'S' " . "AND a.contact_org_id != 0 " . "AND t.team_id != 0 " . "GROUP BY a.contact_org_id, o.name, t.team_id, t.category_id " . "ORDER BY hits DESC ", $start_time, $end_time); } $rs_buckets = $db->Execute($sql); $group_counts = array(); $max_orgs = 100; $current_orgs = 0; while (!$rs_buckets->EOF && $current_orgs <= $max_orgs) { $org_id = intval($rs_buckets->fields['contact_id']); $org_name = $rs_buckets->fields['contact_name']; $team_id = intval($rs_buckets->fields['team_id']); $category_id = intval($rs_buckets->fields['category_id']); $hits = intval($rs_buckets->fields['hits']); if (!isset($group_counts[$org_id])) { $group_counts[$org_id] = array(); $current_orgs++; } if (!isset($group_counts[$org_id]['teams'])) { $group_counts[$org_id]['teams'] = array(); } if (!isset($group_counts[$org_id]['teams'][$team_id])) { $group_counts[$org_id]['teams'][$team_id] = array(); } if (!isset($group_counts[$org_id]['teams'][$team_id]['buckets'])) { $group_counts[$org_id]['teams'][$team_id]['buckets'] = array(); } $group_counts[$org_id]['name'] = $org_name; $group_counts[$org_id]['teams'][$team_id]['buckets'][$category_id] = $hits; @($group_counts[$org_id]['teams'][$team_id]['total'] = intval($group_counts[$org_id]['teams'][$team_id]['total']) + $hits); @($group_counts[$org_id]['total'] = intval($group_counts[$org_id]['total']) + $hits); $rs_buckets->MoveNext(); } uasort($group_counts, array("ChReportTopTicketsByContact", "sortCountsArrayByHits")); $tpl->assign('group_counts', $group_counts); // Chart if ($by_address) { $sql = sprintf("SELECT count(*) AS hits, a.id, a.email as name " . "FROM ticket t " . "INNER JOIN address a ON t.first_wrote_address_id = a.id " . "WHERE created_date > %d AND created_date <= %d " . "AND is_deleted = 0 " . "AND spam_score < 0.9000 " . "AND spam_training != 'S' " . "AND t.team_id != 0 " . "GROUP BY a.id, a.email " . "ORDER BY hits DESC LIMIT 25 ", $start_time, $end_time); } else { //default is by org $sql = sprintf("SELECT count(*) AS hits, a.contact_org_id, o.name " . "FROM ticket t " . "INNER JOIN address a ON t.first_wrote_address_id = a.id " . "INNER JOIN contact_org o ON a.contact_org_id = o.id " . "WHERE created_date > %d AND created_date <= %d " . "AND is_deleted = 0 " . "AND spam_score < 0.9000 " . "AND spam_training != 'S' " . "AND t.team_id != 0 " . "AND a.contact_org_id != 0 " . "GROUP BY a.contact_org_id, o.name " . "ORDER BY hits DESC LIMIT 25 ", $start_time, $end_time); } $rs = $db->Execute($sql); $sorted_result = array(); $i = 0; if (is_a($rs, 'ADORecordSet')) { while (!$rs->EOF) { $hits = intval($rs->fields['hits']); $name = $rs->fields['name']; $sorted_result[$i]['name'] = $name; $sorted_result[$i]['hits'] = $hits; $i++; $rs->MoveNext(); } } //reverse the descending result because yui charts draws from the bottom up on the y-axis $iter = 0; $data = array(); $reversed = array_reverse($sorted_result); foreach ($reversed as $result) { $data[$iter++] = array('value' => $result['name'], 'hits' => $result['hits']); } $tpl->assign('data', $data); $tpl->display('file:' . $this->tpl_path . '/reports/ticket/top_contacts_tickets/index.tpl'); }