예제 #1
0
 protected function detectModuleName($recordid)
 {
     if ($this->module === false) {
         $this->module = Mobile_WS_Utils::detectModulenameFromRecordId($recordid);
     }
     return $this->module;
 }
예제 #2
0
 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;
 }
예제 #4
0
 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;
 }
예제 #5
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;
 }
예제 #6
0
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;
}