[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/include/utils/ -> EmailTemplate.php (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  
  11  require_once  'include/events/SqlResultIterator.inc';
  12  
  13  /**
  14   * Description of EmailTemplateUtils
  15   *
  16   * @author mak
  17   */
  18  class EmailTemplate {
  19  
  20      protected $module;
  21      protected $rawDescription;
  22      protected $processedDescription;
  23      protected $recordId;
  24      protected $processed;
  25      protected $templateFields;
  26      protected $user;
  27      protected $processedmodules;
  28      protected $referencedFields;
  29  
  30  	public function __construct($module, $description, $recordId, $user) {
  31          $this->module = $module;
  32          $this->recordId = $recordId;
  33          $this->processed = false;
  34          $this->user = $user;
  35          $this->setDescription($description);
  36      }
  37  
  38  	public function setDescription($description) {
  39          // Because if we have two dollars like this "$$" it's not working because it'll be like escape char
  40          $description = preg_replace("/\\$\\$/","$ $",$description);
  41          $this->rawDescription = $description;
  42          $this->processedDescription = $description;
  43          $result = preg_match_all("/\\$(?:[a-zA-Z0-9]+)-(?:[a-zA-Z0-9]+)(?:_[a-zA-Z0-9]+)?(?::[a-zA-Z0-9]+)?(?:_[a-zA-Z0-9]+)?\\$/", $this->rawDescription, $matches);
  44          if($result != 0){
  45              $templateVariablePair = $matches[0];
  46              $this->templateFields = Array();
  47              for ($i = 0; $i < count($templateVariablePair); $i++) {
  48                  $templateVariablePair[$i] = str_replace('$', '', $templateVariablePair[$i]);
  49                  list($module, $columnName) = explode('-', $templateVariablePair[$i]);
  50                  list($parentColumn, $childColumn) = explode(':', $columnName);
  51                  $this->templateFields[$module][] = $parentColumn;
  52                  $this->referencedFields[$parentColumn][] = $childColumn;
  53                  $this->processedmodules[$module] = false;
  54              }
  55              $this->processed = false;
  56          }
  57      }
  58  
  59  	private function getTemplateVariableListForModule($module) {
  60          return $this->templateFields[strtolower($module)];
  61      }
  62  
  63  	public function process($params) {
  64          $module = $this->module;
  65          $recordId = $this->recordId;
  66          $variableList = $this->getTemplateVariableListForModule($module);
  67          $handler = vtws_getModuleHandlerFromName($module, $this->user);
  68          $meta = $handler->getMeta();
  69          $referenceFields = $meta->getReferenceFieldDetails();
  70          $fieldColumnMapping = $meta->getFieldColumnMapping();
  71          $columnTableMapping = $meta->getColumnTableMapping();
  72  
  73          if ($this->isProcessingReferenceField($params)) {
  74              $parentFieldColumnMapping = $meta->getFieldColumnMapping();
  75              $module = $params['referencedMeta']->getEntityName();
  76              if ($this->processedmodules[$module] || (!$this->isModuleActive($module))) {
  77                  return;
  78              }
  79              $recordId = $params['id'];
  80  
  81              $meta = $params['referencedMeta'];
  82              $referenceFields = $meta->getReferenceFieldDetails();
  83              $fieldColumnMapping = $meta->getFieldColumnMapping();
  84              $columnTableMapping = $meta->getColumnTableMapping();
  85              $referenceColumn = $parentFieldColumnMapping[$params['field']];
  86              $variableList = $this->referencedFields[$referenceColumn];
  87          }
  88  
  89          $tableList = array();
  90          $columnList = array();
  91          $allColumnList = $meta->getUserAccessibleColumns();
  92          $fieldList = array();
  93          if (count($variableList) > 0) {
  94              foreach ($variableList as $column) {
  95                  if (in_array($column, $allColumnList)) {
  96                      $fieldList[] = array_search($column, $fieldColumnMapping);
  97                      $columnList[] = $column;
  98                  }
  99              }
 100              foreach ($fieldList as $field) {
 101                  if (!empty($columnTableMapping[$fieldColumnMapping[$field]])) {
 102                      $tableList[$columnTableMapping[$fieldColumnMapping[$field]]] = '';
 103                  }
 104              }
 105              $tableList = array_keys($tableList);
 106              $defaultTableList = $meta->getEntityDefaultTableList();
 107              foreach ($defaultTableList as $defaultTable) {
 108                  if (!in_array($defaultTable, $tableList)) {
 109                      $tableList[] = $defaultTable;
 110                  }
 111              }
 112  
 113              if (count($tableList) > 0 && count($columnList) > 0) {
 114                  $sql = 'select ' . implode(', ', $columnList) . ' from ' . $tableList[0];
 115                  $moduleTableIndexList = $meta->getEntityTableIndexList();
 116                  foreach ($tableList as $index => $tableName) {
 117                      if ($tableName != $tableList[0]) {
 118                          $sql .=' INNER JOIN ' . $tableName . ' ON ' . $tableList[0] . '.' .
 119                                  $moduleTableIndexList[$tableList[0]] . '=' . $tableName . '.' .
 120                                  $moduleTableIndexList[$tableName];
 121                      }
 122                  }
 123                  //If module is Leads and if you are not selected any leads fields then query failure is happening.
 124                  //By default we are checking where condition on base table.
 125                  if($module == 'Leads' && !in_array('vtiger_leaddetails', $tableList)){
 126                      $sql .=' INNER JOIN vtiger_leaddetails ON vtiger_leaddetails.leadid = vtiger_crmentity.crmid';
 127                  }
 128                  
 129                  $sql .= ' WHERE';
 130                  $deleteQuery = $meta->getEntityDeletedQuery();
 131                  if (!empty($deleteQuery)) {
 132                      $sql .= ' ' . $meta->getEntityDeletedQuery() . ' AND';
 133                  }
 134                  $sql .= ' ' . $tableList[0] . '.' . $moduleTableIndexList[$tableList[0]] . '=?';
 135                  $sqlparams = array($recordId);
 136                  $db = PearDatabase::getInstance();
 137                  $result = $db->pquery($sql, $sqlparams);
 138                  $it = new SqlResultIterator($db, $result);
 139              //assuming there can only be one row.
 140                  $values = array();
 141                  foreach ($it as $row) {
 142                      foreach ($fieldList as $field) {
 143                          $values[$field] = $row->get($fieldColumnMapping[$field]);
 144                      }
 145                  }
 146                  $moduleFields = $meta->getModuleFields();
 147                  foreach ($moduleFields as $fieldName => $webserviceField) {
 148                      $presence = $webserviceField->getPresence();
 149                      if(!in_array($presence,array(0,2))){
 150                          continue;
 151                      }
 152                      if (isset($values[$fieldName]) &&
 153                              $values[$fieldName] !== null) {
 154                          if (strcasecmp($webserviceField->getFieldDataType(), 'reference') === 0) {
 155                              $details = $webserviceField->getReferenceList();
 156                              if (count($details) == 1) {
 157                                  $referencedObjectHandler = vtws_getModuleHandlerFromName(
 158                                          $details[0], $this->user);
 159                              } else {
 160                                  $type = getSalesEntityType(
 161                                          $values[$fieldName]);
 162                                  $referencedObjectHandler = vtws_getModuleHandlerFromName($type,
 163                                          $this->user);
 164                              }
 165                              $referencedObjectMeta = $referencedObjectHandler->getMeta();
 166                              if (!$this->isProcessingReferenceField($params) && !empty($values[$fieldName])) {
 167                                  $this->process(array('parentMeta' => $meta, 'referencedMeta' => $referencedObjectMeta, 'field' => $fieldName, 'id' => $values[$fieldName]));
 168                              }
 169                              $values[$fieldName] =
 170                                      $referencedObjectMeta->getName(vtws_getId(
 171                                      $referencedObjectMeta->getEntityId(),
 172                                      $values[$fieldName]));
 173                          } elseif (strcasecmp($webserviceField->getFieldDataType(), 'owner') === 0) {
 174                              $referencedObjectHandler = vtws_getModuleHandlerFromName(
 175                                      vtws_getOwnerType($values[$fieldName]),
 176                                      $this->user);
 177                              $referencedObjectMeta = $referencedObjectHandler->getMeta();
 178                              /*
 179                              * operation supported for format $module-parentcolumn:childcolumn$
 180                              */
 181                              if (in_array($fieldColumnMapping[$fieldName], array_keys($this->referencedFields))) {
 182                                  $this->process(array('parentMeta' => $meta, 'referencedMeta' => $referencedObjectMeta, 'field' => $fieldName, 'id' => $values[$fieldName], 'owner' => true));
 183                              }
 184  
 185                              $values[$fieldName] =
 186                                      $referencedObjectMeta->getName(vtws_getId(
 187                                      $referencedObjectMeta->getEntityId(),
 188                                      $values[$fieldName]));
 189                          } elseif (strcasecmp($webserviceField->getFieldDataType(), 'picklist') === 0) {
 190                              $values[$fieldName] = getTranslatedString(
 191                                      $values[$fieldName], $module);
 192                          } elseif (strcasecmp($fieldName, 'salutationtype') === 0 && $webserviceField->getUIType() == '55'){
 193                              $values[$fieldName] = getTranslatedString(
 194                                      $values[$fieldName], $module);
 195                          } elseif (strcasecmp($webserviceField->getFieldDataType(), 'datetime') === 0) {
 196                              $values[$fieldName] = $values[$fieldName] . ' ' . DateTimeField::getDBTimeZone();
 197                          }
 198                      }
 199                  }
 200  
 201                  if (!$this->isProcessingReferenceField($params)) {
 202                      foreach ($columnList as $column) {
 203                          $needle = '$' . strtolower($this->module) . "-$column$";
 204                          $this->processedDescription = str_replace($needle,
 205                                  $values[array_search($column, $fieldColumnMapping)], $this->processedDescription);
 206                      }
 207                      // Is process Description will send false even that module don't have reference record set
 208                      $this->processedDescription = preg_replace("/\\$(?:[a-zA-Z0-9]+)-(?:[a-zA-Z0-9]+)(?:_[a-zA-Z0-9]+)?(?::[a-zA-Z0-9]+)(?:[a-zA-Z0-9]+)?(?:_[a-zA-Z0-9]+)?\\$/", '', $this->processedDescription);
 209                  } else {
 210                      foreach ($columnList as $column) {
 211                          $needle = '$' . strtolower($this->module) . '-' . $parentFieldColumnMapping[$params['field']] . ':' . $column . '$';
 212                          $this->processedDescription = str_replace($needle,
 213                                  $values[array_search($column, $fieldColumnMapping)], $this->processedDescription);
 214                      }
 215                      if (!$params['owner'])
 216                          $this->processedmodules[$module] = true;
 217                  }
 218              }
 219          }
 220          $this->processed = true;
 221      }
 222  
 223  	public function isProcessingReferenceField($params) {
 224          if (!empty($params['referencedMeta'])
 225                  && (!empty($params['id']))
 226                  && (!empty($params['field']))
 227          ) {
 228              return true;
 229          }
 230  
 231          return false;
 232      }
 233  
 234  	public function getProcessedDescription() {
 235          if (!$this->processed) {
 236              $this->process(null);
 237          }
 238          return $this->processedDescription;
 239      }
 240  
 241  	public function isModuleActive($module) {
 242          include_once  'include/utils/VtlibUtils.php';
 243          if (vtlib_isModuleActive($module) && ((isPermitted($module, 'EditView') == 'yes'))) {
 244              return true;
 245          }
 246          return false;
 247      }
 248  
 249  	public function isActive($field, $mod) {
 250          global $adb;
 251          $tabid = getTabid($mod);
 252          $query = 'select * from vtiger_field where fieldname = ?  and tabid = ? and presence in (0,2)';
 253          $res = $adb->pquery($query, array($field, $tabid));
 254          $rows = $adb->num_rows($res);
 255          if ($rows > 0) {
 256              return true;
 257          }else
 258              return false;
 259      }
 260  
 261  }
 262  
 263  ?>


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