function process(Mobile_API_Request $request) { $current_user = $this->getActiveUser(); $query = $request->get('query'); $nextPage = 0; $queryResult = false; if (preg_match("/(.*) LIMIT[^;]+;/i", $query)) { $queryResult = vtws_query($query, $current_user); } else { // Implicit limit and paging $query = rtrim($query, ";"); $currentPage = intval($request->get('page', 0)); $FETCH_LIMIT = Mobile::config('API_RECORD_FETCH_LIMIT'); $startLimit = $currentPage * $FETCH_LIMIT; $queryWithLimit = sprintf("%s LIMIT %u,%u;", $query, $startLimit, $FETCH_LIMIT + 1); $queryResult = vtws_query($queryWithLimit, $current_user); // Determine paging $hasNextPage = count($queryResult) > $FETCH_LIMIT; if ($hasNextPage) { array_pop($queryResult); // Avoid sending next page record now $nextPage = $currentPage + 1; } } $records = array(); if (!empty($queryResult)) { foreach ($queryResult as $recordValues) { $records[] = $this->processQueryResultRecord($recordValues, $current_user); } } $result = array('records' => $records, 'nextPage' => $nextPage); $response = new Mobile_API_Response(); $response->setResult($result); return $response; }
function process(Mobile_API_Request $request) { $response = new Mobile_API_Response(); $username = $request->get('username'); $password = $request->get('password'); $current_user = CRMEntity::getInstance('Users'); $current_user->column_fields['user_name'] = $username; if (vtlib_isModuleActive('Mobile') === false) { $response->setError(1501, 'Service not available'); return $response; } if (!$current_user->doLogin($password)) { $response->setError(1210, 'Authentication Failed'); } else { // Start session now $sessionid = Mobile_API_Session::init(); if ($sessionid === false) { echo "Session init failed {$sessionid}\n"; } $current_user->id = $current_user->retrieve_user_id($username); $current_user->retrieveCurrentUserInfoFromFile($current_user->id); $this->setActiveUser($current_user); $result = array(); $result['login'] = array('userid' => $current_user->id, 'crm_tz' => DateTimeField::getDBTimeZone(), 'user_tz' => $current_user->time_zone, 'user_currency' => $current_user->currency_code, 'session' => $sessionid, 'vtiger_version' => Mobile_WS_Utils::getVtigerVersion(), 'date_format' => $current_user->date_format, 'mobile_module_version' => Mobile_WS_Utils::getVersion()); $response->setResult($result); $this->postProcess($response); } return $response; }
function process(Mobile_API_Request $request) { $response = new Mobile_API_Response(); $username = $request->get('username'); $password = $request->get('password'); $current_user = CRMEntity::getInstance('Users'); $current_user->column_fields['user_name'] = $username; if (vtlib_isModuleActive('Mobile') === false) { $response->setError(1501, 'Service not available'); return $response; } if (!$current_user->load_user($password) || !$current_user->authenticated) { global $mod_strings; $response->setError(1210, $mod_strings['ERR_INVALID_PASSWORD']); } else { // Start session now $sessionid = Mobile_API_Session::init(); if ($sessionid === false) { echo "Session init failed {$sessionid}\n"; } include_once 'config.php'; global $application_unique_key; $current_user->id = $current_user->retrieve_user_id($username); $this->setActiveUser($current_user); $_SESSION["authenticated_user_id"] = $current_user->id; $_SESSION["app_unique_key"] = $application_unique_key; $result = array(); $result['login'] = array('userid' => $current_user->id, 'crm_tz' => DateTimeField::getDBTimeZone(), 'user_tz' => $current_user->time_zone, 'session' => $sessionid, 'language' => $current_user->language, 'vtiger_version' => Mobile_WS_Utils::getVtigerVersion(), 'mobile_module_version' => Mobile_WS_Utils::getVersion()); $response->setResult($result); $this->postProcess($response); } return $response; }
function process(Mobile_API_Request $request) { $mode = $request->get('mode'); $module = $this->cachedModule($request->get('module')); $searchIn = $this->cachedSearchFields($module->name()); if ($mode == 'update') { $searchIn = array(); foreach ($_REQUEST as $k => $v) { if (preg_match("/field_(.*)/i", $k, $m)) { $searchIn[] = vtlib_purify($m[1]); } } $this->cacheSearchFields($module->name(), $searchIn); header("Location: index.php?_operation=listModuleRecords&module={$module->name()}&mode=search"); exit; } $request->setDefault('record', "{$module->id()}x0"); $wsResponse = parent::process($request); $wsResponseResult = $wsResponse->getResult(); $templateRecord = Mobile_UI_ModuleRecordModel::buildModelFromResponse($wsResponseResult['record']); $viewer = new Mobile_UI_Viewer(); $viewer->assign('_MODULE', $module); $viewer->assign('_RECORD', $templateRecord); $viewer->assign('_SEARCHIN', $searchIn); $viewer->assign('_SEARCHIN_ALL', empty($searchIn)); $response = $viewer->process('generic/SearchConfig.tpl'); return $response; }
function process(Mobile_API_Request $request) { $response = new Mobile_API_Response(); $current_user = $this->getActiveUser(); $module = $request->get('module'); $moduleWSID = Mobile_WS_Utils::getEntityModuleWSId($module); if (empty($module)) { $response->setError(1501, "Module not specified."); return $response; } $records = array(); // Fetch the request parameters $idlist = $request->get('ids'); $alertid = $request->get('alertid'); // List of ids specified? if (!empty($idlist)) { $idlist = Zend_Json::decode($idlist); $records = $this->fetchRecordsWithId($module, $idlist, $current_user); } else { if (!empty($alertid)) { $alert = Mobile_WS_AlertModel::modelWithId($alertid); if ($alert === false) { $response->setError(1404, "Alert not found."); $records = false; } $alert->setUser($current_user); $records = $this->fetchAlertRecords($module, $alert); } } if ($records !== false) { $response->setResult(array('records' => $records)); } return $response; }
function process(Mobile_API_Request $request) { global $current_user; // Required for vtws_update API $current_user = $this->getActiveUser(); $module = $request->get('module'); //update if recordid exist $recordid = $request->get('record'); $valueArray = Mobile_API_Request::getvaluemap($request); $values = ''; if (!empty($valueArray) && is_string($valueArray)) { $values = Zend_Json::decode($valueArray); } else { $values = $valueArray; // Either empty or already decoded. } //catch error $response = new Mobile_API_Response(); if (empty($values)) { $response->setError(1501, "Values cannot be empty!"); return $response; } try { // Retrieve or Initialize if (!empty($recordid)) { $this->recordValues = parent::processRetrieve($request); } else { $this->recordValues = array(); } // Set the modified values foreach ($values as $name => $value) { $this->recordValues[$name] = $value; } // Update or Create if (isset($this->recordValues['id'])) { $this->recordValues = vtws_update($this->recordValues, $current_user); } else { // Set right target module name for Calendar/Event record if ($module == 'Calendar') { if (!empty($this->recordValues['eventstatus']) && $this->recordValues['activitytype'] != 'Task') { $module = 'Events'; } } $this->recordValues = vtws_create($module, $this->recordValues, $current_user); } // Update the record id $request->set('record', $this->recordValues['id']); $request->set('id', $this->recordValues['id']); // Gather response with full details $response = parent::process($request); } catch (Exception $e) { $response->setError($e->getCode(), $e->getMessage()); } return $response; }
function getContent(Mobile_API_Request $request) { global $current_user, $adb; $current_user = $this->getActiveUser(); $module = $request->get('module'); $limit = $request->get('number'); $offset = $request->get('offset'); $search = isset($_REQUEST['src_str']) ? $request->get('src_str') : ''; $customView = new CustomView($module); if (!empty($_REQUEST['view'])) { $viewid = $_REQUEST['view']; } else { $viewid = $customView->getViewId($module); } $queryGenerator = new QueryGenerator($module, $current_user); if ($viewid != "0") { $queryGenerator->initForCustomViewById($viewid); } else { $queryGenerator->initForDefaultCustomView(); } $list_query = $queryGenerator->getQuery(); //get entity fields for each module $entity_sql = "select fieldname,tablename,entityidfield from vtiger_entityname where modulename =?"; $ws_entity = $adb->pquery($entity_sql, array($module)); $fieldname = $adb->query_result($ws_entity, 0, 'fieldname'); $tablename = $adb->query_result($ws_entity, 0, 'tablename'); //set the list and content order if ($module == 'Contacts' || $module == 'Leads') { $list_query .= " AND (lastname LIKE '%{$search}%' OR firstname LIKE '%{$search}%') ORDER BY lastname"; } elseif ($module != 'Calendar' and $module != 'Events') { $list_query .= " AND " . $tablename . "." . $fieldname . " LIKE '%{$search}%' ORDER BY " . $tablename . "." . $fieldname; } elseif ($module == 'Calendar' || $module == 'Events') { $calendarview_selected = $request->get('viewName'); $list_query .= " AND vtiger_activity.activitytype!='Emails'"; if ($calendarview_selected == 'week') { $list_query .= " AND week(date_start) = week(NOW()) AND year(date_start) = year(NOW())"; } elseif ($calendarview_selected == 'month') { $list_query .= " AND month(date_start) = month(NOW()) AND year(date_start) = year(NOW())"; } elseif ($calendarview_selected == 'year') { $list_query .= " AND year(date_start) = year(NOW())"; } elseif ($calendarview_selected == 'today') { $list_query .= " AND DATE(date_start) = DATE(NOW())"; } $list_query .= " AND subject LIKE '%{$search}%' ORDER BY date_start DESC"; } else { $list_query .= " AND " . $tablename . "." . $fieldname . " LIKE '%{$search}%' ORDER BY " . $tablename . "." . $fieldname; } $list_query .= " LIMIT {$offset}, {$limit};"; $listview_entries = $adb->pquery($list_query, array()); $response = new Mobile_API_Response(); $response->setResult(array('records' => $listview_entries, 'module' => $module)); return $response; }
function process(Mobile_API_Request $request) { global $current_user, $adb, $currentModule; $current_user = $this->getActiveUser(); $response = new Mobile_API_Response(); $record = $request->get('record'); $relatedmodule = $request->get('relatedmodule'); $currentPage = $request->get('page', 0); // Input validation if (empty($record)) { $response->setError(1001, 'Record id is empty'); return $response; } $recordid = vtws_getIdComponents($record); $recordid = $recordid[1]; $module = Mobile_WS_Utils::detectModulenameFromRecordId($record); // Initialize global variable $currentModule = $module; $functionHandler = Mobile_WS_Utils::getRelatedFunctionHandler($module, $relatedmodule); if ($functionHandler) { $sourceFocus = CRMEntity::getInstance($module); $relationResult = call_user_func_array(array($sourceFocus, $functionHandler), array($recordid, getTabid($module), getTabid($relatedmodule))); $query = $relationResult['query']; $querySEtype = "vtiger_crmentity.setype as setype"; if ($relatedmodule == 'Calendar') { $querySEtype = "vtiger_activity.activitytype as setype"; } $query = sprintf("SELECT vtiger_crmentity.crmid, {$querySEtype} %s", substr($query, stripos($query, 'FROM'))); $queryResult = $adb->query($query); // Gather resolved record id's $relatedRecords = array(); while ($row = $adb->fetch_array($queryResult)) { $targetSEtype = $row['setype']; if ($relatedmodule == 'Calendar') { if ($row['setype'] != 'Task' && $row['setype'] != 'Emails') { $targetSEtype = 'Events'; } else { $targetSEtype = $relatedmodule; } } $relatedRecords[] = sprintf("%sx%s", Mobile_WS_Utils::getEntityModuleWSId($targetSEtype), $row['crmid']); } // Perform query to get record information with grouping $wsquery = sprintf("SELECT * FROM %s WHERE id IN ('%s');", $relatedmodule, implode("','", $relatedRecords)); $newRequest = new Mobile_API_Request(); $newRequest->set('module', $relatedmodule); $newRequest->set('query', $wsquery); $newRequest->set('page', $currentPage); $response = parent::process($newRequest); } return $response; }
function process(Mobile_API_Request $request) { $current_user = $this->getActiveUser(); $page = intval($request->get('page', 0)); $module = $request->get('module', ''); $record = $request->get('record', ''); $mode = $request->get('mode', ''); $options = array('module' => $module, 'record' => $record, 'mode' => $mode, 'page' => $page); $historyItems = vtws_history($options, $current_user); $this->resolveReferences($historyItems, $current_user); $result = array('history' => $historyItems); $response = new Mobile_API_Response(); $response->setResult($result); return $response; }
function process(Mobile_API_Request $request) { $response = new Mobile_API_Response(); $current_language = $this->sessionGet('language'); include_once dirname(__FILE__) . '/../language/' . $current_language . '.lang.php'; $module = $request->get('module'); $record = $request->get('record'); $viewer = new Mobile_UI_Viewer(); $viewer->assign('LANGUAGE', $current_language); $viewer->assign('MOD', $mod_strings); $viewer->assign('_MODULE', $module); $viewer->assign('id', $record); $response = $viewer->process('generic/deleteConfirmation.tpl'); return $response; }
protected function processRetrieve(Mobile_API_Request $request) { $current_user = $this->getActiveUser(); $recordid = $request->get('record'); $record = vtws_retrieve($recordid, $current_user); return $record; }
function process(Mobile_API_Request $request) { $values = Zend_Json::decode($request->get('values')); $relatedTo = $values['related_to']; $commentContent = $values['commentcontent']; $user = $this->getActiveUser(); $targetModule = ''; if (!empty($relatedTo) && Mobile_WS_Utils::detectModulenameFromRecordId($relatedTo) == 'HelpDesk') { $targetModule = 'HelpDesk'; } else { $targetModule = 'ModComments'; } $response = false; if ($targetModule == 'HelpDesk') { $response = $this->saveCommentToHelpDesk($commentContent, $relatedTo, $user); } else { if (vtlib_isModuleActive($targetModule)) { $request->set('module', $targetModule); $values['assigned_user_id'] = sprintf('%sx%s', Mobile_WS_Utils::getEntityModuleWSId('Users'), $user->id); $request->set('values', Zend_Json::encode($values)); $response = parent::process($request); } } return $response; }
protected function processRetrieve(Mobile_API_Request $request) { $recordid = $request->get('record'); // Create a template record for use if ($this->isTemplateRecordRequest($request)) { $current_user = $this->getActiveUser(); $module = $this->detectModuleName($recordid); $describeInfo = vtws_describe($module, $current_user); Mobile_WS_Utils::fixDescribeFieldInfo($module, $describeInfo); $this->cacheDescribeInfo($describeInfo); $templateRecord = array(); foreach ($describeInfo['fields'] as $describeField) { $templateFieldValue = ''; if (isset($describeField['type']) && isset($describeField['type']['defaultValue'])) { $templateFieldValue = $describeField['type']['defaultValue']; } else { if (isset($describeField['default'])) { $templateFieldValue = $describeField['default']; } } $templateRecord[$describeField['name']] = $templateFieldValue; } if (isset($templateRecord['assigned_user_id'])) { $templateRecord['assigned_user_id'] = sprintf("%sx%s", Mobile_WS_Utils::getEntityModuleWSId('Users'), $current_user->id); } // Reset the record id $templateRecord['id'] = $recordid; return $templateRecord; } // Or else delgate the action to parent return parent::processRetrieve($request); }
function process(Mobile_API_Request $request) { $response = new Mobile_API_Response(); global $adb; global $current_language; $current_language = Mobile_API_Session::get('language'); //never trust an entry $sSearch = vtlib_purify($request->get('term')); $sResult = ""; $arrayName = array(); $ModuleArray = explode(',', vtlib_purify($request->get('relmodule'))); $ModuleLabels = array(); foreach ($ModuleArray as $Module) { $translatedModule = getTranslatedString($Module, 'Mobile'); $arrayName[$translatedModule] = array(); $moduleWSID = Mobile_WS_Utils::getEntityModuleWSId($Module); // get related module fields $query = "SELECT tablename,fieldname,entityidfield FROM vtiger_entityname WHERE modulename = ?"; $result = $adb->pquery($query, array($Module)); if (!$result or $adb->num_rows($result) == 0) { $response->setError(1407, 'Error: Could not fetch entity info'); return $response; } $tablename = $adb->query_result($result, 0, 'tablename'); $fieldname = $adb->query_result($result, 0, 'fieldname'); $entityidfield = $adb->query_result($result, 0, 'entityidfield'); $fieldname = explode(',', $fieldname); $fieldname = $fieldname[0]; //START DATABASE ACCOUNT SEARCH $minhaquery = "SELECT " . $fieldname . "," . $entityidfield . " FROM " . $tablename . " \n\t\t\t\t\t\t\tINNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = " . $tablename . "." . $entityidfield . "\n\t\t\t\t\t\t\tWHERE deleted = 0 AND " . $fieldname . " LIKE ? ORDER BY " . $fieldname . ""; $params = $sSearch . "%"; $result = $adb->pquery($minhaquery, array($params)); if (!$result) { $response->setError(1408, 'Error: Could not fetch entity data'); return $response; } for ($i = 0; $i < $adb->num_rows($result); $i++) { $arrayName[$translatedModule][] = array($moduleWSID . 'x' . $adb->query_result($result, $i, $entityidfield), decode_html($adb->query_result($result, $i, $fieldname))); } } $sResult = $arrayName; $sResult = json_encode($sResult); $response->setResult($sResult); return $response; }
function process(Mobile_API_Request $request) { $current_user = $this->getActiveUser(); $module = $request->get('module'); $newrecord = self::transformToBlocks($module); $response = new Mobile_API_Response(); $response->setResult(array('record' => $newrecord)); return $response; }
function process(Mobile_API_Request $request) { $current_user = $this->getActiveUser(); $module = $request->get('module'); $describeInfo = vtws_describe($module, $current_user); Mobile_WS_Utils::fixDescribeFieldInfo($module, $describeInfo); $response = new Mobile_API_Response(); $response->setResult(array('describe' => $describeInfo)); return $response; }
function process(Mobile_API_Request $request) { global $current_user; $response = new Mobile_API_Response(); $current_user = $this->getActiveUser(); $taxType = $request->get('taxType'); $result = $this->getTaxDetails($taxType); $response->setResult($result); return $response; }
function process(Mobile_API_Request $request) { global $current_user; $response = new Mobile_API_Response(); $filterid = $request->get('filterid'); $current_user = $this->getActiveUser(); $result = array(); $result['filter'] = $this->getModuleFilterDetails($filterid); $response->setResult($result); return $response; }
function process(Mobile_API_Request $request) { global $current_user; $response = new Mobile_API_Response(); $current_user = $this->getActiveUser(); $currentUserModel = Users_Record_Model::getInstanceFromUserObject($current_user); $moduleName = $request->get('module'); $users = $this->getUsers($currentUserModel, $moduleName); $groups = $this->getGroups($currentUserModel, $moduleName); $result = array('users' => $users, 'groups' => $groups); $response->setResult($result); return $response; }
function getContent(Mobile_API_Request $request) { $comment = $request->get('comment'); $parentid = $request->get('parentid'); if (isset($comment) && !empty($comment)) { $parentmodule = Mobile_WS_Utils::detectModulenameFromRecordId($parentid); if ($parentmodule != 'HelpDesk') { include_once 'include/Webservices/Create.php'; $current_user = $this->getActiveUser(); $userid = Mobile_WS_Utils::getEntityModuleWSId('Users') . "x" . $current_user->id; $arr_comment = array('commentcontent' => $comment, 'related_to' => $parentid, 'creator' => $userid, 'assigned_user_id' => $userid); $ele = vtws_create('ModComments', $arr_comment, $current_user); } else { $parentrecordid = vtws_getIdComponents($parentid); $parentrecordid = $parentrecordid[1]; //there is currently no vtws service available for ticket comments $current_user = $this->getActiveUser(); $current_user_id = $current_user->id; $userrecordid = vtws_getIdComponents($current_user_id); $userrecordid = $userrecordid[1]; $arr_comment = array('commentcontent' => $comment, 'related_to' => $parentrecordid, 'creator' => $current_user_id); //$ele = vtws_create('ModComments', $arr_comment, $current_user); $saverecord = Mobile_WS_Utils::createTicketComment($arr_comment); if ($saverecord == true) { $userid = Mobile_WS_Utils::getEntityModuleWSId('Users') . "x" . $current_user_id; $ele['commentcontent'] = $arr_comment['commentcontent']; $ele['creator'] = $userid; $ele['assigned_user_id'] = $userid; $ele['related_to'] = $parentid; $ele['id'] = ''; $ele['createdtime'] = DateTimeField::convertToUserFormat(date('Y-m-d H:i:s')); } } } $response = new Mobile_API_Response(); $ele['assigned_user_id'] = vtws_getName($ele['creator'], $current_user); $response->setResult(array('comment' => $ele)); return $response; }
function process(Mobile_API_Request $request) { global $current_user, $adb, $currentModule; $current_user = $this->getActiveUser(); $response = new Mobile_API_Response(); $record = $request->get('record'); $currentPage = $request->get('page', 0); // Input validation if (empty($record)) { $response->setError(1001, 'Record id is empty'); return $response; } $recordid = vtws_getIdComponents($record); $recordid = $recordid[1]; $module = Mobile_WS_Utils::detectModulenameFromRecordId($record); // Initialize global variable $currentModule = $module; //related module currently supported $relatedmodule = array('Contacts', 'Potentials', 'HelpDesk'); $activemodule = $this->sessionGet('_MODULES'); foreach ($activemodule as $amodule) { if (in_array($amodule->name(), $relatedmodule)) { $active_related_module[] = $amodule->name(); } } foreach ($active_related_module as $relmod) { $functionHandler = Mobile_WS_Utils::getRelatedFunctionHandler($module, $relmod); $fieldmodel = new Mobile_UI_FieldModel(); if ($functionHandler) { $sourceFocus = CRMEntity::getInstance($module); $relationResult = call_user_func_array(array($sourceFocus, $functionHandler), array($recordid, getTabid($module), getTabid($relmod))); $relatedRecords[$relmod] = array_keys($relationResult['entries']); $response->setResult($relatedRecords); } else { $response->setError(1018, 'Function Handler for module ' . $module . ' for related Module ' . $relmod . ' not found.'); } } return $response; }
function process(Mobile_API_Request $request) { $current_user = vglobal('current_user'); $current_user = $this->getActiveUser(); $records = $request->get('records'); if (empty($records)) { $records = array($request->get('record')); } else { $records = Zend_Json::decode($records); } $deleted = array(); foreach ($records as $record) { try { vtws_delete($record, $current_user); $result = true; } catch (Exception $e) { $result = false; } $deleted[$record] = $result; } $response = new Mobile_API_Response(); $response->setResult(array('deleted' => $deleted)); return $response; }
function process(Mobile_API_Request $request) { global $current_user; $response = new Mobile_API_Response(); $alertid = $request->get('alertid'); $current_user = $this->getActiveUser(); $alert = $this->getAlertDetails($alertid); if (empty($alert)) { $response->setError(1401, 'Alert not found'); } else { $result = array(); $result['alert'] = $this->getAlertDetails($alertid); $response->setResult($result); } return $response; }
function process(Mobile_API_Request $request) { $current_user = $this->getActiveUser(); //$module = $request->get('module'); $module = $this->detectModuleName($request->get('record')); $record = $this->processRetrieve($request); $this->resolveRecordValues($record, $current_user); $response = new Mobile_API_Response(); $ret_arr = array('record' => $record); if ($request->get('module')) { $module = $request->get('module'); $moduleWSFieldNames = Mobile_WS_Utils::getEntityFieldnames($module); foreach ($moduleWSFieldNames as $key => $value) { $relatedlistcontent[$key] = $record[$value]; } $relatedlistcontent['id'] = $record['id']; $ret_arr['relatedlistcontent'] = $relatedlistcontent; } elseif (vtlib_isModuleActive('ModComments') and $module != 'HelpDesk') { include_once 'include/Webservices/Query.php'; $comments = vtws_query("SELECT * FROM ModComments WHERE related_to = '" . $record['id'] . "' ORDER BY createdtime DESC LIMIT 5;", $current_user); if (count($comments) > 0) { foreach ($comments as &$comment) { $comment['assigned_user_id'] = vtws_getName($comment['assigned_user_id'], $current_user); $comment['createdtime'] = DateTimeField::convertToUserFormat($comment['createdtime']); } $ret_arr['comments'] = $comments; } else { $ret_arr['comments'] = array(); } } elseif ($module == 'HelpDesk') { //there is currently no vtws service for ticket comments $comments = Mobile_WS_Utils::getTicketComments($record); if (!empty($comments)) { foreach ($comments as &$comment) { $comment['assigned_user_id'] = vtws_getName($comment['assigned_user_id'], $current_user); $comment['createdtime'] = DateTimeField::convertToUserFormat($comment['createdtime']); } $ret_arr['comments'] = $comments; } else { $ret_arr['comments'] = array(); } } $response->setResult($ret_arr); return $response; }
function process(Mobile_API_Request $request) { $response = new Mobile_API_Response(); $module = $request->get('module'); $current_user = $this->getActiveUser(); $result = array(); $filters = $this->getModuleFilters($module, $current_user); $yours = array(); $others = array(); if (!empty($filters)) { foreach ($filters as $filter) { if ($filter['userName'] == $current_user->column_fields['user_name']) { $yours[] = $filter; } else { $others[] = $filter; } } } $result['filters'] = array('yours' => $yours, 'others' => $others); $response->setResult($result); return $response; }
function process(Mobile_API_Request $request) { $this->queryModule = $request->get('module'); return parent::process($request); }
function getPagingModel(Mobile_API_Request $request) { $pagingModel = Mobile_WS_PagingModel::modelWithPageStart($request->get('page')); $pagingModel->setLimit(Mobile::config('Navigation.Limit', 100)); return $pagingModel; }
function processSearchRecordLabel(Mobile_API_Request $request) { global $current_user; // Few core API assumes this variable availability $current_user = $this->getActiveUser(); $module = $request->get('module'); $alertid = $request->get('alertid'); $filterid = $request->get('filterid'); $search = $request->get('search'); $filterOrAlertInstance = false; if (!empty($alertid)) { $filterOrAlertInstance = Mobile_WS_AlertModel::modelWithId($alertid); } else { if (!empty($filterid)) { $filterOrAlertInstance = Mobile_WS_FilterModel::modelWithId($module, $filterid); } else { if (!empty($search)) { $filterOrAlertInstance = $this->getSearchFilterModel($module, $search); } } } if ($filterOrAlertInstance && strcmp($module, $filterOrAlertInstance->moduleName)) { $response = new Mobile_API_Response(); $response->setError(1001, 'Mistached module information.'); return $response; } // Initialize with more information if ($filterOrAlertInstance) { $filterOrAlertInstance->setUser($current_user); } // Paging model $pagingModel = $this->getPagingModel($request); if ($this->isCalendarModule($module)) { return $this->processSearchRecordLabelForCalendar($request, $pagingModel); } $records = $this->fetchRecordLabelsForModule($module, $current_user, array(), $filterOrAlertInstance, $pagingModel); $modifiedRecords = array(); foreach ($records as $record) { if ($record instanceof SqlResultIteratorRow) { $record = $record->data; // Remove all integer indexed mappings for ($index = count($record); $index > -1; --$index) { if (isset($record[$index])) { unset($record[$index]); } } } $recordid = $record['id']; unset($record['id']); $eventstart = ''; if ($this->isCalendarModule($module)) { $eventstart = $record['date_start']; unset($record['date_start']); } $values = array_values($record); $label = implode(' ', $values); $modifiedRecord = array('id' => $recordid, 'label' => $label); if (!empty($eventstart)) { $modifiedRecord['eventstart'] = $eventstart; } $modifiedRecords[] = $modifiedRecord; } $response = new Mobile_API_Response(); $response->setResult(array('records' => $modifiedRecords, 'module' => $module)); return $response; }
function process(Mobile_API_Request $request) { if ($request->get('username') == '') { $response = new Mobile_API_Response(); $response->setError(1501, 'Login required'); } else { global $displayed_modules, $current_language, $current_user, $mod_strings, $app_strings; $username = $request->get('username'); $current_user = CRMEntity::getInstance('Users'); $userid = $current_user->retrieve_user_id($username); $current_user = $current_user->retrieveCurrentUserInfoFromFile($userid); $language = $current_user->language; $CRM_Version = Mobile::config('crm_version'); if ($CRM_Version != '5.2.1') { //for v5.3.0 use User's Settings if ($language != '') { $current_language = $language; } else { $current_language = 'en_us'; } } else { //for v5.2.1 use default language global $adb; $queryResult = $adb->pquery("SELECT prefix FROM vtiger_language WHERE isdefault =1", array()); $current_language = $adb->query_result($queryResult, 0, 'prefix'); } //set $app_strings Mobile_WS_Utils::initAppGlobals(); $wsResponse = parent::process($request); $response = false; if ($wsResponse->hasError()) { $response = $wsResponse; } else { $wsResponseResult = $wsResponse->getResult(); //fill cache $modules = Mobile_UI_ModuleModel::buildModelsFromResponse($wsResponseResult['modules']); $this->cacheModules($modules); Mobile_API_Session::set('language', $current_language); include dirname(__FILE__) . '/../language/' . $current_language . '.lang.php'; //remove Events from module list display function filter_by_value($array, $index, $value) { if (is_array($array) && count($array) > 0) { foreach (array_keys($array) as $key) { $temp[$key] = $array[$key][$index]; if ($temp[$key] == $value) { $newarray[$key] = $array[$key]; } } } return $newarray; } $eventarray = filter_by_value($wsResponseResult['modules'], 'name', 'Events'); $eventkey = array_keys($eventarray); unset($modules[$eventkey[0]]); $viewer = new Mobile_UI_Viewer(); $viewer->assign('_MODULES', $modules); $viewer->assign('MOD', $mod_strings); //reserved for future use: list modules for global search $viewer->assign('SEARCHIN', implode(",", $displayed_modules)); $response = $viewer->process('generic/Home.tpl'); } } return $response; }
function process(Mobile_API_Request $request) { $current_user = $this->getActiveUser(); $current_user_wsid = sprintf("%sx%s", Mobile_WS_Utils::getEntityModuleWSId("Users"), $current_user->id); $module = $request->get('module'); $lastSyncTime = $request->get('syncToken', 0); $currentPage = intval($request->get('page', 0)); $isPrivateMode = $this->isModePrivate($request); $FETCH_LIMIT = Mobile::config('API_RECORD_FETCH_LIMIT'); $startLimit = $currentPage * $FETCH_LIMIT; // Keep track of sync-token for futher reference $maxSyncTime = $lastSyncTime; $describeInfo = vtws_describe($module, $current_user); $this->cacheDescribeInfo($describeInfo); $hasAssignedToField = false; foreach ($describeInfo['fields'] as $fieldinfo) { if ($fieldinfo['name'] == 'assigned_user_id') { $hasAssignedToField = true; break; } } ///////////////////////////// // MODIFIED RECORDS TRACKING ///////////////////////////// if (empty($lastSyncTime)) { // No previous state information available? Lookup records recently modified if ($hasAssignedToField && $isPrivateMode) { $queryActive = sprintf("SELECT * FROM %s WHERE assigned_user_id = '%s' ORDER BY modifiedtime DESC", $module, $current_user_wsid); } else { $queryActive = sprintf("SELECT * FROM %s ORDER BY modifiedtime DESC", $module); } } else { // Attempt to lookup records from previous state if ($hasAssignedToField && $isPrivateMode) { $queryActive = sprintf("SELECT * FROM %s WHERE assigned_user_id = '%s' AND modifiedtime > '%s'", $module, $current_user_wsid, date("Y-m-d H:i:s", $lastSyncTime)); } else { $queryActive = sprintf("SELECT * FROM %s WHERE modifiedtime > '%s'", $module, date("Y-m-d H:i:s", $lastSyncTime)); } } // Try to fetch record with paging (one extra record fetch is attempted to determine presence of next page) $activeQuery = sprintf("%s LIMIT %u,%u;", $queryActive, $startLimit, $FETCH_LIMIT + 1); $activeResult = vtws_query($activeQuery, $current_user); // Determine paging $hasNextPage = count($activeResult) > $FETCH_LIMIT; // Special case handling merge Events records if ($module == 'Calendar') { $activeResult2 = vtws_query(str_replace('Calendar', 'Events', $activeQuery), $current_user); if (!empty($activeResult2)) { $activeResult = array_merge($activeResult, $activeResult2); if (!$hasNextPage) { // If there was not Calendar next-page of records - check with Events $hasNextPage = count($activeResult) > $FETCH_LIMIT; } } // Indicator that we fetched both Calendar+Events $FETCH_LIMIT *= 2; } $nextPage = 0; if ($hasNextPage) { array_pop($activeResult); // Avoid sending next page record now $nextPage = $currentPage + 1; } // Resolved record details $resolvedModifiedRecords = array(); $resolvedDeletedRecords = array(); if (!empty($activeResult)) { foreach ($activeResult as $recordValues) { $this->resolveRecordValues($recordValues, $current_user); $transformedRecord = $this->transformRecordWithGrouping($recordValues, $module); // Update entity fieldnames $transformedRecord['labelFields'] = $this->cachedEntityFieldnames($module); $resolvedModifiedRecords[] = $transformedRecord; $modifiedTimeInSeconds = strtotime($recordValues['modifiedtime']); if ($maxSyncTime < $modifiedTimeInSeconds) { $maxSyncTime = $modifiedTimeInSeconds; } } } //////////////////////////// // DELETED RECORDS TRACKING //////////////////////////// // Only when there is previous state information and is first page if (!empty($lastSyncTime) && $currentPage === 0) { $adb = PearDatabase::getInstance(); $queryDeletedParameters = array($module, date('Y-m-d H:i:s', $lastSyncTime)); $andsmowneridequal = ""; if ($hasAssignedToField) { if ($isPrivateMode) { $queryDeletedParameters[] = $current_user->id; $andsmowneridequal = " AND vtiger_crmentity.smownerid=?"; } else { $andsmowneridequal = Mobile_WS_Utils::querySecurityFromSuffix($module, $current_user); } } // Since Calendar and Events are merged if ($module == 'Calendar') { $queryDeleted = $adb->pquery("SELECT activityid as crmid, activitytype as setype FROM vtiger_activity\n\t\t\t\t\tINNER JOIN vtiger_crmentity ON vtiger_activity.activityid=vtiger_crmentity.crmid\n\t\t\t\t\tAND vtiger_crmentity.deleted=1 AND vtiger_crmentity.setype=? AND vtiger_crmentity.modifiedtime > ?\n\t\t\t\t\tLEFT JOIN vtiger_users ON vtiger_users.id = vtiger_crmentity.smownerid\n\t\t\t\t\tLEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid WHERE 1=1\t{$andsmowneridequal} ", $queryDeletedParameters); } else { if ($module == 'Leads') { $queryDeleted = $adb->pquery("SELECT crmid, modifiedtime, setype FROM vtiger_crmentity\n\t\t\t\tINNER JOIN vtiger_leaddetails ON vtiger_leaddetails.leadid=vtiger_crmentity.crmid\n\t\t\t\tLEFT JOIN vtiger_users ON vtiger_users.id = vtiger_crmentity.smownerid\n\t\t\t\tLEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid\n\t\t\t\tWHERE (vtiger_crmentity.deleted=1 OR (vtiger_crmentity.deleted=0 AND vtiger_leaddetails.converted=1)) AND vtiger_crmentity.setype=? AND vtiger_crmentity.modifiedtime > ? {$andsmowneridequal}", $queryDeletedParameters); } else { $queryDeleted = $adb->pquery("SELECT crmid, modifiedtime, setype FROM vtiger_crmentity\n\t\t\t\tLEFT JOIN vtiger_users ON vtiger_users.id = vtiger_crmentity.smownerid\n\t\t\t\tLEFT JOIN vtiger_groups ON vtiger_groups.groupid = vtiger_crmentity.smownerid\n\t\t\t\tWHERE vtiger_crmentity.deleted=1 AND vtiger_crmentity.setype=? AND vtiger_crmentity.modifiedtime > ? {$andsmowneridequal}", $queryDeletedParameters); } } while ($row = $adb->fetch_array($queryDeleted)) { $recordModule = $row['setype']; if ($module == 'Calendar') { if ($row['setype'] != 'Task' && $row['setype'] != 'Emails') { $recordModule = 'Events'; } else { $recordModule = $module; } } $resolvedDeletedRecords[] = sprintf("%sx%s", Mobile_WS_Utils::getEntityModuleWSId($recordModule), $row['crmid']); $modifiedTimeInSeconds = strtotime($row['modifiedtime']); if ($maxSyncTime < $modifiedTimeInSeconds) { $maxSyncTime = $modifiedTimeInSeconds; } } } $result = array('nextSyncToken' => $maxSyncTime, 'deleted' => $resolvedDeletedRecords, 'updated' => $resolvedModifiedRecords, 'nextPage' => $nextPage); $response = new Mobile_API_Response(); $response->setResult(array('sync' => $result)); return $response; }