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'))); }
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; }
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; }
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'))); }
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'))); }
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'))); }
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'))); }
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); } }
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'))); } }
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'))); }
/** * 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; }
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]))); }
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'))); }
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'))); } }
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'))); }
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; }
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'))); }
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 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'))); }
/** * 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; }
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))); }
function saveConfigurationAction() { @($max_messages = DevblocksPlatform::importGPC($_POST['max_messages'], 'integer')); $this->setParam('max_messages', $max_messages); DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('config', 'jobs'))); }
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'))); }
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 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'))); }
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'))); }
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; } }
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'))); } }
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()))); }
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'))); }