コード例 #1
2
ファイル: Query.php プロジェクト: hbsman/vtigercrm-5.3.0-ja
 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;
 }
コード例 #2
0
ファイル: Viewer.php プロジェクト: hbsman/vtigercrm-5.3.0-ja
 function process($templateName)
 {
     $smarty = $this->viewController();
     $response = new Mobile_API_Response();
     $response->setResult($smarty->fetch(vtlib_getModuleTemplate('Mobile', $templateName)));
     return $response;
 }
コード例 #3
0
ファイル: FetchRecord.php プロジェクト: yozhi/YetiForceCRM
 function process(Mobile_API_Request $request)
 {
     $current_user = $this->getActiveUser();
     $record = $this->processRetrieve($request);
     $this->resolveRecordValues($record, $current_user);
     $response = new Mobile_API_Response();
     $response->setResult(array('record' => $record));
     return $response;
 }
コード例 #4
0
 function process(Mobile_API_Request $request)
 {
     $response = new Mobile_API_Response();
     $current_user = $this->getActiveUser();
     $result = array();
     $result['alerts'] = $this->getAlertDetails();
     $response->setResult($result);
     return $response;
 }
コード例 #5
0
ファイル: Describe.php プロジェクト: kduqi/corebos
 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;
 }
コード例 #6
0
 function postProcess(Mobile_API_Response $response)
 {
     $current_user = $this->getActiveUser();
     if ($current_user) {
         $result = $response->getResult();
         $result['modules'] = $this->getListing($current_user);
         $response->setResult($result);
     }
 }
コード例 #7
0
 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;
 }
コード例 #8
0
ファイル: Describe.php プロジェクト: Bergdahls/YetiForceCRM
 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;
 }
コード例 #9
0
ファイル: SaveRecord.php プロジェクト: kduqi/corebos
 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;
 }
コード例 #10
0
 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;
 }
コード例 #11
0
ファイル: getScrollContent.php プロジェクト: kduqi/corebos
 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;
 }
コード例 #12
0
 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;
 }
コード例 #13
0
 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;
 }
コード例 #14
0
ファイル: index.php プロジェクト: yozhi/YetiForceCRM
 static function process(Mobile_API_Request $request)
 {
     $operation = $request->getOperation();
     $sessionid = HTTP_Session::detectId();
     //$request->getSession();
     if (empty($operation)) {
         $operation = 'login';
     }
     $response = false;
     if (isset(self::$opControllers[$operation])) {
         $operationFile = self::$opControllers[$operation]['file'];
         $operationClass = self::$opControllers[$operation]['class'];
         include_once dirname(__FILE__) . $operationFile;
         $operationController = new $operationClass();
         $operationSession = false;
         if ($operationController->requireLogin()) {
             $operationSession = Mobile_API_Session::init($sessionid);
             if ($operationController->hasActiveUser() === false) {
                 $operationSession = false;
             }
             //Mobile_WS_Utils::initAppGlobals();
         } else {
             // By-pass login
             $operationSession = true;
         }
         if ($operationSession === false) {
             $response = new Mobile_API_Response();
             $response->setError(1501, 'Login required');
         } else {
             try {
                 $response = $operationController->process($request);
             } catch (Exception $e) {
                 $response = new Mobile_API_Response();
                 $response->setError($e->getCode(), $e->getMessage());
             }
         }
     } else {
         $response = new Mobile_API_Response();
         $response->setError(1404, 'Operation not found: ' . $operation);
     }
     if ($response !== false) {
         if ($response->hasError()) {
             include_once dirname(__FILE__) . '/ui/Error.php';
             $errorController = new Mobile_UI_Error();
             $errorController->setError($response->getError());
             echo $errorController->process($request)->emitHTML();
         } else {
             echo $response->emitHTML();
         }
     }
 }
コード例 #15
0
ファイル: History.php プロジェクト: Bergdahls/YetiForceCRM
 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;
 }
コード例 #16
0
 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;
 }
コード例 #17
0
ファイル: FetchRecord.php プロジェクト: kduqi/corebos
 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;
 }
コード例 #18
0
ファイル: getRelationList.php プロジェクト: kduqi/corebos
 function process(Mobile_API_Request $request)
 {
     global $app_strings, $mod_strings;
     $wsResponse = parent::process($request);
     $response = false;
     if ($wsResponse->hasError()) {
         $response = $wsResponse;
     } else {
         $wsResponseResult = $wsResponse->getResult();
         $current_user = $this->getActiveUser();
         $current_language = $this->sessionGet('language');
         $app_strings = return_application_language($current_language);
         $relatedlistsmodule = array_keys($wsResponseResult);
         $relatedresponse = new Mobile_API_Response();
         foreach ($relatedlistsmodule as $module) {
             $moduleWSId = Mobile_WS_Utils::getEntityModuleWSId($module);
             if ($module == 'Events' || $module == 'Calendar') {
                 $fieldnames = Mobile_WS_Utils::getEntityFieldnames('Calendar');
             } else {
                 $fieldnames = Mobile_WS_Utils::getEntityFieldnames($module);
             }
             foreach ($wsResponseResult[$module] as $key => $shortrecordid) {
                 $recordid = $moduleWSId . 'x' . $shortrecordid;
                 $detailrequest = new Mobile_API_Request();
                 $detailrequest->set('record', $recordid);
                 $detailrequest->set('_operation', 'fetchRecordWithGrouping');
                 $detailrequest->set('module', $module);
                 $detailresponse = Mobile_WS_FetchRecordWithGrouping::process($detailrequest);
                 $detailresponse_record[$module][$key] = $detailresponse->getResult();
             }
         }
         $relatedresponse->setResult($detailresponse_record);
         $response = new Mobile_API_Response();
         $current_language = $this->sessionGet('language');
         include_once dirname(__FILE__) . '/../language/' . $current_language . '.lang.php';
         $viewer = new Mobile_UI_Viewer();
         $viewer->assign('LANGUAGE', $current_language);
         $viewer->assign('MOD', $mod_strings);
         $viewer->assign('_MODULE', $module);
         $viewer->assign('_RECORDS', $relatedresponse);
         $response = $viewer->process('generic/getRelatedLists.tpl');
     }
     return $response;
 }
コード例 #19
0
ファイル: Login.php プロジェクト: cannking/vtigercrm-debug
 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;
 }
コード例 #20
0
ファイル: Login.php プロジェクト: kduqi/corebos
 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;
 }
コード例 #21
0
 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;
 }
コード例 #22
0
ファイル: addComment.php プロジェクト: kduqi/corebos
 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;
 }
コード例 #23
0
ファイル: FetchModuleFilters.php プロジェクト: Wasage/werpa
 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;
 }
コード例 #24
0
 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;
 }
コード例 #25
0
ファイル: getAutocomplete.php プロジェクト: kduqi/corebos
 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;
 }
コード例 #26
0
 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;
 }
コード例 #27
0
ファイル: ListModuleRecords.php プロジェクト: kduqi/corebos
 function processSearchRecordLabelForCalendar(Mobile_API_Request $request, $pagingModel = false)
 {
     $current_user = $this->getActiveUser();
     // Fetch both Calendar (Todo) and Event information
     $moreMetaFields = array('date_start', 'time_start', 'activitytype', 'location');
     $eventsRecords = $this->fetchRecordLabelsForModule('Events', $current_user, $moreMetaFields, false, $pagingModel);
     $calendarRecords = $this->fetchRecordLabelsForModule('Calendar', $current_user, $moreMetaFields, false, $pagingModel);
     // Merge the Calendar & Events information
     $records = array_merge($eventsRecords, $calendarRecords);
     $modifiedRecords = array();
     foreach ($records as $record) {
         $modifiedRecord = array();
         $modifiedRecord['id'] = $record['id'];
         unset($record['id']);
         $modifiedRecord['eventstartdate'] = $record['date_start'];
         unset($record['date_start']);
         $modifiedRecord['eventstarttime'] = $record['time_start'];
         unset($record['time_start']);
         $modifiedRecord['eventtype'] = $record['activitytype'];
         unset($record['activitytype']);
         $modifiedRecord['eventlocation'] = $record['location'];
         unset($record['location']);
         $modifiedRecord['label'] = implode(' ', array_values($record));
         $modifiedRecords[] = $modifiedRecord;
     }
     $response = new Mobile_API_Response();
     $response->setResult(array('records' => $modifiedRecords, 'module' => 'Calendar'));
     return $response;
 }
コード例 #28
0
ファイル: getScrollContent.php プロジェクト: kduqi/corebos
    function process(Mobile_API_Request $request)
    {
        require_once 'include/utils/utils.php';
        require_once 'modules/Mobile/language/en_us.lang.php';
        global $adb;
        //get scroll parameter
        $wsResponse = parent::process($request);
        if (is_numeric($request->get('offset'))) {
            $offset = $request->get('offset');
        } else {
            //do nothing
            echo '';
            return $wsResponse;
        }
        if (is_numeric($request->get('number'))) {
            $postnumbers = $request->get('number');
        } else {
            //do nothing
            echo '';
            return $wsResponse;
        }
        $wsResponseResult = $wsResponse->getResult();
        $module = $wsResponseResult['module'];
        $records = $wsResponseResult['records'];
        $noofrows = $adb->num_rows($records);
        $tabid = getTabid($module);
        $fieldquery = "select fieldname,entityidfield from vtiger_entityname where tabid =?";
        $ws_entity1 = $adb->pquery($fieldquery, array($tabid));
        $fieldname = $adb->query_result($ws_entity1, 0, 'fieldname');
        $entityidfield = $adb->query_result($ws_entity1, 0, 'entityidfield');
        $fieldcontent = explode(',', $fieldname);
        if ($module == 'Calendar' || $module == 'Events') {
            $entity = "select id from vtiger_ws_entity where ismodule=1 and name = ? OR name = ? ORDER BY name";
            $ws_entity = $adb->pquery($entity, array('Calendar', 'Events'));
            $arr_entity2[] = $adb->query_result($ws_entity, 0, 'id');
            $arr_entity2[] = $adb->query_result($ws_entity, 1, 'id');
        } else {
            $entity = "select id from vtiger_ws_entity where ismodule=1 and name =?";
            $ws_entity = $adb->pquery($entity, array($wsResponseResult['module']));
            $ws_entity2 = $adb->query_result($ws_entity, 0, 'id');
        }
        $output = "";
        for ($i = 0; $i < $noofrows; $i++) {
            $firstname = $adb->query_result($records, $i, $fieldcontent[0]);
            $lastname = $adb->query_result($records, $i, $fieldcontent[1]);
            if ($module == 'Calendar' || $module == 'Events') {
                //for calendar display date and time
                global $current_language;
                $activitytype = $adb->query_result($records, $i, 'status') == '' ? 'E' : ($current_language == 'ge_de' ? 'A' : 'T');
                $ws_entity2 = $adb->query_result($records, $i, 'status') == '' ? $arr_entity2[1] : $arr_entity2[0];
                $firstname = $activitytype . " | " . $firstname . " |";
                $lastname = getValidDisplayDate($adb->query_result($records, $i, 'date_start'));
                $timequery = "select time_start from vtiger_activity where activityid =?";
                $timequeryresult = $adb->pquery($timequery, array($adb->query_result($records, $i, $entityidfield)));
                $time_start = $adb->query_result($timequeryresult, 0, 'time_start');
                //cut seconds if exist
                $time = strlen($time_start) > 5 ? substr($time_start, 0, 5) . '' : $time_start;
                $lastname .= " {$time}";
            }
            $id = $ws_entity2 . "x" . $adb->query_result($records, $i, $entityidfield);
            $output .= '
			<li><a class="ui-btn ui-btn-icon-right ui-icon-carat-r" target="_self" href="?_operation=fetchRecordWithGrouping&record=' . $id . '" target="_self">' . $firstname . '&nbsp;' . $lastname . '</a></li>
			
			';
            /* <li class="ui-btn-inner ui-btn ui-btn-up-c ui-li ui-first-child" data-corners="false" data-shadow="false" data-iconshadow="true" data-wrapperels="div" data-icon="false" data-theme="c" >
            				<div class="ui-btn-inner ui-li">
            					<div class="ui-btn-text">
            					<a class="ui-link-inherit" target="_self" href="?_operation=fetchRecordWithGrouping&record='.$id.'" target="_self">'.$firstname.'&nbsp;'.$lastname.'</a>
            				</div>
            				<span class="ui-icon ui-icon-arrow-r ui-icon-shadow"> </span>
            				</div>
            			</li> */
        }
        $response = new Mobile_API_Response();
        $response->setResult($output);
        return $response;
    }
コード例 #29
0
 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;
 }
コード例 #30
0
 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;
 }