[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/modules/com_vtiger_workflow/ -> VTSimpleTemplate.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  class VTSimpleTemplate{
  11  
  12  	function __construct($templateString){
  13          $this->template = $templateString;
  14      }
  15  
  16  	function render($entityCache, $entityId){
  17          $this->cache = $entityCache;
  18          $this->parent = $this->cache->forId($entityId);
  19          return $this->parseTemplate();
  20      }
  21  
  22  	private function matchHandler($match){
  23          preg_match('/\((\w+) : \(([_\w]+)\) (\w+)\)/', $match[1], $matches);
  24          if ($match[1] == 'logo') {
  25              return $this->getMetaValue($match[1]);
  26          }
  27          // If parent is empty then we can't do any thing here
  28          if(!empty($this->parent)){
  29              if(count($matches)==0){
  30                  $fieldname = $match[1];
  31  
  32                  //To handle comments for this module
  33                  if (in_array($fieldname, array('lastComment', 'last5Comments', 'allComments'))) {
  34                      return $this->getComments($this->parent->getModuleName(), $fieldname, $this->parent->getId());
  35                  }
  36  
  37                  $data = $this->parent->getData();
  38  
  39                  if(isset($data[$fieldname]) || $fieldname === '_DATE_FORMAT_') {
  40                      if($this->useValue($data, $fieldname)){
  41                          $result = $this->transformToUserFormat($this->parent->getModuleName(), $fieldname, $data[$fieldname]);
  42                      } else {
  43                          $result ='';
  44                      }
  45                  } else {
  46                      $result ='$'.$fieldname;
  47                  }
  48              }else{
  49                  list($full, $referenceField, $referenceModule, $fieldname) = $matches;
  50                  if($referenceModule === '__VtigerMeta__' || $fieldname === 'dbLabel') {
  51                      $result = $this->getMetaValue($fieldname);
  52                  }else{
  53                      $referenceId = $this->parent->get($referenceField);
  54                      if($referenceId==null){
  55                          $result="";
  56                      }else{
  57                          //To handle comments for this reference module
  58                          if (in_array($fieldname, array('lastComment', 'last5Comments', 'allComments'))) {
  59                              return $this->getComments($referenceModule, $fieldname, $referenceId);
  60                          }
  61  
  62                          if ($referenceField === 'contact_id') {
  63                              $referenceIdsList = explode(',', $referenceId);
  64                              $parts = array();
  65                              foreach ($referenceIdsList as $referenceId) {
  66                                  $entity = $this->cache->forId($referenceId);
  67                                  $data = $entity->getData();
  68                                  if($this->useValue($data, $fieldname)) {
  69                                      $parts[] = $this->transformToUserFormat($referenceModule, $fieldname, $data[$fieldname]);
  70                                  }
  71                              }
  72                              return implode(',', $parts);
  73                          }
  74                          $entity = $this->cache->forId($referenceId);
  75                          if($referenceModule==="Users" && $entity->getModuleName()=="Groups"){
  76                              list($groupEntityId, $groupId) = vtws_getIdComponents($referenceId);
  77  
  78                              require_once ('include/utils/GetGroupUsers.php');
  79                              $ggu = new GetGroupUsers();
  80                              $ggu->getAllUsersInGroup($groupId);
  81  
  82                              $users = $ggu->group_users;
  83                              $parts = Array();
  84                              foreach($users as $userId){
  85                                  $refId = vtws_getWebserviceEntityId("Users", $userId);
  86                                  $entity = $this->cache->forId($refId);
  87                                  $data = $entity->getData();
  88                                  if($this->useValue($data, $fieldname)){
  89                                      $parts[] = $this->transformToUserFormat($referenceModule, $fieldname, $data[$fieldname]);
  90                                  }
  91                              }
  92                              $result = implode(", ", $parts);
  93  
  94                          } elseif($entity->getModuleName()===$referenceModule){
  95                              $data = $entity->getData();
  96                              if($this->useValue($data, $fieldname)){
  97                                  $handler = vtws_getModuleHandlerFromName($referenceModule, $this->cache->user);
  98                                  $meta = $handler->getMeta();
  99                                  $referenceFieldList = $meta->getReferenceFieldDetails();
 100                                  if(array_key_exists($fieldname,$referenceFieldList)) {
 101                                      $webserviceId = $data[$fieldname];
 102                                      $idComponents = vtws_getIdComponents($webserviceId);
 103                                      if($fieldname == 'currency_id' && $referenceModule == 'Users') {
 104                                          $result = decode_html(getCurrencyName($idComponents[1]));
 105                                      } else {
 106                                          $result = decode_html(Vtiger_Util_Helper::getLabel($idComponents[1]));
 107                                      }
 108                                  }else{
 109                                      $result = $this->transformToUserFormat($referenceModule, $fieldname, $data[$fieldname]);
 110                                  }
 111                              }else{
 112                                  $result = '';
 113                              }
 114                          }else{
 115                              $result = '';
 116                          }
 117                      }
 118                  }
 119              }
 120          }
 121          return $result;
 122  
 123      }
 124  
 125  	protected function useValue($data, $fieldname) {
 126          return true;
 127      }
 128  
 129  	function parseTemplate(){
 130          return preg_replace_callback('/\\$(\w+|\((\w+) : \(([_\w]+)\) (\w+)\))/', array($this,"matchHandler"), $this->template);
 131      }
 132  
 133  	function getMetaValue($fieldname){
 134          require_once  'config.inc.php';
 135          global $site_URL, $PORTAL_URL, $current_user, $HELPDESK_SUPPORT_NAME, $HELPDESK_SUPPORT_EMAIL_ID;
 136          switch($fieldname){
 137              case 'date'                    :    $referenceId = $this->parent->get('assigned_user_id');
 138                                              if ($referenceId) {
 139                                                  $entity = $this->cache->forId($referenceId);
 140                                                  list($entityId, $ownerId) = vtws_getIdComponents($referenceId);
 141                                                  if($entity->getModuleName() === 'Groups') {
 142                                                      list($moduleId, $recordId) = vtws_getIdComponents($this->parent->getId());
 143                                                      $ownerId = Vtiger_Util_Helper::getCreator($recordId);
 144                                                  }
 145                                              }
 146                                              $ownerObject = new Users();
 147                                              $ownerObject->retrieveCurrentUserInfoFromFile($ownerId);
 148  
 149                                              $date = new DateTimeField(null);
 150                                              return $date->getDisplayDate($ownerObject);
 151              case 'time'                    :    return Vtiger_Util_Helper::convertTimeIntoUsersDisplayFormat(date('h:i:s'));
 152              case 'dbtimezone'            :    return DateTimeField::getDBTimeZone();
 153              case 'usertimezone'            :    $referenceId = $this->parent->get('assigned_user_id');
 154                                              if ($referenceId) {
 155                                                  $entity = $this->cache->forId($referenceId);
 156                                                  list($entityId, $ownerId) = vtws_getIdComponents($referenceId);
 157                                                  if($entity->getModuleName() === 'Groups') {
 158                                                      list($moduleId, $recordId) = vtws_getIdComponents($this->parent->getId());
 159                                                      $ownerId = Vtiger_Util_Helper::getCreator($recordId);
 160                                                  }
 161                                              }
 162  
 163                                              if ($ownerId) {
 164                                                  $ownerFocus = CRMEntity::getInstance('Users');
 165                                                  $ownerFocus->retrieve_entity_info($ownerId, 'Users');
 166                                                  return getTranslatedString($ownerFocus->column_fields['time_zone'], 'Users');
 167                                              }
 168                                              return '';
 169              case 'crmdetailviewurl'        :    $wsId = $this->parent->getId();
 170                                              $parts = explode('x', $wsId);
 171                                              $recordId = $parts[1];
 172                                              $moduleName = $this->parent->getModuleName();
 173                                              return "$site_URL/index.php?module=$moduleName&view=Detail&record=$recordId";
 174              case 'portaldetailviewurl'    :     $wsId = $this->parent->getId();
 175                                              $parts = explode('x', $wsId);
 176                                              $recordId = $parts[1];
 177                                              $moduleName = $this->parent->getModuleName();
 178                                              $recorIdName='id';
 179                                              if($moduleName == 'HelpDesk') $recorIdName = 'ticketid';
 180                                              if($moduleName == 'Faq') $recorIdName = 'faqid';
 181                                              if($moduleName == 'Products') $recorIdName = 'productid';
 182                                              return $PORTAL_URL.'/index.php?module='.$moduleName.'&action=index&'.$recorIdName.'='.$recordId.'&status=true';
 183              case 'portalpdfurl'         :   $wsId = $this->parent->getId();
 184                                              $parts = explode('x', $wsId);
 185                                              $recordId = $parts[1];
 186                                              $moduleName = $this->parent->getModuleName();
 187                                              $recorIdName='id';
 188                                              return $PORTAL_URL.'/index.php?module='.$moduleName.'&action=index&'.$recorIdName.'='.$recordId.'&downloadfile=true';
 189              case 'siteurl'                :    return $site_URL;
 190              case 'portalurl'            :    return $PORTAL_URL;
 191              case 'logo'                    :    return '<img src="cid:logo" />';
 192  
 193              case 'recordId'                : list($moduleId, $recordId) = vtws_getIdComponents($this->parent->getId());
 194                                            return $recordId;
 195  
 196              case 'supportName'            : return $HELPDESK_SUPPORT_NAME;
 197              case 'supportEmailId'        : return $HELPDESK_SUPPORT_EMAIL_ID;
 198              default: '';
 199          }
 200      }
 201  
 202      /**
 203       * Function to transform the field values into user format
 204       * @param <String> $moduleName
 205       * @param <String> $fieldName
 206       * @param <String> $fieldValue
 207       * @return <String> $fieldValue
 208       */
 209  	public function transformToUserFormat($moduleName, $fieldName, $fieldValue) {
 210          global $adb, $log, $current_user;
 211  
 212          //getting owner info
 213          $referenceId = $this->parent->get('assigned_user_id');
 214          if ($referenceId) {
 215              $entity = $this->cache->forId($referenceId);
 216              list($entityId, $ownerId) = vtws_getIdComponents($referenceId);
 217  
 218              if($entity->getModuleName() === 'Groups') {
 219                  list($moduleId, $recordId) = vtws_getIdComponents($this->parent->getId());
 220                  $ownerId = Vtiger_Util_Helper::getCreator($recordId);
 221              }
 222          }
 223          if(!empty($ownerId)) {
 224              $ownerObject = new Users();
 225              $ownerObject->retrieveCurrentUserInfoFromFile($ownerId);
 226          }
 227          
 228          if ($ownerObject && $fieldName === '_DATE_FORMAT_') {
 229              return $ownerObject->column_fields['date_format'];
 230          }
 231  
 232          //getting field instance info
 233          $entityObject = VtigerWebserviceObject::fromName($adb, $moduleName);
 234          $handlerPath = $entityObject->getHandlerPath();
 235          $handlerClass = $entityObject->getHandlerClass();
 236  
 237          require_once $handlerPath;
 238  
 239          $entityHandler = new $handlerClass($entityObject, $current_user, $adb, $log);
 240          $entityMeta = $entityHandler->getMeta();
 241          $entityFields = $entityMeta->getModuleFields();
 242          $fieldInstance = $entityFields[$fieldName];
 243  
 244          switch($fieldInstance->getFieldDataType()) {
 245  
 246              case 'date'            :    if (($moduleName === 'Events' && in_array($fieldName, array('date_start', 'due_date'))) ||
 247                                          ($moduleName === 'Calendar' && $fieldName === 'date_start')) {
 248                                          if ($fieldName === 'date_start') {
 249                                              $dateTime = $this->parent->get('date_start') .' '. $this->parent->get('time_start');
 250                                          } else {
 251                                              $dateTime = $this->parent->get('due_date') .' '. $this->parent->get('time_end');
 252                                          }
 253  
 254                                          $fieldValue = Vtiger_Util_Helper::convertDateTimeIntoUsersDisplayFormat($dateTime, $ownerObject);
 255  
 256                                      } else {
 257                                          $dateFieldObj = new DateTimeField($fieldValue);
 258                                          $fieldValue = $dateFieldObj->getDisplayDate($ownerObject);
 259                                      }
 260                                      break;
 261  
 262              case 'datetime'        :    $fieldValue = Vtiger_Util_Helper::convertDateTimeIntoUsersDisplayFormat($fieldValue, $ownerObject);
 263                                      break;
 264  
 265              case 'currency'        :    if ($fieldInstance->getUIType() === '72') {
 266                                          $fieldValue = CurrencyField::convertToUserFormat($fieldValue, $ownerObject, true);
 267                                      } else if($fieldInstance->getUIType() == '71') {
 268                                          $fieldValue = CurrencyField::convertToUserFormat($fieldValue, $ownerObject);
 269                                      }
 270                                      break;
 271  
 272              case 'time'            :    $fieldValue = Vtiger_Util_Helper::convertTimeIntoUsersDisplayFormat($fieldValue, $ownerObject);
 273                                      break;
 274  
 275              case 'picklist'     :   require_once  'includes/runtime/LanguageHandler.php';
 276                                      require_once  'includes/runtime/Globals.php';
 277                                      $fieldValue = vtranslate($fieldValue,$moduleName,$ownerObject->column_fields['language']);
 278                                      break;
 279  
 280              case 'multipicklist' :  require_once  'includes/runtime/LanguageHandler.php';
 281                                      require_once  'includes/runtime/Globals.php';
 282                                      $fieldValueParts = explode(';',$fieldValue);
 283                                      foreach($fieldValueParts as $index=>$fieldValue) {
 284                                          $fieldValueParts[$index] = vtranslate($fieldValue,$moduleName,$ownerObject->column_fields['language']);
 285                                      }
 286                                      $fieldValue = implode(';', $fieldValueParts);
 287                                      break;
 288              case 'boolean'       :  require_once  'includes/runtime/LanguageHandler.php';
 289                                      require_once  'includes/runtime/Globals.php';
 290                                      if($fieldValue == 1){
 291                                          $fieldValue = vtranslate('LBL_YES',$moduleName);
 292                                      }else {
 293                                          $fieldValue = vtranslate('LBL_NO',$moduleName);
 294                                      }
 295                                      break;
 296              case 'reference'     :  if($fieldName == 'currency_id') {
 297                                          $currencyId = explode('x', $fieldValue);
 298                                          $currencyId = $currencyId[1];
 299                                          $fieldValue = decode_html(getCurrencyName($currencyId));
 300                                      }else{
 301                                          if($fieldValue != 0 && $fieldValue != null){
 302                                              $id = explode('x', $fieldValue);
 303                                              $webServiceObject = VtigerWebserviceObject::fromId($adb,$id[0]);
 304                                              if($webServiceObject){
 305                                                  $Value = getEntityName($webServiceObject->getEntityName(), $id);
 306                                                  $fieldValue = $Value[$id[1]];
 307                                              }
 308                                          }
 309                                      }
 310                                      break;
 311              case 'double'        :   if ($moduleName === 'HelpDesk' && in_array($fieldName, array('days', 'hours'))) {
 312                                          $fieldValue = decimalFormat($fieldValue);
 313                                      } else {
 314                                          $fieldValue;
 315                                      }
 316                                      break;
 317              default                :    $fieldValue;
 318  
 319          }
 320          return nl2br($fieldValue);
 321      }
 322  
 323      /**
 324       * Function to fieldvalues of Comments
 325       * @param <String> $moduleName
 326       * @param <String> $fieldName
 327       * @param <String> $fieldValue
 328       * @return <String> $comments
 329       */
 330  	public function getComments($moduleName, $fieldName, $fieldValue) {
 331          global $adb, $log, $current_user;
 332  
 333          $sql = 'SELECT commentcontent FROM vtiger_modcomments WHERE related_to = ? ORDER BY modcommentsid DESC';
 334  
 335          switch ($fieldName) {
 336              case 'lastComment'        : $sql .= ' LIMIT 1';    break;
 337              case 'last5Comments'    : $sql .= ' LIMIT 5';    break;
 338              default                    : $sql;                    break;
 339          }
 340          list($entityId, $recordId) = vtws_getIdComponents($fieldValue);
 341  
 342          $result = $adb->pquery($sql, array($recordId));
 343          $numOfRows = $adb->num_rows($result);
 344  
 345          $commentsList = '';
 346          for ($i=0; $i<$numOfRows; $i++) {
 347              $comment = $adb->query_result($result, $i, 'commentcontent');
 348              if ($comment != '') {
 349                  $commentsList .= '<br><br>' . nl2br($comment);
 350              }
 351          }
 352  
 353          return $commentsList;
 354      }
 355  }
 356  ?>


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