vtigerossez/include/Webservices/DataTransform.php

278 lines
8.8 KiB
PHP

<?php
/*+***********************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.0
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
*************************************************************************************/
class DataTransform{
public static $recordString = "record_id";
public static $recordModuleString = 'record_module';
function sanitizeDataWithColumn($row,$meta){
$newRow = array();
if(isset($row['count(*)'])){
return DataTransform::sanitizeDataWithCountColumn($row,$meta);
}
$fieldColumnMapping = $meta->getFieldColumnMapping();
$columnFieldMapping = array_flip($fieldColumnMapping);
foreach($row as $col=>$val){
if(array_key_exists($col,$columnFieldMapping))
$newRow[$columnFieldMapping[$col]] = $val;
}
$newRow = DataTransform::sanitizeData($newRow,$meta,true);
return $newRow;
}
function sanitizeDataWithCountColumn($row,$meta){
$newRow = array();
foreach($row as $col=>$val){
$newRow['count'] = $val;
}
return $newRow;
}
function filterAndSanitize($row,$meta){
$row = DataTransform::filterAllColumns($row,$meta);
$row = DataTransform::sanitizeData($row,$meta);
return $row;
}
function sanitizeData($newRow,$meta,$t=null){
$newRow = DataTransform::sanitizeReferences($newRow,$meta);
$newRow = DataTransform::sanitizeOwnerFields($newRow,$meta,$t);
$newRow = DataTransform::sanitizeFields($newRow,$meta);
return $newRow;
}
function sanitizeForInsert($row,$meta){
global $adb;
$associatedToUser = false;
$parentTypeId = null;
if(strtolower($meta->getEntityName()) == "emails"){
if(isset($row['parent_id'])){
$components = vtws_getIdComponents($row['parent_id']);
$userObj = VtigerWebserviceObject::fromName($adb,'Users');
$parentTypeId = $components[0];
if($components[0] == $userObj->getEntityId()){
$associatedToUser = true;
}
}
}
// added to handle the setting reminder time
if(strtolower($meta->getEntityName()) == "events"){
if(isset($row['reminder_time'])&& $row['reminder_time']!= null && $row['reminder_time'] != 0){
$_REQUEST['set_reminder'] = "Yes";
$_REQUEST['mode'] = 'edit';
$reminder = $row['reminder_time'];
$seconds = (int)$reminder%60;
$minutes = (int)($reminder/60)%60;
$hours = (int)($reminder/(60*60))%24;
$days = (int)($reminder/(60*60*24));
//at vtiger there cant be 0 minutes reminder so we are setting to 1
if($minutes == 0){
$minutes = 1;
}
$_REQUEST['remmin'] = $minutes;
$_REQUEST['remhrs'] = $hours;
$_REQUEST['remdays'] = $days;
} else {
$_REQUEST['set_reminder'] = "No";
}
} elseif(strtolower($meta->getEntityName()) == "calendar") {
if(empty($row['sendnotification']) || strtolower($row['sendnotificaiton'])=='no'
|| $row['sendnotificaiton'] == '0' || $row['sendnotificaiton'] == 'false'
|| strtolower($row['sendnotificaiton']) == 'n') {
unset($row['sendnotification']);
}
}
$references = $meta->getReferenceFieldDetails();
foreach($references as $field=>$typeList){
if(strpos($row[$field],'x')!==false){
$row[$field] = vtws_getIdComponents($row[$field]);
$row[$field] = $row[$field][1];
}
}
$ownerFields = $meta->getOwnerFields();
foreach($ownerFields as $index=>$field){
if(isset($row[$field]) && $row[$field]!=null){
$ownerDetails = vtws_getIdComponents($row[$field]);
$row[$field] = $ownerDetails[1];
}
}
if(strtolower($meta->getEntityName()) == "emails"){
if(isset($row['parent_id'])){
if($associatedToUser === true){
$_REQUEST['module'] = 'Emails';
$row['parent_id'] = $row['parent_id']."@-1|";
$_REQUEST['parent_id'] = $row['parent_id'];
}else{
$referenceHandler = vtws_getModuleHandlerFromId($parentTypeId,
$meta->getUser());
$referenceMeta = $referenceHandler->getMeta();
$fieldId = getEmailFieldId($referenceMeta, $row['parent_id']);
$row['parent_id'] .= "@$fieldId|";
}
}
}
if($row["id"]){
unset($row["id"]);
}
if(isset($row[$meta->getObectIndexColumn()])){
unset($row[$meta->getObectIndexColumn()]);
}
$row = DataTransform::sanitizeDateFieldsForInsert($row,$meta);
$row = DataTransform::sanitizeCurrencyFieldsForInsert($row,$meta);
return $row;
}
function filterAllColumns($row,$meta){
$recordString = DataTransform::$recordString;
$allFields = $meta->getFieldColumnMapping();
$newRow = array();
foreach($allFields as $field=>$col){
$newRow[$field] = $row[$field];
}
if(isset($row[$recordString])){
$newRow[$recordString] = $row[$recordString];
}
return $newRow;
}
function sanitizeFields($row,$meta){
$default_charset = VTWS_PreserveGlobal::getGlobal('default_charset');
$recordString = DataTransform::$recordString;
$recordModuleString = DataTransform::$recordModuleString;
if(isset($row[$recordModuleString])){
unset($row[$recordModuleString]);
}
if(isset($row['id'])){
if(strpos($row['id'],'x')===false){
$row['id'] = vtws_getId($meta->getEntityId(),$row['id']);
}
}
if(isset($row[$recordString])){
$row['id'] = vtws_getId($meta->getEntityId(),$row[$recordString]);
unset($row[$recordString]);
}
if(!isset($row['id'])){
if($row[$meta->getObectIndexColumn()] ){
$row['id'] = vtws_getId($meta->getEntityId(),$row[$meta->getObectIndexColumn()]);
}else{
//TODO Handle this.
//echo 'error id noy set' ;
}
}else if(isset($row[$meta->getObectIndexColumn()]) && strcmp($meta->getObectIndexColumn(),"id")!==0){
unset($row[$meta->getObectIndexColumn()]);
}
foreach ($row as $field => $value) {
$row[$field] = html_entity_decode($value, ENT_QUOTES, $default_charset);
}
return $row;
}
function sanitizeReferences($row,$meta){
global $adb,$log;
$references = $meta->getReferenceFieldDetails();
foreach($references as $field=>$typeList){
if(strtolower($meta->getEntityName()) == "emails"){
if(isset($row['parent_id'])){
list($row['parent_id'], $fieldId) = explode('@',
$row['parent_id']);
}
}
if($row[$field]){
$found = false;
foreach ($typeList as $entity) {
$webserviceObject = VtigerWebserviceObject::fromName($adb,$entity);
$handlerPath = $webserviceObject->getHandlerPath();
$handlerClass = $webserviceObject->getHandlerClass();
require_once $handlerPath;
$handler = new $handlerClass($webserviceObject,$meta->getUser(),$adb,$log);
$entityMeta = $handler->getMeta();
if($entityMeta->exists($row[$field])){
$row[$field] = vtws_getId($webserviceObject->getEntityId(),$row[$field]);
$found = true;
break;
}
}
if($found !== true){
//This is needed as for query operation of the related record is deleted.
$row[$field] = null;
}
//0 is the default for most of the reference fields, so handle the case and return null instead as its the
//only valid value, which is not a reference Id.
}elseif(isset($row[$field]) && $row[$field]==0){
$row[$field] = null;
}
}
return $row;
}
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 sanitizeDateFieldsForInsert($row,$meta){
global $current_user;
$moduleFields = $meta->getModuleFields();
foreach($moduleFields as $fieldName=>$fieldObj){
if($fieldObj->getFieldDataType()=="date"){
if(!empty($row[$fieldName])){
$dateFieldObj = new DateTimeField($row[$fieldName]);
$row[$fieldName] = $dateFieldObj->getDisplayDate($current_user);
}
}
}
return $row;
}
function sanitizeCurrencyFieldsForInsert($row,$meta){
global $current_user;
$moduleFields = $meta->getModuleFields();
foreach($moduleFields as $fieldName=>$fieldObj){
if($fieldObj->getFieldDataType()=="currency"){
if(!empty($row[$fieldName])){
$row[$fieldName] = CurrencyField::convertToUserFormat($row[$fieldName],$current_user,true);
}
}
}
return $row;
}
}
?>