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