[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/modules/Vtiger/models/ -> ModuleMeta.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  class Vtiger_ModuleMeta_Model extends Vtiger_Base_Model {
  12  
  13      var $moduleName = false;
  14      
  15      var $webserviceMeta = false;
  16  
  17      var $user;
  18  
  19      static $_cached_module_meta;
  20  
  21      /**
  22       * creates an instance of Vtiger_ModuleMeta_Model
  23       * @param <String> $name - module name
  24       * @param <Object> $user - Users Object
  25       * @return Vtiger_ModuleMeta_Model
  26       */
  27  	public static function getInstance($name, $user) {
  28          $self = new Vtiger_ModuleMeta_Model();
  29          $self->moduleName = $name;
  30          $self->user = $user;
  31  
  32          if(!empty(self::$_cached_module_meta[$name][$user->id])) {
  33              $self->webserviceMeta = self::$_cached_module_meta[$name][$user->id];
  34              return $self;
  35          }
  36  
  37          $handler = vtws_getModuleHandlerFromName($self->moduleName, $user);
  38          $self->webserviceMeta = $handler->getMeta();
  39          self::$_cached_module_meta[$name][$user->id] = $self->webserviceMeta;
  40          return $self;
  41      }
  42  
  43      /**
  44       * Functions returns webservices meta object
  45       * @return webservices meta
  46       */
  47  	public function getMeta() {
  48          return $this->webserviceMeta;
  49      }
  50  
  51      /**
  52       * Function returns list of fields based on type
  53       * @param <type> $type
  54       * @return <type>
  55       */
  56  	public function getFieldListByType($type) {
  57          $meta = $this->getMeta();
  58          return $meta->getFieldListByType($type);
  59      }
  60  
  61      /**
  62       * Function returns accessible fields in a module
  63       * @return <Array of Vtiger_Field>
  64       */
  65  	public function getAccessibleFields() {
  66  
  67          $meta = self::$_cached_module_meta[$this->moduleName][$this->user->id];
  68          $moduleFields = $meta->getModuleFields();
  69          $accessibleFields = array();
  70          foreach($moduleFields as $fieldName => $fieldInstance) {
  71              if($fieldInstance->getPresence() === 1) {
  72                  continue;
  73              }
  74              $accessibleFields[$fieldName] = $fieldInstance;
  75          }
  76          return $accessibleFields;
  77      }
  78  
  79      /**
  80       * Function returns mergable fields in the module
  81       * @return <Array of Vtiger_field>
  82       */
  83  	public function getMergableFields() {
  84          $accessibleFields = $this->getAccessibleFields($this->moduleName);
  85          $mergableFields = array();
  86          foreach($accessibleFields as $fieldName => $fieldInstance) {
  87              if($fieldInstance->getPresence() === 1) {
  88                  continue;
  89              }
  90              // We need to avoid Last Modified by or any such User reference field
  91              // for now as Query Generator is not handling it well enough.
  92              // The case in which query generator is failing to generate right query is,
  93              // Assigned User field is not there either in the selected fields list or in the conditions
  94              // and condition is added on the User reference field
  95              // TODO - Cleanup this once Query Generator support is corrected
  96              if($fieldInstance->getFieldDataType() == 'reference') {
  97                  $referencedModules = $fieldInstance->getReferenceList();
  98                  if($referencedModules[0] == 'Users') {
  99                      continue;
 100                  }
 101              }
 102              $mergableFields[$fieldName] = $fieldInstance;
 103          }
 104          return $mergableFields;
 105      }
 106  
 107      /**
 108       * Function returns mandatory importable fields
 109       * @return <Array of Vtiger_Field>
 110       */
 111  	public function getMandatoryImportableFields() {
 112  
 113          $focus = CRMEntity::getInstance($this->moduleName);
 114          if(method_exists($focus, 'getMandatoryImportableFields')) {
 115              $mandatoryFields = $focus->getMandatoryImportableFields();
 116          } else {
 117              $moduleFields = $this->getAccessibleFields($this->moduleName);
 118              $mandatoryFields = array();
 119              foreach($moduleFields as $fieldName => $fieldInstance) {
 120                  if($fieldInstance->isMandatory() && $fieldInstance->getFieldDataType() != 'owner'
 121                          && $this->isEditableField($fieldInstance)) {
 122                      $mandatoryFields[$fieldName] = $fieldInstance->getFieldLabelKey();
 123                  }
 124              }
 125          }
 126          return $mandatoryFields;
 127      }
 128  
 129      /**
 130       * Function returns importable fields
 131       * @return <Array of Vtiger_Field>
 132       */
 133  	public function getImportableFields() {
 134          $focus = CRMEntity::getInstance($this->moduleName);
 135          if(method_exists($focus, 'getImportableFields')) {
 136              $importableFields = $focus->getImportableFields();
 137          } else {
 138              $moduleFields = $this->getAccessibleFields($moduleName);
 139              $importableFields = array();
 140              foreach($moduleFields as $fieldName => $fieldInstance) {
 141                  if(($this->isEditableField($fieldInstance)
 142                              && ($fieldInstance->getTableName() != 'vtiger_crmentity' || $fieldInstance->getColumnName() != 'modifiedby')
 143                          ) || ($fieldInstance->getUIType() == '70' && $fieldName != 'modifiedtime')) {
 144                      $importableFields[$fieldName] = $fieldInstance;
 145                  }
 146              }
 147          }
 148          return $importableFields;
 149      }
 150  
 151      /**
 152       * Function returns Entity Name fields
 153       * @return <Array of Vtiger_Field>
 154       */
 155  	public function getEntityFields() {
 156          $moduleFields = $this->getAccessibleFields($this->moduleName);
 157          $entityColumnNames = vtws_getEntityNameFields($this->moduleName);
 158          $entityNameFields = array();
 159          foreach($moduleFields as $fieldName => $fieldInstance) {
 160              $fieldColumnName = $fieldInstance->getColumnName();
 161              if(in_array($fieldColumnName, $entityColumnNames)) {
 162                  $entityNameFields[$fieldName] = $fieldInstance;
 163              }
 164          }
 165          return $entityNameFields;
 166      }
 167  
 168      /**
 169       * Function checks if the field is editable
 170       * @param type $fieldInstance
 171       * @return boolean
 172       */
 173  	public function isEditableField($fieldInstance) {
 174          if(((int)$fieldInstance->getDisplayType()) === 2 ||
 175                  in_array($fieldInstance->getPresence(), array(1,3)) ||
 176                  strcasecmp($fieldInstance->getFieldDataType(),"autogenerated") ===0 ||
 177                  strcasecmp($fieldInstance->getFieldDataType(),"id") ===0 ||
 178                  $fieldInstance->isReadOnly() == true ||
 179                  $fieldInstance->getUIType() ==  70 ||
 180                  $fieldInstance->getUIType() ==  4) {
 181  
 182              return false;
 183          }
 184          return true;
 185      }
 186  
 187      /**
 188       * Function returns list of mandatory fields
 189       * @return <Array of Vtiger_Field>
 190       */
 191  	public function getMandatoryFields() {
 192          $focus = CRMEntity::getInstance($this->moduleName);
 193          if(method_exists($focus, 'getMandatoryImportableFields')) {
 194              $mandatoryFields = $focus->getMandatoryImportableFields();
 195          } else {
 196              $moduleFields = $this->getAccessibleFields($this->moduleName);
 197              $mandatoryFields = array();
 198              foreach($moduleFields as $fieldName => $fieldInstance) {
 199                  if($fieldInstance->isMandatory()
 200                          && $fieldInstance->getFieldDataType() != 'owner'
 201                          && $this->isEditableField($fieldInstance)) {
 202                      $mandatoryFields[$fieldName] = vtranslate($fieldInstance->getFieldLabelKey(), $this->moduleName);
 203                  }
 204              }
 205          }
 206          return $mandatoryFields;
 207      }
 208  }


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