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; } }
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); }
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); }
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; }