[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/modules/Settings/Picklist/handlers/ -> PickListHandler.php (source)

   1  <?php
   2  
   3  class PickListHandler extends VTEventHandler {
   4  
   5  	function handleEvent($eventName, $entityData) {
   6          global $log, $adb;
   7  
   8          if($eventName == 'vtiger.picklist.afterrename') {
   9              $this->operationsAfterPicklistRename($entityData);
  10          } elseif($eventName == 'vtiger.picklist.afterdelete') {
  11              $this->operationsAfterPicklistDelete($entityData);
  12          }
  13      }
  14      
  15      /**

  16       * Function to perform operation after picklist rename

  17       * @param type $entityData

  18       */
  19  	function operationsAfterPicklistRename($entityData) {
  20          
  21          $db = PearDatabase::getInstance();
  22          $pickListFieldName = $entityData['fieldname']; 
  23          $oldValue = $entityData['oldvalue'];
  24          $newValue = $entityData['newvalue'];
  25          $moduleName = $entityData['module'];
  26          
  27          $moduleModel = Vtiger_Module_Model::getInstance($moduleName);
  28          $tabId = $moduleModel->getId();
  29          //update picklist dependency values 

  30          $query = "SELECT id,targetvalues FROM vtiger_picklist_dependency where targetfield=? and tabid=?";
  31          $result = $db->pquery($query, array($pickListFieldName, $tabId));
  32          $num_rows = $db->num_rows($result);
  33          for($i = 0; $i < $num_rows; $i++) {
  34              $row = $db->query_result_rowdata($result, $i);
  35              $value = decode_html($row['targetvalues']);
  36              $explodedValueArray = Zend_Json::decode($value);
  37              $arrayKey = array_search($oldValue, $explodedValueArray);
  38              if($arrayKey !== false){
  39                  $explodedValueArray[$arrayKey] = $newValue;
  40              }
  41              $value = Zend_Json::encode($explodedValueArray);
  42              $query = 'UPDATE vtiger_picklist_dependency SET targetvalues=? where id=? AND tabid=?';
  43              $db->pquery($query, array($value, $row['id'], $tabId));
  44          }
  45          $fieldModel = Vtiger_Field_Model::getInstance($pickListFieldName, $moduleModel);
  46          $advFiltercolumnName = $fieldModel->getCustomViewColumnName();
  47          $reportFilterColumnName = $fieldModel->getReportFilterColumnName();
  48          
  49          //update advancefilter values

  50          $query= 'SELECT cvid,value,columnindex,groupid FROM vtiger_cvadvfilter where columnname=?';
  51          $result = $db->pquery($query, array($advFiltercolumnName));
  52          $num_rows = $db->num_rows($result);
  53          for ($i = 0; $i < $num_rows; $i++) {
  54              $row = $db->query_result_rowdata($result, $i);
  55              $value = $row['value'];
  56              $explodedValueArray = explode(',', $value);
  57              $arrayKey = array_search($oldValue, $explodedValueArray);
  58              if($arrayKey !== false){
  59                  $explodedValueArray[$arrayKey] = $newValue;
  60              }
  61              $value = implode(',', $explodedValueArray);
  62              $query = 'UPDATE vtiger_cvadvfilter SET value=? where columnname=? and cvid=? and columnindex=? and groupid=?';
  63              $db->pquery($query, array($value, $advFiltercolumnName, $row['cvid'], $row['columnindex'], $row['groupid']));
  64          }
  65          
  66          //update reportsFilter values

  67          $query= 'SELECT queryid,value,columnindex,groupid FROM vtiger_relcriteria where columnname=?';
  68          $result = $db->pquery($query, array($reportFilterColumnName));
  69          $num_rows = $db->num_rows($result);
  70          for ($i = 0; $i < $num_rows; $i++) {
  71              $row = $db->query_result_rowdata($result, $i);
  72              $value = $row['value'];
  73              $explodedValueArray = explode(',', $value);
  74              $arrayKey = array_search($oldValue, $explodedValueArray);
  75              if($arrayKey !== false){
  76                  $explodedValueArray[$arrayKey] = $newValue;
  77              }
  78              $value = implode(',', $explodedValueArray);
  79              $query = 'UPDATE vtiger_relcriteria SET value=? where columnname=? and queryid=? and columnindex=? and groupid=?';
  80              $db->pquery($query, array($value, $reportFilterColumnName, $row['queryid'], $row['columnindex'], $row['groupid']));
  81          }
  82          
  83          //update Workflows values

  84          $query= 'SELECT workflow_id,test FROM com_vtiger_workflows where module_name=? AND test != "" AND test IS NOT NULL AND test !="null" AND test LIKE "%'.$oldValue.'%"';
  85          $result = $db->pquery($query, array($moduleName));
  86          $num_rows = $db->num_rows($result);
  87          for($i = 0;$i < $num_rows; $i++) {
  88              $row = $db->query_result_rowdata($result, $i);
  89              $condition = decode_html($row['test']);
  90              $decodedArrayConditions = Zend_Json::decode($condition);
  91              if(!empty($decodedArrayConditions)){
  92                  foreach($decodedArrayConditions as $key=>$condition) {
  93                      if($condition['fieldname'] == $pickListFieldName){
  94                          $value = $condition['value'];
  95                          $explodedValueArray = explode(',', $value);
  96                          $arrayKey = array_search($oldValue, $explodedValueArray);
  97                          if ($arrayKey !== false) {
  98                              $explodedValueArray[$arrayKey] = $newValue;
  99                          }
 100                          $value = implode(',', $explodedValueArray);
 101                          $condition['value'] = $value;
 102                      }
 103                      $decodedArrayConditions[$key] = $condition;
 104                  }
 105                  $condtion = Zend_Json::encode($decodedArrayConditions);
 106                  $query= 'UPDATE com_vtiger_workflows SET test=? where workflow_id=?';
 107                  $db->pquery($query, array($condtion, $row['workflow_id']));
 108              }
 109          }
 110          
 111          //update workflow task

 112          $query = 'SELECT task,task_id,workflow_id FROM com_vtiger_workflowtasks where task LIKE "%'.$oldValue.'%"';
 113          $result = $db->pquery($query, array());
 114          $num_rows = $db->num_rows($result);
 115          
 116          for ($i = 0; $i < $num_rows; $i++) {
 117              $row = $db->raw_query_result_rowdata($result, $i);
 118              $task = $row['task'];
 119              $taskComponents = explode(':', $task);
 120              $classNameWithDoubleQuotes = $taskComponents[2];
 121              $className = str_replace('"', '', $classNameWithDoubleQuotes);
 122              require_once ("modules/com_vtiger_workflow/VTTaskManager.inc");
 123              require_once 'modules/com_vtiger_workflow/tasks/'.$className.'.inc';
 124              $unserializeTask = unserialize($task);
 125              if(array_key_exists("field_value_mapping",$unserializeTask)) {
 126                  $fieldMapping = Zend_Json::decode($unserializeTask->field_value_mapping);
 127                  if (!empty($fieldMapping)) {
 128                      foreach ($fieldMapping as $key => $condition) {
 129                          if ($condition['fieldname'] == $pickListFieldName) {
 130                              $value = $condition['value'];
 131                              $explodedValueArray = explode(',', $value);
 132                              $arrayKey = array_search($oldValue, $explodedValueArray);
 133                              if ($arrayKey !== false) {
 134                                  $explodedValueArray[$arrayKey] = $newValue;
 135                              }
 136                              $value = implode(',', $explodedValueArray);
 137                              $condition['value'] = $value;
 138                          }
 139                          $fieldMapping[$key] = $condition;
 140                      }
 141                      $updatedTask = Zend_Json::encode($fieldMapping);
 142                      $unserializeTask->field_value_mapping = $updatedTask;
 143                      $serializeTask = serialize($unserializeTask);
 144                      $query = 'UPDATE com_vtiger_workflowtasks SET task=? where workflow_id=? AND task_id=?';
 145                      $db->pquery($query, array($serializeTask, $row['workflow_id'], $row['task_id']));
 146                  }
 147              } else {
 148                  if($className == 'VTCreateEventTask') {
 149                      if($pickListFieldName == 'eventstatus') {
 150                          $pickListFieldName = 'status';
 151                      } elseif($pickListFieldName == 'activitytype') {
 152                          $pickListFieldName = 'eventType';
 153                      }
 154                  } elseif($className == 'VTCreateTodoTask'){
 155                      if($pickListFieldName == 'taskstatus') {
 156                          $pickListFieldName = 'status';
 157                      } elseif($pickListFieldName == 'taskpriority') {
 158                          $pickListFieldName = 'priority';
 159                      }
 160                  }
 161                  if(array_key_exists($pickListFieldName, $unserializeTask)){
 162                      $value = $unserializeTask->$pickListFieldName;
 163                      $explodedValueArray = explode(',', $value);
 164                      $arrayKey = array_search($oldValue, $explodedValueArray);
 165                      if ($arrayKey !== false) {
 166                          $explodedValueArray[$arrayKey] = $newValue;
 167                      }
 168                      $value = implode(',', $explodedValueArray);
 169                      $unserializeTask->$pickListFieldName = $value;
 170                      $serializeTask = serialize($unserializeTask);
 171                      $query = 'UPDATE com_vtiger_workflowtasks SET task=? where workflow_id=? AND task_id=?';
 172                      $db->pquery($query, array($serializeTask, $row['workflow_id'], $row['task_id']));
 173                  }
 174              }
 175          }
 176      }
 177      
 178      /**

 179       * Function to perform operation after picklist delete

 180       * @param type $entityData

 181       */
 182  	function operationsAfterPicklistDelete($entityData) {
 183          $db = PearDatabase::getInstance();
 184          $pickListFieldName = $entityData['fieldname']; 
 185          $valueToDelete = $entityData['valuetodelete'];
 186          $replaceValue = $entityData['replacevalue'];
 187          $moduleName = $entityData['module'];
 188                      
 189          $moduleModel = Vtiger_Module_Model::getInstance($moduleName);
 190          $fieldModel = Vtiger_Field_Model::getInstance($pickListFieldName, $moduleModel);
 191          $advFiltercolumnName = $fieldModel->getCustomViewColumnName();
 192          $reportFilterColumnName = $fieldModel->getReportFilterColumnName();
 193          
 194          //update advancefilter values

 195          $query= 'SELECT cvid,value,columnindex,groupid FROM vtiger_cvadvfilter where columnname=?';
 196          $result = $db->pquery($query, array($advFiltercolumnName));
 197          $num_rows = $db->num_rows($result);
 198          for ($i = 0; $i < $num_rows; $i++) {
 199              $row = $db->query_result_rowdata($result, $i);
 200              $value = $row['value'];
 201              $explodedValueArray = explode(',', $value);
 202              foreach($valueToDelete as $value) {
 203                  $arrayKey = array_search($value, $explodedValueArray);
 204                  if($arrayKey !== false){
 205                      $explodedValueArray[$arrayKey] = $replaceValue;
 206                  }
 207              }
 208              $value = implode(',', $explodedValueArray);
 209              $query = 'UPDATE vtiger_cvadvfilter SET value=? where columnname=? and cvid=? and columnindex=? and groupid=?';
 210              $db->pquery($query, array($value, $advFiltercolumnName, $row['cvid'], $row['columnindex'], $row['groupid']));
 211          }
 212          
 213          //update reportsFilter values

 214          $query= 'SELECT queryid,value,columnindex,groupid FROM vtiger_relcriteria where columnname=?';
 215          $result = $db->pquery($query, array($reportFilterColumnName));
 216          $num_rows = $db->num_rows($result);
 217          for ($i = 0; $i < $num_rows; $i++) {
 218              $row = $db->query_result_rowdata($result, $i);
 219              $value = $row['value'];
 220              $explodedValueArray = explode(',', $value);
 221              foreach($valueToDelete as $value) {
 222                  $arrayKey = array_search($value, $explodedValueArray);
 223                  if($arrayKey !== false){
 224                      $explodedValueArray[$arrayKey] = $replaceValue;
 225                  }
 226              }
 227              $value = implode(',', $explodedValueArray);
 228              $query = 'UPDATE vtiger_relcriteria SET value=? where columnname=? and queryid=? and columnindex=? and groupid=?';
 229              $db->pquery($query, array($value, $reportFilterColumnName, $row['queryid'], $row['columnindex'], $row['groupid']));
 230          }
 231          
 232          
 233          foreach ($valueToDelete as $value) {
 234              //update Workflows values

 235              $query = 'SELECT workflow_id,test FROM com_vtiger_workflows where module_name=? AND test != "" AND test IS NOT NULL AND test !="null" AND test LIKE "%' . $value . '%"';
 236              $result = $db->pquery($query, array($moduleName));
 237              $num_rows = $db->num_rows($result);
 238              for ($i = 0; $i < $num_rows; $i++) {
 239                  $row = $db->query_result_rowdata($result, $i);
 240                  $condition = decode_html($row['test']);
 241                  $decodedArrayConditions = Zend_Json::decode($condition);
 242                  if (!empty($decodedArrayConditions)) {
 243                      foreach ($decodedArrayConditions as $key => $condition) {
 244                          if ($condition['fieldname'] == $pickListFieldName) {
 245                              $value = $condition['value'];
 246                              $explodedValueArray = explode(',', $value);
 247                              foreach ($valueToDelete as $value) {
 248                                  $arrayKey = array_search($value, $explodedValueArray);
 249                                  if ($arrayKey !== false) {
 250                                      $explodedValueArray[$arrayKey] = $replaceValue;
 251                                  }
 252                              }
 253                              $value = implode(',', $explodedValueArray);
 254                              $condition['value'] = $value;
 255                          }
 256                          $decodedArrayConditions[$key] = $condition;
 257                      }
 258                      $condtion = Zend_Json::encode($decodedArrayConditions);
 259                      $query = 'UPDATE com_vtiger_workflows SET test=? where workflow_id=?';
 260                      $db->pquery($query, array($condtion, $row['workflow_id']));
 261                  }
 262              }
 263          }
 264          
 265          
 266          foreach ($valueToDelete as $value) {
 267              //update workflow task

 268              $query = 'SELECT task,task_id,workflow_id FROM com_vtiger_workflowtasks where task LIKE "%' . $value . '%"';
 269              $result = $db->pquery($query, array());
 270              $num_rows = $db->num_rows($result);
 271  
 272              for ($i = 0; $i < $num_rows; $i++) {
 273                  $row = $db->raw_query_result_rowdata($result, $i);
 274                  $task = $row['task'];
 275                  $taskComponents = explode(':', $task);
 276                  $classNameWithDoubleQuotes = $taskComponents[2];
 277                  $className = str_replace('"', '', $classNameWithDoubleQuotes);
 278                  require_once ("modules/com_vtiger_workflow/VTTaskManager.inc");
 279                  require_once 'modules/com_vtiger_workflow/tasks/' . $className . '.inc';
 280                  $unserializeTask = unserialize($task);
 281                  if (array_key_exists("field_value_mapping", $unserializeTask)) {
 282                      $fieldMapping = Zend_Json::decode($unserializeTask->field_value_mapping);
 283                      if (!empty($fieldMapping)) {
 284                          foreach ($fieldMapping as $key => $condition) {
 285                              if ($condition['fieldname'] == $pickListFieldName) {
 286                                  $value = $condition['value'];
 287                                  $explodedValueArray = explode(',', $value);
 288                                  foreach ($valueToDelete as $value) {
 289                                      $arrayKey = array_search($value, $explodedValueArray);
 290                                      if ($arrayKey !== false) {
 291                                          $explodedValueArray[$arrayKey] = $replaceValue;
 292                                      }
 293                                  }
 294                                  $value = implode(',', $explodedValueArray);
 295                                  $condition['value'] = $value;
 296                              }
 297                              $fieldMapping[$key] = $condition;
 298                          }
 299                          $updatedTask = Zend_Json::encode($fieldMapping);
 300                          $unserializeTask->field_value_mapping = $updatedTask;
 301                          $serializeTask = serialize($unserializeTask);
 302                          $query = 'UPDATE com_vtiger_workflowtasks SET task=? where workflow_id=? AND task_id=?';
 303                          $db->pquery($query, array($serializeTask, $row['workflow_id'], $row['task_id']));
 304                      }
 305                  } else {
 306                      if ($className == 'VTCreateEventTask') {
 307                          if ($pickListFieldName == 'eventstatus') {
 308                              $pickListFieldName = 'status';
 309                          } elseif ($pickListFieldName == 'activitytype') {
 310                              $pickListFieldName = 'eventType';
 311                          }
 312                      } elseif ($className == 'VTCreateTodoTask') {
 313                          if ($pickListFieldName == 'taskstatus') {
 314                              $pickListFieldName = 'status';
 315                          } elseif ($pickListFieldName == 'taskpriority') {
 316                              $pickListFieldName = 'priority';
 317                          }
 318                      }
 319                      if (array_key_exists($pickListFieldName, $unserializeTask)) {
 320                          $value = $unserializeTask->$pickListFieldName;
 321                          $explodedValueArray = explode(',', $value);
 322                          foreach ($valueToDelete as $value) {
 323                              $arrayKey = array_search($value, $explodedValueArray);
 324                              if ($arrayKey !== false) {
 325                                  $explodedValueArray[$arrayKey] = $replaceValue;
 326                              }
 327                          }
 328                          $value = implode(',', $explodedValueArray);
 329                          $unserializeTask->$pickListFieldName = $value;
 330                          $serializeTask = serialize($unserializeTask);
 331                          $query = 'UPDATE com_vtiger_workflowtasks SET task=? where workflow_id=? AND task_id=?';
 332                          $db->pquery($query, array($serializeTask, $row['workflow_id'], $row['task_id']));
 333                      }
 334                  }
 335              }
 336          }
 337          
 338      }
 339  }
 340  ?>


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