[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/include/Webservices/ -> VtigerModuleOperation.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 VtigerModuleOperation extends WebserviceEntityOperation {
  12      protected $tabId;
  13      protected $isEntity = true;
  14      protected $partialDescribeFields = null;
  15      
  16  	public function VtigerModuleOperation($webserviceObject,$user,$adb,$log){
  17          parent::__construct($webserviceObject,$user,$adb,$log);
  18          $this->meta = $this->getMetaInstance();
  19          $this->tabId = $this->meta->getTabId();
  20      }
  21      
  22  	protected function getMetaInstance(){
  23          if(empty(WebserviceEntityOperation::$metaCache[$this->webserviceObject->getEntityName()][$this->user->id])){
  24              WebserviceEntityOperation::$metaCache[$this->webserviceObject->getEntityName()][$this->user->id]  = new VtigerCRMObjectMeta($this->webserviceObject,$this->user);
  25          }
  26          return WebserviceEntityOperation::$metaCache[$this->webserviceObject->getEntityName()][$this->user->id];
  27      }
  28      
  29  	public function create($elementType,$element){
  30          $crmObject = new VtigerCRMObject($elementType, false);
  31          
  32          $element = DataTransform::sanitizeForInsert($element,$this->meta);
  33          
  34          $error = $crmObject->create($element);
  35          if(!$error){
  36              throw new WebServiceException(WebServiceErrorCode::$DATABASEQUERYERROR,
  37                      vtws_getWebserviceTranslatedString('LBL_'.
  38                              WebServiceErrorCode::$DATABASEQUERYERROR));
  39          }
  40          
  41          $id = $crmObject->getObjectId();
  42  
  43          // Bulk Save Mode
  44          if(CRMEntity::isBulkSaveMode()) {        
  45              // Avoiding complete read, as during bulk save mode, $result['id'] is enough
  46              return array('id' => vtws_getId($this->meta->getEntityId(), $id) );
  47          }
  48          
  49          $error = $crmObject->read($id);
  50          if(!$error){
  51              throw new WebServiceException(WebServiceErrorCode::$DATABASEQUERYERROR,
  52                  vtws_getWebserviceTranslatedString('LBL_'.
  53                          WebServiceErrorCode::$DATABASEQUERYERROR));
  54          }
  55          
  56          return DataTransform::filterAndSanitize($crmObject->getFields(),$this->meta);
  57      }
  58      
  59  	public function retrieve($id){
  60          
  61          $ids = vtws_getIdComponents($id);
  62          $elemid = $ids[1];
  63          
  64          $crmObject = new VtigerCRMObject($this->tabId, true);
  65          $error = $crmObject->read($elemid);
  66          if(!$error){
  67              throw new WebServiceException(WebServiceErrorCode::$DATABASEQUERYERROR,
  68                      vtws_getWebserviceTranslatedString('LBL_'.
  69                              WebServiceErrorCode::$DATABASEQUERYERROR));
  70          }
  71          
  72          return DataTransform::filterAndSanitize($crmObject->getFields(),$this->meta);
  73      }
  74      
  75  	public function update($element){
  76          $ids = vtws_getIdComponents($element["id"]);
  77          $element = DataTransform::sanitizeForInsert($element,$this->meta);
  78          
  79          $crmObject = new VtigerCRMObject($this->tabId, true);
  80          $crmObject->setObjectId($ids[1]);
  81          $error = $crmObject->update($element);
  82          if(!$error){
  83              throw new WebServiceException(WebServiceErrorCode::$DATABASEQUERYERROR,
  84                      vtws_getWebserviceTranslatedString('LBL_'.
  85                              WebServiceErrorCode::$DATABASEQUERYERROR));
  86          }
  87          
  88          $id = $crmObject->getObjectId();
  89          
  90          $error = $crmObject->read($id);
  91          if(!$error){
  92              throw new WebServiceException(WebServiceErrorCode::$DATABASEQUERYERROR,
  93                  vtws_getWebserviceTranslatedString('LBL_'.
  94                              WebServiceErrorCode::$DATABASEQUERYERROR));
  95          }
  96          
  97          return DataTransform::filterAndSanitize($crmObject->getFields(),$this->meta);
  98      }
  99      
 100  	public function revise($element){
 101          $ids = vtws_getIdComponents($element["id"]);
 102          $element = DataTransform::sanitizeForInsert($element,$this->meta);
 103  
 104          $crmObject = new VtigerCRMObject($this->tabId, true);
 105          $crmObject->setObjectId($ids[1]);
 106          $error = $crmObject->revise($element);
 107          if(!$error){
 108              throw new WebServiceException(WebServiceErrorCode::$DATABASEQUERYERROR,
 109                      vtws_getWebserviceTranslatedString('LBL_'.
 110                              WebServiceErrorCode::$DATABASEQUERYERROR));
 111          }
 112  
 113          $id = $crmObject->getObjectId();
 114  
 115          $error = $crmObject->read($id);
 116          if(!$error){
 117              throw new WebServiceException(WebServiceErrorCode::$DATABASEQUERYERROR,
 118                      vtws_getWebserviceTranslatedString('LBL_'.
 119                              WebServiceErrorCode::$DATABASEQUERYERROR));
 120          }
 121  
 122          return DataTransform::filterAndSanitize($crmObject->getFields(),$this->meta);
 123      }
 124  
 125  	public function delete($id){
 126          $ids = vtws_getIdComponents($id);
 127          $elemid = $ids[1];
 128          
 129          $crmObject = new VtigerCRMObject($this->tabId, true);
 130          
 131          $error = $crmObject->delete($elemid);
 132          if(!$error){
 133              throw new WebServiceException(WebServiceErrorCode::$DATABASEQUERYERROR,
 134                      vtws_getWebserviceTranslatedString('LBL_'.
 135                              WebServiceErrorCode::$DATABASEQUERYERROR));
 136          }
 137          return array("status"=>"successful");
 138      }
 139      
 140  	public function query($q){
 141          
 142          $parser = new Parser($this->user, $q);
 143          $error = $parser->parse();
 144          
 145          if($error){
 146              return $parser->getError();
 147          }
 148          
 149          $mysql_query = $parser->getSql();
 150          $meta = $parser->getObjectMetaData();
 151          $this->pearDB->startTransaction();
 152          $result = $this->pearDB->pquery($mysql_query, array());
 153          $error = $this->pearDB->hasFailedTransaction();
 154          $this->pearDB->completeTransaction();
 155          
 156          if($error){
 157              throw new WebServiceException(WebServiceErrorCode::$DATABASEQUERYERROR,
 158                      vtws_getWebserviceTranslatedString('LBL_'.
 159                              WebServiceErrorCode::$DATABASEQUERYERROR));
 160          }
 161          
 162          $noofrows = $this->pearDB->num_rows($result);
 163          $output = array();
 164          for($i=0; $i<$noofrows; $i++){
 165              $row = $this->pearDB->fetchByAssoc($result,$i);
 166              if(!$meta->hasPermission(EntityMeta::$RETRIEVE,$row["crmid"])){
 167                  continue;
 168              }
 169              $output[] = DataTransform::sanitizeDataWithColumn($row,$meta);
 170          }
 171          
 172          return $output;
 173      }
 174      
 175  	public function describe($elementType){
 176          $app_strings = VTWS_PreserveGlobal::getGlobal('app_strings');
 177          $current_user = vtws_preserveGlobal('current_user',$this->user);;
 178          
 179          $label = (isset($app_strings[$elementType]))? $app_strings[$elementType]:$elementType;
 180          $createable = (strcasecmp(isPermitted($elementType,EntityMeta::$CREATE),'yes')===0)? true:false;
 181          $updateable = (strcasecmp(isPermitted($elementType,EntityMeta::$UPDATE),'yes')===0)? true:false;
 182          $deleteable = $this->meta->hasDeleteAccess();
 183          $retrieveable = $this->meta->hasReadAccess();
 184          $fields = $this->getModuleFields();
 185          return array("label"=>$label,"name"=>$elementType,"createable"=>$createable,"updateable"=>$updateable,
 186                  "deleteable"=>$deleteable,"retrieveable"=>$retrieveable,"fields"=>$fields,
 187                  "idPrefix"=>$this->meta->getEntityId(),'isEntity'=>$this->isEntity,'labelFields'=>$this->meta->getNameFields());
 188      }
 189      
 190  	public function describePartial($elementType, $fields=null) {
 191          $this->partialDescribeFields = $fields;
 192          $result = $this->describe($elementType);
 193          $this->partialDescribeFields = null;
 194          return $result;
 195      }
 196      
 197  	function getModuleFields(){
 198          
 199          $fields = array();
 200          $moduleFields = $this->meta->getModuleFields();
 201          foreach ($moduleFields as $fieldName=>$webserviceField) {
 202              if(((int)$webserviceField->getPresence()) == 1) {
 203                  continue;
 204              }
 205              array_push($fields,$this->getDescribeFieldArray($webserviceField));
 206          }
 207          array_push($fields,$this->getIdField($this->meta->getObectIndexColumn()));
 208          
 209          return $fields;
 210      }
 211      
 212  	function getDescribeFieldArray($webserviceField){
 213          $default_language = VTWS_PreserveGlobal::getGlobal('default_language');
 214          
 215          $fieldLabel = getTranslatedString($webserviceField->getFieldLabelKey(), $this->meta->getTabName());
 216          
 217          $typeDetails = array();
 218          if (!is_array($this->partialDescribeFields)) {
 219              $typeDetails = $this->getFieldTypeDetails($webserviceField);
 220          } else if (in_array($webserviceField->getFieldName(), $this->partialDescribeFields)) {
 221              $typeDetails = $this->getFieldTypeDetails($webserviceField);
 222          }
 223          
 224          //set type name, in the type details array.
 225          $typeDetails['name'] = $webserviceField->getFieldDataType();
 226          $editable = $this->isEditable($webserviceField);
 227          
 228          $describeArray = array('name'=>$webserviceField->getFieldName(),'label'=>$fieldLabel,'mandatory'=>
 229              $webserviceField->isMandatory(),'type'=>$typeDetails,'nullable'=>$webserviceField->isNullable(),
 230              "editable"=>$editable);
 231          if($webserviceField->hasDefault()){
 232              $describeArray['default'] = $webserviceField->getDefault();
 233          }
 234          return $describeArray;
 235      }
 236      
 237  	function getMeta(){
 238          return $this->meta;
 239      }
 240      
 241  	function getField($fieldName){
 242          $moduleFields = $this->meta->getModuleFields();
 243          return $this->getDescribeFieldArray($moduleFields[$fieldName]);
 244      }
 245      
 246  }
 247  ?>


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