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 doTicketHistoryScopeAction() { @($ticket_id = DevblocksPlatform::importGPC($_REQUEST['id'], 'integer')); @($scope = DevblocksPlatform::importGPC($_REQUEST['scope'], 'string', '')); $visit = CerberusApplication::getVisit(); $visit->set('display.history.scope', $scope); $ticket = DAO_Ticket::getTicket($ticket_id); DevblocksPlatform::redirect(new DevblocksHttpResponse(array('display', $ticket->mask, 'history'))); }
function saveTab() { @($plugin_id = DevblocksPlatform::importGPC($_REQUEST['plugin_id'], 'string')); DevblocksPlatform::redirect(new DevblocksHttpResponse(array('config', 'watchers'))); 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 doRecoverStep3Action() { @($password = DevblocksPlatform::importGPC($_REQUEST['password'], 'string')); $email = $_SESSION[self::KEY_FORGOT_EMAIL]; $sentcode = $_SESSION[self::KEY_FORGOT_SENTCODE]; $code = $_SESSION[self::KEY_FORGOT_CODE]; $worker_id = DAO_Worker::lookupAgentEmail($email); if (empty($email) || empty($code) || empty($worker_id)) { return; } if (0 == strcmp($sentcode, $code)) { // passed DAO_Worker::updateAgent($worker_id, array(DAO_Worker::PASSWORD => md5($password))); unset($_SESSION[self::KEY_FORGOT_EMAIL]); unset($_SESSION[self::KEY_FORGOT_CODE]); unset($_SESSION[self::KEY_FORGOT_SENTCODE]); DevblocksPlatform::redirect(new DevblocksHttpResponse(array('login'))); } else { DevblocksPlatform::redirect(new DevblocksHttpResponse(array('login', 'forgot', 'step2'))); } }
function saveCommunityToolAction() { @($code = DevblocksPlatform::importGPC($_POST['portal'], 'string')); @($name = DevblocksPlatform::importGPC($_POST['portal_name'], 'string', '')); @($iDelete = DevblocksPlatform::importGPC($_POST['do_delete'], 'integer', 0)); UmPortalHelper::setCode($code); if (DEMO_MODE) { if ($iDelete) { DevblocksPlatform::redirect(new DevblocksHttpResponse(array('config', 'communities'))); } else { self::getCommunityToolAction(); } return; } if (null != ($instance = DAO_CommunityTool::getByCode($code))) { // Deleting? if (!empty($iDelete)) { $tool = DAO_CommunityTool::getByCode($code); /* @var $tool Model_CommunityTool */ DAO_CommunityTool::delete($tool->id); DevblocksPlatform::redirect(new DevblocksHttpResponse(array('config', 'communities'))); return; } else { $manifest = DevblocksPlatform::getExtension($instance->extension_id, false, true); $tool = $manifest->createInstance(); /* @var $tool Extension_UsermeetTool */ // Update the tool name if it has changed if (0 != strcmp($instance->name, $name)) { DAO_CommunityTool::update($instance->id, array(DAO_CommunityTool::NAME => $name)); } // Defer the rest to tool instances and extensions $tool->saveConfiguration(); } } self::getCommunityToolAction(); }
function viewDoCopyAction() { $translate = DevblocksPlatform::getTranslationService(); $active_worker = CerberusApplication::getActiveWorker(); $visit = CerberusApplication::getVisit(); @($view_id = DevblocksPlatform::importGPC($_POST['view_id'], 'string')); $view = C4_AbstractViewLoader::getView($view_id); @($list_title = DevblocksPlatform::importGPC($_POST['list_title'], 'string', '')); @($workspace = DevblocksPlatform::importGPC($_POST['workspace'], 'string', '')); @($new_workspace = DevblocksPlatform::importGPC($_POST['new_workspace'], 'string', '')); if (empty($workspace) && empty($new_workspace)) { $new_workspace = $translate->_('mail.workspaces.new'); } if (empty($list_title)) { $list_title = $translate->_('mail.workspaces.new_list'); } $workspace_name = !empty($new_workspace) ? $new_workspace : $workspace; // Find the proper workspace source based on the class of the view $source_manifests = DevblocksPlatform::getExtensions(Extension_WorkspaceSource::EXTENSION_POINT, false); $source_manifest = null; if (is_array($source_manifests)) { foreach ($source_manifests as $mft) { if (is_a($view, $mft->params['view_class'])) { $source_manifest = $mft; break; } } } if (!is_null($source_manifest)) { // View params inside the list for quick render overload $list_view = new Model_WorkerWorkspaceListView(); $list_view->title = $list_title; $list_view->num_rows = $view->renderLimit; $list_view->columns = $view->view_columns; $list_view->params = $view->params; $list_view->sort_by = $view->renderSortBy; $list_view->sort_asc = $view->renderSortAsc; // Save the new worklist $fields = array(DAO_WorkerWorkspaceList::WORKER_ID => $active_worker->id, DAO_WorkerWorkspaceList::WORKSPACE => $workspace_name, DAO_WorkerWorkspaceList::SOURCE_EXTENSION => $source_manifest->id, DAO_WorkerWorkspaceList::LIST_VIEW => serialize($list_view), DAO_WorkerWorkspaceList::LIST_POS => 99); $list_id = DAO_WorkerWorkspaceList::create($fields); } // Select the workspace tab $visit->set(CerberusVisit::KEY_HOME_SELECTED_TAB, 'w_' . $workspace_name); DevblocksPlatform::redirect(new DevblocksHttpResponse(array('home'))); }
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 importAction() { $this->import(); DevblocksPlatform::redirect(new DevblocksHttpResponse(array('activity', 'forums'))); }
function createNewCustomerAction() { $active_worker = FegApplication::getActiveWorker(); @($account_number = DevblocksPlatform::importGPC($_REQUEST['account_name'], 'string', '')); @($message_id = DevblocksPlatform::importGPC($_REQUEST['message_id'], 'integer', 0)); if (!$active_worker->hasPriv('core.access.customer.create')) { return; } if (empty($account_number)) { $fields = array(DAO_CustomerAccount::IMPORT_SOURCE => 0, DAO_CustomerAccount::ACCOUNT_NAME => "", DAO_CustomerAccount::ACCOUNT_NUMBER => "", DAO_CustomerAccount::IS_DISABLED => 1); } else { $fields = array(DAO_CustomerAccount::IMPORT_SOURCE => 0, DAO_CustomerAccount::ACCOUNT_NAME => "Customer # " . $account_number, DAO_CustomerAccount::ACCOUNT_NUMBER => $account_number, DAO_CustomerAccount::IS_DISABLED => 1); } // Create a new Customer Recipients $account_id = DAO_CustomerAccount::create($fields); if ($message_id > 0) { ImportCron::importAccountReProcessMessage($message_id, $account_id); } // DevblocksPlatform::setHttpResponse(new DevblocksHttpResponse(array('customer', $customer_id,'property'))); DevblocksPlatform::redirect(new DevblocksHttpResponse(array('customer', $account_id, 'property'))); }
function viewBuildRssAction() { @($view_id = DevblocksPlatform::importGPC($_POST['view_id'])); @($source = DevblocksPlatform::importGPC($_POST['source'])); @($title = DevblocksPlatform::importGPC($_POST['title'])); $active_worker = CerberusApplication::getActiveWorker(); $view = C4_AbstractViewLoader::getView($view_id); $hash = md5($title . $view_id . $active_worker->id . time()); // Restrict to current worker groups $active_worker = CerberusApplication::getActiveWorker(); $params = array('params' => $view->params, 'sort_by' => $view->renderSortBy, 'sort_asc' => $view->renderSortAsc); $fields = array(DAO_ViewRss::TITLE => $title, DAO_ViewRss::HASH => $hash, DAO_ViewRss::CREATED => time(), DAO_ViewRss::WORKER_ID => $active_worker->id, DAO_ViewRss::SOURCE_EXTENSION => $source, DAO_ViewRss::PARAMS => serialize($params)); $feed_id = DAO_ViewRss::create($fields); DevblocksPlatform::redirect(new DevblocksHttpResponse(array('preferences', 'rss'))); }
function saveMacroPanelAction() { $translate = DevblocksPlatform::getTranslationService(); @($id = DevblocksPlatform::importGPC($_REQUEST['id'], 'integer', 0)); @($name = DevblocksPlatform::importGPC($_REQUEST['name'], 'string')); @($source_ext_id = DevblocksPlatform::importGPC($_REQUEST['source_ext_id'], 'string')); @($do = DevblocksPlatform::importGPC($_REQUEST['do'], 'array', array())); // @$values = DevblocksPlatform::importGPC($_REQUEST['values'],'array',array()); if (empty($name)) { $name = $translate->_('Macro Action'); } // Actions if (is_array($do)) { foreach ($do as $act) { $action = array(); $shortact = array_pop(explode('.', $act)); $value = DevblocksPlatform::importGPC($_REQUEST['do_' . $shortact]); switch ($act) { // Move group/bucket case 'cerberusweb.macros.action.move': @($move_code = $value); if (0 != strlen($move_code)) { list($g_id, $b_id) = CerberusApplication::translateTeamCategoryCode($move_code); $action = array('group_id' => intval($g_id), 'bucket_id' => intval($b_id)); } break; // Assign to worker // Assign to worker case 'cerberusweb.macros.action.assign': @($worker_id = $value); if (0 != strlen($worker_id)) { $action = array('worker_id' => intval($worker_id)); } break; // Spam training // Spam training case 'spam': @($is_spam = DevblocksPlatform::importGPC($_REQUEST['do_spam'], 'string', null)); if (0 != strlen($is_spam)) { $action = array('is_spam' => !$is_spam ? 0 : 1); } break; // Set status // Set status case 'cerberusweb.macros.action.status': @($status = DevblocksPlatform::importGPC($_REQUEST['do_status'], 'string', null)); if (0 != strlen($status)) { $action = array('is_waiting' => 3 == $status ? 1 : 0, 'is_closed' => 0 == $status || 3 == $status ? 0 : 1, 'is_deleted' => 2 == $status ? 1 : 0); } break; default: // ignore invalids // Custom fields if ("cf_" == substr($act, 0, 3)) { $field_id = intval(substr($act, 3)); if (!isset($custom_fields[$field_id])) { continue; } $action = array(); // [TODO] Operators switch ($custom_fields[$field_id]->type) { case 'S': // string // string case 'T': // clob // clob case 'D': // dropdown // dropdown case 'U': // URL // URL case 'W': // worker $value = DevblocksPlatform::importGPC($_REQUEST['do_cf_' . $field_id], 'string', ''); $action['value'] = $value; break; case 'M': // multi-dropdown // multi-dropdown case 'X': // multi-checkbox $in_array = DevblocksPlatform::importGPC($_REQUEST['do_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; } } $action['value'] = $out_array; break; case 'E': // date $value = DevblocksPlatform::importGPC($_REQUEST['do_cf_' . $field_id], 'string', ''); $action['value'] = $value; break; case 'N': // number // number case 'C': // checkbox $value = DevblocksPlatform::importGPC($_REQUEST['do_cf_' . $field_id], 'string', ''); $action['value'] = intval($value); break; } } else { continue; } break; } $actions[$act] = $action; } } $fields = array(DAO_Macro::NAME => $name, DAO_Macro::SOURCE_EXTENSION_ID => $source_ext_id, DAO_Macro::ACTIONS_SER => serialize($actions)); // Create if (empty($id)) { $id = DAO_Macro::create($fields); // Update } else { DAO_Macro::update($id, $fields); } DevblocksPlatform::redirect(new DevblocksHttpResponse(array('config', 'macros'))); }
function doStopTourAction() { // $request = DevblocksPlatform::getHttpRequest(); $worker = PortSensorApplication::getActiveWorker(); DAO_WorkerPref::set($worker->id, 'assist_mode', 0); DevblocksPlatform::redirect(new DevblocksHttpResponse(array('home'))); // DevblocksPlatform::redirect(new DevblocksHttpResponse($request->path, $request->query)); }
function saveViewAction() { @($row_ids = DevblocksPlatform::importGPC($_REQUEST['row_ids'], 'array', array())); @($translations = DevblocksPlatform::importGPC($_REQUEST['translations'], 'array', array())); // Save the form strings if (is_array($row_ids)) { foreach ($row_ids as $idx => $row_id) { $fields = array(DAO_Translation::STRING_OVERRIDE => $translations[$idx]); DAO_Translation::update($row_id, $fields); } } self::_clearCache(); DevblocksPlatform::redirect(new DevblocksHttpResponse(array('setup', 'translations'))); }
function saveImportTemplatesPeekAction() { @($view_id = DevblocksPlatform::importGPC($_REQUEST['view_id'], 'string', '')); @($portal = DevblocksPlatform::importGPC($_REQUEST['portal'], 'string', '')); @($import_file = $_FILES['import_file']); DAO_DevblocksTemplate::importXmlFile($import_file['tmp_name'], 'portal_' . $portal); // Clear template cache $tpl = DevblocksPlatform::getTemplateService(); $tpl->clear_compiled_tpl(); DevblocksPlatform::redirect(new DevblocksHttpResponse(array('community', $portal, 'templates'))); }
function saveTabBucketsAction() { @($team_id = DevblocksPlatform::importGPC($_REQUEST['team_id'], 'integer')); @($active_worker = CerberusApplication::getActiveWorker()); if (!$active_worker->isTeamManager($team_id) && !$active_worker->is_superuser) { return; } // Inbox assignable @($inbox_assignable = DevblocksPlatform::importGPC($_REQUEST['inbox_assignable'], 'integer', 0)); DAO_GroupSettings::set($team_id, DAO_GroupSettings::SETTING_INBOX_IS_ASSIGNABLE, intval($inbox_assignable)); //========== BUCKETS @($ids = DevblocksPlatform::importGPC($_REQUEST['ids'], 'array')); @($add_str = DevblocksPlatform::importGPC($_REQUEST['add'], 'string')); @($pos = DevblocksPlatform::importGPC($_REQUEST['pos'], 'array')); @($names = DevblocksPlatform::importGPC($_REQUEST['names'], 'array')); @($assignables = DevblocksPlatform::importGPC($_REQUEST['is_assignable'], 'array')); @($deletes = DevblocksPlatform::importGPC($_REQUEST['deletes'], 'array')); // Updates if (!empty($ids)) { $cats = DAO_Bucket::getList($ids); foreach ($ids as $idx => $id) { @($cat = $cats[$id]); if (is_object($cat)) { $is_assignable = false === array_search($id, $assignables) ? 0 : 1; $fields = array(DAO_Bucket::NAME => $names[$idx], DAO_Bucket::POS => intval($pos[$idx]), DAO_Bucket::IS_ASSIGNABLE => intval($is_assignable)); DAO_Bucket::update($id, $fields); } } } // Adds: Sort and insert team categories $categories = DevblocksPlatform::parseCrlfString($add_str); if (is_array($categories)) { foreach ($categories as $category) { $cat_id = DAO_Bucket::create($category, $team_id); } } if (!empty($deletes)) { DAO_Bucket::delete(array_values($deletes)); } DevblocksPlatform::redirect(new DevblocksHttpResponse(array('groups', $team_id, 'buckets'))); }
function saveTab() { @($clickatell_username = DevblocksPlatform::importGPC($_REQUEST['clickatell_username'], 'string', '')); @($clickatell_password = DevblocksPlatform::importGPC($_REQUEST['clickatell_password'], 'string', '')); @($clickatell_api_id = DevblocksPlatform::importGPC($_REQUEST['clickatell_api_id'], 'string', '')); if (!empty($clickatell_username)) { $settings = DevblocksPlatform::getPluginSettingsService(); $settings->set('portsensor.sms', 'clickatell_username', $clickatell_username); $settings->set('portsensor.sms', 'clickatell_password', $clickatell_password); $settings->set('portsensor.sms', 'clickatell_api_id', $clickatell_api_id); } DevblocksPlatform::redirect(new DevblocksHttpResponse(array('setup', 'sms'))); exit; }
function doRecoverStep3Action() { @($password = DevblocksPlatform::importGPC($_REQUEST['password'], 'string')); $email = $_SESSION[self::KEY_FORGOT_EMAIL]; $sentcode = $_SESSION[self::KEY_FORGOT_SENTCODE]; $code = $_SESSION[self::KEY_FORGOT_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($code) || empty($worker)) { return; } if (0 == strcmp($sentcode, $code)) { // passed DAO_Worker::update($worker->id, array(DAO_Worker::PASS => md5($password))); unset($_SESSION[self::KEY_FORGOT_EMAIL]); unset($_SESSION[self::KEY_FORGOT_CODE]); unset($_SESSION[self::KEY_FORGOT_SENTCODE]); DevblocksPlatform::redirect(new DevblocksHttpResponse(array('login'))); } else { DevblocksPlatform::redirect(new DevblocksHttpResponse(array('login', 'forgot', 'step2'))); } }
require getcwd() . '/framework.config.php'; require DEVBLOCKS_PATH . 'Devblocks.class.php'; // If this is our first run, redirect to the installer if ('' == APP_DB_DRIVER || '' == APP_DB_HOST || '' == APP_DB_DATABASE || null == ($db = DevblocksPlatform::getDatabaseService()) || DevblocksPlatform::isDatabaseEmpty()) { header('Location: ' . dirname($_SERVER['PHP_SELF']) . '/install/index.php'); // [TODO] change this to a meta redirect exit; } require APP_PATH . '/api/Application.class.php'; DevblocksPlatform::init(); DevblocksPlatform::setExtensionDelegate('C4_DevblocksExtensionDelegate'); // Request $request = DevblocksPlatform::readRequest(); // Patches (if not on the patch page) if (@0 != strcasecmp(@$request->path[0], "update") && !DevblocksPlatform::versionConsistencyCheck()) { DevblocksPlatform::redirect(new DevblocksHttpResponse(array('update', 'locked'))); } //DevblocksPlatform::readPlugins(); $session = DevblocksPlatform::getSessionService(); // Localization DevblocksPlatform::setLocale(isset($_SESSION['locale']) && !empty($_SESSION['locale']) ? $_SESSION['locale'] : 'en_US'); if (isset($_SESSION['timezone'])) { @date_default_timezone_set($_SESSION['timezone']); } // Initialize Logging if (method_exists('DevblocksPlatform', 'getConsoleLog')) { $timeout = ini_get('max_execution_time'); $logger = DevblocksPlatform::getConsoleLog(); $logger->info("[Devblocks] ** Platform starting (" . date("r") . ") **"); $logger->info('[Devblocks] Time Limit: ' . ($timeout ? $timeout : 'unlimited') . " secs"); $logger->info('[Devblocks] Memory Limit: ' . ini_get('memory_limit'));
function handleRequest(DevblocksHttpRequest $request) { @set_time_limit(0); // no timelimit (when possible) $translate = DevblocksPlatform::getTranslationService(); $stack = $request->path; array_shift($stack); // update $cache = DevblocksPlatform::getCacheService(); /* @var $cache _DevblocksCacheManager */ $settings = DevblocksPlatform::getPluginSettingsService(); switch (array_shift($stack)) { case 'locked': if (!DevblocksPlatform::versionConsistencyCheck()) { $url = DevblocksPlatform::getUrlService(); echo "<h1>Cerberus Helpdesk 5.x</h1>"; echo "The helpdesk is currently waiting for an administrator to finish upgrading. " . "Please wait a few minutes and then " . sprintf("<a href='%s'>try again</a>.<br><br>", $url->write('c=update&a=locked')); echo sprintf("If you're an admin you may <a href='%s'>finish the upgrade</a>.", $url->write('c=update')); } else { DevblocksPlatform::redirect(new DevblocksHttpResponse(array('login'))); } break; default: $path = APP_TEMP_PATH . DIRECTORY_SEPARATOR; $file = $path . 'c4update_lock'; $authorized_ips_str = $settings->get('cerberusweb.core', CerberusSettings::AUTHORIZED_IPS); $authorized_ips = DevblocksPlatform::parseCrlfString($authorized_ips_str); $authorized_ip_defaults = DevblocksPlatform::parseCsvString(AUTHORIZED_IPS_DEFAULTS); $authorized_ips = array_merge($authorized_ips, $authorized_ip_defaults); // Is this IP authorized? $pass = false; foreach ($authorized_ips as $ip) { if (substr($ip, 0, strlen($ip)) == substr($_SERVER['REMOTE_ADDR'], 0, strlen($ip))) { $pass = true; break; } } if (!$pass) { echo vsprintf($translate->_('update.ip_unauthorized'), $_SERVER['REMOTE_ADDR']); return; } // Check requirements $errors = CerberusApplication::checkRequirements(); if (!empty($errors)) { echo $translate->_('update.correct_errors'); echo "<ul style='color:red;'>"; foreach ($errors as $error) { echo "<li>" . $error . "</li>"; } echo "</ul>"; exit; } // If authorized, lock and attempt update if (!file_exists($file) || @filectime($file) + 600 < time()) { // 10 min lock touch($file); //echo "Running plugin patches...<br>"; if (DevblocksPlatform::runPluginPatches('core.patches')) { @unlink($file); // [JAS]: Clear all caches $cache->clean(); DevblocksPlatform::getClassLoaderService()->destroy(); // Clear compiled templates $tpl = DevblocksPlatform::getTemplateService(); $tpl->clear_compiled_tpl(); // Reload plugin translations DAO_Translation::reloadPluginStrings(); DevblocksPlatform::redirect(new DevblocksHttpResponse(array('login'))); } else { @unlink($file); echo "Failure!"; // [TODO] Needs elaboration } break; } else { echo $translate->_('update.locked_another'); } } exit; }
function doSplitMessageAction() { @($id = DevblocksPlatform::importGPC($_REQUEST['id'], 'integer', 0)); if (null == ($orig_message = DAO_Ticket::getMessage($id))) { return; } if (null == ($orig_headers = $orig_message->getHeaders())) { return; } if (null == ($orig_ticket = DAO_Ticket::getTicket($orig_message->ticket_id))) { return; } if (null == ($messages = DAO_Ticket::getMessagesByTicket($orig_message->ticket_id))) { return; } // Create a new ticket $new_ticket_mask = CerberusApplication::generateTicketMask(); $new_ticket_id = DAO_Ticket::createTicket(array(DAO_Ticket::CREATED_DATE => $orig_message->created_date, DAO_Ticket::UPDATED_DATE => $orig_message->created_date, DAO_Ticket::CATEGORY_ID => $orig_ticket->category_id, DAO_Ticket::FIRST_MESSAGE_ID => $orig_message->id, DAO_Ticket::FIRST_WROTE_ID => $orig_message->address_id, DAO_Ticket::LAST_WROTE_ID => $orig_message->address_id, DAO_Ticket::LAST_ACTION_CODE => CerberusTicketActionCode::TICKET_OPENED, DAO_Ticket::IS_CLOSED => CerberusTicketStatus::OPEN, DAO_Ticket::IS_DELETED => 0, DAO_Ticket::MASK => $new_ticket_mask, DAO_Ticket::SUBJECT => isset($orig_headers['subject']) ? $orig_headers['subject'] : $orig_ticket->subject, DAO_Ticket::TEAM_ID => $orig_ticket->team_id)); // [TODO] SLA? // Copy all the original tickets requesters $orig_requesters = DAO_Ticket::getRequestersByTicket($orig_ticket->id); foreach ($orig_requesters as $orig_req_id => $orig_req_addy) { DAO_Ticket::createRequester($orig_req_id, $new_ticket_id); } // Pull the message off the ticket (reparent) unset($messages[$orig_message->id]); DAO_Message::update($orig_message->id, array(DAO_Message::TICKET_ID => $new_ticket_id)); //[mdf] [CHD-979] The ticket id is also in the message_header table, so update those too $message_headers = DAO_MessageHeader::getAll($orig_message->id); foreach ($message_headers as $hk => $hv) { DAO_MessageHeader::create($orig_message->id, $new_ticket_id, $hk, $hv); } // Reindex the original ticket (last wrote, etc.) $last_message = end($messages); /* @var CerberusMessage $last_message */ DAO_Ticket::updateTicket($orig_ticket->id, array(DAO_Ticket::LAST_WROTE_ID => $last_message->address_id)); // Remove requester if they don't still have messages on the original ticket reset($messages); $found = false; if (is_array($messages)) { foreach ($messages as $msgid => $msg) { if ($msg->address_id == $orig_message->address_id) { $found = true; break; } } } if (!$found) { DAO_Ticket::deleteRequester($orig_ticket->id, $orig_message->address_id); } DevblocksPlatform::redirect(new DevblocksHttpResponse(array('display', $new_ticket_mask))); }
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 handleRequest(DevblocksHttpRequest $request) { @set_time_limit(0); // no timelimit (when possible) $translate = DevblocksPlatform::getTranslationService(); $stack = $request->path; array_shift($stack); // update $cache = DevblocksPlatform::getCacheService(); /* @var $cache _DevblocksCacheManager */ switch (array_shift($stack)) { case 'locked': if (!DevblocksPlatform::versionConsistencyCheck()) { $url = DevblocksPlatform::getUrlService(); echo "<h1>Feg - Fax Email Gateway 1.x</h1>"; echo "The application is currently waiting for an administrator to finish upgrading. " . "Please wait a few minutes and then " . sprintf("<a href='%s'>try again</a>.<br><br>", $url->write('c=update&a=locked')); echo sprintf("If you're an admin you may <a href='%s'>finish the upgrade</a>.", $url->write('c=update')); } else { DevblocksPlatform::redirect(new DevblocksHttpResponse(array('login'))); } break; default: $path = APP_TEMP_PATH . DIRECTORY_SEPARATOR; $file = $path . 'feg_update_lock'; $settings = DevblocksPlatform::getPluginSettingsService(); $authorized_ips_str = $settings->get('feg.core', FegSettings::AUTHORIZED_IPS); $authorized_ips = DevblocksPlatform::parseCrlfString($authorized_ips_str); $authorized_ip_defaults = DevblocksPlatform::parseCsvString(AUTHORIZED_IPS_DEFAULTS); $authorized_ips = array_merge($authorized_ips, $authorized_ip_defaults); // Is this IP authorized? $pass = false; foreach ($authorized_ips as $ip) { if (substr($ip, 0, strlen($ip)) == substr($_SERVER['REMOTE_ADDR'], 0, strlen($ip))) { $pass = true; break; } } if (!$pass) { echo vsprintf($translate->_('update.ip_unauthorized'), $_SERVER['REMOTE_ADDR']); return; } // Check requirements $errors = FegApplication::checkRequirements(); if (!empty($errors)) { echo $translate->_('update.correct_errors'); echo "<ul style='color:red;'>"; foreach ($errors as $error) { echo "<li>" . $error . "</li>"; } echo "</ul>"; exit; } try { // If authorized, lock and attempt update if (!file_exists($file) || @filectime($file) + 600 < time()) { // 10 min lock // Log everybody out since we're touching the database $session = DevblocksPlatform::getSessionService(); $session->clearAll(); // Lock file touch($file); // Recursive patch FegApplication::update(); // Clean up @unlink($file); $cache = DevblocksPlatform::getCacheService(); $cache->save(APP_BUILD, "devblocks_app_build"); // Clear all caches $cache->clean(); DevblocksPlatform::getClassLoaderService()->destroy(); // Clear compiled templates $tpl = DevblocksPlatform::getTemplateService(); $tpl->utility->clearCompiledTemplate(); $tpl->cache->clearAll(); // Reload plugin translations DAO_Translation::reloadPluginStrings(); // Redirect DevblocksPlatform::redirect(new DevblocksHttpResponse(array('login'))); } else { echo $translate->_('update.locked_another'); } } catch (Exception $e) { unlink($file); die($e->getMessage()); } } exit; }
function doOrgQuickSearchAction() { @($type = DevblocksPlatform::importGPC($_POST['type'], 'string')); @($query = DevblocksPlatform::importGPC($_POST['query'], 'string')); $query = trim($query); $defaults = new C4_AbstractViewModel(); $defaults->class_name = 'C4_ContactOrgView'; $defaults->id = C4_ContactOrgView::DEFAULT_ID; $view = C4_AbstractViewLoader::getView(C4_ContactOrgView::DEFAULT_ID, $defaults); $params = array(); if ($query && false === strpos($query, '*')) { $query = '*' . $query . '*'; } switch ($type) { case "name": $params[SearchFields_ContactOrg::NAME] = new DevblocksSearchCriteria(SearchFields_ContactOrg::NAME, DevblocksSearchCriteria::OPER_LIKE, strtolower($query)); break; case "phone": $params[SearchFields_ContactOrg::PHONE] = new DevblocksSearchCriteria(SearchFields_ContactOrg::PHONE, DevblocksSearchCriteria::OPER_LIKE, strtolower($query)); break; } $view->params = $params; $view->renderPage = 0; $view->renderSortBy = null; C4_AbstractViewLoader::setView(C4_ContactOrgView::DEFAULT_ID, $view); DevblocksPlatform::redirect(new DevblocksHttpResponse(array('contacts', 'orgs'))); }
function saveTabPluginsAction() { $translate = DevblocksPlatform::getTranslationService(); $worker = FegApplication::getActiveWorker(); if (!$worker || !$worker->is_superuser) { echo $translate->_('common.access_denied'); return; } $pluginStack = DevblocksPlatform::getPluginRegistry(); @($plugins_enabled = DevblocksPlatform::importGPC($_REQUEST['plugins_enabled'])); if (is_array($pluginStack)) { foreach ($pluginStack as $plugin) { /* @var $plugin DevblocksPluginManifest */ switch ($plugin->id) { case 'devblocks.core': case 'feg.core': case 'feg.auditlog': $plugin->setEnabled(true); break; default: if (null !== $plugins_enabled && false !== array_search($plugin->id, $plugins_enabled)) { $plugin->setEnabled(true); } else { $plugin->setEnabled(false); } break; } } } try { FegApplication::update(); } catch (Exception $e) { // [TODO] ... } DevblocksPlatform::clearCache(); // Reload plugin translations DAO_Translation::reloadPluginStrings(); DevblocksPlatform::redirect(new DevblocksHttpResponse(array('setup', '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)); } }
function doDeleteWorkspaceAction() { @($workspace = DevblocksPlatform::importGPC($_POST['workspace'], 'string', '')); $db = DevblocksPlatform::getDatabaseService(); $active_worker = PortSensorApplication::getActiveWorker(); $lists = DAO_Worklist::getWhere(sprintf("%s = %s AND %s = %d", DAO_Worklist::WORKSPACE, $db->qstr($workspace), DAO_Worklist::WORKER_ID, $active_worker->id)); DAO_Worklist::delete(array_keys($lists)); DevblocksPlatform::redirect(new DevblocksHttpResponse(array('home'))); }
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 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 authenticateAction() { //echo "authing!"; @($email = DevblocksPlatform::importGPC($_POST['email'])); @($password = DevblocksPlatform::importGPC($_POST['password'])); // pull auth info out of $_POST, check it, return user_id or false $worker = DAO_Worker::login($email, $password); //echo $email. '-'.$password;print_r($worker);exit(); if (!is_null($worker)) { $session = DevblocksPlatform::getSessionService(); $visit = new CerberusVisit(); $visit->setWorker($worker); $session->setVisit($visit); //$devblocks_response = new DevblocksHttpResponse(array('mobile','mytickets')); $devblocks_response = new DevblocksHttpResponse(array('mobile', 'tickets')); } else { $devblocks_response = new DevblocksHttpResponse(array('mobile', 'login')); //return false; } DevblocksPlatform::redirect($devblocks_response); }