function vtws_query_related($query, $id, $relatedLabel, $user, $filterClause = null) { global $log, $adb; $webserviceObject = VtigerWebserviceObject::fromId($adb, $id); $handlerPath = $webserviceObject->getHandlerPath(); $handlerClass = $webserviceObject->getHandlerClass(); require_once $handlerPath; $handler = new $handlerClass($webserviceObject, $user, $adb, $log); $meta = $handler->getMeta(); $entityName = $meta->getObjectEntityName($id); // Extract related module name from query. $relatedType = null; if (preg_match("/FROM\\s+([^\\s]+)/i", $query, $m)) { $relatedType = trim($m[1]); } // Check for presence of expected relation. $found = false; $relatedTypes = vtws_relatedtypes($entityName, $user); foreach ($relatedTypes['information'] as $label => $information) { if ($label == $relatedLabel && $information['name'] == $relatedType) { $found = true; break; } } if (!$found) { throw new WebServiceException(WebServiceErrorCode::$UNKOWNENTITY, "Relation specified is incorrect"); } vtws_preserveGlobal('currentModule', $entityName); // Fetch related record IDs - so we can further retrieve complete information using vtws_query $relatedWebserviceObject = VtigerWebserviceObject::fromName($adb, $relatedType); $relatedHandlerPath = $relatedWebserviceObject->getHandlerPath(); $relatedHandlerClass = $relatedWebserviceObject->getHandlerClass(); require_once $relatedHandlerPath; $relatedHandler = new $relatedHandlerClass($relatedWebserviceObject, $user, $adb, $log); $relatedIds = $handler->relatedIds($id, $relatedType, $relatedLabel, $relatedHandler); // Initialize return value $relatedRecords = array(); // Rewrite query and extract related records if there at least one. if (!empty($relatedIds)) { $relatedIdClause = "id IN ('" . implode("','", $relatedIds) . "')"; if (stripos($query, 'WHERE') == false) { $query .= " WHERE " . $relatedIdClause; } else { $queryParts = explode('WHERE', $query); $query = $queryParts[0] . " WHERE " . $relatedIdClause; $query .= " AND " . $queryParts[1]; } if (!empty($filterClause)) { $query .= " " . $filterClause; } $query .= ";"; $relatedRecords = vtws_query($query, $user); } VTWS_PreserveGlobal::flush(); return $relatedRecords; }
function vtws_retrieve($id, $user) { $adb = PearDatabase::getInstance(); $log = vglobal('log'); $webserviceObject = VtigerWebserviceObject::fromId($adb, $id); $handlerPath = $webserviceObject->getHandlerPath(); $handlerClass = $webserviceObject->getHandlerClass(); require_once $handlerPath; $handler = new $handlerClass($webserviceObject, $user, $adb, $log); $meta = $handler->getMeta(); $entityName = $meta->getObjectEntityName($id); $types = vtws_listtypes(null, $user); if (!in_array($entityName, $types['types'])) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to perform the operation is denied"); } if ($meta->hasReadAccess() !== true) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to write is denied"); } if ($entityName !== $webserviceObject->getEntityName()) { throw new WebServiceException(WebServiceErrorCode::$INVALIDID, "Id specified is incorrect"); } if (!$meta->hasPermission(EntityMeta::$RETRIEVE, $id)) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to read given object is denied"); } $idComponents = vtws_getIdComponents($id); if (!$meta->exists($idComponents[1])) { throw new WebServiceException(WebServiceErrorCode::$RECORDNOTFOUND, "Record you are trying to access is not found"); } $entity = $handler->retrieve($id); VTWS_PreserveGlobal::flush(); return $entity; }
function vtws_setrelation($relateThisId, $withTheseIds, $user) { global $log, $adb; list($moduleId, $elementId) = vtws_getIdComponents($relateThisId); $webserviceObject = VtigerWebserviceObject::fromId($adb, $moduleId); $handlerPath = $webserviceObject->getHandlerPath(); $handlerClass = $webserviceObject->getHandlerClass(); require_once $handlerPath; $handler = new $handlerClass($webserviceObject, $user, $adb, $log); $meta = $handler->getMeta(); $moduleName = $meta->getObjectEntityName($relateThisId); $types = vtws_listtypes(null, $user); if (!in_array($moduleName, $types['types'])) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to perform the operation is denied"); } if ($moduleName !== $webserviceObject->getEntityName()) { throw new WebServiceException(WebServiceErrorCode::$INVALIDID, "Id specified is incorrect"); } if (!$meta->hasPermission(EntityMeta::$UPDATE, $relateThisId)) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to read given object is denied"); } if (!$meta->exists($elementId)) { throw new WebServiceException(WebServiceErrorCode::$RECORDNOTFOUND, "Record you are trying to access is not found"); } if ($meta->hasWriteAccess() !== true) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to write is denied"); } vtws_internal_setrelation($elementId, $moduleName, $withTheseIds); VTWS_PreserveGlobal::flush(); return true; }
function vtws_update($element, $user) { global $log, $adb; $idList = vtws_getIdComponents($element['id']); $webserviceObject = VtigerWebserviceObject::fromId($adb, $idList[0]); $handlerPath = $webserviceObject->getHandlerPath(); $handlerClass = $webserviceObject->getHandlerClass(); require_once $handlerPath; $handler = new $handlerClass($webserviceObject, $user, $adb, $log); $meta = $handler->getMeta(); $entityName = $meta->getObjectEntityName($element['id']); $types = vtws_listtypes($user); if (!in_array($entityName, $types['types'])) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to perform the operation is denied"); } if ($entityName !== $webserviceObject->getEntityName()) { throw new WebServiceException(WebServiceErrorCode::$INVALIDID, "Id specified is incorrect"); } if (!$meta->hasPermission(EntityMeta::$UPDATE, $element['id'])) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to read given object is denied"); } if (!$meta->exists($idList[1])) { throw new WebServiceException(WebServiceErrorCode::$RECORDNOTFOUND, "Record you are trying to access is not found"); } if ($meta->hasWriteAccess() !== true) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to write is denied"); } $referenceFields = $meta->getReferenceFieldDetails(); foreach ($referenceFields as $fieldName => $details) { if (isset($element[$fieldName]) && strlen($element[$fieldName]) > 0) { $ids = vtws_getIdComponents($element[$fieldName]); $elemTypeId = $ids[0]; $elemId = $ids[1]; $referenceObject = VtigerWebserviceObject::fromId($adb, $elemTypeId); if (!in_array($referenceObject->getEntityName(), $details)) { throw new WebServiceException(WebServiceErrorCode::$REFERENCEINVALID, "Invalid reference specified for {$fieldName}"); } if (!in_array($referenceObject->getEntityName(), $types['types'])) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to access reference type is denied " . $referenceObject->getEntityName()); } } else { if ($element[$fieldName] !== NULL) { unset($element[$fieldName]); } } } $meta->hasMandatoryFields($element); $ownerFields = $meta->getOwnerFields(); if (is_array($ownerFields) && sizeof($ownerFields) > 0) { foreach ($ownerFields as $ownerField) { if (isset($element[$ownerField]) && $element[$ownerField] !== null && !$meta->hasAssignPrivilege($element[$ownerField])) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Cannot assign record to the given user"); } } } $entity = $handler->update($element); VTWS_PreserveGlobal::flush(); return $entity; }
function vtws_retrieve($id, $user) { global $log, $adb; $webserviceObject = VtigerWebserviceObject::fromId($adb, $id); $handlerPath = $webserviceObject->getHandlerPath(); $handlerClass = $webserviceObject->getHandlerClass(); require_once $handlerPath; $handler = new $handlerClass($webserviceObject, $user, $adb, $log); $meta = $handler->getMeta(); $entityName = $meta->getObjectEntityName($id); $types = vtws_listtypes(null, $user); if (!in_array($entityName, $types['types'])) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to perform the operation is denied"); } if ($meta->hasReadAccess() !== true) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to write is denied"); } if ($entityName !== $webserviceObject->getEntityName()) { throw new WebServiceException(WebServiceErrorCode::$INVALIDID, "Id specified is incorrect"); } if (!$meta->hasPermission(EntityMeta::$RETRIEVE, $id)) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to read given object is denied"); } $idComponents = vtws_getIdComponents($id); if (!$meta->exists($idComponents[1])) { throw new WebServiceException(WebServiceErrorCode::$RECORDNOTFOUND, "Record you are trying to access is not found"); } $entity = $handler->retrieve($id); //return product lines if ($entityName == 'Quotes' || $entityName == 'PurchaseOrder' || $entityName == 'SalesOrder' || $entityName == 'Invoice') { list($wsid, $recordid) = explode('x', $id); $result = $adb->pquery('select * from vtiger_inventoryproductrel where id=?', array($recordid)); while ($row = $adb->getNextRow($result, false)) { if ($row['discount_amount'] == NULL && $row['discount_percent'] == NULL) { $discount = 0; $discount_type = 0; } else { $discount = 1; } if ($row['discount_amount'] == NULL) { $discount_amount = 0; } else { $discount_amount = $row['discount_amount']; $discount_type = 'amount'; } if ($row['discount_percent'] == NULL) { $discount_percent = 0; } else { $discount_percent = $row['discount_percent']; $discount_type = 'percentage'; } $onlyPrd = array("productid" => $row['productid'], "comment" => $row['comment'], "qty" => $row['quantity'], "listprice" => $row['listprice'], 'discount' => $discount, "discount_type" => $discount_type, "discount_percentage" => $discount_percent, "discount_amount" => $discount_amount); $entity['pdoInformation'][] = $onlyPrd; } } VTWS_PreserveGlobal::flush(); return $entity; }
static function fromQuery($adb, $query) { $moduleRegex = "/[fF][rR][Oo][Mm]\\s+([^\\s;]+)/"; $matches = array(); $found = preg_match($moduleRegex, $query, $matches); if ($found === 1) { return VtigerWebserviceObject::fromName($adb, trim($matches[1])); } throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to perform the operation is denied for query"); }
function vtws_retrievedocattachment($all_ids, $returnfile, $user) { global $log, $adb; $entities = array(); $docWSId = vtyiicpng_getWSEntityId('Documents'); $log->debug("Entering function vtws_retrievedocattachment"); $all_ids = "(" . str_replace($docWSId, '', $all_ids) . ")"; $query = "SELECT n.notesid, n.filename, n.filelocationtype\n FROM vtiger_notes n\n INNER JOIN vtiger_crmentity c ON c.crmid=n.notesid\n WHERE n.notesid in {$all_ids} and n.filelocationtype in ('I','E') and c.deleted=0"; $result = $adb->query($query); $nr = $adb->num_rows($result); for ($i = 0; $i < $nr; $i++) { $id = $docWSId . $adb->query_result($result, $i, 'notesid'); $webserviceObject = VtigerWebserviceObject::fromId($adb, $id); $handlerPath = $webserviceObject->getHandlerPath(); $handlerClass = $webserviceObject->getHandlerClass(); require_once $handlerPath; $handler = new $handlerClass($webserviceObject, $user, $adb, $log); $meta = $handler->getMeta(); $entityName = $meta->getObjectEntityName($id); $types = vtws_listtypes(null, $user); if (!in_array($entityName, $types['types'])) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to perform the operation is denied"); } if ($meta->hasReadAccess() !== true) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to write is denied"); } if ($entityName !== $webserviceObject->getEntityName()) { throw new WebServiceException(WebServiceErrorCode::$INVALIDID, "Id specified is incorrect"); } if (!$meta->hasPermission(EntityMeta::$RETRIEVE, $id)) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to read given object ({$id}) is denied"); } $ids = vtws_getIdComponents($id); if (!$meta->exists($ids[1])) { throw new WebServiceException(WebServiceErrorCode::$RECORDNOTFOUND, "Document Record you are trying to access is not found"); } $document_id = $ids[1]; $filetype = $adb->query_result($result, $i, 'filelocationtype'); if ($filetype == 'E') { $entity["recordid"] = $adb->query_result($result, $i, 'notesid'); $entity["filetype"] = $fileType; $entity["filename"] = $adb->query_result($result, $i, 'filename'); $entity["filesize"] = 0; $entity["attachment"] = base64_encode(''); } elseif ($filetype == 'I') { $entity = vtws_retrievedocattachment_get_attachment($document_id, true, $returnfile); } $entities[$id] = $entity; VTWS_PreserveGlobal::flush(); } // end for ids $log->debug("Leaving function vtws_retrievedocattachment"); return $entities; }
function cbws_getrecordimageinfo($id, $user) { global $log, $adb, $site_URL; $log->debug("Entering function cbws_getrecordimageinfo({$id})"); $webserviceObject = VtigerWebserviceObject::fromId($adb, $id); $handlerPath = $webserviceObject->getHandlerPath(); $handlerClass = $webserviceObject->getHandlerClass(); require_once $handlerPath; $handler = new $handlerClass($webserviceObject, $user, $adb, $log); $meta = $handler->getMeta(); $entityName = $meta->getObjectEntityName($id); $types = vtws_listtypes(null, $user); if (!in_array($entityName, $types['types'])) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to perform the operation is denied"); } if ($meta->hasReadAccess() !== true) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to read entity is denied"); } if ($entityName !== $webserviceObject->getEntityName()) { throw new WebServiceException(WebServiceErrorCode::$INVALIDID, "Id specified is incorrect"); } if (!$meta->hasPermission(EntityMeta::$RETRIEVE, $id)) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to read given object is denied"); } $idComponents = vtws_getIdComponents($id); if (!$meta->exists($idComponents[1])) { throw new WebServiceException(WebServiceErrorCode::$RECORDNOTFOUND, "Record you are trying to access is not found"); } $ids = vtws_getIdComponents($id); $pdoid = $ids[1]; $rdo = array(); $query = 'select vtiger_attachments.name, vtiger_attachments.type, vtiger_attachments.attachmentsid, vtiger_attachments.path from vtiger_attachments inner join vtiger_crmentity on vtiger_crmentity.crmid = vtiger_attachments.attachmentsid inner join vtiger_seattachmentsrel on vtiger_attachments.attachmentsid=vtiger_seattachmentsrel.attachmentsid where (vtiger_crmentity.setype LIKE "%Image" or vtiger_crmentity.setype LIKE "%Attachment") and deleted=0 and vtiger_seattachmentsrel.crmid=?'; $result_image = $adb->pquery($query, array($pdoid)); $rdo['results'] = $adb->num_rows($result_image); $rdo['images'] = array(); while ($img = $adb->fetch_array($result_image)) { $imga = array(); $imga['name'] = $img['name']; $imga['path'] = $img['path']; $imga['fullpath'] = $site_URL . '/' . $img['path'] . $img['attachmentsid'] . '_' . $img['name']; $imga['type'] = $img['type']; $imga['id'] = $img['attachmentsid']; $rdo['images'][] = $imga; } VTWS_PreserveGlobal::flush(); $log->debug("Leaving function cbws_getrecordimageinfo"); return $rdo; }
function vtws_listtypes($user) { try { global $adb, $log; vtws_preserveGlobal('current_user', $user); //get All the modules the current user is permitted to Access. $allModuleNames = getPermittedModuleNames(); if (array_search('Calendar', $allModuleNames) !== false) { array_push($allModuleNames, 'Events'); } //get All the CRM entity names. $webserviceEntities = vtws_getWebserviceEntities(); $accessibleModules = array_values(array_intersect($webserviceEntities['module'], $allModuleNames)); $entities = $webserviceEntities['entity']; $accessibleEntities = array(); foreach ($entities as $entity) { $webserviceObject = VtigerWebserviceObject::fromName($adb, $entity); $handlerPath = $webserviceObject->getHandlerPath(); $handlerClass = $webserviceObject->getHandlerClass(); require_once $handlerPath; $handler = new $handlerClass($webserviceObject, $user, $adb, $log); $meta = $handler->getMeta(); if ($meta->hasAccess() === true) { array_push($accessibleEntities, $entity); } } } catch (WebServiceException $exception) { throw $exception; } catch (Exception $exception) { throw new WebServiceException(WebServiceErrorCode::$DATABASEQUERYERROR, "An Database error occured while performing the operation"); } $default_language = VTWS_PreserveGlobal::getGlobal('default_language'); $current_language = vtws_preserveGlobal('current_language', $default_language); $appStrings = return_application_language($current_language); $appListString = return_app_list_strings_language($current_language); vtws_preserveGlobal('app_strings', $appStrings); vtws_preserveGlobal('app_list_strings', $appListString); $informationArray = array(); foreach ($accessibleModules as $module) { $vtigerModule = $module == 'Events' ? 'Calendar' : $module; $informationArray[$module] = array('isEntity' => true, 'label' => getTranslatedString($module, $vtigerModule), 'singular' => getTranslatedString('SINGLE_' . $module, $vtigerModule)); } foreach ($accessibleEntities as $entity) { $label = isset($appStrings[$entity]) ? $appStrings[$entity] : $entity; $singular = isset($appStrings['SINGLE_' . $entity]) ? $appStrings['SINGLE_' . $entity] : $entity; $informationArray[$entity] = array('isEntity' => false, 'label' => $label, 'singular' => $singular); } VTWS_PreserveGlobal::flush(); return array("types" => array_merge($accessibleModules, $accessibleEntities), 'information' => $informationArray); }
function vtws_query($q, $user) { static $vtws_query_cache = array(); $adb = PearDatabase::getInstance(); $log = vglobal('log'); // Cache the instance for re-use $moduleRegex = "/[fF][rR][Oo][Mm]\\s+([^\\s;]+)/"; $moduleName = ''; if (preg_match($moduleRegex, $q, $m)) { $moduleName = trim($m[1]); } if (!isset($vtws_create_cache[$moduleName]['webserviceobject'])) { $webserviceObject = VtigerWebserviceObject::fromQuery($adb, $q); $vtws_query_cache[$moduleName]['webserviceobject'] = $webserviceObject; } else { $webserviceObject = $vtws_query_cache[$moduleName]['webserviceobject']; } // END $handlerPath = $webserviceObject->getHandlerPath(); $handlerClass = $webserviceObject->getHandlerClass(); require_once $handlerPath; // Cache the instance for re-use if (!isset($vtws_query_cache[$moduleName]['handler'])) { $handler = new $handlerClass($webserviceObject, $user, $adb, $log); $vtws_query_cache[$moduleName]['handler'] = $handler; } else { $handler = $vtws_query_cache[$moduleName]['handler']; } // END // Cache the instance for re-use if (!isset($vtws_query_cache[$moduleName]['meta'])) { $meta = $handler->getMeta(); $vtws_query_cache[$moduleName]['meta'] = $meta; } else { $meta = $vtws_query_cache[$moduleName]['meta']; } // END $types = vtws_listtypes(null, $user); if (!in_array($webserviceObject->getEntityName(), $types['types'])) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to perform the operation is denied"); } if (!$meta->hasReadAccess()) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to read is denied"); } $result = $handler->query($q); VTWS_PreserveGlobal::flush(); return $result; }
function vtws_extendSession() { global $adb, $API_VERSION, $application_unique_key; if (isset($_SESSION["authenticated_user_id"]) && $_SESSION["app_unique_key"] == $application_unique_key) { $userId = $_SESSION["authenticated_user_id"]; $sessionManager = new SessionManager(); $sessionManager->set("authenticatedUserId", $userId); $crmObject = VtigerWebserviceObject::fromName($adb, "Users"); $userId = vtws_getId($crmObject->getEntityId(), $userId); $vtigerVersion = vtws_getVtigerVersion(); $resp = array("sessionName" => $sessionManager->getSessionId(), "userId" => $userId, "version" => $API_VERSION, "vtigerVersion" => $vtigerVersion); return $resp; } else { throw new WebServiceException(WebServiceErrorCode::$AUTHFAILURE, "Authencation Failed"); } }
function vtws_describe($elementType, $user) { global $log, $adb; $webserviceObject = VtigerWebserviceObject::fromName($adb, $elementType); $handlerPath = $webserviceObject->getHandlerPath(); $handlerClass = $webserviceObject->getHandlerClass(); require_once $handlerPath; $handler = new $handlerClass($webserviceObject, $user, $adb, $log); $meta = $handler->getMeta(); $types = vtws_listtypes(null, $user); if (!in_array($elementType, $types['types'])) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to perform the operation is denied"); } $entity = $handler->describe($elementType); VTWS_PreserveGlobal::flush(); return $entity; }
function cbws_getproductimageinfo($id, $user) { global $log, $adb, $site_URL; $log->debug("Entering function cbws_getproductimageinfo({$id})"); $webserviceObject = VtigerWebserviceObject::fromId($adb, $id); $handlerPath = $webserviceObject->getHandlerPath(); $handlerClass = $webserviceObject->getHandlerClass(); require_once $handlerPath; $handler = new $handlerClass($webserviceObject, $user, $adb, $log); $meta = $handler->getMeta(); $entityName = $meta->getObjectEntityName($id); if ($entityName != 'Products') { throw new WebServiceException(WebServiceErrorCode::$INVALIDID, "Entity ID must be a product"); } $log->debug("Leaving function cbws_getproductimageinfo"); return cbws_getmoduleimageinfo($id, $user); }
function cbws_SearchGlobalVar($gvname, $defaultvalue, $gvmodule, $user) { global $log, $adb, $current_user; $entityName = 'GlobalVariable'; $webserviceObject = VtigerWebserviceObject::fromName($adb, $entityName); $handlerPath = $webserviceObject->getHandlerPath(); $handlerClass = $webserviceObject->getHandlerClass(); require_once $handlerPath; $handler = new $handlerClass($webserviceObject, $user, $adb, $log); $meta = $handler->getMeta(); if ($meta->hasReadAccess() !== true) { return $defaultvalue; } require_once 'modules/GlobalVariable/GlobalVariable.php'; $rdo = GlobalVariable::getVariable($gvname, $defaultvalue, $gvmodule, $user->id); VTWS_PreserveGlobal::flush(); return $rdo; }
function vtws_query($q, $user) { global $log, $adb; $webserviceObject = VtigerWebserviceObject::fromQuery($adb, $q); $handlerPath = $webserviceObject->getHandlerPath(); $handlerClass = $webserviceObject->getHandlerClass(); require_once $handlerPath; $handler = new $handlerClass($webserviceObject, $user, $adb, $log); $meta = $handler->getMeta(); $types = vtws_listtypes(null, $user); if (!in_array($webserviceObject->getEntityName(), $types['types'])) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to perform the operation is denied"); } if (!$meta->hasReadAccess()) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to read is denied"); } $result = $handler->query($q); VTWS_PreserveGlobal::flush(); return $result; }
public function relatedIds($id, $relatedModule, $relatedLabel, $relatedHandler = null) { $ids = vtws_getIdComponents($id); $sourceModule = $this->webserviceObject->getEntityName(); global $currentModule; $currentModule = $sourceModule; $sourceRecordModel = Vtiger_Record_Model::getInstanceById($ids[1], $sourceModule); $targetModel = Vtiger_RelationListView_Model::getInstance($sourceRecordModel, $relatedModule, $relatedLabel); $sql = $targetModel->getRelationQuery(); $relatedWebserviceObject = VtigerWebserviceObject::fromName($adb, $relatedModule); $relatedModuleWSId = $relatedWebserviceObject->getEntityId(); // Rewrite query to pull only crmid transformed as webservice id. $sqlFromPart = substr($sql, stripos($sql, ' FROM ') + 6); $sql = sprintf("SELECT DISTINCT concat('%sx',vtiger_crmentity.crmid) as wsid FROM %s", $relatedModuleWSId, $sqlFromPart); $rs = $this->pearDB->pquery($sql, array()); $relatedIds = array(); while ($row = $this->pearDB->fetch_array($rs)) { $relatedIds[] = $row['wsid']; } return $relatedIds; }
/** * @author MAK */ function vtws_deleteUser($id, $newOwnerId, $user) { global $log, $adb; $webserviceObject = VtigerWebserviceObject::fromId($adb, $id); $handlerPath = $webserviceObject->getHandlerPath(); $handlerClass = $webserviceObject->getHandlerClass(); require_once $handlerPath; $handler = new $handlerClass($webserviceObject, $user, $adb, $log); $meta = $handler->getMeta(); $entityName = $meta->getObjectEntityName($id); $types = vtws_listtypes($user); if (!in_array($entityName, $types['types'])) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to perform the operation is denied, EntityName = " . $entityName); } if ($entityName !== $webserviceObject->getEntityName()) { throw new WebServiceException(WebServiceErrorCode::$INVALIDID, "Id specified is incorrect"); } if (!$meta->hasPermission(EntityMeta::$DELETE, $id)) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to read given object is denied"); } $idComponents = vtws_getIdComponents($id); if (!$meta->exists($idComponents[1])) { throw new WebServiceException(WebServiceErrorCode::$RECORDNOTFOUND, "Record you are trying to access is not found, idComponent = " . $idComponents); } if ($meta->hasWriteAccess() !== true) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to write is denied"); } $newIdComponents = vtws_getIdComponents($newOwnerId); if (empty($newIdComponents[1])) { //force the default user to be the default admin user. //added cause eazybusiness team is sending this value empty $newIdComponents[1] = 1; } vtws_transferOwnership($idComponents[1], $newIdComponents[1]); //delete from user vtiger_table; $sql = "delete from vtiger_users where id=?"; vtws_runQueryAsTransaction($sql, array($idComponents[1]), $result); VTWS_PreserveGlobal::flush(); return array("status" => "successful"); }
function cbws_getpdfdata($id, $user) { global $log, $adb; $log->debug("Entering function vtws_getpdfdata"); $webserviceObject = VtigerWebserviceObject::fromId($adb, $id); $handlerPath = $webserviceObject->getHandlerPath(); $handlerClass = $webserviceObject->getHandlerClass(); require_once $handlerPath; $handler = new $handlerClass($webserviceObject, $user, $adb, $log); $meta = $handler->getMeta(); $entityName = $meta->getObjectEntityName($id); $types = vtws_listtypes(null, $user); if (!in_array($entityName, $types['types'])) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to perform the operation is denied"); } if ($meta->hasReadAccess() !== true) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to write is denied"); } if ($entityName !== $webserviceObject->getEntityName()) { throw new WebServiceException(WebServiceErrorCode::$INVALIDID, "Id specified is incorrect"); } if (!$meta->hasPermission(EntityMeta::$RETRIEVE, $id)) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to read given object is denied"); } $idComponents = vtws_getIdComponents($id); if (!$meta->exists($idComponents[1])) { throw new WebServiceException(WebServiceErrorCode::$RECORDNOTFOUND, "Record you are trying to access is not found"); } $objectName = $webserviceObject->getEntityName(); if (!in_array($objectName, array('Invoice', 'Quotes', 'SalesOrder', 'PurchaseOrder'))) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Only Inventory modules support PDF Output."); } $ids = vtws_getIdComponents($id); $document_id = $ids[1]; $entity = get_module_pdf($objectName, $document_id); VTWS_PreserveGlobal::flush(); $log->debug("Leaving function vtws_getpdfdata"); return $entity; }
/** * @author MAK */ function vtws_deleteUser($id, $newOwnerId, $user) { $adb = PearDatabase::getInstance(); $log = vglobal('log'); $webserviceObject = VtigerWebserviceObject::fromId($adb, $id); $handlerPath = $webserviceObject->getHandlerPath(); $handlerClass = $webserviceObject->getHandlerClass(); require_once $handlerPath; $handler = new $handlerClass($webserviceObject, $user, $adb, $log); $meta = $handler->getMeta(); $entityName = $meta->getObjectEntityName($id); $types = vtws_listtypes(null, $user); if (!in_array($entityName, $types['types'])) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to perform the operation is denied, EntityName = " . $entityName); } if ($entityName !== $webserviceObject->getEntityName()) { throw new WebServiceException(WebServiceErrorCode::$INVALIDID, "Id specified is incorrect"); } if (!$meta->hasPermission(EntityMeta::$DELETE, $id)) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to read given object is denied"); } $idComponents = vtws_getIdComponents($id); if (!$meta->exists($idComponents[1])) { throw new WebServiceException(WebServiceErrorCode::$RECORDNOTFOUND, "Record you are trying to access is not found, idComponent = " . $idComponents); } if ($meta->hasWriteAccess() !== true) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to write is denied"); } $newIdComponents = vtws_getIdComponents($newOwnerId); if (empty($newIdComponents[1])) { //force the default user to be the default admin user. $newIdComponents[1] = 1; } $userObj = new Users(); $userObj->transformOwnerShipAndDelete($idComponents[1], $newIdComponents[1]); VTWS_PreserveGlobal::flush(); return array("status" => "successful"); }
function vtws_relatedtypes($elementType, $user) { global $adb, $log; $allowedTypes = vtws_listtypes(null, $user); $webserviceObject = VtigerWebserviceObject::fromName($adb, $elementType); $handlerPath = $webserviceObject->getHandlerPath(); $handlerClass = $webserviceObject->getHandlerClass(); require_once $handlerPath; $handler = new $handlerClass($webserviceObject, $user, $adb, $log); $meta = $handler->getMeta(); $tabid = $meta->getTabId(); $sql = "SELECT vtiger_relatedlists.label, vtiger_tab.name, vtiger_tab.isentitytype FROM vtiger_relatedlists \n INNER JOIN vtiger_tab ON vtiger_tab.tabid=vtiger_relatedlists.related_tabid \n WHERE vtiger_relatedlists.tabid=? AND vtiger_tab.presence = 0"; $params = array($tabid); $rs = $adb->pquery($sql, $params); $return = array('types' => array(), 'information' => array()); while ($row = $adb->fetch_array($rs)) { if (in_array($row['name'], $allowedTypes['types'])) { $return['types'][] = $row['name']; // There can be same module related under different label - so label is our key. $return['information'][$row['label']] = array('name' => $row['name'], 'label' => $row['label'], 'isEntity' => $row['isentitytype']); } } return $return; }
function vtws_addEntityInfo() { require_once 'include/Webservices/Utils.php'; $names = vtws_getModuleNameList(); $moduleHandler = array('file' => 'include/Webservices/VtigerModuleOperation.php', 'class' => 'VtigerModuleOperation'); foreach ($names as $tab) { if (in_array($tab, array('Rss', 'Webmails', 'Recyclebin'))) { continue; } $entityId = $this->db->getUniqueID("vtiger_ws_entity"); $this->db->pquery('insert into vtiger_ws_entity(id,name,handler_path,handler_class,ismodule) values (?,?,?,?,?)', array($entityId, $tab, $moduleHandler['file'], $moduleHandler['class'], 1)); } $entityId = $this->db->getUniqueID("vtiger_ws_entity"); $this->db->pquery('insert into vtiger_ws_entity(id,name,handler_path,handler_class,ismodule) values (?,?,?,?,?)', array($entityId, 'Events', $moduleHandler['file'], $moduleHandler['class'], 1)); $entityId = $this->db->getUniqueID("vtiger_ws_entity"); $this->db->pquery('insert into vtiger_ws_entity(id,name,handler_path,handler_class,ismodule) values (?,?,?,?,?)', array($entityId, 'Users', $moduleHandler['file'], $moduleHandler['class'], 1)); vtws_addDefaultActorTypeEntity('Groups', array('fieldNames' => 'groupname', 'indexField' => 'groupid', 'tableName' => 'vtiger_groups')); require_once "include/Webservices/WebServiceError.php"; require_once 'include/Webservices/VtigerWebserviceObject.php'; $webserviceObject = VtigerWebserviceObject::fromName($this->db, 'Groups'); $this->db->pquery("insert into vtiger_ws_entity_tables(webservice_entity_id,table_name) values \n\t\t\t(?,?)", array($webserviceObject->getEntityId(), 'vtiger_groups')); vtws_addDefaultActorTypeEntity('Currency', array('fieldNames' => 'currency_name', 'indexField' => 'id', 'tableName' => 'vtiger_currency_info')); $webserviceObject = VtigerWebserviceObject::fromName($this->db, 'Currency'); $this->db->pquery("insert into vtiger_ws_entity_tables(webservice_entity_id,table_name) values (?,?)", array($webserviceObject->getEntityId(), 'vtiger_currency_info')); vtws_addDefaultActorTypeEntity('DocumentFolders', array('fieldNames' => 'foldername', 'indexField' => 'folderid', 'tableName' => 'vtiger_attachmentsfolder')); $webserviceObject = VtigerWebserviceObject::fromName($this->db, 'DocumentFolders'); $this->db->pquery("insert into vtiger_ws_entity_tables(webservice_entity_id,table_name) values (?,?)", array($webserviceObject->getEntityId(), 'vtiger_attachmentsfolder')); }
function __FQNExtendedQueryField2Column($field, $mainModule, $maincolumnTable, $user) { global $adb, $log; $field = trim($field); if (isset($maincolumnTable[$field])) { return $maincolumnTable[$field]; } if (strpos($field, '.') > 0) { // FQN list($fmod, $fname) = explode('.', $field); $fromwebserviceObject = VtigerWebserviceObject::fromName($adb, $mainModule); $fromhandlerPath = $fromwebserviceObject->getHandlerPath(); $fromhandlerClass = $fromwebserviceObject->getHandlerClass(); require_once $fromhandlerPath; $fromhandler = new $fromhandlerClass($fromwebserviceObject, $user, $adb, $log); $fromrelmeta = $fromhandler->getMeta(); $fromrfs = $fromrelmeta->getReferenceFieldDetails(); $webserviceObject = VtigerWebserviceObject::fromName($adb, $fmod); $handlerPath = $webserviceObject->getHandlerPath(); $handlerClass = $webserviceObject->getHandlerClass(); require_once $handlerPath; $handler = new $handlerClass($webserviceObject, $user, $adb, $log); $relmeta = $handler->getMeta(); $fieldcolumn = $relmeta->getFieldColumnMapping(); $fieldtable = $relmeta->getColumnTableMapping(); $fmod = $relmeta->getTabName(); // normalize module name if ($fmod == $mainModule) { return $fieldtable[$fname] . '.' . $maincolumnTable[$fname]; } else { $fmodreffld = __FQNExtendedQueryGetRefFieldForModule($fromrfs, $fmod, $fname); return $fieldtable[$fname] . $fmodreffld . '.' . $fieldcolumn[$fname]; } } return $field; }
function vtws_addTicketFaqComment($id, $values, $user) { global $log, $adb, $current_user; $webserviceObject = VtigerWebserviceObject::fromId($adb, $id); $handlerPath = $webserviceObject->getHandlerPath(); $handlerClass = $webserviceObject->getHandlerClass(); require_once $handlerPath; $handler = new $handlerClass($webserviceObject, $user, $adb, $log); $meta = $handler->getMeta(); $entityName = $meta->getObjectEntityName($id); if ($entityName !== 'HelpDesk' and $entityName !== 'Faq') { throw new WebServiceException(WebServiceErrorCode::$INVALIDID, "Invalid module specified. Must be HelpDesk or Faq"); } if ($meta->hasReadAccess() !== true) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to write is denied"); } if ($entityName !== $webserviceObject->getEntityName()) { throw new WebServiceException(WebServiceErrorCode::$INVALIDID, "Id specified is incorrect"); } if (!$meta->hasPermission(EntityMeta::$RETRIEVE, $id)) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to read given object is denied"); } $idComponents = vtws_getIdComponents($id); if (!$meta->exists($idComponents[1])) { throw new WebServiceException(WebServiceErrorCode::$RECORDNOTFOUND, "Record you are trying to access is not found"); } $comment = trim($values['comments']); if (empty($comment)) { throw new WebServiceException(WebServiceErrorCode::$MANDFIELDSMISSING, "Comment empty."); } $current_time = $adb->formatDate(date('Y-m-d H:i:s'), true); if ($entityName == 'HelpDesk') { if ($values['from_portal'] != 1) { $ownertype = 'user'; if (!empty($user)) { $ownerId = $user->id; } elseif (!empty($current_user)) { $ownerId = $current_user->id; } else { $ownerId = 1; } //get the user email $result = $adb->pquery("SELECT email1 FROM vtiger_users WHERE id=?", array($ownerId)); $fromname = getUserFullName($ownerId); } else { $ownertype = 'customer'; $webserviceObject = VtigerWebserviceObject::fromId($adb, $values['parent_id']); $handlerPath = $webserviceObject->getHandlerPath(); $handlerClass = $webserviceObject->getHandlerClass(); require_once $handlerPath; $handler = new $handlerClass($webserviceObject, $user, $adb, $log); $meta = $handler->getMeta(); $entityName = $meta->getObjectEntityName($values['parent_id']); if ($entityName !== 'Contacts') { throw new WebServiceException(WebServiceErrorCode::$INVALIDID, "Invalid owner module specified. Must be Contacts"); } if ($entityName !== $webserviceObject->getEntityName()) { throw new WebServiceException(WebServiceErrorCode::$INVALIDID, "Id specified is incorrect"); } $pidComponents = vtws_getIdComponents($values['parent_id']); if (!$meta->exists($pidComponents[1])) { throw new WebServiceException(WebServiceErrorCode::$RECORDNOTFOUND, "Record you are trying to access is not found"); } $ownerId = $pidComponents[1]; //get the contact email id who creates the ticket from portal and use this email as from email id in email $result = $adb->pquery("SELECT email FROM vtiger_contactdetails WHERE contactid=?", array($ownerId)); $ename = getEntityName('Contacts', $ownerId); $fromname = $ename[$ownerId]; } $sql = "insert into vtiger_ticketcomments values(?,?,?,?,?,?)"; $params = array('', $idComponents[1], $comment, $ownerId, $ownertype, $current_time); //send mail to the assigned to user when customer add comment $toresult = $adb->pquery("SELECT email1,first_name\n\t\t\t\t\tFROM vtiger_users\n\t\t\t\t\tINNER JOIN vtiger_crmentity on smownerid=id\n\t\t\t\t\tINNER JOIN vtiger_troubletickets on ticketid=crmid\n\t\t\t\t\tWHERE ticketid=?", array($idComponents[1])); $to_email = $adb->query_result($toresult, 0, 0); $ownerName = $adb->query_result($toresult, 0, 1); $moduleName = 'HelpDesk'; $subject = getTranslatedString('LBL_RESPONDTO_TICKETID', $moduleName) . "##" . $idComponents[1] . "##" . getTranslatedString('LBL_CUSTOMER_PORTAL', $moduleName); $contents = getTranslatedString('Dear', $moduleName) . " " . $ownerName . "," . "<br><br>" . getTranslatedString('LBL_CUSTOMER_COMMENTS', $moduleName) . "<br><br>\n\t\t\t\t\t<b>" . $comment . "</b><br><br>" . getTranslatedString('LBL_RESPOND', $moduleName) . "<br><br>" . getTranslatedString('LBL_REGARDS', $moduleName) . "<br>" . getTranslatedString('LBL_SUPPORT_ADMIN', $moduleName); $from_email = $adb->query_result($result, 0, 0); //send mail to assigned to user $mail_status = send_mail('HelpDesk', $to_email, $fromname, $from_email, $subject, $contents); } else { $sql = "insert into vtiger_faqcomments values(?, ?, ?, ?)"; $params = array('', $idComponents[1], $comment, $current_time); } $adb->pquery($sql, $params); VTWS_PreserveGlobal::flush(); return array('success' => true); }
function vtws_getActorEntityNameById($entityId, $idList) { $db = PearDatabase::getInstance(); if (!is_array($idList) && count($idList) == 0) { return array(); } $nameList = array(); $webserviceObject = VtigerWebserviceObject::fromId($db, $entityId); $query = "select * from vtiger_ws_entity_name where entity_id = ?"; $result = $db->pquery($query, array($entityId)); if (is_object($result)) { $rowCount = $db->num_rows($result); if ($rowCount > 0) { $nameFields = $db->query_result($result, 0, 'name_fields'); $tableName = $db->query_result($result, 0, 'table_name'); $indexField = $db->query_result($result, 0, 'index_field'); if (!(strpos($nameFields, ',') === false)) { $fieldList = explode(',', $nameFields); $nameFields = "concat("; $nameFields = $nameFields . implode(",' ',", $fieldList); $nameFields = $nameFields . ")"; } $query1 = "select {$nameFields} as entityname, {$indexField} from {$tableName} where " . "{$indexField} in (" . generateQuestionMarks($idList) . ")"; $params1 = array($idList); $result = $db->pquery($query1, $params1); if (is_object($result)) { $rowCount = $db->num_rows($result); for ($i = 0; $i < $rowCount; $i++) { $id = $db->query_result($result, $i, $indexField); $nameList[$id] = $db->query_result($result, $i, 'entityname'); } return $nameList; } } } return array(); }
function vtws_create($elementType, $element, $user) { $types = vtws_listtypes(null, $user); if (!in_array($elementType, $types['types'])) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to perform the operation is denied"); } global $log, $adb; if (!empty($element['relations'])) { $relations = $element['relations']; unset($element['relations']); } // Cache the instance for re-use if (!isset($vtws_create_cache[$elementType]['webserviceobject'])) { $webserviceObject = VtigerWebserviceObject::fromName($adb, $elementType); $vtws_create_cache[$elementType]['webserviceobject'] = $webserviceObject; } else { $webserviceObject = $vtws_create_cache[$elementType]['webserviceobject']; } // END $handlerPath = $webserviceObject->getHandlerPath(); $handlerClass = $webserviceObject->getHandlerClass(); require_once $handlerPath; $handler = new $handlerClass($webserviceObject, $user, $adb, $log); $meta = $handler->getMeta(); if ($meta->hasWriteAccess() !== true) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to write is denied"); } $referenceFields = $meta->getReferenceFieldDetails(); foreach ($referenceFields as $fieldName => $details) { if (isset($element[$fieldName]) && strlen($element[$fieldName]) > 0) { $ids = vtws_getIdComponents($element[$fieldName]); $elemTypeId = $ids[0]; $elemId = $ids[1]; $referenceObject = VtigerWebserviceObject::fromId($adb, $elemTypeId); if (!in_array($referenceObject->getEntityName(), $details)) { throw new WebServiceException(WebServiceErrorCode::$REFERENCEINVALID, "Invalid reference specified for {$fieldName}"); } if ($referenceObject->getEntityName() == 'Users') { if (!$meta->hasAssignPrivilege($element[$fieldName])) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Cannot assign record to the given user"); } } if (!in_array($referenceObject->getEntityName(), $types['types']) && $referenceObject->getEntityName() != 'Users') { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to access reference type is denied" . $referenceObject->getEntityName()); } } else { if ($element[$fieldName] !== NULL) { unset($element[$fieldName]); } } } if ($meta->hasMandatoryFields($element)) { $ownerFields = $meta->getOwnerFields(); if (is_array($ownerFields) && sizeof($ownerFields) > 0) { foreach ($ownerFields as $ownerField) { if (isset($element[$ownerField]) && $element[$ownerField] !== null && !$meta->hasAssignPrivilege($element[$ownerField])) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Cannot assign record to the given user"); } } } // Product line support if (($elementType == 'Quotes' || $elementType == 'PurchaseOrder' || $elementType == 'SalesOrder' || $elementType == 'Invoice') && is_array($element['pdoInformation'])) { include 'include/Webservices/ProductLines.php'; } else { $_REQUEST['action'] = $elementType . 'Ajax'; } if ($elementType == 'HelpDesk') { //Added to construct the update log for Ticket history $colflds = $element; list($void, $colflds['assigned_user_id']) = explode('x', $colflds['assigned_user_id']); $grp_name = fetchGroupName($colflds['assigned_user_id']); $assigntype = $grp_name != '' ? 'T' : 'U'; $updlog = HelpDesk::getUpdateLogCreateMessage($colflds, $grp_name, $assigntype); $updlog = from_html($updlog, false); } $entity = $handler->create($elementType, $element); if ($elementType == 'HelpDesk') { list($wsid, $newrecid) = vtws_getIdComponents($entity['id']); $adb->pquery('update vtiger_troubletickets set update_log=? where ticketid=?', array($updlog, $newrecid)); } // Establish relations if (!empty($relations)) { list($wsid, $newrecid) = vtws_getIdComponents($entity['id']); $modname = $meta->getEntityName(); vtws_internal_setrelation($newrecid, $modname, $relations); } VTWS_PreserveGlobal::flush(); return $entity; } else { return null; } }
function vtws_convertlead($entityvalues, $user) { global $adb, $log; if (empty($entityvalues['assignedTo'])) { $entityvalues['assignedTo'] = vtws_getWebserviceEntityId('Users', $user->id); } if (empty($entityvalues['transferRelatedRecordsTo'])) { $entityvalues['transferRelatedRecordsTo'] = 'Contacts'; } $leadObject = VtigerWebserviceObject::fromName($adb, 'Leads'); $handlerPath = $leadObject->getHandlerPath(); $handlerClass = $leadObject->getHandlerClass(); require_once $handlerPath; $leadHandler = new $handlerClass($leadObject, $user, $adb, $log); $leadInfo = vtws_retrieve($entityvalues['leadId'], $user); $sql = "select converted from vtiger_leaddetails where converted = 1 and leadid=?"; $leadIdComponents = vtws_getIdComponents($entityvalues['leadId']); $result = $adb->pquery($sql, array($leadIdComponents[1])); if ($result === false) { throw new WebServiceException(WebServiceErrorCode::$DATABASEQUERYERROR, vtws_getWebserviceTranslatedString('LBL_' . WebServiceErrorCode::$DATABASEQUERYERROR)); } $rowCount = $adb->num_rows($result); if ($rowCount > 0) { throw new WebServiceException(WebServiceErrorCode::$LEAD_ALREADY_CONVERTED, "Lead is already converted"); } $entityIds = array(); $availableModules = array('Accounts', 'Contacts', 'Potentials'); if (!($entityvalues['entities']['Accounts']['create'] || $entityvalues['entities']['Contacts']['create'])) { return null; } foreach ($availableModules as $entityName) { if ($entityvalues['entities'][$entityName]['create']) { $entityvalue = $entityvalues['entities'][$entityName]; $entityObject = VtigerWebserviceObject::fromName($adb, $entityvalue['name']); $handlerPath = $entityObject->getHandlerPath(); $handlerClass = $entityObject->getHandlerClass(); require_once $handlerPath; $entityHandler = new $handlerClass($entityObject, $user, $adb, $log); $entityObjectValues = array(); $entityObjectValues['assigned_user_id'] = $entityvalues['assignedTo']; $entityObjectValues = vtws_populateConvertLeadEntities($entityvalue, $entityObjectValues, $entityHandler, $leadHandler, $leadInfo); //update potential related to property if ($entityvalue['name'] == 'Potentials') { if (!empty($entityIds['Accounts'])) { $entityObjectValues['related_to'] = $entityIds['Accounts']; } if (!empty($entityIds['Contacts'])) { $entityObjectValues['contact_id'] = $entityIds['Contacts']; } } //update the contacts relation if ($entityvalue['name'] == 'Contacts') { if (!empty($entityIds['Accounts'])) { $entityObjectValues['account_id'] = $entityIds['Accounts']; } } try { $create = true; if ($entityvalue['name'] == 'Accounts') { $sql = "SELECT vtiger_account.accountid FROM vtiger_account,vtiger_crmentity WHERE vtiger_crmentity.crmid=vtiger_account.accountid AND vtiger_account.accountname=? AND vtiger_crmentity.deleted=0"; $result = $adb->pquery($sql, array($entityvalue['accountname'])); if ($adb->num_rows($result) > 0) { $entityIds[$entityName] = vtws_getWebserviceEntityId('Accounts', $adb->query_result($result, 0, 'accountid')); $create = false; } } if ($create) { $entityRecord = vtws_create($entityvalue['name'], $entityObjectValues, $user); $entityIds[$entityName] = $entityRecord['id']; } } catch (Exception $e) { throw new WebServiceException(WebServiceErrorCode::$UNKNOWNOPERATION, $e->getMessage() . ' : ' . $entityvalue['name']); } } } try { $accountIdComponents = vtws_getIdComponents($entityIds['Accounts']); $accountId = $accountIdComponents[1]; $contactIdComponents = vtws_getIdComponents($entityIds['Contacts']); $contactId = $contactIdComponents[1]; if (!empty($accountId) && !empty($contactId) && !empty($entityIds['Potentials'])) { $potentialIdComponents = vtws_getIdComponents($entityIds['Potentials']); $potentialId = $potentialIdComponents[1]; $sql = "insert into vtiger_contpotentialrel values(?,?)"; $result = $adb->pquery($sql, array($contactId, $potentialIdComponents[1])); if ($result === false) { throw new WebServiceException(WebServiceErrorCode::$FAILED_TO_CREATE_RELATION, "Failed to related Contact with the Potential"); } } $transfered = vtws_convertLeadTransferHandler($leadIdComponents, $entityIds, $entityvalues); $relatedIdComponents = vtws_getIdComponents($entityIds[$entityvalues['transferRelatedRecordsTo']]); vtws_getRelatedActivities($leadIdComponents[1], $accountId, $contactId, $relatedIdComponents[1]); vtws_updateConvertLeadStatus($entityIds, $entityvalues['leadId'], $user); } catch (Exception $e) { foreach ($entityIds as $entity => $id) { vtws_delete($id, $user); } return null; } return $entityIds; }
function runOperation($params, $user) { global $API_VERSION; try { $operation = strtolower($this->operationName); if (!$this->preLogin) { $params[] = $user; return call_user_func_array($this->handlerMethod, $params); } else { $userDetails = call_user_func_array($this->handlerMethod, $params); if (is_array($userDetails)) { return $userDetails; } else { $this->sessionManager->set("authenticatedUserId", $userDetails->id); global $adb; $webserviceObject = VtigerWebserviceObject::fromName($adb, "Users"); $userId = vtws_getId($webserviceObject->getEntityId(), $userDetails->id); $vtigerVersion = vtws_getVtigerVersion(); $resp = array("sessionName" => $this->sessionManager->getSessionId(), "userId" => $userId, "version" => $API_VERSION, "vtigerVersion" => $vtigerVersion); return $resp; } } } catch (WebServiceException $e) { throw $e; } catch (Exception $e) { throw new WebServiceException(WebServiceErrorCode::$INTERNALERROR, "Unknown Error while processing request"); } }
public function translateTheReferenceFieldIdsToName($records,$module,$user){ $db = PearDatabase::getInstance(); global $current_user; $current_user = $user; $handler = vtws_getModuleHandlerFromName($module, $user); $meta = $handler->getMeta(); $referenceFieldDetails = $meta->getReferenceFieldDetails(); foreach($referenceFieldDetails as $referenceFieldName=>$referenceModuleDetails){ $referenceFieldIds = array(); $referenceModuleIds = array(); $referenceIdsName = array(); foreach($records as $recordDetails){ $referenceWsId = $recordDetails[$referenceFieldName]; if(!empty ($referenceWsId)){ $referenceIdComp = vtws_getIdComponents($referenceWsId); $webserviceObject = VtigerWebserviceObject::fromId($db, $referenceIdComp[0]); $referenceModuleIds[$webserviceObject->getEntityName()][]= $referenceIdComp[1]; $referenceFieldIds[] =$referenceIdComp[1]; } } foreach($referenceModuleIds as $referenceModule=>$idLists){ $nameList = getEntityName($referenceModule, $idLists); foreach($nameList as $key=>$value) $referenceIdsName[$key] = $value; } $recordCount = count($records); for($i=0;$i<$recordCount;$i++){ $record = $records[$i]; if(!empty($record[$referenceFieldName])){ $wsId = vtws_getIdComponents($record[$referenceFieldName]); $record[$referenceFieldName] = decode_html($referenceIdsName[$wsId[1]]); } $records[$i]= $record; } } return $records; }
function webforms_init() { global $defaultUserName, $defaultUserAccessKey, $defaultOwner, $adb, $enableAppKeyValidation, $application_unique_key; try { $active = vtlib_isModuleActive('Webforms'); if ($active === false) { webforms_returnError(array('code' => "WEBFORMS_DISABLED", 'message' => 'Webforms module is disabled'), 'Webforms'); } if ($enableAppKeyValidation == true) { if ($application_unique_key !== $_REQUEST['appKey']) { webforms_returnError(array('code' => "WEBFORMS_INVALID_APPKEY", 'message' => 'AppKey provided is invalid'), null); return; } } $module = $_REQUEST['moduleName']; $challengeResult = vtws_getchallenge($defaultUserName); $challengeToken = $challengeResult['token']; $user = vtws_login($defaultUserName, md5($challengeToken . $defaultUserAccessKey)); $describeResult = vtws_describe($module, $user); $fields = $describeResult['fields']; $assignedUser = new Users(); $ownerId = $assignedUser->retrieve_user_id($defaultOwner); $userData = webforms_getUserData(vtws_getId(VtigerWebserviceObject::fromName($adb, "Users")->getEntityId(), $ownerId), $fields, $_REQUEST); if ($userData === null) { webforms_returnError(array('code' => "WEBFORMS_INVALID_DATA", 'message' => 'data provided is invalid'), $module); return; } if (sizeof($userData) < 1) { webforms_returnError(array('code' => "WEBFORMS_INVALID_DATA", 'message' => 'data provided is invalid'), $module); return; } $createResult = vtws_create($module, $userData, $user); webforms_returnSuccess($createResult, $module); } catch (WebServiceException $e) { webforms_returnError($e, $module); } }
/** Function to get the emailids for the given ids form the request parameters * It returns an array which contains the mailids and the parentidlists */ function get_to_emailids($module) { global $adb, $current_user, $log; require_once 'include/Webservices/Query.php'; //$idlists1 = ""; $mailds = ''; if (empty($_REQUEST['field_lists'])) { switch ($module) { case 'Accounts': $_REQUEST["field_lists"] = 9; break; case 'Contacts': $_REQUEST["field_lists"] = 80; break; case 'Vendors': $_REQUEST["field_lists"] = 292; break; } } $fieldids = explode(":", vtlib_purify($_REQUEST['field_lists'])); if ($_REQUEST['idlist'] == 'all' || $_REQUEST['idlist'] == 'relatedListSelectAll') { $idlist = getSelectedRecords($_REQUEST, vtlib_purify($_REQUEST['pmodule']), vtlib_purify($_REQUEST['idlist']), vtlib_purify($_REQUEST['excludedRecords'])); } else { $idlist = explode(":", str_replace("undefined", "", vtlib_purify($_REQUEST['idlist']))); } $entityids = array(); foreach ($idlist as $key => $id) { $entityids[] = vtws_getWebserviceEntityId($module, $id); } $vtwsObject = VtigerWebserviceObject::fromName($adb, $module); $vtwsCRMObjectMeta = new VtigerCRMObjectMeta($vtwsObject, $current_user); $emailFields = $vtwsCRMObjectMeta->getEmailFields(); foreach ($emailFields as $key => $fieldname) { $fieldid = $vtwsCRMObjectMeta->getFieldIdFromFieldName($fieldname); if (!in_array($fieldid, $fieldids)) { unset($emailFields[$key]); } } if (empty($emailFields)) { return false; } if ($module == 'Leads') { $query = 'SELECT firstname,lastname,' . implode(",", $emailFields) . ',vtiger_leaddetails.leadid as id FROM vtiger_leaddetails INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_leaddetails.leadid LEFT JOIN vtiger_leadscf ON vtiger_leaddetails.leadid = vtiger_leadscf.leadid WHERE vtiger_crmentity.deleted=0 AND vtiger_leaddetails.leadid IN (' . generateQuestionMarks($idlist) . ')'; } else { if ($module == 'Contacts') { $query = 'SELECT firstname,lastname,' . implode(",", $emailFields) . ',vtiger_contactdetails.contactid as id FROM vtiger_contactdetails INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_contactdetails.contactid LEFT JOIN vtiger_contactscf ON vtiger_contactdetails.contactid = vtiger_contactscf.contactid WHERE vtiger_crmentity.deleted=0 AND vtiger_contactdetails.contactid IN (' . generateQuestionMarks($idlist) . ') AND vtiger_contactdetails.emailoptout=0'; } else { if ($module == 'Accounts') { $query = 'SELECT vtiger_account.accountname, ' . implode(",", $emailFields) . ',vtiger_account.accountid as id FROM vtiger_account INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_account.accountid LEFT JOIN vtiger_accountscf ON vtiger_accountscf.accountid= vtiger_account.accountid WHERE vtiger_crmentity.deleted=0 AND vtiger_account.accountid IN (' . generateQuestionMarks($idlist) . ') AND vtiger_account.emailoptout=0'; } else { if ($module == 'Project') { $query = 'SELECT projectname,' . implode(",", $emailFields) . ',vtiger_project.projectid as id FROM vtiger_project INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_project.projectid LEFT JOIN vtiger_projectcf ON vtiger_projectcf.projectid = vtiger_project.projectid WHERE vtiger_crmentity.deleted=0 AND vtiger_project.projectid IN (' . generateQuestionMarks($idlist) . ')'; } else { if ($module == 'ProjectTask') { $query = 'SELECT projecttaskname,' . implode(",", $emailFields) . ',vtiger_projecttask.projecttaskid as id FROM vtiger_projecttask INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_projecttask.projecttaskid LEFT JOIN vtiger_projecttaskcf ON vtiger_projecttaskcf.projecttaskid = vtiger_projecttask.projecttaskid WHERE vtiger_crmentity.deleted=0 AND vtiger_projecttask.projecttaskid IN (' . generateQuestionMarks($idlist) . ')'; } else { if ($module == 'Potentials') { $query = 'SELECT potentialname,' . implode(",", $emailFields) . ',vtiger_potential.potentialid as id FROM vtiger_potential INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_potential.potentialid LEFT JOIN vtiger_potentialscf ON vtiger_potentialscf.potentialid = vtiger_potential.potentialid WHERE vtiger_crmentity.deleted=0 AND vtiger_potential.potentialid IN (' . generateQuestionMarks($idlist) . ')'; } else { if ($module == 'HelpDesk') { $query = 'SELECT title,' . implode(",", $emailFields) . ',vtiger_troubletickets.ticketid as id FROM vtiger_troubletickets INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_troubletickets.ticketid LEFT JOIN vtiger_ticketcf ON vtiger_ticketcf.ticketid = vtiger_troubletickets.ticketid WHERE vtiger_crmentity.deleted=0 AND vtiger_troubletickets.ticketid IN (' . generateQuestionMarks($idlist) . ')'; } else { // vendors $query = 'SELECT vtiger_vendor.vendorname, ' . implode(",", $emailFields) . ',vtiger_vendor.vendorid as id FROM vtiger_vendor INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid=vtiger_vendor.vendorid LEFT JOIN vtiger_vendorcf ON vtiger_vendorcf.vendorid= vtiger_vendor.vendorid WHERE vtiger_crmentity.deleted=0 AND vtiger_vendor.vendorid IN (' . generateQuestionMarks($idlist) . ')'; } } } } } } } $result = $adb->pquery($query, $idlist); if ($adb->num_rows($result) > 0) { while ($entityvalue = $adb->fetchByAssoc($result)) { $vtwsid = $entityvalue['id']; foreach ($emailFields as $i => $emailFieldName) { if ($entityvalue[$emailFieldName] != NULL || $entityvalue[$emailFieldName] != '') { $idlists .= $vtwsid . '@' . $vtwsCRMObjectMeta->getFieldIdFromFieldName($emailFieldName) . '|'; if ($module == 'Leads' || $module == 'Contacts') { $mailids .= $entityvalue['lastname'] . " " . $entityvalue['firstname'] . "<" . $entityvalue[$emailFieldName] . ">,"; } else { if ($module == "Project") { $mailids .= $entityvalue['projectname'] . "<" . $entityvalue[$emailFieldName] . ">,"; } else { if ($module == "ProjectTask") { $mailids .= $entityvalue['projecttaskname'] . "<" . $entityvalue[$emailFieldName] . ">,"; } else { if ($module == "Potentials") { $mailids .= $entityvalue['potentialname'] . "<" . $entityvalue[$emailFieldName] . ">,"; } else { if ($module == "HelpDesk") { $mailids .= $entityvalue['title'] . "<" . $entityvalue[$emailFieldName] . ">,"; } else { $mailids .= $entityvalue['accountname'] . "<" . $entityvalue[$emailFieldName] . ">,"; } } } } } } } } } $return_data = array('idlists' => $idlists, 'mailds' => $mailids); return $return_data; }