public static function getTemplateHandler() { $tpl = DevblocksPlatform::getTemplateService(); $tpl_path = dirname(__FILE__) . '/templates/'; $tpl->assign('path', $tpl_path); $tpl->cache_lifetime = "0"; $total_new_count = 0; foreach (DAO_WorkflowView::getGroupTotals() as $data) { $total_new_count += $data["total"]; } $tpl->assign('total_new_count', $total_new_count); $newest = isset($_SESSION["fluid_latest_seen"]) ? $_SESSION["fluid_latest_seen"] : time() - 3600; $worker = CerberusApplication::getActiveWorker(); $memberships = $worker->getMemberships(); $params = array(SearchFields_Ticket::TICKET_TEAM_ID => new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_TEAM_ID, 'in', array_keys($memberships)), SearchFields_Ticket::TICKET_DELETED => new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_DELETED, 'eq', 0), SearchFields_Ticket::TICKET_WAITING => new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_WAITING, 'eq', 0), SearchFields_Ticket::TICKET_CLOSED => new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_CLOSED, 'eq', 0), SearchFields_Ticket::TICKET_UPDATED_DATE => new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_UPDATED_DATE, '>', $newest)); list($results, $total) = DAO_Ticket::search(array(SearchFields_Ticket::TICKET_ID, SearchFields_Ticket::TICKET_MASK, SearchFields_Ticket::TICKET_SUBJECT, SearchFields_Ticket::TICKET_LAST_WROTE), $params, 5, 0, SearchFields_Ticket::TICKET_UPDATED_DATE, false, true); $tickets = array(); foreach ($results as $ticket) { if ($ticket[SearchFields_Ticket::TICKET_UPDATED_DATE] > $newest) { $newest = $ticket[SearchFields_Ticket::TICKET_UPDATED_DATE]; } $tickets[] = $ticket; } $_SESSION["fluid_latest_seen"] = $newest; $tpl->assign("recent_tickets_json", json_encode($tickets)); $tpl->assign("recent_ticket_count", json_encode($total)); return $tpl; }
/** * @param Model_DevblocksEvent $event */ function handleEvent(Model_DevblocksEvent $event) { switch ($event->id) { case 'cron.maint': DAO_TicketAuditLog::maint(); break; case 'ticket.merge': // Listen for ticket merges and update our internal ticket_id records @($new_ticket_id = $event->params['new_ticket_id']); @($old_ticket_ids = $event->params['old_ticket_ids']); if (empty($new_ticket_id) || empty($old_ticket_ids)) { return; } $fields = array(DAO_TicketAuditLog::TICKET_ID => $new_ticket_id); DAO_TicketAuditLog::updateWhere($fields, sprintf("%s IN (%s)", DAO_TicketAuditLog::TICKET_ID, implode(',', $old_ticket_ids))); break; case 'ticket.property.pre_change': @($ticket_ids = $event->params['ticket_ids']); @($changed_fields = $event->params['changed_fields']); // Filter out any mandatory changes we could care less about unset($changed_fields[DAO_Ticket::UPDATED_DATE]); unset($changed_fields[DAO_Ticket::MASK]); unset($changed_fields[DAO_Ticket::FIRST_MESSAGE_ID]); unset($changed_fields[DAO_Ticket::FIRST_WROTE_ID]); unset($changed_fields[DAO_Ticket::LAST_WROTE_ID]); unset($changed_fields[DAO_Ticket::INTERESTING_WORDS]); @($tickets = DAO_Ticket::getTickets($ticket_ids)); // Is a worker around to invoke this change? 0 = automatic @($worker_id = null != ($active_worker = CerberusApplication::getActiveWorker()) && !empty($active_worker->id) ? $active_worker->id : 0); if (is_array($tickets) && !empty($tickets) && is_array($changed_fields) && !empty($changed_fields)) { foreach ($tickets as $ticket_id => $ticket) { /* @var $ticket CerberusTicket */ foreach ($changed_fields as $changed_field => $changed_value) { if (is_array($changed_value)) { $changed_value = implode("\r\n", $changed_value); } // If different if (isset($ticket->{$changed_field}) && 0 != strcmp($ticket->{$changed_field}, $changed_value)) { $fields = array(DAO_TicketAuditLog::TICKET_ID => $ticket_id, DAO_TicketAuditLog::WORKER_ID => $worker_id, DAO_TicketAuditLog::CHANGE_DATE => time(), DAO_TicketAuditLog::CHANGE_FIELD => $changed_field, DAO_TicketAuditLog::CHANGE_VALUE => substr($changed_value, 0, 128)); $log_id = DAO_TicketAuditLog::create($fields); } } } } break; } }
function handleRequest(DevblocksHttpRequest $request) { $translate = DevblocksPlatform::getTranslationService(); $stack = $request->path; // URLS like: /files/10000/plaintext.txt array_shift($stack); // files $file_id = array_shift($stack); // 10000 $file_name = array_shift($stack); // plaintext.txt // Security if (null == ($active_worker = CerberusApplication::getActiveWorker())) { die($translate->_('common.access_denied')); } if (empty($file_id) || empty($file_name) || null == ($file = DAO_Attachment::get($file_id))) { die($translate->_('files.not_found')); } // Security $message = DAO_Ticket::getMessage($file->message_id); if (null == ($ticket = DAO_Ticket::getTicket($message->ticket_id))) { die($translate->_('common.access_denied')); } // Security $active_worker_memberships = $active_worker->getMemberships(); if (null == $active_worker_memberships[$ticket->team_id]) { die($translate->_('common.access_denied')); } // Set headers header("Expires: Mon, 26 Nov 1962 00:00:00 GMT\n"); header("Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT\n"); header("Cache-control: private\n"); header("Pragma: no-cache\n"); header("Content-Type: " . $file->mime_type . "\n"); header("Content-transfer-encoding: binary\n"); header("Content-Length: " . $file->getFileSize() . "\n"); echo $file->getFileContents(); exit; }
function handleRequest(DevblocksHttpRequest $request) { $worker = CerberusApplication::getActiveWorker(); if(empty($worker)) return; $stack = $request->path; array_shift($stack); // internal @$action = array_shift($stack) . 'Action'; switch($action) { case NULL: // [TODO] Index/page render break; default: // Default action, call arg as a method suffixed with Action if(method_exists($this,$action)) { call_user_func(array(&$this, $action)); } break; } }
function saveWatcherPanelAction() { $translate = DevblocksPlatform::getTranslationService(); @($id = DevblocksPlatform::importGPC($_REQUEST['id'], 'integer', 0)); @($active_worker = CerberusApplication::getActiveWorker()); // if(!$active_worker->is_superuser) // return; /*****************************/ @($name = DevblocksPlatform::importGPC($_POST['name'], 'string', '')); @($is_disabled = DevblocksPlatform::importGPC($_POST['is_disabled'], 'integer', 0)); @($worker_id = DevblocksPlatform::importGPC($_POST['worker_id'], 'integer', 0)); @($rules = DevblocksPlatform::importGPC($_POST['rules'], 'array', array())); @($do = DevblocksPlatform::importGPC($_POST['do'], 'array', array())); if (empty($name)) { $name = $translate->_('Watcher Filter'); } $criterion = array(); $actions = array(); // Custom fields $custom_fields = DAO_CustomField::getAll(); // Criteria if (is_array($rules)) { foreach ($rules as $rule) { $rule = DevblocksPlatform::strAlphaNumDash($rule); @($value = DevblocksPlatform::importGPC($_POST['value_' . $rule], 'string', '')); // [JAS]: Allow empty $value (null/blank checking) $criteria = array('value' => $value); // Any special rule handling switch ($rule) { case 'dayofweek': // days $days = DevblocksPlatform::importGPC($_REQUEST['value_dayofweek'], 'array', array()); if (in_array(0, $days)) { $criteria['sun'] = 'Sunday'; } if (in_array(1, $days)) { $criteria['mon'] = 'Monday'; } if (in_array(2, $days)) { $criteria['tue'] = 'Tuesday'; } if (in_array(3, $days)) { $criteria['wed'] = 'Wednesday'; } if (in_array(4, $days)) { $criteria['thu'] = 'Thursday'; } if (in_array(5, $days)) { $criteria['fri'] = 'Friday'; } if (in_array(6, $days)) { $criteria['sat'] = 'Saturday'; } unset($criteria['value']); break; case 'timeofday': $from = DevblocksPlatform::importGPC($_REQUEST['timeofday_from'], 'string', ''); $to = DevblocksPlatform::importGPC($_REQUEST['timeofday_to'], 'string', ''); $criteria['from'] = $from; $criteria['to'] = $to; unset($criteria['value']); break; case 'event': @($events = DevblocksPlatform::importGPC($_REQUEST['value_event'], 'array', array())); if (is_array($events)) { foreach ($events as $event) { $criteria[$event] = true; } } unset($criteria['value']); break; case 'groups': @($groups = DevblocksPlatform::importGPC($_REQUEST['value_groups'], 'array', array())); if (is_array($groups) && !empty($groups)) { $criteria['groups'] = array(); foreach ($groups as $group_id) { @($all = DevblocksPlatform::importGPC($_REQUEST['value_group' . $group_id . '_all'], 'integer', 0)); // Did we only want to watch specific buckets in this group? $bucket_ids = array(); if (!$all) { @($bucket_ids = DevblocksPlatform::importGPC($_REQUEST['value_group' . $group_id . '_buckets'], 'array', array())); } // Add to criteria (key=group id, val=array of bucket ids) $criteria['groups'][$group_id] = $bucket_ids; } } unset($criteria['value']); break; case 'next_worker_id': break; case 'subject': break; case 'from': break; // case 'tocc': // break; // case 'tocc': // break; case 'header1': case 'header2': case 'header3': case 'header4': case 'header5': if (null != @($header = DevblocksPlatform::importGPC($_POST[$rule], 'string', null))) { $criteria['header'] = strtolower($header); } break; case 'body': break; default: // ignore invalids // [TODO] Very redundant // Custom fields if ("cf_" == substr($rule, 0, 3)) { $field_id = intval(substr($rule, 3)); if (!isset($custom_fields[$field_id])) { continue; } // [TODO] Operators switch ($custom_fields[$field_id]->type) { case 'S': // string // string case 'T': // clob // clob case 'U': // URL @($oper = DevblocksPlatform::importGPC($_REQUEST['value_cf_' . $field_id . '_oper'], 'string', 'regexp')); $criteria['oper'] = $oper; break; case 'D': // dropdown // dropdown case 'M': // multi-dropdown // multi-dropdown case 'X': // multi-checkbox // multi-checkbox case 'W': // worker @($in_array = DevblocksPlatform::importGPC($_REQUEST['value_cf_' . $field_id], 'array', array())); $out_array = array(); // Hash key on the option for quick lookup later if (is_array($in_array)) { foreach ($in_array as $k => $v) { $out_array[$v] = $v; } } $criteria['value'] = $out_array; break; case 'E': // date @($from = DevblocksPlatform::importGPC($_REQUEST['value_cf_' . $field_id . '_from'], 'string', '0')); @($to = DevblocksPlatform::importGPC($_REQUEST['value_cf_' . $field_id . '_to'], 'string', 'now')); $criteria['from'] = $from; $criteria['to'] = $to; unset($criteria['value']); break; case 'N': // number @($oper = DevblocksPlatform::importGPC($_REQUEST['value_cf_' . $field_id . '_oper'], 'string', '=')); $criteria['oper'] = $oper; $criteria['value'] = intval($value); break; case 'C': // checkbox $criteria['value'] = intval($value); break; } } else { continue; } break; } $criterion[$rule] = $criteria; } } // Actions if (is_array($do)) { foreach ($do as $act) { $action = array(); switch ($act) { // Forward a copy to... case 'email': @($emails = DevblocksPlatform::importGPC($_REQUEST['do_email'], 'array', array())); if (!empty($emails)) { $action = array('to' => $emails); } break; // Watcher notification // Watcher notification case 'notify': //@$emails = DevblocksPlatform::importGPC($_REQUEST['do_email'],'array',array()); //if(!empty($emails)) { $action = array(); //} break; } $actions[$act] = $action; } } $fields = array(DAO_WatcherMailFilter::NAME => $name, DAO_WatcherMailFilter::IS_DISABLED => $is_disabled, DAO_WatcherMailFilter::WORKER_ID => $worker_id, DAO_WatcherMailFilter::CRITERIA_SER => serialize($criterion), DAO_WatcherMailFilter::ACTIONS_SER => serialize($actions)); // Create if (empty($id)) { $fields[DAO_WatcherMailFilter::POS] = 0; $id = DAO_WatcherMailFilter::create($fields); // Update } else { DAO_WatcherMailFilter::update($id, $fields); } exit; //DevblocksPlatform::redirect(new DevblocksHttpResponse(array('preferences','watchers'))); }
function signoutAction() { $session = DevblocksPlatform::getSessionService(); $visit = $session->getVisit(); if (null != ($worker = CerberusApplication::getActiveWorker())) { DAO_Worker::logActivity($worker->id, new Model_Activity(null)); } $session->clear(); DevblocksPlatform::redirect(new DevblocksHttpResponse(array('login'))); }
function doDeleteWorkspaceAction() { @($workspace = DevblocksPlatform::importGPC($_POST['workspace'], 'string', '')); $db = DevblocksPlatform::getDatabaseService(); $active_worker = CerberusApplication::getActiveWorker(); $lists = DAO_WorkerWorkspaceList::getWhere(sprintf("%s = %s AND %s = %d", DAO_WorkerWorkspaceList::WORKSPACE, $db->qstr($workspace), DAO_WorkerWorkspaceList::WORKER_ID, $active_worker->id)); DAO_WorkerWorkspaceList::delete(array_keys($lists)); DevblocksPlatform::redirect(new DevblocksHttpResponse(array('home'))); }
function saveReplyTemplateAction() { @($id = DevblocksPlatform::importGPC($_REQUEST['id'], 'integer', 0)); @($title = DevblocksPlatform::importGPC($_REQUEST['title'], 'string', '')); @($description = DevblocksPlatform::importGPC($_REQUEST['description'], 'string', '')); @($folder = DevblocksPlatform::importGPC($_REQUEST['folder'], 'string', '')); @($folder_new = DevblocksPlatform::importGPC($_REQUEST['folder_new'], 'string', '')); @($content = DevblocksPlatform::importGPC($_REQUEST['template'], 'string', '')); @($type = DevblocksPlatform::importGPC($_REQUEST['type'], 'integer', 0)); @($delete = DevblocksPlatform::importGPC($_REQUEST['do_delete'], 'integer', 0)); $worker = CerberusApplication::getActiveWorker(); if (empty($delete)) { $fields = array(DAO_MailTemplate::TITLE => $title, DAO_MailTemplate::FOLDER => !empty($folder) ? $folder : $folder_new, DAO_MailTemplate::DESCRIPTION => $description, DAO_MailTemplate::CONTENT => $content, DAO_MailTemplate::TEMPLATE_TYPE => $type, DAO_MailTemplate::OWNER_ID => $worker->id); if (empty($id)) { // new $id = DAO_MailTemplate::create($fields); } else { // edit DAO_MailTemplate::update($id, $fields); } } else { // delete DAO_MailTemplate::delete($id); } }
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 saveTabFieldsAction() { @($group_id = DevblocksPlatform::importGPC($_POST['team_id'], 'integer')); @($active_worker = CerberusApplication::getActiveWorker()); if (!$active_worker->isTeamManager($group_id) && !$active_worker->is_superuser) { return; } @($ids = DevblocksPlatform::importGPC($_POST['ids'], 'array', array())); @($names = DevblocksPlatform::importGPC($_POST['names'], 'array', array())); @($orders = DevblocksPlatform::importGPC($_POST['orders'], 'array', array())); @($options = DevblocksPlatform::importGPC($_POST['options'], 'array', array())); @($allow_delete = DevblocksPlatform::importGPC($_POST['allow_delete'], 'integer', 0)); @($deletes = DevblocksPlatform::importGPC($_POST['deletes'], 'array', array())); if (!empty($ids)) { foreach ($ids as $idx => $id) { @($name = $names[$idx]); @($order = intval($orders[$idx])); @($option = $options[$idx]); @($delete = false !== array_search($id, $deletes) ? 1 : 0); if ($allow_delete && $delete) { DAO_CustomField::delete($id); } else { $fields = array(DAO_CustomField::NAME => $name, DAO_CustomField::POS => $order, DAO_CustomField::OPTIONS => !is_null($option) ? $option : ''); DAO_CustomField::update($id, $fields); } } } // Add custom field @($add_name = DevblocksPlatform::importGPC($_POST['add_name'], 'string', '')); @($add_type = DevblocksPlatform::importGPC($_POST['add_type'], 'string', '')); @($add_options = DevblocksPlatform::importGPC($_POST['add_options'], 'string', '')); if (!empty($add_name) && !empty($add_type)) { $fields = array(DAO_CustomField::NAME => $add_name, DAO_CustomField::TYPE => $add_type, DAO_CustomField::GROUP_ID => $group_id, DAO_CustomField::SOURCE_EXTENSION => ChCustomFieldSource_Ticket::ID, DAO_CustomField::OPTIONS => $add_options); $id = DAO_CustomField::create($fields); } DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('groups', $group_id, 'fields'))); }
static function getGroupTotals() { $db = DevblocksPlatform::getDatabaseService(); $active_worker = CerberusApplication::getActiveWorker(); $memberships = $active_worker->getMemberships(); if (empty($memberships)) { return array(); } // Group Loads $sql = sprintf("SELECT count(t.id) AS hits, t.team_id, t.category_id " . "FROM ticket t " . "LEFT JOIN category c ON (t.category_id=c.id) " . "WHERE t.is_waiting = 0 AND t.is_closed = 0 AND t.is_deleted = 0 " . "AND t.next_worker_id = 0 " . "AND (c.id IS NULL OR c.is_assignable = 1) " . "GROUP BY t.team_id, c.pos "); $rs_buckets = $db->Execute($sql); $group_counts = array(); while (!$rs_buckets->EOF) { $team_id = intval($rs_buckets->fields['team_id']); $category_id = intval($rs_buckets->fields['category_id']); $hits = intval($rs_buckets->fields['hits']); if (isset($memberships[$team_id])) { // If the group manager doesn't want this group inbox assignable (default to YES) if (empty($category_id) && !DAO_GroupSettings::get($team_id, DAO_GroupSettings::SETTING_INBOX_IS_ASSIGNABLE, 1)) { // ...skip the unassignable inbox } else { if (!isset($group_counts[$team_id])) { $group_counts[$team_id] = array(); } $group_counts[$team_id][$category_id] = $hits; @($group_counts[$team_id]['total'] = intval($group_counts[$team_id]['total']) + $hits); } } $rs_buckets->MoveNext(); } return $group_counts; }
function getChooserView() { $active_worker = CerberusApplication::getActiveWorker(); // View $view_id = 'chooser_'.str_replace('.','_',$this->id).time().mt_rand(0,9999); $defaults = new C4_AbstractViewModel(); $defaults->id = $view_id; $defaults->is_ephemeral = true; $defaults->class_name = $this->getViewClass(); $view = C4_AbstractViewLoader::getView($view_id, $defaults); $view->addParams(array( SearchFields_Issue::STATE => new DevblocksSearchCriteria(SearchFields_Issue::STATE,'!=','closed'), ), true); $view->renderSortBy = SearchFields_Issue::UPDATED_DATE; $view->renderSortAsc = false; $view->renderLimit = 10; $view->renderTemplate = 'contextlinks_chooser'; C4_AbstractViewLoader::setView($view_id, $view); return $view; }
private function mergeTicket($event) { // Listen for ticket merges and update our internal ticket_id records @($new_ticket_id = $event->params['new_ticket_id']); @($old_ticket_ids = $event->params['old_ticket_ids']); $translate = DevblocksPlatform::getTranslationService(); if (empty($new_ticket_id) || empty($old_ticket_ids)) { return; } $settings = DevblocksPlatform::getPluginSettingsService(); $al_merge_enabled = intval($settings->get('cerb5blog.last_action_and_audit_log', 'al_merge_enabled', 0)); $uf_merge_enabled = intval($settings->get('cerb5blog.last_action_and_audit_log', 'uf_merge_enabled', 0)); if (!($al_merge_enabled || $uf_merge_enabled)) { return; } $active_worker = CerberusApplication::getActiveWorker(); $worker_id = $active_worker->id; if (class_exists('DAO_TicketAuditLog', true)) { if ($al_merge_enabled) { foreach ($old_ticket_ids as $old_id) { $old_ticket = DAO_Ticket::get($old_id); $translate_str = $translate->_('cerb5blog.last_action_and_audit_log.post.merge.new_ticket'); $translated = sprintf($translate_str, $old_id, $old_ticket->mask); $fields = array(DAO_TicketAuditLog::TICKET_ID => $new_ticket_id, DAO_TicketAuditLog::WORKER_ID => $worker_id, DAO_TicketAuditLog::CHANGE_DATE => time(), DAO_TicketAuditLog::CHANGE_FIELD => "cerb5blog.last_action_and_audit_log.type.merge", DAO_TicketAuditLog::CHANGE_VALUE => substr($translated, 0, 128)); $log_id = DAO_TicketAuditLog::create($fields); } unset($fields); } } if ($uf_merge_enabled) { $new_change_fields[DAO_Ticket::UPDATED_DATE] = time(); DAO_Ticket::update($new_ticket_id, $new_change_fields); unset($new_change_fields); } }
function saveTab() { @($forward_bucket = DevblocksPlatform::importGPC($_REQUEST['forward_bucket'], 'string', '')); @($forward_address = DevblocksPlatform::importGPC($_REQUEST['forward_address'], 'string', '')); @($forward_event = DevblocksPlatform::importGPC($_REQUEST['forward_event'], 'string', '')); $worker = CerberusApplication::getActiveWorker(); // Delete forwards @($forward_deletes = DevblocksPlatform::importGPC($_REQUEST['forward_deletes'], 'array', array())); if (!empty($forward_deletes)) { DAO_WorkerMailForward::delete($forward_deletes); } // Add forward if (!empty($forward_bucket) && !empty($forward_address) && !empty($forward_event)) { @(list($group_id, $bucket_id) = split('_', $forward_bucket)); if (is_null($group_id) || is_null($bucket_id)) { break; } $fields = array(DAO_WorkerMailForward::WORKER_ID => $worker->id, DAO_WorkerMailForward::GROUP_ID => $group_id, DAO_WorkerMailForward::BUCKET_ID => $bucket_id, DAO_WorkerMailForward::EMAIL => $forward_address, DAO_WorkerMailForward::EVENT => $forward_event); DAO_WorkerMailForward::create($fields); } // Assignment notifications @($assign_notify_email = DevblocksPlatform::importGPC($_REQUEST['assign_notify_email'], 'string', '')); DAO_WorkerPref::set($worker->id, ChWatchersPlugin::WORKER_PREF_ASSIGN_EMAIL, $assign_notify_email); DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('preferences', 'notifications'))); }
function saveRssAction() { @($id = DevblocksPlatform::importGPC($_POST['id'])); $active_worker = CerberusApplication::getActiveWorker(); if (null != ($feed = DAO_ViewRss::getId($id)) && $feed->worker_id == $active_worker->id) { DAO_ViewRss::delete($id); } DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('preferences', 'rss'))); }
function doImportAction() { $active_worker = CerberusApplication::getActiveWorker(); if (!$active_worker->hasPriv('crm.opp.actions.import')) { return; } @($pos = DevblocksPlatform::importGPC($_REQUEST['pos'], 'array', array())); @($field = DevblocksPlatform::importGPC($_REQUEST['field'], 'array', array())); @($sync_dupes = DevblocksPlatform::importGPC($_REQUEST['sync_dupes'], 'array', array())); @($include_first = DevblocksPlatform::importGPC($_REQUEST['include_first'], 'integer', 0)); @($is_blank_unset = DevblocksPlatform::importGPC($_REQUEST['is_blank_unset'], 'integer', 0)); @($opt_assign = DevblocksPlatform::importGPC($_REQUEST['opt_assign'], 'integer', 0)); @($opt_assign_worker_id = DevblocksPlatform::importGPC($_REQUEST['opt_assign_worker_id'], 'integer', 0)); $visit = CerberusApplication::getVisit(); $db = DevblocksPlatform::getDatabaseService(); $workers = DAO_Worker::getAllActive(); $csv_file = $visit->get('crm.import.last.csv', ''); $fp = fopen($csv_file, "rt"); if (!$fp) { return; } // [JAS]: Do we need to consume a first row of headings? if (!$include_first) { @fgetcsv($fp, 8192, ',', '"'); } while (!feof($fp)) { $parts = fgetcsv($fp, 8192, ',', '"'); if (empty($parts) || 1 == count($parts) && is_null($parts[0])) { continue; } $fields = array(); $custom_fields = array(); $sync_fields = array(); foreach ($pos as $idx => $p) { $key = $field[$idx]; $val = $parts[$idx]; // Special handling if (!empty($key)) { switch ($key) { case 'amount': if (0 != strlen($val) && is_numeric($val)) { @($val = floatval($val)); } else { unset($key); } break; // Translate e-mail address to ID // Translate e-mail address to ID case 'email': if (null != ($addy = CerberusApplication::hashLookupAddress($val, true))) { $key = 'primary_email_id'; $val = $addy->id; } else { unset($key); } break; // Bools // Bools case 'is_won': case 'is_closed': if (0 != strlen($val)) { @($val = !empty($val) ? 1 : 0); } else { unset($key); } break; // Dates // Dates case 'created_date': case 'updated_date': case 'closed_date': if (0 != strlen($val)) { @($val = !is_numeric($val) ? strtotime($val) : $val); } else { unset($key); } break; // Worker by name // Worker by name case 'worker': unset($key); if (is_array($workers)) { foreach ($workers as $worker_id => $worker) { if (0 == strcasecmp($val, $worker->getName())) { $key = 'worker_id'; $val = $worker_id; } } } break; } if (!isset($key)) { continue; } // Custom fields if ('cf_' == substr($key, 0, 3)) { $custom_fields[substr($key, 3)] = $val; } elseif (!empty($key)) { $fields[$key] = $val; } // Find dupe combos if (in_array($idx, $sync_dupes)) { $search_field = ''; $search_val = ''; switch ($key) { case 'primary_email_id': $search_field = SearchFields_CrmOpportunity::PRIMARY_EMAIL_ID; $search_val = intval($val); break; case 'title': $search_field = SearchFields_CrmOpportunity::NAME; $search_val = $val; break; case 'amount': $search_field = SearchFields_CrmOpportunity::AMOUNT; $search_val = floatval($val); break; case 'is_won': $search_field = SearchFields_CrmOpportunity::IS_WON; $search_val = intval($val); break; case 'is_closed': $search_field = SearchFields_CrmOpportunity::IS_CLOSED; $search_val = intval($val); break; case 'created_date': $search_field = SearchFields_CrmOpportunity::CREATED_DATE; $search_val = intval($val); break; case 'updated_date': $search_field = SearchFields_CrmOpportunity::UPDATED_DATE; $search_val = intval($val); break; case 'closed_date': $search_field = SearchFields_CrmOpportunity::CLOSED_DATE; $search_val = intval($val); break; case 'worker_id': $search_field = SearchFields_CrmOpportunity::WORKER_ID; $search_val = intval($val); break; default: // Custom field dupe if ('cf_' == substr($key, 0, 3)) { $search_field = $key; // [TODO] Need to format this for proper custom fields $search_val = $val; } break; } if (!empty($search_field) && !empty($search_val)) { $sync_fields[$search_field] = new DevblocksSearchCriteria($search_field, '=', $search_val); } } } } // end foreach($pos) // Dupe checking if (!empty($fields) && !empty($sync_fields)) { list($dupes, $null) = DAO_CrmOpportunity::search(array(), $sync_fields, 1, 0, null, false, false); } if (!empty($fields)) { if (isset($fields['primary_email_id'])) { // Make sure a minimum amount of fields are provided if (!isset($fields[DAO_CrmOpportunity::UPDATED_DATE])) { $fields[DAO_CrmOpportunity::UPDATED_DATE] = time(); } if ($opt_assign && !isset($fields[DAO_CrmOpportunity::WORKER_ID])) { $fields[DAO_CrmOpportunity::WORKER_ID] = $opt_assign_worker_id; } if (empty($dupes)) { // [TODO] Provide an import prefix for blank names if (!isset($fields[DAO_CrmOpportunity::NAME]) && isset($addy)) { $fields[DAO_CrmOpportunity::NAME] = $addy->email; } if (!isset($fields[DAO_CrmOpportunity::CREATED_DATE])) { $fields[DAO_CrmOpportunity::CREATED_DATE] = time(); } $id = DAO_CrmOpportunity::create($fields); } else { $id = key($dupes); DAO_CrmOpportunity::update($id, $fields); } } } if (!empty($custom_fields) && !empty($id)) { // Format (typecast) and set the custom field types $source_ext_id = CrmCustomFieldSource_Opportunity::ID; DAO_CustomFieldValue::formatAndSetFieldValues($source_ext_id, $id, $custom_fields, $is_blank_unset); } } @unlink($csv_file); // nuke the imported file $visit->set('crm.import.last.csv', null); DevblocksPlatform::redirect(new DevblocksHttpResponse(array('activity', 'opps'))); }
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 viewAssignThreadsAction() { @($row_ids = DevblocksPlatform::importGPC($_POST['row_id'], 'array', array())); @($worker_id = DevblocksPlatform::importGPC($_REQUEST['assign_worker_id'], 'integer', 0)); @($view_id = DevblocksPlatform::importGPC($_REQUEST['view_id'], 'string', '')); $active_worker = CerberusApplication::getActiveWorker(); if (is_array($row_ids) && !empty($row_ids)) { // Do assignments $fields = array(DAO_ForumsThread::WORKER_ID => $worker_id); DAO_ForumsThread::update($row_ids, $fields); // Only send notifications if not assigning to self (or unassigning) if (!empty($worker_id) && $active_worker->id != $worker_id) { $url_writer = DevblocksPlatform::getUrlService(); // Load threads for notifications $forum_threads = DAO_ForumsThread::getWhere(sprintf("%s IN (%s)", DAO_ForumsThread::ID, implode(',', $row_ids))); // Send notifications about assigned forum threads if (is_array($forum_threads) && !empty($forum_threads)) { foreach ($forum_threads as $forum_thread) { /* @var $forum_thread Model_ForumsThread */ $fields = array(DAO_WorkerEvent::CREATED_DATE => time(), DAO_WorkerEvent::WORKER_ID => $worker_id, DAO_WorkerEvent::URL => $url_writer->write('c=forums&a=explorer', true) . '?start=' . $forum_thread->id, DAO_WorkerEvent::TITLE => 'New Forum Assignment', DAO_WorkerEvent::CONTENT => sprintf("%s assigned: %s", $active_worker->getName(), $forum_thread->title), DAO_WorkerEvent::IS_READ => 0); DAO_WorkerEvent::create($fields); } } } } if (!empty($view_id) && null != ($view = C4_AbstractViewLoader::getView($view_id))) { $view->render(); } }
function deleteOppNoteAction() { @($id = DevblocksPlatform::importGPC($_REQUEST['id'], 'integer', 0)); @($opp_id = DevblocksPlatform::importGPC($_REQUEST['opp_id'], 'integer', 0)); $active_worker = CerberusApplication::getActiveWorker(); if (null != ($note = DAO_Note::get($id))) { if ($note->worker_id == $active_worker->id || $active_worker->is_superuser) { DAO_Note::delete($id); } } DevblocksPlatform::redirect(new DevblocksHttpResponse(array('crm', 'opp', $opp_id))); }
function AnswernetMetlifeReportDRReport($RunFromCron = 0) { $db = DevblocksPlatform::getDatabaseService(); $translate = DevblocksPlatform::getTranslationService(); if ($RunFromCron) { $logger = DevblocksPlatform::getConsoleLog(); } $radius = 12; $start_time = 0; date_default_timezone_set('Etc/UTC'); // Security if (null == ($active_worker = CerberusApplication::getActiveWorker())) { die($translate->_('common.access_denied')); } // import dates from form @($start = DevblocksPlatform::importGPC($_REQUEST['start'], 'string', '')); if (empty($start)) { $start = "Yesterday"; } $start_time = strtotime($start); if ($start_time === false) { $start = "Yesterday"; $start_time = strtotime($start); } if (empty($start_time) || !is_numeric($start_time)) { return; } $start_ofday = mktime(0, 0, 0, date("m", $start_time), date("d", $start_time), date("Y", $start_time)); $end_ofday = $start_ofday + 86400; if ($RunFromCron) { $logger->info("[Answernet.com] Gerating the Metlife DR Report."); $logger->info("[Answernet.com] " . $translate->_('answernet.er.metlife.report.dr.date.from.text') . date(" Y-m-d H:i:s ", $start_ofday) . $translate->_('answernet.er.metlife.report.dr.date.to.text') . date(" Y-m-d H:i:s T", $end_ofday)); $logger->info("[Answernet.com] " . $translate->_('answernet.er.metlife.generate.report')); } else { print '<br><br><br>'; print $translate->_('answernet.er.metlife.report.dr.date.from.text'); print date(" Y-m-d H:i:s ", $start_ofday); print $translate->_('answernet.er.metlife.report.dr.date.to.text'); print date(" Y-m-d H:i:s T", $end_ofday); print '<br>'; print $translate->_('answernet.er.metlife.generate.report'); } $filename = "report-metlife-dr-" . date("Ymd", $start_time) . ".xls"; $full_filename = getcwd() . '/storage/answernet/' . $filename; if ($RunFromCron) { $logger->info("[Answernet.com] " . $translate->_('answernet.er.metlife.generating')); } else { print '<br>'; print $translate->_('answernet.er.metlife.generating'); } // Create new Excel Spreadsheet. $workbook = new Spreadsheet_Excel_Writer($full_filename); // Create Open Status Tab and set Column Width and Row Hight. $worksheet_transaction =& $workbook->addWorksheet('Transaction Report'); $worksheet_transaction->setColumn(0, 0, $radius * 0.85); $worksheet_transaction->setColumn(1, 1, $radius * 0.85); $worksheet_transaction->setColumn(2, 2, $radius * 0.35); $worksheet_transaction->setColumn(3, 3, $radius * 1.65); $worksheet_transaction->setColumn(4, 4, $radius * 1.85); $worksheet_transaction->setColumn(5, 5, $radius * 1.16); $worksheet_transaction->setColumn(6, 6, $radius * 2.6); $worksheet_transaction->setColumn(7, 8, $radius * 0.87); $worksheet_transaction->setColumn(9, 9, $radius * 3.28); $worksheet_transaction->setColumn(10, 10, $radius * 1.34); // $worksheet_open_status->setRow(0, 28); // $worksheet_open_status->setRow(2, 32); // Create Open Status Tab and set Column Width and Row Hight. $worksheet_open_status =& $workbook->addWorksheet('Open DR Report'); $worksheet_open_status->setColumn(0, 0, $radius * 0.85); $worksheet_open_status->setColumn(1, 1, $radius * 0.35); $worksheet_open_status->setColumn(2, 2, $radius * 0.7); $worksheet_open_status->setColumn(3, 3, $radius * 1.65); $worksheet_open_status->setColumn(4, 4, $radius * 1.85); $worksheet_open_status->setColumn(5, 5, $radius * 1.16); $worksheet_open_status->setColumn(6, 6, $radius * 2.6); $worksheet_open_status->setColumn(7, 8, $radius * 0.87); $worksheet_open_status->setColumn(9, 9, $radius * 3.28); $worksheet_open_status->setColumn(10, 10, $radius * 1.34); // $worksheet_open_status->setRow(0, 28); // $worksheet_open_status->setRow(2, 32); // Create monthly Tab and set Column Width and Row Hight. $worksheet_monthly =& $workbook->addWorksheet('Month DR Summary'); $worksheet_monthly->setColumn(0, 0, $radius * 2.46); $worksheet_monthly->setColumn(1, 1, $radius * 0.47); $worksheet_monthly->setColumn(2, 2, $radius * 0.63); $worksheet_monthly->setColumn(3, 3, $radius * 0.6899999999999999); $worksheet_monthly->setColumn(4, 4, $radius * 0.6899999999999999); $worksheet_monthly->setColumn(5, 5, $radius * 0.6899999999999999); // $worksheet_monthly->setRow(0, 56); // Formats used thoughout the workbook. $format_general =& $workbook->addFormat(); $format_general->setBorder(1); $format_general->setHAlign('left'); $format_general->setTextWrap(); $format_general_title =& $workbook->addFormat(); $format_general_title->setBorder(1); $format_general_title->setColor('black'); $format_general_title->setFgColor('silver'); $format_general_title->setHAlign('left'); $format_general_title->setVAlign('vjustify'); $format_general_title->setVAlign('top'); $format_general_nowrap =& $workbook->addFormat(); $format_general_nowrap->setBorder(1); // Setup templating for the formating of certain cells in the Monthly Group. $format_monthly_title =& $workbook->addFormat(); $format_monthly_title->setColor(8); $format_monthly_title->setFgColor(35); $format_monthly_title->setBorder(1); $format_monthly_title->setBold(); $format_monthly_title->setHAlign('center'); $format_monthly_title->setVAlign('vjustify'); $format_monthly_title->setVAlign('top'); $format_monthly_title->setTextWrap(); $format_monthly_title->setAlign('merge'); // Added headers since they never change in the transaction Group. $worksheet_transaction->write(0, 0, 'Status', $format_general_title); $worksheet_transaction->write(0, 1, 'Due Date', $format_general_title); $worksheet_transaction->write(0, 2, 'SLA', $format_general_title); $worksheet_transaction->write(0, 3, 'Date Received', $format_general_title); $worksheet_transaction->write(0, 4, 'RM Name', $format_general_title); $worksheet_transaction->write(0, 5, 'RM Employee id', $format_general_title); $worksheet_transaction->write(0, 6, 'Request Type', $format_general_title); $worksheet_transaction->write(0, 7, 'MetLife Staff', $format_general_title); $worksheet_transaction->write(0, 8, 'New Hire', $format_general_title); $worksheet_transaction->write(0, 9, 'Nates (email body)', $format_general_title); $worksheet_transaction->write(0, 10, 'Ticket Mask', $format_general_title); // Added headers since they never change in the Open Status Group. $worksheet_open_status->write(0, 0, 'Due Date', $format_general_title); $worksheet_open_status->write(0, 1, 'SLA', $format_general_title); $worksheet_open_status->write(0, 2, 'Overdue', $format_general_title); $worksheet_open_status->write(0, 3, 'Date Received', $format_general_title); $worksheet_open_status->write(0, 4, 'RM Name', $format_general_title); $worksheet_open_status->write(0, 5, 'RM Employee id', $format_general_title); $worksheet_open_status->write(0, 6, 'Request Type', $format_general_title); $worksheet_open_status->write(0, 7, 'MetLife Staff', $format_general_title); $worksheet_open_status->write(0, 8, 'New Hire', $format_general_title); $worksheet_open_status->write(0, 9, 'Nates (email body)', $format_general_title); $worksheet_open_status->write(0, 10, 'Ticket Mask', $format_general_title); // Added headers since they never change in the monthly Group. $month_text = date("F-y", $start_time); $worksheet_monthly->write(0, 0, $month_text, $format_monthly_title); $worksheet_monthly->write(0, 1, '', $format_monthly_title); $worksheet_monthly->write(0, 2, '', $format_monthly_title); $worksheet_monthly->write(0, 3, '', $format_monthly_title); $worksheet_monthly->write(0, 4, '', $format_monthly_title); $worksheet_monthly->write(0, 5, '', $format_monthly_title); $worksheet_monthly->write(1, 0, 'DR Summary', $format_general_title); $worksheet_monthly->write(1, 1, '', $format_general_title); $worksheet_monthly->write(2, 0, 'All DRs incoming*', $format_general); $worksheet_monthly->write(3, 0, 'DRs Sent to MetLife', $format_general); $worksheet_monthly->write(4, 0, 'DRs Completed', $format_general); $worksheet_monthly->write(5, 0, 'Average time to reply (day)', $format_general); $worksheet_monthly->write(6, 0, 'Missed DR SLA', $format_general); $worksheet_monthly->write(7, 0, 'DR escalations', $format_general); $worksheet_monthly->write(8, 0, 'DR Unique Users', $format_general); $worksheet_monthly->write(9, 0, 'New Hires (30 Days)', $format_general); $worksheet_monthly->write(10, 0, '', $format_general); $worksheet_monthly->write(10, 1, '', $format_general); $worksheet_monthly->write(11, 0, 'DR Categories', $format_general_title); $worksheet_monthly->write(11, 1, '#s', $format_general_title); $worksheet_monthly->write(11, 2, 'Avg SLA', $format_general_title); $worksheet_monthly->write(11, 3, 'Linda #s', $format_general_title); $worksheet_monthly->write(11, 4, 'Colin #s', $format_general_title); $worksheet_monthly->write(11, 5, 'Sarfraz #s', $format_general_title); $worksheet_monthly->write(12, 0, 'Import Contacts - New hire', $format_general); $worksheet_monthly->write(13, 0, 'Import Contacts', $format_general); $worksheet_monthly->write(14, 0, 'Create mailing list from exiting date', $format_general); $worksheet_monthly->write(15, 0, 'Update existing contacts - batch', $format_general); $worksheet_monthly->write(16, 0, 'Missing or incorrect customer info', $format_general); $worksheet_monthly->write(17, 0, 'Fix duplicate contacts', $format_general); $worksheet_monthly->write(18, 0, 'Export third party file', $format_general); $worksheet_monthly->write(19, 0, 'Other', $format_general); $worksheet_monthly->write(20, 0, 'Total', $format_general_title); $worksheet_monthly->write(20, 1, '', $format_general_title); $worksheet_monthly->write(20, 2, '', $format_general_title); $worksheet_monthly->write(20, 3, '', $format_general_title); $worksheet_monthly->write(20, 4, '', $format_general_title); $worksheet_monthly->write(20, 5, '', $format_general_title); $worksheet_monthly->write(22, 0, '* Some DRs will be deemed normal care and should use other reporting codes, remove from DR reporting', $format_general_nowrap); $worksheet_monthly->write(23, 0, '** Days should be tracked as business days', $format_general_nowrap); $worksheet_monthly->write(25, 0, 'SLA Goals', $format_general_title); $worksheet_monthly->write(25, 1, '', $format_general_title); $worksheet_monthly->write(26, 0, 'Import Contacts - New hire', $format_general); $worksheet_monthly->write(27, 0, 'Import Contacts', $format_general); $worksheet_monthly->write(28, 0, 'Create mailing list from exiting date', $format_general); $worksheet_monthly->write(29, 0, 'Update existing contacts - batch', $format_general); $worksheet_monthly->write(30, 0, 'Missing or incorrect customer info', $format_general); $worksheet_monthly->write(31, 0, 'Fix duplicate contacts', $format_general); $worksheet_monthly->write(32, 0, 'Export third party file', $format_general); $worksheet_monthly->write(33, 0, 'Other', $format_general); $worksheet_monthly->write(34, 0, 'Avgerage', $format_general_title); $worksheet_monthly->write(34, 1, '', $format_general_title); if ($RunFromCron) { $logger->info("[Answernet.com] " . $translate->_('answernet.er.metlife.metlife.done')); $logger->info("[Answernet.com] " . $translate->_('answernet.er.metlife.generating.dr.daily.report')); } else { print $translate->_('answernet.er.metlife.metlife.done'); print '<br>'; print $translate->_('answernet.er.metlife.generating.dr.daily.report'); } //SELECT t.id, t.mask, t.created_date ticket_created_date, mc.content, t.is_closed //FROM ticket t //INNER JOIN message_content mc on t.first_message_id = mc.message_id //INNER JOIN message m on t.first_message_id = m.id //and team_id = 1721 //ORDER BY t.id $sql = "SELECT t.id, t.mask, "; $sql .= "t.created_date ticket_created_date, mc.content "; $sql .= "FROM ticket t "; $sql .= "INNER JOIN message_content mc on t.first_message_id = mc.message_id "; $sql .= "WHERE t.is_closed = 0 "; $sql .= "and t.team_id = 1721 "; $sql .= "ORDER BY t.id "; $rs = $db->Execute($sql); $row = 1; if (is_a($rs, 'ADORecordSet')) { while (!$rs->EOF) { $worksheet_open_status->setRow($row, 12); $custom_fields = DAO_CustomFieldValue::getValuesBySourceIds(ChCustomFieldSource_Ticket::ID, $rs->fields['id']); //print "<pre>"; //print_r($custom_fields); //print "</pre>"; // Due Date, SLA, Date Recived, RM Name, RM Employee ID, Topic, Staff, New Hire, Notes/Email Body // Due Date Column 0 $due_date_int = intval($custom_fields[$rs->fields['id']][1]); if ($due_date_int) { $ticket_due_date = date("n/j/y", $due_date_int); } else { $ticket_due_date = ""; } $worksheet_open_status->writeString($row, 0, $ticket_due_date, $format_general); // SLA Column 1 $worksheet_open_status->write($row, 1, $custom_fields[$rs->fields['id']][5], $format_general); // Overdue Column 2 if (date("U", $due_date_int) >= time()) { $worksheet_open_status->write($row, 2, "No", $format_general); } else { $worksheet_open_status->write($row, 2, "Yes", $format_general); } // Date Recieved Column 3 $ticket_created_date = date("n/j/y g:i:s A", intval($rs->fields['ticket_created_date'])); $worksheet_open_status->writeString($row, 3, $ticket_created_date, $format_general); // RM Name Column 4 $worksheet_open_status->write($row, 4, $custom_fields[$rs->fields['id']][3], $format_general); // RM Employee ID Column 5 $worksheet_open_status->write($row, 5, $custom_fields[$rs->fields['id']][2], $format_general); // Topic / Request Type Column 6 $worksheet_open_status->write($row, 6, $custom_fields[$rs->fields['id']][4], $format_general); // Staff Column 7 $worksheet_open_status->write($row, 7, $custom_fields[$rs->fields['id']][8], $format_general); // New Hire Column 8 $worksheet_open_status->write($row, 8, $custom_fields[$rs->fields['id']][6], $format_general); // Email Body Column 9 $message_content = $rs->fields['content']; $worksheet_open_status->write($row, 9, trim($message_content), $format_general_nowrap); // Ticket Mask Column 10 $mask = $rs->fields['mask']; $worksheet_open_status->write($row, 10, $mask, $format_general); $row++; $rs->MoveNext(); } } if ($RunFromCron) { $logger->info("[Answernet.com] " . $translate->_('answernet.er.metlife.metlife.done')); $logger->info("[Answernet.com] " . $translate->_('answernet.er.metlife.generating.dr.transaction.report')); } else { print $translate->_('answernet.er.metlife.metlife.done'); print '<br>'; print $translate->_('answernet.er.metlife.generating.dr.transaction.report'); } //SELECT t.mask, t.created_date ticket_created_date, //m.created_date message_created_date, mc.content, //m.is_outgoing //FROM message m //INNER JOIN ticket t ON m.ticket_id = t.id //INNER JOIN address a ON m.address_id = a.id //INNER JOIN message_content mc on m.id = mc.message_id //WHERE t.team_id = 1721 //ORDER BY m.id; $sql = "SELECT t.id, t.mask, t.created_date ticket_created_date, "; $sql .= "m.created_date message_created_date, mc.content, m.is_outgoing "; $sql .= "FROM message m "; $sql .= "INNER JOIN ticket t ON m.ticket_id = t.id "; $sql .= "INNER JOIN address a ON m.address_id = a.id "; $sql .= "INNER JOIN message_content mc on m.id = mc.message_id "; $sql .= sprintf("WHERE m.created_date > %d AND m.created_date <= %d ", $start_ofday, $end_ofday); $sql .= "and t.team_id = 1721 "; $sql .= "ORDER BY t.id "; $rs = $db->Execute($sql); $row = 1; if (is_a($rs, 'ADORecordSet')) { while (!$rs->EOF) { $worksheet_transaction->setRow($row, 12); $custom_fields = DAO_CustomFieldValue::getValuesBySourceIds(ChCustomFieldSource_Ticket::ID, $rs->fields['id']); // Status, Due Date, SLA, SLA Age, Date Recived, RM Name, RM Employee ID, Topic, Staff, New Hire, Notes/Email Body if (intval($rs->fields['is_outgoing'])) { $worksheet_transaction->write($row, 0, "Recieved", $format_general); } else { $worksheet_transaction->write($row, 0, "Sent", $format_general); } // Due Date Column 1 $due_date_int = intval($custom_fields[$rs->fields['id']][1]); if ($due_date_int) { $ticket_due_date = date("n/j/y", $due_date_int); } else { $ticket_due_date = ""; } $worksheet_transaction->writeString($row, 1, $ticket_due_date, $format_general); // SLA Column 2 $worksheet_transaction->write($row, 2, $custom_fields[$rs->fields['id']][5], $format_general); // Date Recieved Column 3 $ticket_created_date = date("n/j/y g:i:s A", intval($rs->fields['ticket_created_date'])); $worksheet_transaction->writeString($row, 3, $ticket_created_date, $format_general); // RM Name Column 4 $worksheet_transaction->write($row, 4, $custom_fields[$rs->fields['id']][3], $format_general); // RM Employee ID Column 5 $worksheet_transaction->write($row, 5, $custom_fields[$rs->fields['id']][2], $format_general); // Topic / Request Type Column 6 $worksheet_transaction->write($row, 6, $custom_fields[$rs->fields['id']][4], $format_general); // Staff Column 7 $worksheet_transaction->write($row, 7, $custom_fields[$rs->fields['id']][8], $format_general); // New Hire Column 8 $worksheet_transaction->write($row, 8, $custom_fields[$rs->fields['id']][6], $format_general); // Email Body Column 9 $message_content = $rs->fields['content']; $worksheet_transaction->write($row, 9, trim($message_content), $format_general_nowrap); // Ticket Mask Column 10 $mask = $rs->fields['mask']; $worksheet_transaction->write($row, 10, $mask, $format_general); $row++; $rs->MoveNext(); } } if ($RunFromCron) { $logger->info("[Answernet.com] " . $translate->_('answernet.er.metlife.metlife.done')); $logger->info("[Answernet.com] " . $translate->_('answernet.er.metlife.generating.dr.monthly.report')); } else { print $translate->_('answernet.er.metlife.metlife.done'); print '<br>'; print $translate->_('answernet.er.metlife.generating.dr.monthly.report'); } /* print $translate->_('answernet.er.metlife.metlife.done'); print '<br>'; print $translate->_('answernet.er.metlife.generating.email.count'); $worksheet_in_count->setRow(1, 24); $row_count = 2; foreach ($in_count_admin as $record) { $worksheet_in_count->write($row_count, 0, $record['email'], $format_general); $worksheet_in_count->write($row_count, 1, $record['count'], $format_general); $row_count++; } $worksheet_in_count->write(1, 0, 'Total Admin Email', $format_in_count_total); $worksheet_in_count->writeFormula(1, 1, "=SUM(B3:B".$row_count.")", $format_general); $row_count = 2; foreach ($in_count_other as $record) { $worksheet_in_count->write($row_count, 2, $record['email'], $format_general); $worksheet_in_count->write($row_count, 3, '', $format_general); $worksheet_in_count->write($row_count, 4, $record['count'], $format_general); $row_count++; } $worksheet_in_count->write(1, 2, 'Total Field Email', $format_in_count_total); $worksheet_in_count->write(1, 3, '', $format_in_count_total); $worksheet_in_count->writeFormula(1, 4, "=SUM(E3:E".$row_count.")", $format_general); // Grand Total $worksheet_in_count->write(1, 5, 'Grand Total Email', $format_general); $worksheet_in_count->writeFormula(1, 6, "=SUM(B2,E2)", $format_general); $worksheet_out_count->setRow(1, 24); $row_count = 2; foreach ($out_count_admin as $record) { $worksheet_out_count->write($row_count, 0, $record['email'], $format_general); $worksheet_out_count->write($row_count, 1, $record['count'], $format_general); $row_count++; } $worksheet_out_count->write(1, 0, 'Total Admin Email', $format_general); $worksheet_out_count->writeFormula(1, 1, "=SUM(B3:B".$row_count.")", $format_general); $row_count = 2; foreach ($out_count_other as $record) { $worksheet_out_count->write($row_count, 2, $record['email'], $format_general); $worksheet_out_count->write($row_count, 3, '', $format_general); $worksheet_out_count->write($row_count, 4, $record['count'], $format_general); $row_count++; } $worksheet_out_count->write(1, 2, 'Total Field Email', $format_general); $worksheet_out_count->write(1, 3, '', $format_out_count_total); $worksheet_out_count->writeFormula(1, 4, "=SUM(E3:E".$row_count.")", $format_general); // Grand Total $worksheet_out_count->write(1, 5, 'Grand Total Email', $format_general); $worksheet_out_count->writeFormula(1, 6, "=SUM(B2,E2)", $format_general); */ $workbook->close(); return $filename; }
function viewSaveCustomizeAction() { $translate = DevblocksPlatform::getTranslationService(); @($id = DevblocksPlatform::importGPC($_REQUEST['id'])); @($columns = DevblocksPlatform::importGPC($_REQUEST['columns'], 'array', array())); @($num_rows = DevblocksPlatform::importGPC($_REQUEST['num_rows'], 'integer', 10)); $num_rows = max($num_rows, 1); // make 1 the minimum $view = C4_AbstractViewLoader::getView($id); $view->doCustomize($columns, $num_rows); $active_worker = CerberusApplication::getActiveWorker(); // Conditional Persist if (substr($id, 0, 5) == "cust_") { // custom workspace $list_view_id = intval(substr($id, 5)); // Special custom view fields @($title = DevblocksPlatform::importGPC($_REQUEST['title'], 'string', $translate->_('views.new_list'))); $view->name = $title; // Persist Object $list_view = new Model_WorkerWorkspaceListView(); $list_view->title = $title; $list_view->columns = $view->view_columns; $list_view->num_rows = $view->renderLimit; $list_view->params = $view->params; $list_view->sort_by = $view->renderSortBy; $list_view->sort_asc = $view->renderSortAsc; DAO_WorkerWorkspaceList::update($list_view_id, array(DAO_WorkerWorkspaceList::LIST_VIEW => serialize($list_view))); } else { $prefs = new C4_AbstractViewModel(); $prefs->class_name = get_class($view); $prefs->view_columns = $view->view_columns; $prefs->renderLimit = $view->renderLimit; $prefs->renderSortBy = $view->renderSortBy; $prefs->renderSortAsc = $view->renderSortAsc; DAO_WorkerPref::set($active_worker->id, 'view' . $view->id, serialize($prefs)); } C4_AbstractViewLoader::setView($id, $view); $view->render(); }
public function getRenderedContent($message_id) { $raw = $this->content; $replace = array(); $with = array(); $replace[] = '#timestamp#'; $with[] = date('r'); if (!empty($message_id)) { $message = DAO_Ticket::getMessage($message_id); $ticket = DAO_Ticket::getTicket($message->ticket_id); $sender = DAO_Address::get($message->address_id); $sender_org = DAO_ContactOrg::get($sender->contact_org_id); $replace[] = '#sender_first_name#'; $replace[] = '#sender_last_name#'; $replace[] = '#sender_org#'; $with[] = $sender->first_name; $with[] = $sender->last_name; $with[] = !empty($sender_org) ? $sender_org->name : ""; $replace[] = '#ticket_id#'; $replace[] = '#ticket_mask#'; $replace[] = '#ticket_subject#'; $with[] = $ticket->id; $with[] = $ticket->mask; $with[] = $ticket->subject; } if (null != ($active_worker = CerberusApplication::getActiveWorker())) { $worker = DAO_Worker::getAgent($active_worker->id); // most recent info (not session) $replace[] = '#worker_first_name#'; $replace[] = '#worker_last_name#'; $replace[] = '#worker_title#'; $with[] = $worker->first_name; $with[] = $worker->last_name; $with[] = $worker->title; } return str_replace($replace, $with, $raw); }
function getCommunityToolAction() { $worker = CerberusApplication::getActiveWorker(); if (!$worker || !$worker->is_superuser) { echo "Access denied."; return; } @($portal = DevblocksPlatform::importGPC($_REQUEST['portal'], 'string', '')); @($is_submitted = DevblocksPlatform::importGPC($_POST['is_submitted'], 'integer', 0)); UmPortalHelper::setCode($portal); if (!empty($is_submitted)) { $is_submitted = time(); } $tpl = DevblocksPlatform::getTemplateService(); $tpl->cache_lifetime = "0"; $tpl_path = dirname(__FILE__) . '/templates/'; $tpl->assign('path', $tpl_path); $tpl->assign('portal', $portal); $tpl->assign('is_submitted', $is_submitted); if (null != ($instance = DAO_CommunityTool::getByCode($portal))) { $tpl->assign('instance', $instance); $manifest = DevblocksPlatform::getExtension($instance->extension_id, false, true); if (null != ($tool = $manifest->createInstance())) { /* @var $app Extension_UsermeetTool */ $tpl->assign('tool', $tool); } } // Community Record $community_id = $instance->community_id; $community = DAO_Community::get($community_id); $tpl->assign('community', $community); // Install $url_writer = DevblocksPlatform::getUrlService(); $url = $url_writer->write('c=portal&a=' . $portal, true); $url_parts = parse_url($url); $host = $url_parts['host']; @($port = $_SERVER['SERVER_PORT']); $base = substr(DEVBLOCKS_WEBPATH, 0, -1); // consume trailing $path = substr($url_parts['path'], strlen(DEVBLOCKS_WEBPATH) - 1); // consume trailing slash @($parts = explode('/', $path)); if ($parts[1] == 'index.php') { // 0 is null from /part1/part2 paths. unset($parts[1]); } $path = implode('/', $parts); $tpl->assign('host', $host); $tpl->assign('is_ssl', $url_writer->isSSL() ? 1 : 0); $tpl->assign('port', $port); $tpl->assign('base', $base); $tpl->assign('path', $path); $tpl->display('file:' . $tpl_path . 'community/config/tab/tool_config.tpl'); }
function saveOrgPeekAction() { $active_worker = CerberusApplication::getActiveWorker(); @($id = DevblocksPlatform::importGPC($_REQUEST['id'], 'integer', 0)); @($view_id = DevblocksPlatform::importGPC($_REQUEST['view_id'], 'string', '')); @($org_name = DevblocksPlatform::importGPC($_REQUEST['org_name'], 'string', '')); @($street = DevblocksPlatform::importGPC($_REQUEST['street'], 'string', '')); @($city = DevblocksPlatform::importGPC($_REQUEST['city'], 'string', '')); @($province = DevblocksPlatform::importGPC($_REQUEST['province'], 'string', '')); @($postal = DevblocksPlatform::importGPC($_REQUEST['postal'], 'string', '')); @($country = DevblocksPlatform::importGPC($_REQUEST['country'], 'string', '')); @($phone = DevblocksPlatform::importGPC($_REQUEST['phone'], 'string', '')); @($website = DevblocksPlatform::importGPC($_REQUEST['website'], 'string', '')); @($delete = DevblocksPlatform::importGPC($_REQUEST['do_delete'], 'integer', 0)); if (!empty($id) && !empty($delete)) { // delete if ($active_worker->hasPriv('core.addybook.org.actions.delete')) { DAO_ContactOrg::delete($id); } } else { // create/edit if ($active_worker->hasPriv('core.addybook.org.actions.update')) { $fields = array(DAO_ContactOrg::NAME => $org_name, DAO_ContactOrg::STREET => $street, DAO_ContactOrg::CITY => $city, DAO_ContactOrg::PROVINCE => $province, DAO_ContactOrg::POSTAL => $postal, DAO_ContactOrg::COUNTRY => $country, DAO_ContactOrg::PHONE => $phone, DAO_ContactOrg::WEBSITE => $website); if ($id == 0) { $id = DAO_ContactOrg::create($fields); } else { DAO_ContactOrg::update($id, $fields); } // Custom field saves @($field_ids = DevblocksPlatform::importGPC($_POST['field_ids'], 'array', array())); DAO_CustomFieldValue::handleFormPost(ChCustomFieldSource_Org::ID, $id, $field_ids); } } $view = C4_AbstractViewLoader::getView($view_id); $view->render(); }
static function shouldLoadExtension(DevblocksExtensionManifest $extension_manifest) { // Always allow core if ("cerberusweb.core" == $extension_manifest->plugin_id) { return true; } // [TODO] This should limit to just things we can run with no session // Community Tools, Cron/Update. They are still limited by their own // isVisible() otherwise. if (null == ($active_worker = CerberusApplication::getActiveWorker())) { return true; } return $active_worker->hasPriv('plugin.' . $extension_manifest->plugin_id); }
function saveTaskPeekAction() { @($id = DevblocksPlatform::importGPC($_REQUEST['id'], 'integer', '')); @($view_id = DevblocksPlatform::importGPC($_REQUEST['view_id'], 'string', '')); @($link_namespace = DevblocksPlatform::importGPC($_REQUEST['link_namespace'], 'string', '')); @($link_object_id = DevblocksPlatform::importGPC($_REQUEST['link_object_id'], 'integer', 0)); @($do_delete = DevblocksPlatform::importGPC($_REQUEST['do_delete'], 'integer', 0)); $active_worker = CerberusApplication::getActiveWorker(); if (!empty($id) && !empty($do_delete)) { // delete $task = DAO_Task::get($id); // Check privs if ($active_worker->hasPriv('core.tasks.actions.create') && $active_worker->id == $task->worker_id || $active_worker->hasPriv('core.tasks.actions.update_nobody') && empty($task->worker_id) || $active_worker->hasPriv('core.tasks.actions.update_all')) { DAO_Task::delete($id); } } else { // create|update $fields = array(); // Title @($title = DevblocksPlatform::importGPC($_REQUEST['title'], 'string', '')); if (!empty($title)) { $fields[DAO_Task::TITLE] = $title; } // Completed @($completed = DevblocksPlatform::importGPC($_REQUEST['completed'], 'integer', 0)); $fields[DAO_Task::IS_COMPLETED] = intval($completed); // [TODO] This shouldn't constantly update the completed date (it should compare) if ($completed) { $fields[DAO_Task::COMPLETED_DATE] = time(); } else { $fields[DAO_Task::COMPLETED_DATE] = 0; } // Due Date @($due_date = DevblocksPlatform::importGPC($_REQUEST['due_date'], 'string', '')); @($fields[DAO_Task::DUE_DATE] = empty($due_date) ? 0 : intval(strtotime($due_date))); // Worker @($worker_id = DevblocksPlatform::importGPC($_REQUEST['worker_id'], 'integer', 0)); @($fields[DAO_Task::WORKER_ID] = intval($worker_id)); // Content @($content = DevblocksPlatform::importGPC($_REQUEST['content'], 'string', '')); @($fields[DAO_Task::CONTENT] = $content); // Link to object (optional) if (!empty($link_namespace) && !empty($link_object_id)) { @($fields[DAO_Task::SOURCE_EXTENSION] = $link_namespace); @($fields[DAO_Task::SOURCE_ID] = $link_object_id); } // Save if (!empty($id)) { DAO_Task::update($id, $fields); } else { $id = DAO_Task::create($fields); // Write a notification (if not assigned to ourselves) // $url_writer = DevblocksPlatform::getUrlService(); $source_extensions = DevblocksPlatform::getExtensions('cerberusweb.task.source', true); if (!empty($worker_id)) { // && $active_worker->id != $worker_id (Temporarily allow self notifications) if (null != @($source_renderer = $source_extensions[$link_namespace])) { /* @var $source_renderer Extension_TaskSource */ $source_info = $source_renderer->getSourceInfo($link_object_id); $source_name = $source_info['name']; $source_url = $source_info['url']; if (empty($source_name) || empty($source_url)) { break; } $fields = array(DAO_WorkerEvent::CREATED_DATE => time(), DAO_WorkerEvent::WORKER_ID => $worker_id, DAO_WorkerEvent::URL => $source_url, DAO_WorkerEvent::TITLE => 'New Task Assignment', DAO_WorkerEvent::CONTENT => sprintf("%s\n%s says: %s", $source_name, $active_worker->getName(), $title), DAO_WorkerEvent::IS_READ => 0); DAO_WorkerEvent::create($fields); } } } // Custom field saves @($field_ids = DevblocksPlatform::importGPC($_POST['field_ids'], 'array', array())); DAO_CustomFieldValue::handleFormPost(ChCustomFieldSource_Task::ID, $id, $field_ids); } if (!empty($view_id) && null != ($view = C4_AbstractViewLoader::getView('', $view_id))) { $view->render(); } exit; }
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 saveEntryAction() { $active_worker = CerberusApplication::getActiveWorker(); // Make sure we're an active worker if (empty($active_worker) || empty($active_worker->id)) { return; } @($id = DevblocksPlatform::importGPC($_REQUEST['id'], 'integer', 0)); @($do_delete = DevblocksPlatform::importGPC($_REQUEST['do_delete'], 'integer', 0)); @($email = DevblocksPlatform::importGPC($_POST['email'], 'string', '')); @($mood = DevblocksPlatform::importGPC($_POST['mood'], 'integer', 0)); @($quote = DevblocksPlatform::importGPC($_POST['quote'], 'string', '')); @($url = DevblocksPlatform::importGPC($_POST['url'], 'string', '')); @($source_extension_id = DevblocksPlatform::importGPC($_POST['source_extension_id'], 'string', '')); @($source_id = DevblocksPlatform::importGPC($_POST['source_id'], 'integer', 0)); // Translate email string into addy id, if exists $address_id = 0; if (!empty($email)) { if (null != ($author_address = DAO_Address::lookupAddress($email, true))) { $address_id = $author_address->id; } } // Delete entries if (!empty($id) && !empty($do_delete)) { if (null != ($entry = DAO_FeedbackEntry::get($id))) { // Only superusers and owners can delete entries if ($active_worker->is_superuser || $active_worker->id == $entry->worker_id) { DAO_FeedbackEntry::delete($id); } } return; } // New or modify $fields = array(DAO_FeedbackEntry::QUOTE_MOOD => intval($mood), DAO_FeedbackEntry::QUOTE_TEXT => $quote, DAO_FeedbackEntry::QUOTE_ADDRESS_ID => intval($address_id), DAO_FeedbackEntry::SOURCE_URL => $url); // Only on new if (empty($id)) { $fields[DAO_FeedbackEntry::LOG_DATE] = time(); $fields[DAO_FeedbackEntry::WORKER_ID] = $active_worker->id; } if (empty($id)) { // create $id = DAO_FeedbackEntry::create($fields); // Post-create actions if (!empty($source_extension_id) && !empty($source_id)) { switch ($source_extension_id) { case 'feedback.source.ticket': // Create a ticket comment about the feedback (to prevent dupes) if (null == ($worker_address = DAO_Address::lookupAddress($active_worker->email))) { break; } $comment_text = sprintf("== Capture Feedback ==\n" . "Author: %s\n" . "Mood: %s\n" . "\n" . "%s\n", !empty($author_address) ? $author_address->email : 'Anonymous', empty($mood) ? 'Neutral' : (1 == $mood ? 'Praise' : 'Criticism'), $quote); $fields = array(DAO_TicketComment::ADDRESS_ID => $worker_address->id, DAO_TicketComment::COMMENT => $comment_text, DAO_TicketComment::CREATED => time(), DAO_TicketComment::TICKET_ID => intval($source_id)); DAO_TicketComment::create($fields); break; } } } else { // modify DAO_FeedbackEntry::update($id, $fields); } // Custom field saves @($field_ids = DevblocksPlatform::importGPC($_POST['field_ids'], 'array', array())); DAO_CustomFieldValue::handleFormPost(ChCustomFieldSource_FeedbackEntry::ID, $id, $field_ids); }
function savePluginsAction() { $translate = DevblocksPlatform::getTranslationService(); $worker = CerberusApplication::getActiveWorker(); if (!$worker || !$worker->is_superuser) { echo $translate->_('common.access_denied'); return; } if (DEMO_MODE) { DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('config', 'plugins'))); return; } @($plugins_enabled = DevblocksPlatform::importGPC($_REQUEST['plugins_enabled'], 'array')); $pluginStack = DevblocksPlatform::getPluginRegistry(); if (is_array($plugins_enabled)) { foreach ($plugins_enabled as $plugin_id) { $plugin = $pluginStack[$plugin_id]; $plugin->setEnabled(true); unset($pluginStack[$plugin_id]); } } // [JAS]: Clear unchecked plugins foreach ($pluginStack as $plugin) { // [JAS]: We can't force disable core here [TODO] Improve if ($plugin->id == 'cerberusweb.core') { continue; } $plugin->setEnabled(false); } DevblocksPlatform::clearCache(); // Run any enabled plugin patches // [TODO] Should the platform do this automatically on enable in order? $patchMgr = DevblocksPlatform::getPatchService(); $patches = DevblocksPlatform::getExtensions("devblocks.patch.container", false, true); if (is_array($patches)) { foreach ($patches as $patch_manifest) { /* @var $patch_manifest DevblocksExtensionManifest */ $container = $patch_manifest->createInstance(); /* @var $container DevblocksPatchContainerExtension */ $patchMgr->registerPatchContainer($container); } } if (!$patchMgr->run()) { // fail die("Failed updating plugins."); // [TODO] Make this more graceful } // Reload plugin translations DAO_Translation::reloadPluginStrings(); DevblocksPlatform::redirect(new DevblocksHttpResponse(array('config', 'plugins'))); }
function saveKbCategoryEditPanelAction() { $active_worker = CerberusApplication::getActiveWorker(); if (!$active_worker->hasPriv('core.kb.categories.modify')) { return; } @($id = DevblocksPlatform::importGPC($_REQUEST['id'], 'integer', 0)); @($name = DevblocksPlatform::importGPC($_REQUEST['name'], 'string')); @($parent_id = DevblocksPlatform::importGPC($_REQUEST['parent_id'], 'integer', 0)); @($delete = DevblocksPlatform::importGPC($_REQUEST['delete_box'], 'integer', 0)); @($return = DevblocksPlatform::importGPC($_REQUEST['return'])); if (!empty($id) && !empty($delete)) { $ids = DAO_KbCategory::getDescendents($id); DAO_KbCategory::delete($ids); // Change $return to category parent $return = "research/kb/" . sprintf("%06d", $parent_id); } elseif (empty($id)) { // create $fields = array(DAO_KbCategory::NAME => $name, DAO_KbCategory::PARENT_ID => $parent_id); DAO_KbCategory::create($fields); } else { // update $fields = array(DAO_KbCategory::NAME => $name, DAO_KbCategory::PARENT_ID => $parent_id); DAO_KbCategory::update($id, $fields); } if (!empty($return)) { $return_path = explode('/', $return); DevblocksPlatform::redirect(new DevblocksHttpResponse($return_path)); } }