protected function detectModuleName($recordid) { if ($this->module === false) { $this->module = Mobile_WS_Utils::detectModulenameFromRecordId($recordid); } return $this->module; }
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; }
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 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 vtws_history($element, $user) { $MAXLIMIT = 100; $adb = PearDatabase::getInstance(); // Mandatory input validation if (empty($element['module']) && empty($element['record'])) { throw new WebServiceException(WebServiceErrorCode::$MANDFIELDSMISSING, "Missing mandatory input values."); } if (!CRMEntity::getInstance('ModTracker') || !vtlib_isModuleActive('ModTracker')) { throw new WebServiceException("TRACKING_MODULE_NOT_ACTIVE", "Tracking module not active."); } $idComponents = NULL; $moduleName = $element['module']; $record = $element['record']; $mode = empty($element['mode']) ? 'Private' : $element['mode']; // Private or All $page = empty($element['page']) ? 0 : intval($element['page']); // Page to start $acrossAllModule = false; if ($moduleName == 'Home') { $acrossAllModule = true; } // Pre-condition check if (empty($moduleName)) { $moduleName = Mobile_WS_Utils::detectModulenameFromRecordId($record); $idComponents = vtws_getIdComponents($record); // We have it - as the input is validated. } if (!$acrossAllModule && !ModTracker::isTrackingEnabledForModule($moduleName)) { throw new WebServiceException("Module_NOT_TRACKED", "Module not tracked for changes."); } // Per-condition has been met, perform the operation $sql = ''; $params = array(); // REFER: modules/ModTracker/ModTracker.php // Two split phases for data extraction - so we can apply limit of retrieveal at record level. $sql = 'SELECT vtiger_modtracker_basic.* FROM vtiger_modtracker_basic INNER JOIN vtiger_crmentity ON vtiger_modtracker_basic.crmid = vtiger_crmentity.crmid AND vtiger_crmentity.deleted = 0'; if ($mode == 'Private') { $sql .= ' WHERE vtiger_modtracker_basic.whodid = ?'; $params[] = $user->getId(); } else { if ($mode == 'All') { if ($acrossAllModule) { // TODO collate only active (or enabled) modules for tracking. } else { if ($moduleName) { $sql .= ' WHERE vtiger_modtracker_basic.module = ?'; $params[] = $moduleName; } else { $sql .= ' WHERE vtiger_modtracker_basic.crmid = ?'; $params[] = $idComponents[1]; } } } } // Get most recently tracked changes with limit $start = $page * $MAXLIMIT; if ($start > 0) { $start = $start + 1; } // Adjust the start range $sql .= sprintf(' ORDER BY vtiger_modtracker_basic.id DESC LIMIT %s,%s', $start, $MAXLIMIT); $result = $adb->pquery($sql, $params); $recordValuesMap = array(); $orderedIds = array(); while ($row = $adb->fetch_array($result)) { $orderedIds[] = $row['id']; $whodid = vtws_history_entityIdHelper('Users', $row['whodid']); $crmid = vtws_history_entityIdHelper($acrossAllModule ? '' : $moduleName, $row['crmid']); $status = $row['status']; $statuslabel = ''; switch ($status) { case ModTracker::$UPDATED: $statuslabel = 'updated'; break; case ModTracker::$DELETED: $statuslabel = 'deleted'; break; case ModTracker::$CREATED: $statuslabel = 'created'; break; case ModTracker::$RESTORED: $statuslabel = 'restored'; break; case ModTracker::$LINK: $statuslabel = 'link'; break; case ModTracker::$UNLINK: $statuslabel = 'unlink'; break; } $item['modifieduser'] = $whodid; $item['id'] = $crmid; $item['modifiedtime'] = $row['changedon']; $item['status'] = $status; $item['statuslabel'] = $statuslabel; $item['values'] = array(); $recordValuesMap[$row['id']] = $item; } $historyItems = array(); // Minor optimizatin to avoid 2nd query run when there is nothing to expect. if (!empty($orderedIds)) { $sql = 'SELECT vtiger_modtracker_detail.* FROM vtiger_modtracker_detail'; $sql .= ' WHERE vtiger_modtracker_detail.id IN (' . generateQuestionMarks($orderedIds) . ')'; // LIMIT here is not required as $ids extracted is with limit at record level earlier. $params = $orderedIds; $result = $adb->pquery($sql, $params); while ($row = $adb->fetch_array($result)) { $item = $recordValuesMap[$row['id']]; // NOTE: For reference field values transform them to webservice id. $item['values'][$row['fieldname']] = array('previous' => $row['prevalue'], 'current' => $row['postvalue']); $recordValuesMap[$row['id']] = $item; } // Group the values per basic-transaction foreach ($orderedIds as $id) { $historyItems[] = $recordValuesMap[$id]; } } return $historyItems; }