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; }
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_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_create($elementType, $element, $user) { $types = vtws_listtypes($user); if (!in_array($elementType, $types['types'])) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to perform the operation is denied"); } 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(); 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->create($elementType, $element); VTWS_PreserveGlobal::flush(); return $entity; }
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_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; }
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; }
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_convertlead($entityvalues, $user) { $adb = PearDatabase::getInstance(); $log = vglobal('log'); $log->debug('Start ' . __CLASS__ . ':' . __FUNCTION__); if (empty($entityvalues['assignedTo'])) { $entityvalues['assignedTo'] = vtws_getWebserviceEntityId('Users', $user->id); } if (empty($entityvalues['transferRelatedRecordsTo'])) { $entityvalues['transferRelatedRecordsTo'] = 'Accounts'; } $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) { $log->error('Error converting a lead: ' . vtws_getWebserviceTranslatedString('LBL_' . WebServiceErrorCode::$DATABASEQUERYERROR)); throw new WebServiceException(WebServiceErrorCode::$DATABASEQUERYERROR, vtws_getWebserviceTranslatedString('LBL_' . WebServiceErrorCode::$DATABASEQUERYERROR)); } $rowCount = $adb->num_rows($result); if ($rowCount > 0) { $log->error('Error converting a lead: Lead is already converted'); throw new WebServiceException(WebServiceErrorCode::$LEAD_ALREADY_CONVERTED, "Lead is already converted"); } require_once "include/events/include.inc"; $em = new VTEventsManager($adb); // Initialize Event trigger cache $em->initTriggerCache(); $entityData = VTEntityData::fromEntityId($adb, $leadIdComponents[1]); $em->triggerEvent('entity.convertlead.before', [$entityvalues, $user, $leadInfo]); $entityIds = []; $availableModules = ['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['parent_id'] = $entityIds['Accounts']; } } try { $create = true; if ($entityvalue['name'] == 'Accounts' && $entityvalue['convert_to_id'] && is_int($entityvalue['convert_to_id'])) { $entityIds[$entityName] = vtws_getWebserviceEntityId('Accounts', $entityvalue['convert_to_id']); $create = false; } if ($create) { $entityRecord = vtws_create($entityvalue['name'], $entityObjectValues, $user); $entityIds[$entityName] = $entityRecord['id']; } } catch (Exception $e) { $log->error('Error converting a lead: ' . $e->getMessage()); 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); if ($em) { $em->triggerEvent('entity.convertlead.after', [$entityvalues, $user, $leadInfo, $entityIds]); } } catch (Exception $e) { $log->error('Error converting a lead: ' . $e->getMessage()); foreach ($entityIds as $entity => $id) { vtws_delete($id, $user); } return null; } $log->debug('End ' . __CLASS__ . ':' . __FUNCTION__); 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"); } }
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 save the record */ public function save() { $currentUser = Users_Record_Model::getCurrentUserModel(); $mode = $this->get('mode'); $db = PearDatabase::getInstance(); $this->setCheckBoxValue('enabled'); $this->setCheckBoxValue('captcha'); $this->setCheckBoxValue('roundrobin'); if (is_array($this->get('roundrobin_userid'))) { $roundrobinUsersList = json_encode($this->get('roundrobin_userid'), JSON_FORCE_OBJECT); } //Saving data about webform if ($mode) { $updateQuery = "UPDATE vtiger_webforms SET description = ?, returnurl = ?, ownerid = ?, enabled = ?, captcha = ? , roundrobin = ?, roundrobin_userid = ?, roundrobin_logic = ? ,targetmodule = ? WHERE id = ?"; $params = array($this->get('description'), $this->get('returnurl'), $this->get('ownerid'), $this->get('enabled'), $this->get('captcha'), $this->get('roundrobin'), $roundrobinUsersList, 0, $this->get('targetmodule'), $this->getId()); $db->pquery($updateQuery, $params); } else { $insertQuery = "INSERT INTO vtiger_webforms(name, targetmodule, publicid, enabled, description, ownerid, returnurl, captcha, roundrobin, roundrobin_userid, roundrobin_logic) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; $params = array($this->getName(), $this->get('targetmodule'), $this->generatePublicId(), $this->get('enabled'), $this->get('description'), $this->get('ownerid'), $this->get('returnurl'), $this->get('captcha'), $this->get('roundrobin'), $roundrobinUsersList, 0); $db->pquery($insertQuery, $params); $this->set('id', $db->getLastInsertID()); } //Deleting existing data $db->pquery("DELETE FROM vtiger_webforms_field WHERE webformid = ?", array($this->getId())); //Saving data of source module fields info for this webform $selectedFieldsData = $this->get('selectedFieldsData'); $sourceModuleModel = Vtiger_Module_Model::getInstance($this->get('targetmodule')); $fieldInsertQuery = "INSERT INTO vtiger_webforms_field(webformid, fieldname, neutralizedfield, defaultvalue, required, sequence, hidden) VALUES(?, ?, ?, ?, ?, ?, ?)"; foreach ($selectedFieldsData as $fieldName => $fieldDetails) { $params = array($this->getId()); $neutralizedField = $fieldName; $fieldDefaultValue = $fieldDetails['defaultvalue']; $fieldModel = Vtiger_Field_Model::getInstance($fieldName, $sourceModuleModel); $dataType = $fieldModel->getFieldDataType(); //Updating custom field label if (self::isCustomField($fieldName)) { $neutralizedField = 'label:' . str_replace(' ', '_', decode_html($fieldModel->get('label'))); } //Handling multi picklist if (is_array($fieldDefaultValue)) { $fieldDefaultValue = implode(" |##| ", $fieldDefaultValue); } //Handling Data format if ($dataType === 'date') { $fieldDefaultValue = Vtiger_Date_UIType::getDBInsertedValue($fieldDefaultValue); } if ($dataType === 'time') { $fieldDefaultValue = Vtiger_Time_UIType::getTimeValueWithSeconds($fieldDefaultValue); } //Handling CheckBox value if ($dataType === 'boolean') { if ($fieldDefaultValue) { $fieldDefaultValue = 'on'; } else { $fieldDefaultValue = ''; } } if ($dataType === 'reference') { $referenceModule = $fieldDetails['referenceModule']; $referenceObject = VtigerWebserviceObject::fromName($db, $referenceModule); $referenceEntityId = $referenceObject->getEntityId(); $fieldDefaultValue = $referenceEntityId . "x" . $fieldDefaultValue; } if ($dataType === 'currency') { $decimalSeperator = $currentUser->get('currency_decimal_separator'); $groupSeperator = $currentUser->get('currency_grouping_separator'); $fieldDefaultValue = str_replace($decimalSeperator, '.', $fieldDefaultValue); $fieldDefaultValue = str_replace($groupSeperator, '', $fieldDefaultValue); } array_push($params, $fieldName, $neutralizedField, $fieldDefaultValue, $fieldDetails['required'], $fieldDetails['sequence'], $fieldDetails['hidden']); $db->pquery($fieldInsertQuery, $params); } }
/** 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; }
function vtws_listtypes($fieldTypeList, $user) { // Bulk Save Mode: For re-using information static $webserviceEntities = false; // END static $types = array(); if (!empty($fieldTypeList)) { $fieldTypeList = array_map(strtolower, $fieldTypeList); sort($fieldTypeList); $fieldTypeString = implode(',', $fieldTypeList); } else { $fieldTypeString = 'all'; } if (!empty($types[$user->id][$fieldTypeString])) { return $types[$user->id][$fieldTypeString]; } try { global $log; /** * @var PearDatabase */ $db = PearDatabase::getInstance(); 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'); } if (!empty($fieldTypeList)) { $sql = "SELECT distinct(vtiger_field.tabid) as tabid FROM vtiger_field LEFT JOIN vtiger_ws_fieldtype ON " . "vtiger_field.uitype=vtiger_ws_fieldtype.uitype\n\t\t\t\t INNER JOIN vtiger_profile2field ON vtiger_field.fieldid = vtiger_profile2field.fieldid\n\t\t\t\t INNER JOIN vtiger_def_org_field ON vtiger_def_org_field.fieldid = vtiger_field.fieldid\n\t\t\t\t INNER JOIN vtiger_role2profile ON vtiger_profile2field.profileid = vtiger_role2profile.profileid\n\t\t\t\t INNER JOIN vtiger_user2role ON vtiger_user2role.roleid = vtiger_role2profile.roleid\n\t\t\t\t where vtiger_profile2field.visible=0 and vtiger_def_org_field.visible = 0\n\t\t\t\t and vtiger_field.presence in (0,2)\n\t\t\t\t and vtiger_user2role.userid=? and fieldtype in (" . generateQuestionMarks($fieldTypeList) . ')'; $params = array(); $params[] = $user->id; foreach ($fieldTypeList as $fieldType) { $params[] = $fieldType; } $result = $db->pquery($sql, $params); $it = new SqlResultIterator($db, $result); $moduleList = array(); foreach ($it as $row) { $moduleList[] = getTabModuleName($row->tabid); } $allModuleNames = array_intersect($moduleList, $allModuleNames); $params = $fieldTypeList; $sql = "select name from vtiger_ws_entity inner join vtiger_ws_entity_tables on " . "vtiger_ws_entity.id=vtiger_ws_entity_tables.webservice_entity_id inner join " . "vtiger_ws_entity_fieldtype on vtiger_ws_entity_fieldtype.table_name=" . "vtiger_ws_entity_tables.table_name where fieldtype=(" . generateQuestionMarks($fieldTypeList) . ')'; $result = $db->pquery($sql, $params); $it = new SqlResultIterator($db, $result); $entityList = array(); foreach ($it as $row) { $entityList[] = $row->name; } } //get All the CRM entity names. if ($webserviceEntities === false || !CRMEntity::isBulkSaveMode()) { // Bulk Save Mode: For re-using information $webserviceEntities = vtws_getWebserviceEntities(); } $accessibleModules = array_values(array_intersect($webserviceEntities['module'], $allModuleNames)); $entities = $webserviceEntities['entity']; $accessibleEntities = array(); if (empty($fieldTypeList)) { foreach ($entities as $entity) { $webserviceObject = VtigerWebserviceObject::fromName($db, $entity); $handlerPath = $webserviceObject->getHandlerPath(); $handlerClass = $webserviceObject->getHandlerClass(); require_once $handlerPath; $handler = new $handlerClass($webserviceObject, $user, $db, $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'); global $current_language; if (empty($current_language)) { $current_language = $default_language; } $current_language = vtws_preserveGlobal('current_language', $current_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(); $types[$user->id][$fieldTypeString] = array("types" => array_merge($accessibleModules, $accessibleEntities), 'information' => $informationArray); return $types[$user->id][$fieldTypeString]; }
function webserviceMigration() { global $adb; require_once 'include/utils/CommonUtils.php'; require_once 'include/Webservices/Utils.php'; $fieldTypeInfo = array('picklist' => array(15, 16), 'text' => array(19, 20, 21, 24), 'autogenerated' => array(3), 'phone' => array(11), 'multipicklist' => array(33), 'url' => array(17), 'skype' => array(85), 'boolean' => array(56, 156), 'owner' => array(53), 'file' => array(61, 28)); $referenceMapping = array("50" => array("Accounts"), "51" => array("Accounts"), "57" => array("Contacts"), "58" => array("Campaigns"), "73" => array("Accounts"), "75" => array("Vendors"), "76" => array("Potentials"), "78" => array("Quotes"), "80" => array("SalesOrder"), "81" => array("Vendors"), "101" => array("Users"), "52" => array("Users"), "357" => array("Contacts", "Accounts", "Leads", "Users", "Vendors"), "59" => array("Products"), "66" => array("Leads", "Accounts", "Potentials", "HelpDesk"), "77" => array("Users"), "68" => array("Contacts", "Accounts"), "117" => array('Currency'), "116" => array('Currency'), '26' => array('DocumentFolders'), '10' => array()); ExecuteQuery("CREATE TABLE IF NOT EXISTS vtiger_ws_fieldtype(fieldtypeid integer(19) not null auto_increment,uitype varchar(30)not null,fieldtype varchar(200) not null,PRIMARY KEY(fieldtypeid),UNIQUE KEY uitype_idx (uitype)) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); ExecuteQuery("CREATE TABLE IF NOT EXISTS vtiger_ws_referencetype(fieldtypeid integer(19) not null,type varchar(25) not null,PRIMARY KEY(fieldtypeid,type), CONSTRAINT `fk_1_vtiger_referencetype` FOREIGN KEY (`fieldtypeid`) REFERENCES `vtiger_ws_fieldtype` (`fieldtypeid`) ON DELETE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); ExecuteQuery("CREATE TABLE IF NOT EXISTS vtiger_ws_userauthtoken(userid integer(19) not null,token varchar(25) not null,expiretime INTEGER(19),PRIMARY KEY(userid,expiretime),UNIQUE KEY userid_idx (userid)) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); ExecuteQuery("alter table vtiger_users add column accesskey varchar(36);"); $fieldid = $adb->getUniqueID("vtiger_field"); $usersTabId = getTabid("Users"); $user_adv_block_id = getBlockId($usersTabId, 'LBL_USER_ADV_OPTIONS'); ExecuteQuery("insert into vtiger_field (tabid, fieldid, columnname, tablename, generatedtype, uitype, fieldname, fieldlabel, readonly, presence, selected, maximumlength, sequence, block, displaytype, typeofdata, quickcreate, quickcreatesequence, info_type, masseditable, helpinfo) values({$usersTabId},{$fieldid},'accesskey','vtiger_users',1,3,'accesskey','Webservice Access Key',1,0,0,100,2,{$user_adv_block_id},2,'V~O',1,null,'BAS',0,'Webservice Access Key');"); foreach ($referenceMapping as $uitype => $referenceArray) { $success = true; $result = $adb->pquery("insert into vtiger_ws_fieldtype(uitype,fieldtype) values(?,?)", array($uitype, "reference")); if (!is_object($result)) { $success = false; } $result = $adb->pquery("select * from vtiger_ws_fieldtype where uitype=?", array($uitype)); $rowCount = $adb->num_rows($result); for ($i = 0; $i < $rowCount; $i++) { $fieldTypeId = $adb->query_result($result, $i, "fieldtypeid"); foreach ($referenceArray as $index => $referenceType) { $result = $adb->pquery("insert into vtiger_ws_referencetype(fieldtypeid,type) values(?,?)", array($fieldTypeId, $referenceType)); if (!is_object($result)) { echo "failed for: {$referenceType}, uitype: {$fieldTypeId}"; $success = false; } } } if (!$success) { echo "Migration Query Failed"; break; } } foreach ($fieldTypeInfo as $type => $uitypes) { foreach ($uitypes as $uitype) { $result = $adb->pquery("insert into vtiger_ws_fieldtype(uitype,fieldtype) values(?,?)", array($uitype, $type)); if (!is_object($result)) { "Query for fieldtype details({$uitype}:uitype,{$type}:fieldtype)"; } } } $sql = "select * from vtiger_users"; $updateQuery = "update vtiger_users set accesskey=? where id=?"; $result = $adb->pquery($sql, array()); $rowCount = $adb->num_rows($result); for ($i = 0; $i < $rowCount; $i++) { $userId = $adb->query_result($result, $i, "id"); $insertResult = $adb->pquery($updateQuery, array(vtws_generateRandomAccessKey(16), $userId)); if (!is_object($insertResult)) { echo "failed for user: "******"user_name"); break; } } ExecuteQuery("CREATE TABLE IF NOT EXISTS vtiger_ws_entity(id integer(11) not null auto_increment PRIMARY\n\t\tKEY,name varchar(25) not null UNIQUE,handler_path varchar(255) NOT NULL,handler_class varchar(64) NOT NULL,\n\t\tismodule int(3) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); ExecuteQuery("CREATE TABLE IF NOT EXISTS vtiger_ws_entity_name(entity_id integer(11) not null PRIMARY\n\t\tKEY,name_fields varchar(50),index_field varchar(50),table_name varchar(50)) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); $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 = $adb->getUniqueID("vtiger_ws_entity"); $adb->pquery('insert into vtiger_ws_entity(id,name,handler_path,handler_class,ismodule) values (?,?,?,?,?)', array($entityId, $tab, $moduleHandler['file'], $moduleHandler['class'], 1)); } $entityId = $adb->getUniqueID("vtiger_ws_entity"); $adb->pquery('insert into vtiger_ws_entity(id,name,handler_path,handler_class,ismodule) values (?,?,?,?,?)', array($entityId, 'Events', $moduleHandler['file'], $moduleHandler['class'], 1)); $entityId = $adb->getUniqueID("vtiger_ws_entity"); $adb->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')); ExecuteQuery("CREATE TABLE IF NOT EXISTS `vtiger_ws_entity_tables` (`webservice_entity_id` int(11) NOT NULL ,`table_name` varchar(50) NOT NULL , PRIMARY KEY (`webservice_entity_id`,`table_name`), CONSTRAINT `fk_1_vtiger_ws_actor_tables` FOREIGN KEY (`webservice_entity_id`) REFERENCES `vtiger_ws_entity` (`id`) ON DELETE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8"); ExecuteQuery("CREATE TABLE IF NOT EXISTS vtiger_ws_entity_fieldtype(fieldtypeid integer(19) not null auto_increment,table_name varchar(50) not null,field_name varchar(50) not null,fieldtype varchar(200) not null,PRIMARY KEY(fieldtypeid),UNIQUE KEY vtiger_idx_1_tablename_fieldname (table_name,field_name)) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); ExecuteQuery("CREATE TABLE IF NOT EXISTS vtiger_ws_entity_referencetype(fieldtypeid integer(19) not null,type varchar(25) not null,PRIMARY KEY(fieldtypeid,type), CONSTRAINT `vtiger_fk_1_actors_referencetype` FOREIGN KEY (`fieldtypeid`) REFERENCES `vtiger_ws_entity_fieldtype` (`fieldtypeid`) ON DELETE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); require_once "include/Webservices/WebServiceError.php"; require_once 'include/Webservices/VtigerWebserviceObject.php'; $webserviceObject = VtigerWebserviceObject::fromName($adb, 'Groups'); ExecuteQuery("insert into vtiger_ws_entity_tables(webservice_entity_id,table_name) values ({$webserviceObject->getEntityId()},'vtiger_groups')"); ExecuteQuery("CREATE TABLE IF NOT EXISTS vtiger_ws_operation(operationid int(11) not null auto_increment PRIMARY KEY,name varchar(128) \n\tnot null UNIQUE,handler_path varchar(255),handler_method varchar(64), type varchar(8) not null,prelogin int(3) not null, KEY vtiger_idx_ws_oepration_prelogin (prelogin)) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); ExecuteQuery("CREATE TABLE IF NOT EXISTS `vtiger_ws_operation_parameters` (`operationid` int(11) NOT NULL, `name` varchar(128) NOT NULL,\n\t\t`type` varchar(64) NOT NULL, sequence int(11) not null,PRIMARY KEY (`operationid`,`name`), CONSTRAINT \n\t\t`vtiger_fk_1_ws_operation_params` FOREIGN KEY (`operationid`) REFERENCES `vtiger_ws_operation` (`operationid`) \n\t\tON DELETE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8;"); $operationMeta = array("login" => array("include" => array("include/Webservices/Login.php"), "handler" => "vtws_login", "params" => array("username" => "String", "accessKey" => "String"), "prelogin" => 1, "type" => "POST"), "retrieve" => array("include" => array("include/Webservices/Retrieve.php"), "handler" => "vtws_retrieve", "params" => array("id" => "String"), "prelogin" => 0, "type" => "GET"), "create" => array("include" => array("include/Webservices/Create.php"), "handler" => "vtws_create", "params" => array("elementType" => "String", "element" => "encoded"), "prelogin" => 0, "type" => "POST"), "update" => array("include" => array("include/Webservices/Update.php"), "handler" => "vtws_update", "params" => array("element" => "encoded"), "prelogin" => 0, "type" => "POST"), "delete" => array("include" => array("include/Webservices/Delete.php"), "handler" => "vtws_delete", "params" => array("id" => "String"), "prelogin" => 0, "type" => "POST"), "sync" => array("include" => array("include/Webservices/GetUpdates.php"), "handler" => "vtws_sync", "params" => array("modifiedTime" => "DateTime", "elementType" => "String"), "prelogin" => 0, "type" => "GET"), "query" => array("include" => array("include/Webservices/Query.php"), "handler" => "vtws_query", "params" => array("query" => "String"), "prelogin" => 0, "type" => "GET"), "logout" => array("include" => array("include/Webservices/Logout.php"), "handler" => "vtws_logout", "params" => array("sessionName" => "String"), "prelogin" => 0, "type" => "POST"), "listtypes" => array("include" => array("include/Webservices/ModuleTypes.php"), "handler" => "vtws_listtypes", "params" => array(), "prelogin" => 0, "type" => "GET"), "getchallenge" => array("include" => array("include/Webservices/AuthToken.php"), "handler" => "vtws_getchallenge", "params" => array("username" => "String"), "prelogin" => 1, "type" => "GET"), "describe" => array("include" => array("include/Webservices/DescribeObject.php"), "handler" => "vtws_describe", "params" => array("elementType" => "String"), "prelogin" => 0, "type" => "GET"), "extendsession" => array("include" => array("include/Webservices/ExtendSession.php"), "handler" => "vtws_extendSession", 'params' => array(), "prelogin" => 1, "type" => "POST")); $createOperationQuery = "insert into vtiger_ws_operation(operationid,name,handler_path,handler_method,type,prelogin) \n\t\tvalues (?,?,?,?,?,?);"; $createOperationParamsQuery = "insert into vtiger_ws_operation_parameters(operationid,name,type,sequence) \n\t\tvalues (?,?,?,?);"; foreach ($operationMeta as $operationName => $operationDetails) { $operationId = $adb->getUniqueID("vtiger_ws_operation"); $result = $adb->pquery($createOperationQuery, array($operationId, $operationName, $operationDetails['include'], $operationDetails['handler'], $operationDetails['type'], $operationDetails['prelogin'])); $params = $operationDetails['params']; $sequence = 1; foreach ($params as $paramName => $paramType) { $result = $adb->pquery($createOperationParamsQuery, array($operationId, $paramName, $paramType, $sequence++)); } } vtws_addDefaultActorTypeEntity('Currency', array('fieldNames' => 'currency_name', 'indexField' => 'id', 'tableName' => 'vtiger_currency_info')); require_once 'include/Webservices/VtigerWebserviceObject.php'; $webserviceObject = VtigerWebserviceObject::fromName($adb, 'Currency'); ExecuteQuery("insert into vtiger_ws_entity_tables(webservice_entity_id,table_name) values ({$webserviceObject->getEntityId()},'vtiger_currency_info')"); vtws_addDefaultActorTypeEntity('DocumentFolders', array('fieldNames' => 'foldername', 'indexField' => 'folderid', 'tableName' => 'vtiger_attachmentsfolder')); $webserviceObject = VtigerWebserviceObject::fromName($adb, 'DocumentFolders'); ExecuteQuery("insert into vtiger_ws_entity_tables(webservice_entity_id,table_name) values ({$webserviceObject->getEntityId()},'vtiger_attachmentsfolder')"); $success = true; $fieldTypeId = $adb->getUniqueID("vtiger_ws_entity_fieldtype"); $result = $adb->pquery("insert into vtiger_ws_entity_fieldtype(fieldtypeid,table_name,field_name,fieldtype) values(?,?,?,?);", array($fieldTypeId, 'vtiger_attachmentsfolder', 'createdby', "reference")); if (!is_object($result)) { echo "failed fo init<br>"; $success = false; } $result = $adb->pquery("insert into vtiger_ws_entity_referencetype(fieldtypeid,type) values(?,?)", array($fieldTypeId, 'Users')); if (!is_object($result)) { echo "failed for: Users, fieldtypeid: {$fieldTypeId}"; $success = false; } if (!$success) { echo "Migration Query Failed"; } }
} require_once 'modules/Leads/ConvertLeadUI.php'; $uiinfo = new ConvertLeadUI($_REQUEST['record'], $current_user); if (isPermitted("Leads", "EditView", $_REQUEST['record']) == 'yes' && isPermitted("Leads", "ConvertLead") == 'yes' && (isPermitted("Accounts", "EditView") == 'yes' || isPermitted("Contacts", "EditView") == 'yes') && (vtlib_isModuleActive('Contacts') || vtlib_isModuleActive('Accounts')) && !isLeadConverted($focus->id) && ($uiinfo->getCompany() != null || $uiinfo->isModuleActive('Contacts') == true)) { $smarty->assign("CONVERTLEAD", "permitted"); } $category = getParentTab(); $smarty->assign("CATEGORY", $category); if (isPermitted("Leads", "Delete", $_REQUEST['record']) == 'yes') { $smarty->assign("DELETE", "permitted"); } if (isPermitted("Emails", "EditView", '') == 'yes') { //Added to pass the parents list as hidden for Emails -- 09-11-2005 $parent_email = getEmailParentsList('Leads', $_REQUEST['record'], $focus); $smarty->assign("HIDDEN_PARENTS_LIST", $parent_email); $vtwsObject = VtigerWebserviceObject::fromName($adb, $currentModule); $vtwsCRMObjectMeta = new VtigerCRMObjectMeta($vtwsObject, $current_user); $emailFields = $vtwsCRMObjectMeta->getEmailFields(); $smarty->assign("SENDMAILBUTTON", "permitted"); $emails = array(); foreach ($emailFields as $key => $value) { $emails[] = $value; } $smarty->assign("EMAILS", $emails); $cond = "LTrim('%s') !=''"; $condition = array(); foreach ($emails as $key => $value) { $condition[] = sprintf($cond, $value); } $condition_str = implode("||", $condition); $js = "if(" . $condition_str . "){fnvshobj(this,'sendmail_cont');sendmail('" . $currentModule . "'," . $_REQUEST['record'] . ");}else{OpenCompose('','create');}";
function __getRLQuery($id, $module, $relatedModule, $queryParameters, $user) { global $adb, $currentModule, $log, $current_user; // Initialize required globals $currentModule = $module; // END if (empty($queryParameters['productDiscriminator'])) { $queryParameters['productDiscriminator'] = ''; } if (empty($queryParameters['columns'])) { $queryParameters['columns'] = '*'; } $productDiscriminator = strtolower($queryParameters['productDiscriminator']); // check modules $webserviceObject = VtigerWebserviceObject::fromName($adb, $relatedModule); $handlerPath = $webserviceObject->getHandlerPath(); $handlerClass = $webserviceObject->getHandlerClass(); require_once $handlerPath; $handler = new $handlerClass($webserviceObject, $user, $adb, $log); $meta = $handler->getMeta(); $relatedModule = $meta->getEntityName(); if (!$meta->isModuleEntity()) { throw new WebserviceException('INVALID_MODULE', "Given related module ({$relatedModule}) cannot be found"); } $relatedModuleId = getTabid($relatedModule); $webserviceObject = VtigerWebserviceObject::fromName($adb, $module); $handlerPath = $webserviceObject->getHandlerPath(); $handlerClass = $webserviceObject->getHandlerClass(); require_once $handlerPath; $handler = new $handlerClass($webserviceObject, $user, $adb, $log); $meta = $handler->getMeta(); $module = $meta->getEntityName(); if (!$meta->isModuleEntity()) { throw new WebserviceException('INVALID_MODULE', "Given module ({$module}) cannot be found"); } $moduleId = getTabid($module); // check permission on module $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 on module ({$module}) 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"); } $crmid = $idComponents[1]; // check permission on related module and pickup meta data for further processing $webserviceObject = VtigerWebserviceObject::fromName($adb, $relatedModule); $handlerPath = $webserviceObject->getHandlerPath(); $handlerClass = $webserviceObject->getHandlerClass(); require_once $handlerPath; $handler = new $handlerClass($webserviceObject, $user, $adb, $log); $meta = $handler->getMeta(); if (!in_array($relatedModule, $types['types'])) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to perform the operation on module ({$relatedModule}) is denied"); } if (!$meta->hasReadAccess()) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to read given object is denied"); } // user has enough permission to start process $query = ''; switch ($relatedModule) { case 'ModComments': $wsUserIdrs = $adb->query("select id from vtiger_ws_entity where name='Users'"); $wsUserId = $adb->query_result($wsUserIdrs, 0, 0) . 'x'; $wsContactIdrs = $adb->query("select id from vtiger_ws_entity where name='Contacts'"); $wsContactId = $adb->query_result($wsContactIdrs, 0, 0) . 'x'; switch ($module) { case 'HelpDesk': $query = "select\n\t\t\t\t\t\tconcat(case when (ownertype = 'user') then '{$wsUserId}' else '{$wsContactId}' end,ownerid) as creator,\n\t\t\t\t\t\tconcat(case when (ownertype = 'user') then '{$wsUserId}' else '{$wsContactId}' end,ownerid) as assigned_user_id,\n\t\t\t\t\t\t'TicketComments' as setype,\n\t\t\t\t\t\tcreatedtime,\n\t\t\t\t\t\tcreatedtime as modifiedtime,\n\t\t\t\t\t\t0 as id,\n\t\t\t\t\t\tcomments as commentcontent, \n\t\t\t\t\t\t'{$id}' as related_to, \n\t\t\t\t\t\t'' as parent_comments,\n\t\t\t\t\t\townertype,\n\t\t\t\t\t\tcase when (ownertype = 'user') then vtiger_users.user_name else vtiger_portalinfo.user_name end as owner_name \n\t\t\t\t\t from vtiger_ticketcomments\n\t\t\t\t\t left join vtiger_users on vtiger_users.id = ownerid\n\t\t\t\t\t left join vtiger_portalinfo on vtiger_portalinfo.id = ownerid\n\t\t\t\t\t where ticketid={$crmid}"; break; case 'Faq': $query = "select\n\t\t\t\t\t\t0 as creator,\n\t\t\t\t\t\t0 as assigned_user_id,\n\t\t\t\t\t\t'FaqComments' as setype,\n\t\t\t\t\t\tcreatedtime,\n\t\t\t\t\t\tcreatedtime as modifiedtime,\n\t\t\t\t\t\t0 as id,\n\t\t\t\t\t\tcomments as commentcontent, \n\t\t\t\t\t\t'{$id}' as related_to, \n\t\t\t\t\t\t'' as parent_comments\n\t\t\t\t\t from vtiger_faqcomments where faqid={$crmid}"; break; default: $entityInstance = CRMEntity::getInstance($relatedModule); $queryCriteria = ''; $criteria = 'All'; // currently hard coded to all ** TODO ** switch ($criteria) { // currently hard coded to all ** TODO ** case 'All': $queryCriteria = ''; break; case 'Last5': $queryCriteria = sprintf(" ORDER BY %s.%s DESC LIMIT 5", $entityInstance->table_name, $entityInstance->table_index); break; case 'Mine': $queryCriteria = ' AND vtiger_crmentity.smownerid=' . $current_user->id; break; } $query = $entityInstance->getListQuery($moduleName, sprintf(" AND %s.related_to={$crmid}", $entityInstance->table_name)); $query .= $queryCriteria; $qfields = __getRLQueryFields($meta, $queryParameters['columns']); // Remove all the \n, \r and white spaces to keep the space between the words consistent. $query = preg_replace("/[\n\r\\s]+/", " ", $query); $query = "select {$qfields} " . substr($query, stripos($query, ' FROM '), strlen($query)); break; } // end switch ModComments break; default: $relation_criteria = ''; switch ($relatedModule) { case 'Products': if ($module == 'Products') { // Product Bundles if (!empty($productDiscriminator) and $productDiscriminator == 'productparent') { $relation_criteria = " and label like '%parent%'"; } else { $relation_criteria = " and label like '%bundle%'"; // bundle by default } } break; case 'Calendar': $relation_criteria = " and label like '%Activities%'"; // History not supported //$relation_criteria = " and label like '%History%'"; break; } // special product relation with Q/SO/I/PO if ($relatedModule == 'Products' and in_array($module, array('Invoice', 'Quotes', 'SalesOrder', 'PurchaseOrder'))) { $query = 'select productid as id,sequence_no,quantity,listprice,discount_percent,discount_amount,comment,description,tax1,tax2,tax3 FROM vtiger_inventoryproductrel where id=' . $crmid; } else { $relationResult = $adb->pquery("SELECT * FROM vtiger_relatedlists WHERE tabid=? AND related_tabid=? {$relation_criteria}", array($moduleId, $relatedModuleId)); if (!$relationResult || !$adb->num_rows($relationResult)) { throw new WebserviceException('MODULES_NOT_RELATED', "Cannot find relation between {$module} and {$relatedModule}"); } if ($adb->num_rows($relationResult) > 1) { throw new WebserviceException('MANY_RELATIONS', "More than one relation exists between {$module} and {$relatedModule}"); } $relationInfo = $adb->fetch_array($relationResult); $moduleInstance = CRMEntity::getInstance($module); $params = array($crmid, $moduleId, $relatedModuleId); $relationData = call_user_method_array($relationInfo['name'], $moduleInstance, $params); $query = $relationData['query']; // select the fields the user has access to and prepare query $qfields = __getRLQueryFields($meta, $queryParameters['columns']); // Remove all the \n, \r and white spaces to keep the space between the words consistent. $query = preg_replace("/[\n\r\\s]+/", " ", $query); $query = "select {$qfields} " . substr($query, stripos($query, ' FROM '), strlen($query)); // Append additional joins for some queries $query = __getRLQueryFromJoins($query, $meta); //Appending Access Control if ($relatedModule != 'Faq' && $relatedModule != 'PriceBook' && $relatedModule != 'Vendors' && $relatedModule != 'Users') { $secQuery = getNonAdminAccessControlQuery($relatedModule, $current_user); if (strlen($secQuery) > 1) { $query = appendFromClauseToQuery($query, $secQuery); } } // This is for getting products related to Account/Contact through their Quote/SO/Invoice if (($module == 'Accounts' or $module == 'Contacts') and ($relatedModule == 'Products' or $relatedModule == 'Services') and in_array($productDiscriminator, array('productlineinvoice', 'productlinesalesorder', 'productlinequote', 'productlineall', 'productlineinvoiceonly', 'productlinesalesorderonly', 'productlinequoteonly'))) { // Here we add list of products contained in related invoice, so and quotes $relatedField = $module == 'Accounts' ? 'accountid' : 'contactid'; $pstable = $meta->getEntityBaseTable(); $psfield = $meta->getIdColumn(); if (substr($productDiscriminator, -4) == 'only') { $productDiscriminator = substr($productDiscriminator, 0, strlen($productDiscriminator) - 4); $query = ''; } if ($productDiscriminator == 'productlinequote' or $productDiscriminator == 'productlineall') { $q = "select distinct {$qfields} from vtiger_quotes\n\t\t\t\t\t\tinner join vtiger_crmentity as crmq on crmq.crmid=vtiger_quotes.quoteid\n\t\t\t\t\t\tleft join vtiger_inventoryproductrel on vtiger_inventoryproductrel.id=vtiger_quotes.quoteid\n\t\t\t\t\t\tinner join vtiger_crmentity on vtiger_crmentity.crmid=vtiger_inventoryproductrel.productid \n\t\t\t\t\t\tleft join {$pstable} on {$pstable}.{$psfield} = vtiger_inventoryproductrel.productid \n\t\t\t\t\t\twhere vtiger_inventoryproductrel.productid = {$pstable}.{$psfield} AND crmq.deleted=0\n\t\t\t\t\t\t and {$relatedField} = {$crmid}"; $query .= ($query == '' ? '' : ' UNION DISTINCT ') . $q; } if ($productDiscriminator == 'productlineinvoice' or $productDiscriminator == 'productlineall') { $q = "select distinct {$qfields} from vtiger_invoice\n\t\t\t\t\t\tinner join vtiger_crmentity as crmi on crmi.crmid=vtiger_invoice.invoiceid\n\t\t\t\t\t\tleft join vtiger_inventoryproductrel on vtiger_inventoryproductrel.id=vtiger_invoice.invoiceid\n\t\t\t\t\t\tinner join vtiger_crmentity on vtiger_crmentity.crmid=vtiger_inventoryproductrel.productid\n\t\t\t\t\t\tleft join {$pstable} on {$pstable}.{$psfield} = vtiger_inventoryproductrel.productid\n\t\t\t\t\t\twhere vtiger_inventoryproductrel.productid = {$pstable}.{$psfield} AND crmi.deleted=0\n\t\t\t\t\t\t and {$relatedField} = {$crmid}"; $query .= ($query == '' ? '' : ' UNION DISTINCT ') . $q; } if ($productDiscriminator == 'productlinesalesorder' or $productDiscriminator == 'productlineall') { $q = "select distinct {$qfields} from vtiger_salesorder \n\t\t\t\t\tinner join vtiger_crmentity as crms on crms.crmid=vtiger_salesorder.salesorderid\n\t\t\t\t\tleft join vtiger_inventoryproductrel on vtiger_inventoryproductrel.id=vtiger_salesorder.salesorderid\n\t\t\t\t\tinner join vtiger_crmentity on vtiger_crmentity.crmid=vtiger_inventoryproductrel.productid\n\t\t\t\t\tleft join {$pstable} on {$pstable}.{$psfield} = vtiger_inventoryproductrel.productid\n\t\t\t\t\twhere vtiger_inventoryproductrel.productid = {$pstable}.{$psfield} AND crms.deleted=0\n\t\t\t\t\tand {$relatedField} = {$crmid}"; $query .= ($query == '' ? '' : ' UNION DISTINCT ') . $q; } } } // q/so/i/po-product relation break; } // end switch $relatedModule // now we add order by if needed if ($query != '' and !empty($queryParameters['orderby'])) { $query .= ' order by ' . $queryParameters['orderby']; } // now we add limit and offset if needed if ($query != '' and !empty($queryParameters['limit'])) { $query .= ' limit ' . $queryParameters['limit']; if (!empty($queryParameters['offset'])) { $query .= ',' . $queryParameters['offset']; } } return $query; }
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; }
global $theme; require_once 'Smarty_setup.php'; // focus_list is the means of passing data to a ListView. global $focus_list; if (!isset($where)) { $where = ""; } $url_string = ''; $smarty = new vtigerCRM_Smarty(); $smarty->assign("subject", $_REQUEST['subject']); $smarty->assign("description", $_REQUEST['description']); Zend_Json::$useBuiltinEncoderDecoder = true; $json = new Zend_Json(); $elementType = $_REQUEST['module']; global $log, $adb; $webserviceObject = VtigerWebserviceObject::fromName($adb, $elementType); $handlerPath = $webserviceObject->getHandlerPath(); $handlerClass = $webserviceObject->getHandlerClass(); require_once $handlerPath; $handler = new $handlerClass($webserviceObject, $current_user, $adb, $log); $meta = $handler->getMeta(); $meta->retrieveMeta(); $types = vtws_listtypes(null, $current_user); if (!in_array($elementType, $types['types'])) { throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to perform the operation is denied"); } $wsFieldDetails = $handler->getField('parent_id'); $moduleEntityNameDetails = array(); $moduleEmailFieldDetails = array(); foreach ($wsFieldDetails['type']['refersTo'] as $type) { $referenceModuleHandler = vtws_getModuleHandlerFromName($type, $current_user);
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; }
ExecuteQuery($sql); $id = $adb->getUniqueID('vtiger_ws_entity_fieldtype'); $sql = "INSERT INTO vtiger_ws_entity_fieldtype(fieldtypeid,table_name,field_name,fieldtype) VALUES ({$id},'vtiger_organizationdetails','logoname','file')"; ExecuteQuery($sql); $id = $adb->getUniqueID('vtiger_ws_entity_fieldtype'); $sql = "INSERT INTO vtiger_ws_entity_fieldtype(fieldtypeid,table_name,field_name,fieldtype) VALUES ({$id},'vtiger_organizationdetails','phone','phone')"; ExecuteQuery($sql); $id = $adb->getUniqueID('vtiger_ws_entity_fieldtype'); $sql = "INSERT INTO vtiger_ws_entity_fieldtype(fieldtypeid,table_name,field_name,fieldtype) VALUES ({$id},'vtiger_organizationdetails','fax','phone')"; ExecuteQuery($sql); $id = $adb->getUniqueID('vtiger_ws_entity_fieldtype'); $sql = "INSERT INTO vtiger_ws_entity_fieldtype(fieldtypeid,table_name,field_name,fieldtype) VALUES ({$id},'vtiger_organizationdetails','website','url')"; ExecuteQuery($sql); $sql = "INSERT INTO vtiger_ws_fieldinfo(id,property_name,property_value) VALUES ('vtiger_organizationdetails.organization_id','upload.path','1')"; ExecuteQuery($sql); $webserviceObject = VtigerWebserviceObject::fromName($adb, 'CompanyDetails'); $webserviceEntityId = $webserviceObject->getEntityId(); $sql = "INSERT INTO vtiger_ws_entity_tables(webservice_entity_id,table_name) VALUES ({$webserviceEntityId},'vtiger_organizationdetails')"; ExecuteQuery($sql); // Increase the size of User Singature field ExecuteQuery("ALTER TABLE vtiger_users CHANGE signature signature varchar(1000)"); // New Currencies added function vt530_updateCurrencyInfo() { global $adb; include 'modules/Utilities/Currencies.php'; $adb->pquery("DELETE FROM vtiger_currencies;", array()); $adb->pquery('UPDATE vtiger_currencies_seq SET id=1;', array()); foreach ($currencies as $key => $value) { $adb->pquery("INSERT INTO vtiger_currencies VALUES (?,?,?,?)", array($adb->getUniqueID("vtiger_currencies"), $key, $value[0], $value[1])); }
function yy_r41() { global $adb; if (!$this->out['meta']) { $module = $this->out['moduleName']; $objectMeta = new VtigerCRMObjectMeta(VtigerWebserviceObject::fromName($adb, $module), $this->user); $this->out['meta'] = $objectMeta; $meta = $this->out['meta']; $fieldcol = $meta->getFieldColumnMapping(); $columns = array(); if (strcmp($this->out['column_list'], '*') === 0) { $columns = array_values($fieldcol); } else { if (strcmp($this->out['column_list'], 'count(*)') !== 0) { foreach ($this->out['column_list'] as $ind => $field) { $columns[] = $fieldcol[$field]; } } } if ($this->out['where_condition']) { foreach ($this->out['where_condition']['column_names'] as $ind => $field) { $columns[] = $fieldcol[$field]; } } $module = $this->module_instance; $tables = $this->getTables($this->out, $columns); if (sizeof($tables) === 0) { $tables[] = $module->table_name; } if (!in_array("vtiger_crmentity", $tables) && $this->out['moduleName'] != "Users") { array_push($tables, "vtiger_crmentity"); } $firstTable = $module->table_name; $firstIndex = $module->tab_name_index[$firstTable]; foreach ($tables as $ind => $table) { if ($module->table_name != $table) { if (!isset($module->tab_name_index[$table]) && $table == "vtiger_crmentity") { $this->out['defaultJoinConditions'] = $this->out['defaultJoinConditions'] . " LEFT JOIN {$table} ON {$firstTable}.{$firstIndex}={$table}.crmid"; } else { $this->out['defaultJoinConditions'] = $this->out['defaultJoinConditions'] . " LEFT JOIN {$table} ON {$firstTable}.{$firstIndex}={$table}.{$module->tab_name_index[$table]}"; } } else { $this->out['tableName'] = $table; } } } /* $module = $this->module_instance; foreach($module->tab_name_index as $key=>$val){ ECNAME = $key.$val; break; } */ }
Migration_Index_View::ExecuteQuery("INSERT INTO vtiger_ws_entity_referencetype(fieldtypeid,type) VALUES (?,?)", array($fieldTypeId, 'Quotes')); $fieldTypeId = $adb->getUniqueID("vtiger_ws_entity_fieldtype"); Migration_Index_View::ExecuteQuery("INSERT INTO vtiger_ws_entity_fieldtype(fieldtypeid,table_name,field_name,fieldtype) VALUES (?,?,?,?);", array($fieldTypeId, 'vtiger_inventoryproductrel', 'incrementondel', "autogenerated")); $adb->getUniqueID("vtiger_inventoryproductrel"); Migration_Index_View::ExecuteQuery("UPDATE vtiger_inventoryproductrel_seq SET id=(select max(lineitem_id) from vtiger_inventoryproductrel);", array()); Migration_Index_View::ExecuteQuery("UPDATE vtiger_ws_entity SET handler_path='include/Webservices/LineItem/VtigerInventoryOperation.php',handler_class='VtigerInventoryOperation' where name in ('Invoice','Quotes','PurchaseOrder','SalesOrder');", array()); $purchaseOrderTabId = getTabid("PurchaseOrder"); $purchaseOrderAddressInformationBlockId = getBlockId($purchaseOrderTabId, "LBL_ADDRESS_INFORMATION"); $invoiceTabId = getTabid("Invoice"); $invoiceTabIdAddressInformationBlockId = getBlockId($invoiceTabId, "LBL_ADDRESS_INFORMATION"); Migration_Index_View::ExecuteQuery('UPDATE vtiger_field SET block=? where tabid=? and block=?;', array($invoiceTabIdAddressInformationBlockId, $invoiceTabId, $purchaseOrderAddressInformationBlockId)); vtws_addActorTypeWebserviceEntityWithName('Tax', 'include/Webservices/LineItem/VtigerTaxOperation.php', 'VtigerTaxOperation', array('fieldNames' => 'taxlabel', 'indexField' => 'taxid', 'tableName' => 'vtiger_inventorytaxinfo'), true); $webserviceObject = VtigerWebserviceObject::fromName($adb, 'Tax'); Migration_Index_View::ExecuteQuery("INSERT INTO vtiger_ws_entity_tables(webservice_entity_id,table_name) VALUES (?,?)", array($webserviceObject->getEntityId(), 'vtiger_inventorytaxinfo')); vtws_addActorTypeWebserviceEntityWithoutName('ProductTaxes', 'include/Webservices/LineItem/VtigerProductTaxesOperation.php', 'VtigerProductTaxesOperation', array()); $webserviceObject = VtigerWebserviceObject::fromName($adb, 'ProductTaxes'); Migration_Index_View::ExecuteQuery("INSERT INTO vtiger_ws_entity_tables(webservice_entity_id,table_name) VALUES (?,?)", array($webserviceObject->getEntityId(), 'vtiger_producttaxrel')); $fieldTypeId = $adb->getUniqueID("vtiger_ws_entity_fieldtype"); Migration_Index_View::ExecuteQuery("INSERT INTO vtiger_ws_entity_fieldtype(fieldtypeid,table_name,field_name,fieldtype) VALUES (?,?,?,?);", array($fieldTypeId, 'vtiger_producttaxrel', 'productid', "reference")); Migration_Index_View::ExecuteQuery("INSERT INTO vtiger_ws_entity_referencetype(fieldtypeid,type) VALUES (?,?)", array($fieldTypeId, 'Products')); $fieldTypeId = $adb->getUniqueID("vtiger_ws_entity_fieldtype"); Migration_Index_View::ExecuteQuery("INSERT INTO vtiger_ws_entity_fieldtype(fieldtypeid,table_name,field_name,fieldtype) VALUES (?,?,?,?);", array($fieldTypeId, 'vtiger_producttaxrel', 'taxid', "reference")); Migration_Index_View::ExecuteQuery("INSERT INTO vtiger_ws_entity_referencetype(fieldtypeid,type) VALUES (?,?)", array($fieldTypeId, 'Tax')); //-- //Changed Columns Display in List view of Leads $leadsFirstName = 'vtiger_leaddetails:firstname:firstname:Leads_First_Name:V'; $leadsLastName = 'vtiger_leaddetails:lastname:lastname:Leads_Last_Name:V'; Migration_Index_View::ExecuteQuery("UPDATE vtiger_cvcolumnlist SET columnname=? WHERE cvid=? AND columnindex=?", array($leadsFirstName, '1', '1')); Migration_Index_View::ExecuteQuery("UPDATE vtiger_cvcolumnlist SET columnname=? WHERE cvid=? AND columnindex=?", array($leadsLastName, '1', '2')); //Changed the Currency Symbol of Moroccan, Dirham to DH Migration_Index_View::ExecuteQuery("UPDATE vtiger_currencies SET currency_symbol=? WHERE currency_name=? AND currency_code=?", array('DH', 'Moroccan, Dirham', 'MAD'));
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 VT520_migrateCustomview($sql, $forModule, $user, $handler) { $db = PearDatabase::getInstance(); $params = array(); $result = $db->pquery($sql, $params); $it = new SqlResultIterator($db, $result); $moduleMetaInfo = array(); foreach ($it as $row) { $module = $row->entitytype; $current_module = $module; if ($forModule == 'Accounts') { if ($module == 'Potentials') { $fieldname = 'related_to'; } else { $fieldname = 'account_id'; } } elseif ($forModule == 'Contacts') { $fieldname = 'contact_id'; } elseif ($forModule == 'Products') { $fieldname = 'product_id'; } elseif ($forModule == 'SalesOrder') { $fieldname = 'quote_id'; } if (empty($moduleMetaInfo[$module])) { $moduleMetaInfo[$module] = new VtigerCRMObjectMeta(VtigerWebserviceObject::fromName($db, $module), $user); } $meta = $moduleMetaInfo[$module]; $moduleFields = $meta->getModuleFields(); $field = $moduleFields[$fieldname]; $columnname = $field->getTableName() . ':' . $field->getColumnName() . ':' . $field->getFieldName() . ':' . $module . '_' . str_replace(' ', '_', $field->getFieldLabelKey()) . ':V'; $handler($columnname, $row); } }
function vtws_getActorEntityName($name, $idList) { $db = PearDatabase::getInstance(); if (!is_array($idList) && count($idList) == 0) { return array(); } $entity = VtigerWebserviceObject::fromName($db, $name); return vtws_getActorEntityNameById($entity->getEntityId(), $idList); }
function sanitizeOwnerFields($row, $meta, $t = null) { global $adb; $ownerFields = $meta->getOwnerFields(); foreach ($ownerFields as $index => $field) { if (isset($row[$field]) && $row[$field] != null) { $ownerType = vtws_getOwnerType($row[$field]); $webserviceObject = VtigerWebserviceObject::fromName($adb, $ownerType); $row[$field] = vtws_getId($webserviceObject->getEntityId(), $row[$field]); } } return $row; }
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 importRecord($obj, $inventoryFieldData, $lineItemDetails) { $adb = PearDatabase::getInstance(); $log = vglobal('log'); $moduleName = $obj->module; $fieldMapping = $obj->fieldMapping; $inventoryHandler = vtws_getModuleHandlerFromName($moduleName, $obj->user); $inventoryMeta = $inventoryHandler->getMeta(); $moduleFields = $inventoryMeta->getModuleFields(); $isRecordExist = isRecordExistInDB($inventoryFieldData, $inventoryMeta, $obj->user); $lineItemHandler = vtws_getModuleHandlerFromName('LineItem', $obj->user); $lineItemMeta = $lineItemHandler->getMeta(); $lineItems = array(); foreach ($lineItemDetails as $index => $lineItemFieldData) { $isLineItemExist = isRecordExistInDB($lineItemFieldData, $lineItemMeta, $obj->user); if ($isLineItemExist) { $count = $index; $lineItemData = array(); $lineItemFieldData = $obj->transformForImport($lineItemFieldData, $lineItemMeta); foreach ($fieldMapping as $fieldName => $index) { if ($moduleFields[$fieldName]->getTableName() == 'vtiger_inventoryproductrel') { $lineItemData[$fieldName] = $lineItemFieldData[$fieldName]; if ($fieldName != 'productid') { $inventoryFieldData[$fieldName] = ''; } } } array_push($lineItems, $lineItemData); } } if (empty($lineItems)) { return null; } elseif ($isRecordExist == false) { foreach ($lineItemDetails[$count] as $key => $value) { $inventoryFieldData[$key] = $value; } } $fieldData = $obj->transformForImport($inventoryFieldData, $inventoryMeta); if (empty($fieldData) || empty($lineItemDetails)) { return null; } if ($fieldData['currency_id'] == ' ') { $fieldData['currency_id'] = '1'; } $fieldData['LineItems'] = $lineItems; $webserviceObject = VtigerWebserviceObject::fromName($adb, $moduleName); $inventoryOperation = new VtigerInventoryOperation($webserviceObject, $obj->user, $adb, $log); $entityInfo = $inventoryOperation->create($moduleName, $fieldData); $entityInfo['status'] = $obj->getImportRecordStatus('created'); return $entityInfo; }