Example #1
0
File: App.php Project: Hildy/cerb5
 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 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')));
 }
Example #3
0
File: App.php Project: Hildy/cerb5
 function saveTab()
 {
     @($plugin_id = DevblocksPlatform::importGPC($_REQUEST['plugin_id'], 'string'));
     DevblocksPlatform::redirect(new DevblocksHttpResponse(array('config', 'watchers')));
     exit;
 }
Example #4
0
 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();
 }
Example #5
0
 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')));
     }
 }
Example #6
0
 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();
 }
Example #7
0
 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')));
 }
Example #8
0
 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)));
 }
Example #9
0
 function importAction()
 {
     $this->import();
     DevblocksPlatform::redirect(new DevblocksHttpResponse(array('activity', 'forums')));
 }
Example #10
0
 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')));
 }
Example #11
0
 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')));
 }
Example #12
0
 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')));
 }
Example #13
0
 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));
 }
Example #14
0
 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')));
 }
Example #15
0
 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')));
 }
Example #16
0
 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')));
 }
Example #17
0
 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;
 }
Example #18
0
 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')));
     }
 }
Example #19
0
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'));
Example #20
0
 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;
 }
Example #21
0
 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)));
 }
Example #22
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 #23
0
 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;
 }
Example #24
0
 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')));
 }
Example #25
0
 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')));
 }
Example #26
0
 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));
     }
 }
Example #27
0
 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')));
 }
Example #28
0
 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')));
 }
Example #29
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 #30
0
 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);
 }