[ Index ] |
PHP Cross Reference of vtigercrm-6.1.0 |
[Summary view] [Print] [Text view]
1 <?php 2 /*+********************************************************************************** 3 * The contents of this file are subject to the vtiger CRM Public License Version 1.0 4 * ("License"); You may not use this file except in compliance with the License 5 * The Original Code is: vtiger CRM Open Source 6 * The Initial Developer of the Original Code is vtiger. 7 * Portions created by vtiger are Copyright (C) vtiger. 8 * All Rights Reserved. 9 ************************************************************************************/ 10 require_once ('modules/com_vtiger_workflow/VTEntityCache.inc'); 11 require_once ('modules/com_vtiger_workflow/VTWorkflowUtils.php'); 12 13 class VTUpdateFieldsTask extends VTTask { 14 15 public $executeImmediately = true; 16 17 public function getFieldNames() { 18 return array('field_value_mapping'); 19 } 20 21 public function doTask($entity) { 22 global $adb, $current_user, $default_charset; 23 24 $util = new VTWorkflowUtils(); 25 $util->adminUser(); 26 27 $moduleName = $entity->getModuleName(); 28 $entityId = $entity->getId(); 29 $recordId = vtws_getIdComponents($entityId); 30 $recordId = $recordId[1]; 31 32 $moduleHandler = vtws_getModuleHandlerFromName($moduleName, $current_user); 33 $handlerMeta = $moduleHandler->getMeta(); 34 $moduleFields = $handlerMeta->getModuleFields(); 35 36 $fieldValueMapping = array(); 37 if (!empty($this->field_value_mapping)) { 38 $fieldValueMapping = Zend_Json::decode($this->field_value_mapping); 39 } 40 41 if (!empty($fieldValueMapping) && count($fieldValueMapping) > 0) { 42 require_once ('data/CRMEntity.php'); 43 $focus = CRMEntity::getInstance($moduleName); 44 $focus->id = $recordId; 45 $focus->mode = 'edit'; 46 $focus->retrieve_entity_info($recordId, $moduleName); 47 $focus->clearSingletonSaveFields(); 48 49 $util->loggedInUser(); 50 $focus->column_fields = DataTransform::sanitizeDateFieldsForInsert($focus->column_fields,$handlerMeta); 51 $focus->column_fields = DataTransform::sanitizeCurrencyFieldsForInsert($focus->column_fields,$handlerMeta); 52 foreach ($fieldValueMapping as $fieldInfo) { 53 $fieldName = $fieldInfo['fieldname']; 54 $fieldValueType = $fieldInfo['valuetype']; 55 $fieldValue = trim($fieldInfo['value']); 56 57 $fieldInstance = $moduleFields[$fieldName]; 58 59 if ($fieldValueType == 'fieldname') { 60 $fieldDataType = $fieldInstance->getFieldDataType(); 61 $fieldValue = $focus->column_fields[$fieldValue]; 62 $fieldValueInDB = $fieldValue; 63 if($fieldDataType == 'date') { 64 //Convert the DB Date Time Format to User Date Time Format 65 $dateTime = new DateTimeField($fieldValue); 66 $fieldValue = $dateTime->getDisplayDateTimeValue(); 67 68 $date = explode(' ', $fieldValue); 69 $fieldValue = $date[0]; 70 } 71 //for Product Unit Price value converted with based product currency 72 if($fieldDataType == 'currency' && $fieldName == 'unit_price') { 73 $fieldValue = $this->calculateProductUnitPrice($fieldValue); 74 } 75 // for calendar time_start field db value will be in UTC format, we should convert to user format 76 if(trim($fieldInfo['value']) == 'time_start' && $moduleName == 'Calendar' && $fieldDataType == 'time'){ 77 $date = new DateTime(); 78 $dateTime = new DateTimeField($date->format('Y-m-d').' '. $fieldValue); 79 $fieldValue = $dateTime->getDisplayTime(); 80 } 81 // End 82 } elseif ($fieldValueType == 'expression') { 83 require_once 'modules/com_vtiger_workflow/expression_engine/include.inc'; 84 85 $parser = new VTExpressionParser(new VTExpressionSpaceFilter(new VTExpressionTokenizer($fieldValue))); 86 $expression = $parser->expression(); 87 $exprEvaluater = new VTFieldExpressionEvaluater($expression); 88 $fieldValue = $exprEvaluater->evaluate($entity); 89 $fieldValueInDB = $fieldValue; 90 //for Product Unit Price value converted with based product currency 91 if($fieldInstance && $fieldInstance->getFieldDataType() == 'currency' && $fieldName == 'unit_price') { 92 $fieldValue = $this->calculateProductUnitPrice($fieldValue); 93 }else{ 94 $fieldValue = $this->convertValueToUserFormat($fieldInstance, $fieldValue); 95 } 96 } else { 97 if (preg_match('/([^:]+):boolean$/', $fieldValue, $match)) { 98 $fieldValue = $match[1]; 99 if ($fieldValue == 'true') { 100 $fieldValue = '1'; 101 } else { 102 $fieldValue = '0'; 103 } 104 } 105 //for Product Unit Price value converted with based product currency 106 if($fieldInstance && $fieldInstance->getFieldDataType() == 'currency' && $fieldName == 'unit_price') { 107 $fieldValue = $this->calculateProductUnitPrice($fieldValue); 108 } 109 $fieldValueInDB = $fieldValue; 110 } 111 112 if ($fieldInstance && $fieldInstance->getFieldDataType() === 'owner') { 113 if(!is_numeric($fieldValue)){ 114 //If name is given 115 $userId = getUserId_Ol($fieldValue); 116 $groupId = getGrpId($fieldValue); 117 118 if ($userId == 0 && $groupId == 0) { 119 $fieldValue = $focus->column_fields[$fieldName]; 120 } else { 121 $fieldValue = ($userId == 0) ? $groupId : $userId; 122 } 123 124 if($userId == 0) { 125 $webserviceObject = VtigerWebserviceObject::fromName($adb,'Groups'); 126 $fieldValueInDB = vtws_getId($webserviceObject->getEntityId(),$fieldValue); 127 } else { 128 $webserviceObject = VtigerWebserviceObject::fromName($adb,'Users'); 129 $fieldValueInDB = vtws_getId($webserviceObject->getEntityId(),$fieldValue); 130 } 131 } else { 132 $ownerType = vtws_getOwnerType($fieldValue); 133 $webserviceObject = VtigerWebserviceObject::fromName($adb,$ownerType); 134 $fieldValueInDB = vtws_getId($webserviceObject->getEntityId(),$fieldValue); 135 } 136 } 137 138 $focus->column_fields[$fieldName] = $fieldValue; 139 $entity->data[$fieldName] = $fieldValueInDB; 140 } 141 142 foreach ($focus->column_fields as $fieldName => $fieldValue) { 143 $focus->column_fields[$fieldName] = html_entity_decode($fieldValue, ENT_QUOTES, $default_charset); 144 } 145 $_REQUEST['file'] = ''; 146 $_REQUEST['ajxaction'] = ''; 147 148 // Added as Mass Edit triggers workflow and date and currency fields are set to user format 149 // When saving the information in database saveentity API should convert to database format 150 // and save it. But it converts in database format only if that date & currency fields are 151 // changed(massedit) other wise they wont be converted thereby changing the values in user 152 // format, CRMEntity.php line 474 has the login to check wheather to convert to database format 153 $actionName = $_REQUEST['action']; 154 $_REQUEST['action'] = ''; 155 156 // For workflows update field tasks is deleted all the lineitems. 157 $focus->isLineItemUpdate = false; 158 159 $focus->saveentity($moduleName); 160 161 // Reverting back the action name as there can be some dependencies on this. 162 $_REQUEST['action'] = $actionName; 163 $util->revertUser(); 164 } 165 $util->revertUser(); 166 } 167 168 //Function use to convert the field value in to current user format 169 public function convertValueToUserFormat($fieldObj, $fieldValue) { 170 global $current_user; 171 if(!empty ($fieldObj)) { 172 // handle the case for Date field 173 if($fieldObj->getFieldDataType()=="date") { 174 if(!empty($fieldValue)) { 175 $dateFieldObj = new DateTimeField($fieldValue); 176 $fieldValue = $dateFieldObj->getDisplayDate($current_user); 177 } 178 } 179 180 // handle the case for currency field 181 if($fieldObj->getFieldDataType()=="currency" && !empty($fieldValue)) { 182 if($fieldObj->getUIType() == '71') { 183 $fieldValue = CurrencyField::convertToUserFormat($fieldValue,$current_user,false); 184 } else if($fieldObj->getUIType() == '72') { 185 $fieldValue = CurrencyField::convertToUserFormat($fieldValue,$current_user,true); 186 } 187 } 188 } 189 return $fieldValue; 190 } 191 192 /** 193 * Function to calculate Product Unit Price. 194 * Product Unit Price value converted with based product currency 195 * @param type $fieldValue 196 */ 197 public function calculateProductUnitPrice($fieldValue) { 198 $currency_details = getAllCurrencies('all'); 199 for($i=0;$i<count($currency_details);$i++) { 200 $curid = $currency_details[$i]['curid']; 201 $cur_checkname = 'cur_' . $curid . '_check'; 202 $cur_valuename = 'curname' . $curid; 203 if($cur_valuename == $_REQUEST['base_currency'] && ($_REQUEST[$cur_checkname] == 'on' || $_REQUEST[$cur_checkname] == 1)) { 204 $fieldValue = $fieldValue * $currency_details[$i]['conversionrate']; 205 $_REQUEST[$cur_valuename] = $fieldValue; 206 } 207 } 208 return $fieldValue; 209 } 210 211 } 212 213 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:08:37 2014 | Cross-referenced by PHPXref 0.7.1 |