Example #1
0
 function saveTab()
 {
     @($id = DevblocksPlatform::importGPC($_POST['id'], 'integer', 0));
     @($name = trim(DevblocksPlatform::importGPC($_POST['name'], 'string', 'New Search Engine')));
     @($url = trim(DevblocksPlatform::importGPC($_POST['url'], 'string', '')));
     @($delete = DevblocksPlatform::importGPC($_POST['do_delete'], 'integer', 0));
     if (DEMO_MODE) {
         DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('config', 'wgm.google_cse')));
         return;
     }
     if (!empty($delete)) {
         DAO_WgmGoogleCse::delete($id);
     } else {
         // Data massaging
         $token = '';
         if (!empty($url)) {
             if (null != ($query_args = parse_url($url, PHP_URL_QUERY))) {
                 $args = array();
                 parse_str($query_args, $args);
                 $token = isset($args['cx']) ? $args['cx'] : '';
             }
         }
         $fields = array(DAO_WgmGoogleCse::NAME => !empty($name) ? $name : 'New Search Engine', DAO_WgmGoogleCse::URL => $url, DAO_WgmGoogleCse::TOKEN => $token);
         if (empty($id)) {
             // Create
             $id = DAO_WgmGoogleCse::create($fields);
         } else {
             // Edit
             DAO_WgmGoogleCse::update($id, $fields);
         }
     }
     DevblocksPlatform::redirect(new DevblocksHttpResponse(array('config', 'wgm.google_cse')));
 }
Example #2
0
 function saveTab()
 {
     @($plugin_id = DevblocksPlatform::importGPC($_REQUEST['plugin_id'], 'string'));
     @($access_ids = DevblocksPlatform::importGPC($_REQUEST['access_ids'], 'array', array()));
     @($add_nickname = DevblocksPlatform::importGPC($_REQUEST['add_nickname'], 'string'));
     @($deletes = DevblocksPlatform::importGPC($_REQUEST['deletes'], 'array', array()));
     if (DEMO_MODE) {
         DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('config', 'webapi')));
         return;
     }
     // Deletes
     if (!empty($deletes)) {
         DAO_WebapiKey::delete($deletes);
     }
     // Edits
     if (is_array($access_ids)) {
         foreach ($access_ids as $access_id) {
             $rights = array();
             // ACL
             @($aclAddresses = DevblocksPlatform::importGPC($_REQUEST['aclAddresses' . $access_id], 'integer', 0));
             @($aclFnr = DevblocksPlatform::importGPC($_REQUEST['aclFnr' . $access_id], 'integer', 0));
             @($aclOrgs = DevblocksPlatform::importGPC($_REQUEST['aclOrgs' . $access_id], 'integer', 0));
             @($aclTasks = DevblocksPlatform::importGPC($_REQUEST['aclTasks' . $access_id], 'integer', 0));
             @($aclParser = DevblocksPlatform::importGPC($_REQUEST['aclParser' . $access_id], 'integer', 0));
             @($aclTickets = DevblocksPlatform::importGPC($_REQUEST['aclTickets' . $access_id], 'integer', 0));
             @($aclKB = DevblocksPlatform::importGPC($_REQUEST['aclKB' . $access_id], 'array'));
             $aclKBTopics = array();
             foreach ($aclKB as $k => $v) {
                 $aclKBTopics[$v] = 1;
             }
             $rights['acl_addresses'] = $aclAddresses;
             $rights['acl_fnr'] = $aclFnr;
             $rights['acl_orgs'] = $aclOrgs;
             $rights['acl_tasks'] = $aclTasks;
             $rights['acl_parser'] = $aclParser;
             $rights['acl_tickets'] = $aclTickets;
             $rights['acl_kb_topics'] = $aclKBTopics;
             // IPs
             @($ipList = DevblocksPlatform::importGPC($_REQUEST['ips' . $access_id], 'string', ''));
             if (!empty($ipList)) {
                 $ips = array_unique(DevblocksPlatform::parseCsvString($ipList));
                 $rights['ips'] = $ips;
             }
             $fields = array(DAO_WebapiKey::RIGHTS => serialize($rights));
             DAO_WebapiKey::update($access_id, $fields);
         }
     }
     // Add Access Key
     if (!empty($add_nickname)) {
         $gen_access_key = CerberusApplication::generatePassword(20);
         $gen_secret_key = CerberusApplication::generatePassword(30);
         $fields = array(DAO_WebapiKey::NICKNAME => $add_nickname, DAO_WebapiKey::ACCESS_KEY => $gen_access_key, DAO_WebapiKey::SECRET_KEY => $gen_secret_key);
         $key_id = DAO_WebapiKey::create($fields);
     }
     DevblocksPlatform::redirect(new DevblocksHttpResponse(array('config', 'webapi')));
     exit;
 }
Example #3
0
 function saveTab()
 {
     $settings = CerberusSettings::getInstance();
     @($plugin_id = DevblocksPlatform::importGPC($_REQUEST['plugin_id'], 'string'));
     // Edit|Delete
     @($ids = DevblocksPlatform::importGPC($_REQUEST['ids'], 'array', array()));
     @($names = DevblocksPlatform::importGPC($_REQUEST['names'], 'array', array()));
     @($urls = DevblocksPlatform::importGPC($_REQUEST['urls'], 'array', array()));
     @($keys = DevblocksPlatform::importGPC($_REQUEST['keys'], 'array', array()));
     @($deletes = DevblocksPlatform::importGPC($_REQUEST['deletes'], 'array', array()));
     @($poster_workers = DevblocksPlatform::importGPC($_REQUEST['poster_workers'], 'string', ''));
     // Add
     @($name = DevblocksPlatform::importGPC($_REQUEST['name'], 'string', ''));
     @($url = DevblocksPlatform::importGPC($_REQUEST['url'], 'string', ''));
     @($secret_key = DevblocksPlatform::importGPC($_REQUEST['secret_key'], 'string', ''));
     if (DEMO_MODE) {
         DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('config', 'forums')));
         return;
     }
     // Deletes
     if (is_array($deletes) && !empty($deletes)) {
         DAO_ForumsSource::delete($deletes);
     }
     if (!empty($poster_workers)) {
         $settings->set(ChForumsPlugin::SETTING_POSTER_WORKERS, strtolower($poster_workers));
     }
     // Edits
     if (is_array($ids) && !empty($ids)) {
         foreach ($ids as $idx => $source_id) {
             $source_name = $names[$idx];
             $source_url = $urls[$idx];
             $source_key = $keys[$idx];
             $fields = array(DAO_ForumsSource::NAME => $source_name, DAO_ForumsSource::URL => $source_url, DAO_ForumsSource::SECRET_KEY => $source_key);
             DAO_ForumsSource::update($source_id, $fields);
         }
     }
     // Add
     if (!empty($name) && !empty($url)) {
         $fields = array(DAO_ForumsSource::NAME => $name, DAO_ForumsSource::URL => $url, DAO_ForumsSource::SECRET_KEY => $secret_key);
         $source_id = DAO_ForumsSource::create($fields);
     }
     DevblocksPlatform::redirect(new DevblocksHttpResponse(array('config', 'forums')));
     exit;
 }
Example #4
0
 function saveAccountAction()
 {
     @($first_name = DevblocksPlatform::importGPC($_REQUEST['first_name'], 'string', ''));
     @($last_name = DevblocksPlatform::importGPC($_REQUEST['last_name'], 'string', ''));
     @($change_password = DevblocksPlatform::importGPC($_REQUEST['change_password'], 'string', ''));
     @($change_password2 = DevblocksPlatform::importGPC($_REQUEST['change_password2'], 'string', ''));
     $tpl = DevblocksPlatform::getTemplateService();
     $umsession = UmPortalHelper::getSession();
     $active_user = $umsession->getProperty('sc_login', null);
     if (!empty($active_user)) {
         $fields = array(DAO_Address::FIRST_NAME => $first_name, DAO_Address::LAST_NAME => $last_name);
         DAO_Address::update($active_user->id, $fields);
         $tpl->assign('account_success', true);
         if (!empty($change_password)) {
             if (0 == strcmp($change_password, $change_password2)) {
                 DAO_AddressAuth::update($active_user->id, array(DAO_AddressAuth::PASS => md5($change_password)));
             } else {
                 $tpl->assign('account_error', "The passwords you entered did not match.");
             }
         }
     }
     DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('portal', UmPortalHelper::getCode(), 'account')));
 }
Example #5
0
 function parseUploadAction()
 {
     @($csv_file = $_FILES['csv_file']);
     $active_worker = CerberusApplication::getActiveWorker();
     if (!$active_worker->hasPriv('crm.opp.actions.import')) {
         return;
     }
     if (!is_array($csv_file) || !isset($csv_file['tmp_name']) || empty($csv_file['tmp_name'])) {
         DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('activity', 'opps')));
         return;
     }
     $visit = CerberusApplication::getVisit();
     $tpl = DevblocksPlatform::getTemplateService();
     $filename = basename($csv_file['tmp_name']);
     $newfilename = APP_TEMP_PATH . '/' . $filename;
     if (!rename($csv_file['tmp_name'], $newfilename)) {
         DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('activity', 'opps')));
         return;
         // [TODO] Throw error
     }
     $visit->set('crm.import.last.csv', $newfilename);
     DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('activity', 'opps', 'import', 'step2')));
 }
Example #6
0
 function parseUploadAction()
 {
     @($type = DevblocksPlatform::importGPC($_REQUEST['type'], 'string', ''));
     $csv_file = $_FILES['csv_file'];
     if (empty($type) || !is_array($csv_file) || !isset($csv_file['tmp_name']) || empty($csv_file['tmp_name'])) {
         DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('contacts', 'import')));
         return;
     }
     $visit = CerberusApplication::getVisit();
     $tpl = DevblocksPlatform::getTemplateService();
     $filename = basename($csv_file['tmp_name']);
     $newfilename = APP_TEMP_PATH . '/' . $filename;
     if (!rename($csv_file['tmp_name'], $newfilename)) {
         DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('contacts', 'import')));
         return;
         // [TODO] Throw error
     }
     // [TODO] Move these to a request holding object?
     $visit->set('import.last.type', $type);
     $visit->set('import.last.csv', $newfilename);
     $fp = fopen($newfilename, "rt");
     if ($fp) {
         $parts = fgetcsv($fp, 8192, ',', '"');
         $tpl->assign('parts', $parts);
     }
     @fclose($fp);
     DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('contacts', 'import', 'step2')));
 }
Example #7
0
 function saveLicenseAction()
 {
     @($key = DevblocksPlatform::importGPC($_POST['key'], 'string', ''));
     if (empty($key)) {
         DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('config', 'license', 'empty')));
         return;
     }
     // Clean off the wrapper
     @($lines = explode("\r\n", trim($key)));
     $company = '';
     $features = array();
     $key = '';
     $valid = 0;
     if (is_array($lines)) {
         foreach ($lines as $line) {
             if (0 == strcmp(substr($line, 0, 3), '---')) {
                 $valid++;
                 continue;
             }
             if (preg_match("/^(.*?)\\: (.*?)\$/", $line, $matches)) {
                 if (0 == strcmp($matches[1], "Company")) {
                     $company = $matches[2];
                 }
                 if (0 == strcmp($matches[1], "Feature")) {
                     $features[$matches[2]] = true;
                 }
             } else {
                 $key .= trim($line);
             }
         }
     }
     if (2 != $valid || 0 != $key % 4) {
         DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('config', 'license', 'invalid')));
         return;
     }
     // Save for reuse in form in case we need to redraw on error
     $settings = PortSensorSettings::getInstance();
     //		$settings->set('company', trim($company));
     ksort($features);
     /*
      * [IMPORTANT -- Yes, this is simply a line in the sand.]
      * You're welcome to modify the code to meet your needs, but please respect 
      * our licensing.  Buy a legitimate copy to help support the project!
      * http://www.portsensor.com/
      */
     $license = PortSensorLicense::getInstance();
     // $license['name'] = CerberusHelper::strip_magic_quotes($company,'string');
     $license['name'] = $company;
     $license['features'] = $features;
     $license['key'] = PortSensorHelper::base64_decode_strings($company, $key);
     $settings->set(PortSensorSettings::LICENSE, serialize($license));
     DevblocksPlatform::redirect(new DevblocksHttpResponse(array('config', 'license')));
 }
Example #8
0
 private function _saveTabFnrResource()
 {
     // Form
     @($id = DevblocksPlatform::importGPC($_REQUEST['id'], 'integer', 0));
     @($name = DevblocksPlatform::importGPC($_REQUEST['name'], 'string', ''));
     @($url = DevblocksPlatform::importGPC($_REQUEST['url'], 'string', ''));
     @($topic_id = DevblocksPlatform::importGPC($_REQUEST['topic_id'], 'integer', 0));
     @($do_delete = DevblocksPlatform::importGPC($_REQUEST['do_delete'], 'integer', 0));
     if (DEMO_MODE) {
         DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('config', 'fnr')));
         return;
     }
     // Deletes
     if (!empty($do_delete)) {
         DAO_FnrExternalResource::delete($id);
         return;
     }
     $fields = array(DAO_FnrExternalResource::NAME => $name, DAO_FnrExternalResource::URL => $url, DAO_FnrExternalResource::TOPIC_ID => $topic_id);
     // Edit
     if (!empty($id)) {
         DAO_FnrExternalResource::update($id, $fields);
         // Add
     } else {
         $id = DAO_FnrExternalResource::create($fields);
     }
 }
Example #9
0
 function doRecoverStep2Action()
 {
     @($code = DevblocksPlatform::importGPC($_REQUEST['code'], 'string'));
     $email = $_SESSION[self::KEY_FORGOT_EMAIL];
     $sentcode = $_SESSION[self::KEY_FORGOT_SENTCODE];
     $_SESSION[self::KEY_FORGOT_CODE] = $code;
     $worker_id = DAO_Worker::lookupAgentEmail($email);
     if (empty($email) || empty($worker_id) || empty($code)) {
         return;
     }
     if (0 == strcmp($sentcode, $code)) {
         // passed
         DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('login', 'forgot', 'step3')));
     } else {
         DevblocksPlatform::redirect(new DevblocksHttpResponse(array('login', 'forgot', 'step2')));
     }
 }
Example #10
0
 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')));
 }
Example #11
0
 /**
  * Processes the HTTP request.
  * 
  * @param DevblocksHttpRequest $request
  * @param boolean $is_ajax
  */
 static function processRequest(DevblocksHttpRequest $request, $is_ajax = false)
 {
     $path = $request->path;
     $controller_uri = array_shift($path);
     // [JAS]: Offer the platform a chance to intercept.
     switch ($controller_uri) {
         // [JAS]: Plugin-supplied URIs
         default:
             $routing = array();
             $controllers = DevblocksPlatform::getExtensions('devblocks.controller', false);
             // Add any controllers which have definitive routing
             if (is_array($controllers)) {
                 foreach ($controllers as $controller_mft) {
                     if (isset($controller_mft->params['uri'])) {
                         $routing[$controller_mft->params['uri']] = $controller_mft->id;
                     }
                 }
             }
             // [TODO] Ask the platform to look at any routing maps (extension manifest) or
             // controller objects
             //				print_r($routing);
             // [TODO] Pages like 'tickets' currently work because APP_DEFAULT_CONTROLLER
             // is the ChPageController which looks up those URIs in manifests
             if (empty($controllers)) {
                 die("No controllers are available!");
             }
             // Set our controller based on the results
             $controller_mft = isset($routing[$controller_uri]) ? $controllers[$routing[$controller_uri]] : $controllers[APP_DEFAULT_CONTROLLER];
             // Instance our manifest
             if (!empty($controller_mft)) {
                 $controller = $controller_mft->createInstance();
             }
             if ($controller instanceof DevblocksHttpRequestHandler) {
                 $controller->handleRequest($request);
                 // [JAS]: If we didn't write a new response, repeat the request
                 if (null == ($response = DevblocksPlatform::getHttpResponse())) {
                     $response = new DevblocksHttpResponse($request->path);
                     DevblocksPlatform::setHttpResponse($response);
                 }
                 // [JAS]: An Ajax request doesn't need the full Http cycle
                 if (!$is_ajax) {
                     $controller->writeResponse($response);
                 }
             } else {
                 header("Status: 404");
                 die;
                 // [TODO] Improve
             }
             break;
     }
     return;
 }
Example #12
0
 function doReplyAction()
 {
     @($mask = DevblocksPlatform::importGPC($_REQUEST['mask'], 'string', ''));
     @($content = DevblocksPlatform::importGPC($_REQUEST['content'], 'string', ''));
     $umsession = UmPortalHelper::getSession();
     $active_user = $umsession->getProperty('sc_login', null);
     // Secure retrieval (address + mask)
     list($tickets) = DAO_Ticket::search(array(), array(new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_MASK, '=', $mask), new DevblocksSearchCriteria(SearchFields_Ticket::TICKET_FIRST_WROTE_ID, '=', $active_user->id)), 1, 0, null, null, false);
     $ticket = array_shift($tickets);
     $messages = DAO_Ticket::getMessagesByTicket($ticket[SearchFields_Ticket::TICKET_ID]);
     $last_message = array_pop($messages);
     /* @var $last_message CerberusMessage */
     $last_message_headers = $last_message->getHeaders();
     unset($messages);
     // Helpdesk settings
     $settings = CerberusSettings::getInstance();
     $global_from = $settings->get(CerberusSettings::DEFAULT_REPLY_FROM, null);
     // Ticket group settings
     $group_id = $ticket[SearchFields_Ticket::TICKET_TEAM_ID];
     @($group_from = DAO_GroupSettings::get($group_id, DAO_GroupSettings::SETTING_REPLY_FROM, ''));
     // Headers
     $to = !empty($group_from) ? $group_from : $global_from;
     @($in_reply_to = $last_message_headers['message-id']);
     @($message_id = CerberusApplication::generateMessageId());
     $message = new CerberusParserMessage();
     $message->headers['from'] = $active_user->email;
     $message->headers['to'] = $to;
     $message->headers['date'] = gmdate('r');
     $message->headers['subject'] = 'Re: ' . $ticket[SearchFields_Ticket::TICKET_SUBJECT];
     $message->headers['message-id'] = $message_id;
     $message->headers['in-reply-to'] = $in_reply_to;
     $message->body = sprintf("%s", $content);
     CerberusParser::parseMessage($message, array('no_autoreply' => true));
     DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('portal', UmPortalHelper::getCode(), 'history', $ticket[SearchFields_Ticket::TICKET_MASK])));
 }
Example #13
0
 function searchviewAction()
 {
     $visit = CerberusApplication::getVisit();
     $response = DevblocksPlatform::getHttpRequest();
     $path = $response->path;
     array_shift($path);
     // tickets
     array_shift($path);
     // searchview
     $id = array_shift($path);
     $view = C4_AbstractViewLoader::getView($id);
     if (!empty($view->params)) {
         $params = array();
         // Index by field name for search system
         if (is_array($view->params)) {
             foreach ($view->params as $key => $criteria) {
                 /* @var $criteria DevblocksSearchCriteria */
                 $params[$key] = $criteria;
             }
         }
     }
     if (null == ($search_view = C4_AbstractViewLoader::getView(CerberusApplication::VIEW_SEARCH))) {
         $search_view = C4_TicketView::createSearchView();
     }
     $search_view->params = $params;
     $search_view->renderPage = 0;
     C4_AbstractViewLoader::setView($search_view->id, $search_view);
     DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('tickets', 'search')));
 }
Example #14
0
 function saveCustomerAccountAction()
 {
     @($customer_id = DevblocksPlatform::importGPC($_REQUEST['customer_id'], 'integer', 0));
     @($and_close = DevblocksPlatform::importGPC($_POST['and_close'], 'integer', 0));
     @($id = DevblocksPlatform::importGPC($_POST['id'], 'integer'));
     @($disabled = DevblocksPlatform::importGPC($_POST['account_is_disabled'], 'integer', 0));
     @($import_source = DevblocksPlatform::importGPC($_POST['customer_account_import_source'], 'integer', 0));
     @($account_number = DevblocksPlatform::importGPC($_REQUEST['customer_account_number'], 'string', ''));
     @($account_name = DevblocksPlatform::importGPC($_REQUEST['customer_account_name'], 'string', ''));
     $fields = array(DAO_CustomerAccount::IMPORT_SOURCE => $import_source, DAO_CustomerAccount::ACCOUNT_NAME => $account_name, DAO_CustomerAccount::ACCOUNT_NUMBER => $account_number, DAO_CustomerAccount::IS_DISABLED => $disabled);
     // Update Customer Recipients
     $status = DAO_CustomerAccount::update($customer_id, $fields);
     if ($and_close) {
         DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('account')));
     } else {
         DevblocksPlatform::redirect(new DevblocksHttpResponse(array('customer', $customer_id, 'property')));
     }
 }
Example #15
0
 public function doSearchAction()
 {
     @($query = DevblocksPlatform::importGPC($_REQUEST['query'], 'string', ''));
     @($match = DevblocksPlatform::importGPC($_REQUEST['match'], 'string', ''));
     $session = $this->getSession();
     $session->setProperty('last_query', $query);
     $session->setProperty('last_query_type', $match);
     DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('portal', $this->getPortal(), 'search')));
 }
Example #16
0
 function saveTab()
 {
     $settings = CerberusSettings::getInstance();
     @($plugin_id = DevblocksPlatform::importGPC($_REQUEST['plugin_id'], 'string'));
     @($id = DevblocksPlatform::importGPC($_REQUEST['id'], 'integer', 0));
     @($name = DevblocksPlatform::importGPC($_REQUEST['name'], 'string', ''));
     @($rate = floatval(DevblocksPlatform::importGPC($_REQUEST['rate'], 'string', '')));
     @($do_delete = DevblocksPlatform::importGPC($_REQUEST['do_delete'], 'integer', 0));
     if (DEMO_MODE) {
         DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('config', 'timetracking.activities')));
         return;
     }
     if (empty($id)) {
         // Add
         $fields = array(DAO_TimeTrackingActivity::NAME => $name, DAO_TimeTrackingActivity::RATE => $rate);
         $activity_id = DAO_TimeTrackingActivity::create($fields);
     } else {
         // Edit
         if ($do_delete) {
             // Delete
             DAO_TimeTrackingActivity::delete($id);
         } else {
             // Modify
             $fields = array(DAO_TimeTrackingActivity::NAME => $name, DAO_TimeTrackingActivity::RATE => $rate);
             DAO_TimeTrackingActivity::update($id, $fields);
         }
     }
     DevblocksPlatform::redirect(new DevblocksHttpResponse(array('config', 'timetracking.activities')));
     exit;
 }
Example #17
0
 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')));
 }
Example #18
0
 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')));
 }
Example #19
0
 function doContactSendAction()
 {
     @($sFrom = DevblocksPlatform::importGPC($_POST['from'], 'string', ''));
     @($sSubject = DevblocksPlatform::importGPC($_POST['subject'], 'string', ''));
     @($sContent = DevblocksPlatform::importGPC($_POST['content'], 'string', ''));
     @($sCaptcha = DevblocksPlatform::importGPC($_POST['captcha'], 'string', ''));
     @($aFieldIds = DevblocksPlatform::importGPC($_POST['field_ids'], 'array', array()));
     @($aFollowUpQ = DevblocksPlatform::importGPC($_POST['followup_q'], 'array', array()));
     // Load the answers to any situational questions
     $aFollowUpA = array();
     if (is_array($aFollowUpQ)) {
         foreach ($aFollowUpQ as $idx => $q) {
             @($answer = DevblocksPlatform::importGPC($_POST['followup_a_' . $idx], 'string', ''));
             $aFollowUpA[$idx] = $answer;
         }
     }
     $umsession = $this->getSession();
     $fingerprint = parent::getFingerprint();
     $settings = CerberusSettings::getInstance();
     $default_from = $settings->get(CerberusSettings::DEFAULT_REPLY_FROM);
     $umsession->setProperty('support.write.last_from', $sFrom);
     $umsession->setProperty('support.write.last_subject', $sSubject);
     $umsession->setProperty('support.write.last_content', $sContent);
     //		$umsession->setProperty('support.write.last_followup_q',$aFollowUpQ);
     $umsession->setProperty('support.write.last_followup_a', $aFollowUpA);
     $sNature = $umsession->getProperty('support.write.last_nature', '');
     $captcha_enabled = DAO_CommunityToolProperty::get($this->getPortal(), UmScApp::PARAM_CAPTCHA_ENABLED, 1);
     if (empty($sFrom) || $captcha_enabled && 0 != strcasecmp($sCaptcha, @$umsession->getProperty(UmScApp::SESSION_CAPTCHA, '***'))) {
         if (empty($sFrom)) {
             $umsession->setProperty('support.write.last_error', 'Invalid e-mail address.');
         } else {
             $umsession->setProperty('support.write.last_error', 'What you typed did not match the image.');
         }
         // [TODO] Need to report the captcha didn't match and redraw the form
         DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('portal', $this->getPortal(), 'contact', 'step2')));
         return;
     }
     // Dispatch
     $to = $default_from;
     $subject = 'Contact me: Other';
     $sDispatch = DAO_CommunityToolProperty::get($this->getPortal(), UmScApp::PARAM_DISPATCH, '');
     $dispatch = !empty($sDispatch) ? unserialize($sDispatch) : array();
     foreach ($dispatch as $k => $v) {
         if (md5($k) == $sNature) {
             $to = $v['to'];
             $subject = 'Contact me: ' . strip_tags($k);
             break;
         }
     }
     if (!empty($sSubject)) {
         $subject = $sSubject;
     }
     $fieldContent = '';
     if (!empty($aFollowUpQ)) {
         $fieldContent = "\r\n\r\n";
         $fieldContent .= "--------------------------------------------\r\n";
         if (!empty($sNature)) {
             $fieldContent .= $subject . "\r\n";
             $fieldContent .= "--------------------------------------------\r\n";
         }
         foreach ($aFollowUpQ as $idx => $q) {
             $answer = isset($aFollowUpA[$idx]) ? $aFollowUpA[$idx] : '';
             $fieldContent .= "Q) " . $q . "\r\n" . "A) " . $answer . "\r\n";
             if ($idx + 1 < count($aFollowUpQ)) {
                 $fieldContent .= "\r\n";
             }
         }
         $fieldContent .= "--------------------------------------------\r\n";
         "\r\n";
     }
     $message = new CerberusParserMessage();
     $message->headers['date'] = date('r');
     $message->headers['to'] = $to;
     $message->headers['subject'] = $subject;
     $message->headers['message-id'] = CerberusApplication::generateMessageId();
     $message->headers['x-cerberus-portal'] = 1;
     // Sender
     $fromList = imap_rfc822_parse_adrlist($sFrom, '');
     if (empty($fromList) || !is_array($fromList)) {
         return;
         // abort with message
     }
     $from = array_shift($fromList);
     $message->headers['from'] = $from->mailbox . '@' . $from->host;
     $message->body = 'IP: ' . $fingerprint['ip'] . "\r\n\r\n" . $sContent . $fieldContent;
     $ticket_id = CerberusParser::parseMessage($message);
     $ticket = DAO_Ticket::getTicket($ticket_id);
     // Auto-save any custom fields
     $fields = DAO_CustomField::getBySource('cerberusweb.fields.source.ticket');
     if (!empty($aFieldIds)) {
         foreach ($aFieldIds as $iIdx => $iFieldId) {
             if (!empty($iFieldId)) {
                 $field =& $fields[$iFieldId];
                 /* @var $field Model_CustomField */
                 $value = "";
                 switch ($field->type) {
                     case Model_CustomField::TYPE_SINGLE_LINE:
                     case Model_CustomField::TYPE_MULTI_LINE:
                         @($value = trim($aFollowUpA[$iIdx]));
                         break;
                     case Model_CustomField::TYPE_NUMBER:
                         @($value = intval($aFollowUpA[$iIdx]));
                         break;
                     case Model_CustomField::TYPE_DATE:
                         if (false !== ($time = strtotime($aFollowUpA[$iIdx]))) {
                             @($value = intval($time));
                         }
                         break;
                     case Model_CustomField::TYPE_DROPDOWN:
                         @($value = $aFollowUpA[$iIdx]);
                         break;
                     case Model_CustomField::TYPE_CHECKBOX:
                         @($value = isset($aFollowUpA[$iIdx]) && !empty($aFollowUpA[$iIdx]) ? 1 : 0);
                         break;
                 }
                 if (!empty($value)) {
                     DAO_CustomFieldValue::setFieldValue('cerberusweb.fields.source.ticket', $ticket_id, $iFieldId, $value);
                 }
             }
         }
     }
     // Clear any errors
     $umsession->setProperty('support.write.last_nature', null);
     $umsession->setProperty('support.write.last_nature_string', null);
     $umsession->setProperty('support.write.last_content', null);
     $umsession->setProperty('support.write.last_error', null);
     $umsession->setProperty('support.write.last_opened', $ticket->mask);
     DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('portal', $this->getPortal(), 'contact', 'confirm')));
 }
Example #20
0
 /**
  * Processes the HTTP request.
  * 
  * @param DevblocksHttpRequest $request
  * @param boolean $is_ajax
  */
 static function processRequest(DevblocksHttpRequest $request, $is_ajax = false)
 {
     $path = $request->path;
     $controller_uri = array_shift($path);
     // [JAS]: Offer the platform a chance to intercept.
     switch ($controller_uri) {
         // [JAS]: Plugin-supplied URIs
         default:
             $controllers = DevblocksPlatform::getExtensions('devblocks.controller', true);
             $router = DevblocksPlatform::getRoutingService();
             /*
              * [JAS]: Try to find our command in the URI lookup first, and if we
              * fail then fall back to raw extension ids.
              */
             if (null == ($controller_id = $router->getRoute($controller_uri)) || null == ($controller = $controllers[$controller_id])) {
                 $controller = $controllers[APP_DEFAULT_CONTROLLER];
             }
             if ($controller instanceof DevblocksHttpRequestHandler) {
                 $controller->handleRequest($request);
                 // [JAS]: If we didn't write a new response, repeat the request
                 if (null == ($response = DevblocksPlatform::getHttpResponse())) {
                     $response = new DevblocksHttpResponse($request->path);
                     DevblocksPlatform::setHttpResponse($response);
                 }
                 // [JAS]: An Ajax request doesn't need the full Http cycle
                 if (!$is_ajax) {
                     $controller->writeResponse($response);
                 }
             } else {
                 header("Status: 404");
                 die;
                 // [TODO] Improve
             }
             break;
     }
     return;
 }
Example #21
0
 function sendReplyAction()
 {
     @($ticket_id = DevblocksPlatform::importGPC($_REQUEST['ticket_id'], 'integer'));
     $worker = CerberusApplication::getActiveWorker();
     $properties = array('message_id' => DevblocksPlatform::importGPC(@$_REQUEST['id']), 'ticket_id' => $ticket_id, 'to' => DevblocksPlatform::importGPC(@$_REQUEST['to']), 'cc' => DevblocksPlatform::importGPC(@$_REQUEST['cc']), 'bcc' => DevblocksPlatform::importGPC(@$_REQUEST['bcc']), 'subject' => DevblocksPlatform::importGPC(@$_REQUEST['subject'], 'string'), 'content' => DevblocksPlatform::importGPC(@$_REQUEST['content']), 'files' => @$_FILES['attachment'], 'next_worker_id' => DevblocksPlatform::importGPC(@$_REQUEST['next_worker_id'], 'integer', 0), 'closed' => DevblocksPlatform::importGPC(@$_REQUEST['closed'], 'integer', 0), 'bucket_id' => DevblocksPlatform::importGPC(@$_REQUEST['bucket_id'], 'string', ''), 'ticket_reopen' => DevblocksPlatform::importGPC(@$_REQUEST['ticket_reopen'], 'string', ''), 'unlock_date' => DevblocksPlatform::importGPC(@$_REQUEST['unlock_date'], 'string', ''), 'agent_id' => @$worker->id, 'forward_files' => DevblocksPlatform::importGPC(@$_REQUEST['forward_files'], 'array', array()));
     CerberusMail::sendTicketMessage($properties);
     DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('display', $ticket_id)));
 }
Example #22
0
 function saveConfigurationAction()
 {
     @($max_messages = DevblocksPlatform::importGPC($_POST['max_messages'], 'integer'));
     $this->setParam('max_messages', $max_messages);
     DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('config', 'jobs')));
 }
Example #23
0
 function saveCommunityAction()
 {
     // [TODO] Privs
     @($id = DevblocksPlatform::importGPC($_POST['id'], 'integer', 0));
     @($name = DevblocksPlatform::importGPC($_POST['name'], 'string', 'New Community'));
     @($delete = DevblocksPlatform::importGPC($_POST['do_delete'], 'integer', 0));
     @($add_tool_id = DevblocksPlatform::importGPC($_POST['add_tool_id'], 'string'));
     if (DEMO_MODE) {
         DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('config', 'communities')));
         return;
     }
     if (!empty($delete)) {
         DAO_Community::delete($id);
     } else {
         $fields = array(DAO_Community::NAME => !empty($name) ? $name : "New Community");
         if (empty($id)) {
             // Create
             $id = DAO_Community::create($fields);
         } else {
             // Edit || Delete
             DAO_Community::update($id, $fields);
         }
         if (!empty($add_tool_id) && !empty($id)) {
             $fields = array(DAO_CommunityTool::COMMUNITY_ID => $id, DAO_CommunityTool::EXTENSION_ID => $add_tool_id);
             $tool_id = DAO_CommunityTool::create($fields);
         }
     }
     DevblocksPlatform::redirect(new DevblocksHttpResponse(array('config', 'communities')));
 }
Example #24
0
 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')));
 }
Example #25
0
 function saveLicensesAction()
 {
     $translate = DevblocksPlatform::getTranslationService();
     $settings = DevblocksPlatform::getPluginSettingsService();
     $worker = FegApplication::getActiveWorker();
     if (!$worker || !$worker->is_superuser) {
         echo $translate->_('common.access_denied');
         return;
     }
     @($name = DevblocksPlatform::importGPC($_POST['company_name'], 'string', ''));
     @($serial = DevblocksPlatform::importGPC($_POST['company_serial'], 'string', ''));
     @($email = DevblocksPlatform::importGPC($_POST['email'], 'string', ''));
     @($do_delete = DevblocksPlatform::importGPC($_POST['do_delete'], 'integer', 0));
     if (!empty($do_delete)) {
         $settings->set('feg.core', FegSettings::LICENSE, '');
         DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('setup', 'settings')));
         return;
     }
     if (empty($name) || empty($serial) || empty($email)) {
         DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('setup', 'settings', 'empty')));
         return;
     }
     if (null == ($valid = FegLicense::validate($name, $serial, $email)) || 5 != count($valid)) {
         DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('setup', 'settings', 'invalid')));
         return;
     }
     /*
      * [IMPORTANT -- Yes, this is simply a line in the sand.]
      * You're welcome to modify the code to meet your needs, but please respect 
      * our licensing.  Buy a legitimate copy to help support the project!
      * http://feg.answernet.com/
      */
     $license = $valid;
     $settings->set('feg.core', FegSettings::LICENSE, serialize($license));
     DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('setup', 'settings')));
 }
Example #26
0
 function saveTabGeneralAction()
 {
     @($timezone = DevblocksPlatform::importGPC($_REQUEST['timezone'], 'string'));
     @($lang_code = DevblocksPlatform::importGPC($_REQUEST['lang_code'], 'string', 'en_US'));
     $worker = PortSensorApplication::getActiveWorker();
     $translate = DevblocksPlatform::getTranslationService();
     $tpl = DevblocksPlatform::getTemplateService();
     // Time
     $_SESSION['timezone'] = $timezone;
     @date_default_timezone_set($timezone);
     DAO_WorkerPref::set($worker->id, 'timezone', $timezone);
     // Language
     $_SESSION['locale'] = $lang_code;
     DevblocksPlatform::setLocale($lang_code);
     DAO_WorkerPref::set($worker->id, 'locale', $lang_code);
     @($new_password = DevblocksPlatform::importGPC($_REQUEST['change_pass'], 'string'));
     @($verify_password = DevblocksPlatform::importGPC($_REQUEST['change_pass_verify'], 'string'));
     //[mdf] if nonempty passwords match, update worker's password
     if ($new_password != "" && $new_password === $verify_password) {
         $session = DevblocksPlatform::getSessionService();
         $fields = array(DAO_Worker::PASS => md5($new_password));
         DAO_Worker::update($worker->id, $fields);
     }
     @($assist_mode = DevblocksPlatform::importGPC($_REQUEST['assist_mode'], 'integer', 0));
     DAO_WorkerPref::set($worker->id, 'assist_mode', $assist_mode);
     @($keyboard_shortcuts = DevblocksPlatform::importGPC($_REQUEST['keyboard_shortcuts'], 'integer', 0));
     DAO_WorkerPref::set($worker->id, 'keyboard_shortcuts', $keyboard_shortcuts);
     DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('preferences')));
 }
Example #27
0
 function doRegisterConfirmAction()
 {
     @($email = DevblocksPlatform::importGPC($_REQUEST['email'], 'string', ''));
     @($code = trim(DevblocksPlatform::importGPC($_REQUEST['code'], 'string', '')));
     @($pass = DevblocksPlatform::importGPC($_REQUEST['pass'], 'string', ''));
     $tpl = DevblocksPlatform::getTemplateService();
     $tpl->assign('register_email', $email);
     $tpl->assign('register_code', $code);
     if (!empty($email) && !empty($pass) && !empty($code)) {
         if (null != ($addy = DAO_Address::lookupAddress($email, false)) && !$addy->is_registered && !empty($addy->pass) && 0 == strcasecmp($code, $addy->pass)) {
             $fields = array(DAO_Address::IS_REGISTERED => 1, DAO_Address::PASS => md5($pass));
             DAO_Address::update($addy->id, $fields);
         } else {
             $tpl->assign('register_error', sprintf("The confirmation code you entered does not match our records.  Try again."));
             DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('portal', UmPortalHelper::getCode(), 'register', 'confirm')));
             return;
         }
     } else {
         $tpl->assign('register_error', sprintf("You must enter a valid e-mail address, confirmation code and desired password to continue."));
         DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('portal', UmPortalHelper::getCode(), 'register', 'confirm')));
         return;
     }
 }
Example #28
0
 function doRecoverStep2Action()
 {
     @($code = DevblocksPlatform::importGPC($_REQUEST['code'], 'string'));
     $email = $_SESSION[self::KEY_FORGOT_EMAIL];
     $sentcode = $_SESSION[self::KEY_FORGOT_SENTCODE];
     $_SESSION[self::KEY_FORGOT_CODE] = $code;
     $worker = null;
     $results = DAO_Worker::getWhere(sprintf("%s = %s", DAO_Worker::EMAIL, Um_ORMHelper::qstr($email)));
     if (!empty($results)) {
         $worker = array_shift($results);
     }
     if (empty($email) || empty($worker) || empty($code)) {
         return;
     }
     if (0 == strcmp($sentcode, $code)) {
         // passed
         DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('login', 'forgot', 'step3')));
     } else {
         DevblocksPlatform::redirect(new DevblocksHttpResponse(array('login', 'forgot', 'step2')));
     }
 }
Example #29
0
 function doLogout()
 {
     // [TODO] Fall back
     $login_handler = DAO_CommunityToolProperty::get(UmPortalHelper::getCode(), self::PARAM_LOGIN_HANDLER, 'sc.login.auth.default');
     if (null != ($handler = DevblocksPlatform::getExtension($login_handler, true))) {
         if ($handler->signoff()) {
             // ...
         }
     }
     DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('portal', UmPortalHelper::getCode())));
 }
Example #30
0
 function saveTab()
 {
     $worker = CerberusApplication::getActiveWorker();
     // Delete forwards
     @($deletes = DevblocksPlatform::importGPC($_REQUEST['deletes'], 'array', array()));
     if (!empty($deletes)) {
         DAO_WatcherMailFilter::delete($deletes);
     }
     DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('preferences', 'notifications')));
 }