示例#1
0
 public function revise($element)
 {
     $ids = vtws_getIdComponents($element["id"]);
     $element = DataTransform::sanitizeForInsert($element, $this->meta);
     $crmObject = new VtigerCRMObject($this->tabId, true);
     $crmObject->setObjectId($ids[1]);
     $error = $crmObject->revise($element);
     if (!$error) {
         throw new WebServiceException(WebServiceErrorCode::$DATABASEQUERYERROR, "Database error while performing required operation");
     }
     $id = $crmObject->getObjectId();
     $error = $crmObject->read($id);
     if (!$error) {
         throw new WebServiceException(WebServiceErrorCode::$DATABASEQUERYERROR, "Database error while performing required operation");
     }
     return DataTransform::filterAndSanitize($crmObject->getFields(), $this->meta);
 }
 /**
  * Function gives all the line items related to inventory records
  * @param $parentId - record id or array of the inventory record id's
  * @return <Array> - list of line items
  * @throws WebServiceException - Database error
  */
 public function getAllLineItemForParent($parentId)
 {
     if (is_array($parentId)) {
         $result = null;
         $query = "SELECT * FROM {$this->entityTableName} WHERE id IN (" . generateQuestionMarks($parentId) . ")";
         $transactionSuccessful = vtws_runQueryAsTransaction($query, array($parentId), $result);
         if (!$transactionSuccessful) {
             throw new WebServiceException(WebServiceErrorCode::$DATABASEQUERYERROR, "Database error while performing required operation");
         }
         $lineItemList = array();
         if ($result) {
             $rowCount = $this->pearDB->num_rows($result);
             for ($i = 0; $i < $rowCount; ++$i) {
                 $element = $this->pearDB->query_result_rowdata($result, $i);
                 $element['parent_id'] = $parentId;
                 $lineItemList[$element['id']][] = DataTransform::filterAndSanitize($element, $this->meta);
             }
         }
         return $lineItemList;
     } else {
         $result = null;
         $query = "select * from {$this->entityTableName} where id=?";
         $transactionSuccessful = vtws_runQueryAsTransaction($query, array($parentId), $result);
         if (!$transactionSuccessful) {
             throw new WebServiceException(WebServiceErrorCode::$DATABASEQUERYERROR, "Database error while performing required operation");
         }
         $lineItemList = array();
         if ($result) {
             $rowCount = $this->pearDB->num_rows($result);
             for ($i = 0; $i < $rowCount; ++$i) {
                 $element = $this->pearDB->query_result_rowdata($result, $i);
                 $element['parent_id'] = $parentId;
                 $lineItemList[] = DataTransform::filterAndSanitize($element, $this->meta);
             }
         }
         return $lineItemList;
     }
 }
示例#3
0
 public function retrieve($id)
 {
     $ids = vtws_getIdComponents($id);
     $elemId = $ids[1];
     $success = $this->__retrieve($elemId);
     if (!$success) {
         throw new WebServiceException(WebServiceErrorCode::$RECORDNOTFOUND, "Record not found");
     }
     $element = $this->getElement();
     return DataTransform::filterAndSanitize($element, $this->meta);
 }
 public function retrieve($id)
 {
     $ids = vtws_getIdComponents($id);
     $elemid = $ids[1];
     $query = "select * from {$this->entityTableName} where {$this->meta->getObectIndexColumn()}=?";
     $transactionSuccessful = vtws_runQueryAsTransaction($query, array($elemid), $result);
     if (!$transactionSuccessful) {
         throw new WebServiceException(WebServiceErrorCode::$DATABASEQUERYERROR, "Database error while performing required operation");
     }
     $adb = $this->pearDB;
     if ($result) {
         $rowCount = $adb->num_rows($result);
         if ($rowCount > 0) {
             $element = $adb->query_result_rowdata($result, 0);
         }
     }
     return DataTransform::filterAndSanitize($element, $this->meta);
 }
示例#5
0
 public function update($element)
 {
     global $adb;
     $ids = vtws_getIdComponents($element["id"]);
     if (!empty($element['filename'])) {
         $element['filesize'] = $element['filename']['size'];
         $attachid = SaveAttachmentDB($element);
         $element['filetype'] = $element['filename']['type'];
         $element['filename'] = $filename = str_replace(' ', '_', $element['filename']['name']);
     }
     $relations = $element['relations'];
     unset($element['relations']);
     $element = DataTransform::sanitizeForInsert($element, $this->meta);
     $crmObject = new VtigerCRMObject($this->tabId, true);
     $crmObject->setObjectId($ids[1]);
     $error = $crmObject->update($element);
     if (!$error) {
         throw new WebServiceException(WebServiceErrorCode::$DATABASEQUERYERROR, "Database error while performing required operation");
     }
     $id = $crmObject->getObjectId();
     $error = $crmObject->read($id);
     if (!$error) {
         throw new WebServiceException(WebServiceErrorCode::$DATABASEQUERYERROR, "Database error while performing required operation");
     }
     if (!empty($attachid)) {
         // Link file attached to document
         $adb->pquery("DELETE from vtiger_seattachmentsrel where crmid=?", array($id));
         $adb->pquery("INSERT INTO vtiger_seattachmentsrel(crmid, attachmentsid) VALUES(?,?)", array($id, $attachid));
     }
     // Establish relations
     //$adb->pquery("DELETE from vtiger_senotesrel where crmid=?",Array($id));
     //foreach ($relations as $rel) {
     //	$ids = vtws_getIdComponents($rel);
     //	$relid = $ids[1];
     //	$adb->pquery("INSERT INTO vtiger_senotesrel(crmid, notesid) VALUES(?,?)",Array($relid, $id));
     //}
     return DataTransform::filterAndSanitize($crmObject->getFields(), $this->meta);
 }
示例#6
0
function vtws_sync($mtime, $elementType, $user)
{
    global $adb, $recordString, $modifiedTimeString;
    $ignoreModules = array("");
    $typed = true;
    $dformat = "Y-m-d H:i:s";
    $datetime = date($dformat, $mtime);
    $setypeArray = array();
    $setypeData = array();
    $setypeHandler = array();
    $setypeNoAccessArray = array();
    if (!isset($elementType) || $elementType == '' || $elementType == null) {
        $typed = false;
    }
    $adb->startTransaction();
    $q = "select crmid,setype from vtiger_crmentity where modifiedtime >? and smownerid=? and deleted=0";
    $params = array($datetime, $user->id);
    if ($typed) {
        $q = $q . " and setype=?";
        array_push($params, $elementType);
    }
    $result = $adb->pquery($q, $params);
    do {
        if ($arre) {
            if (strpos($arre["setype"], " ") === FALSE) {
                if ($arre["setype"] == 'Calendar') {
                    $seType = vtws_getCalendarEntityType($arre['crmid']);
                } else {
                    $seType = $arre["setype"];
                }
                if (array_search($seType, $ignoreModules) === FALSE) {
                    $setypeArray[$arre["crmid"]] = $seType;
                    if (!$setypeData[$seType]) {
                        $webserviceObject = VtigerWebserviceObject::fromName($adb, $seType);
                        $handlerPath = $webserviceObject->getHandlerPath();
                        $handlerClass = $webserviceObject->getHandlerClass();
                        require_once $handlerPath;
                        $setypeHandler[$seType] = new $handlerClass($webserviceObject, $user, $adb, $log);
                        $meta = $setypeHandler[$seType]->getMeta();
                        $setypeData[$seType] = new VtigerCRMObject(getTabId($meta->getEntityName()), true);
                    }
                }
            }
        }
        $arre = $adb->fetchByAssoc($result);
    } while ($arre);
    $output = array();
    $output["updated"] = array();
    foreach ($setypeArray as $key => $val) {
        $handler = $setypeHandler[$val];
        $meta = $handler->getMeta();
        if (!$meta->hasAccess() || !$meta->hasWriteAccess() || !$meta->hasPermission(EntityMeta::$RETRIEVE, $key)) {
            if (!$setypeNoAccessArray[$val]) {
                $setypeNoAccessArray[] = $val;
            }
            continue;
        }
        try {
            $error = $setypeData[$val]->read($key);
            if (!$error) {
                //Ignore records whose fetch results in an error.
                continue;
            }
            $output["updated"][] = DataTransform::filterAndSanitize($setypeData[$val]->getFields(), $meta);
        } catch (WebServiceException $e) {
            //ignore records the user doesn't have access to.
            continue;
        } catch (Exception $e) {
            throw new WebServiceException(WebServiceErrorCode::$INTERNALERROR, "Unknown Error while processing request");
        }
    }
    $setypeArray = array();
    $setypeData = array();
    $q = "select crmid,setype,modifiedtime from vtiger_crmentity where modifiedtime >? and smownerid=? and deleted=1";
    $params = array($datetime, $user->id);
    if ($typed) {
        $q = $q . " and setype=?";
        array_push($params, $elementType);
    }
    $result = $adb->pquery($q, $params);
    do {
        if ($arre) {
            if (strpos($arre["setype"], " ") === FALSE) {
                if ($arre["setype"] == 'Calendar') {
                    $seType = vtws_getCalendarEntityType($arre['crmid']);
                } else {
                    $seType = $arre["setype"];
                }
                if (array_search($seType, $ignoreModules) === FALSE) {
                    $setypeArray[$arre["crmid"]] = $seType;
                    if (!$setypeData[$seType]) {
                        $webserviceObject = VtigerWebserviceObject::fromName($adb, $seType);
                        $handlerPath = $webserviceObject->getHandlerPath();
                        $handlerClass = $webserviceObject->getHandlerClass();
                        require_once $handlerPath;
                        $setypeHandler[$seType] = new $handlerClass($webserviceObject, $user, $adb, $log);
                        $meta = $setypeHandler[$seType]->getMeta();
                        $setypeData[$seType] = new VtigerCRMObject(getTabId($meta->getEntityName()), true);
                    }
                }
            }
        }
        $arre = $adb->fetchByAssoc($result);
    } while ($arre);
    $output["deleted"] = array();
    foreach ($setypeArray as $key => $val) {
        $handler = $setypeHandler[$val];
        $meta = $handler->getMeta();
        if (!$meta->hasAccess() || !$meta->hasWriteAccess()) {
            if (!$setypeNoAccessArray[$val]) {
                $setypeNoAccessArray[] = $val;
            }
            continue;
        }
        $output["deleted"][] = vtws_getId($meta->getEntityId(), $key);
    }
    $q = "select max(modifiedtime) as modifiedtime from vtiger_crmentity where modifiedtime >? and smownerid=?";
    $params = array($datetime, $user->id);
    if ($typed) {
        $q = $q . " and setype=?";
        array_push($params, $elementType);
    } else {
        if (sizeof($setypeNoAccessArray) > 0) {
            $q = $q . " and setype not in ('" . generateQuestionMarks($setypeNoAccessArray) . "')";
            array_push($params, $setypeNoAccessArray);
        }
    }
    $result = $adb->pquery($q, $params);
    $arre = $adb->fetchByAssoc($result);
    $modifiedtime = $arre['modifiedtime'];
    if (!$modifiedtime) {
        $modifiedtime = $mtime;
    } else {
        $modifiedtime = vtws_getSeconds($modifiedtime);
    }
    if (is_string($modifiedtime)) {
        $modifiedtime = intval($modifiedtime);
    }
    $output['lastModifiedTime'] = $modifiedtime;
    $error = $adb->hasFailedTransaction();
    $adb->completeTransaction();
    if ($error) {
        throw new WebServiceException(WebServiceErrorCode::$DATABASEQUERYERROR, "Database error while performing required operation");
    }
    VTWS_PreserveGlobal::flush();
    return $output;
}