[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/modules/com_vtiger_workflow/tasks/ -> VTUpdateFieldsTask.inc (source)

   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  ?>


Generated: Fri Nov 28 20:08:37 2014 Cross-referenced by PHPXref 0.7.1