[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/include/Webservices/ -> Create.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  function vtws_create($elementType, $element, $user) {
  12  
  13      $types = vtws_listtypes(null, $user);
  14      if (!in_array($elementType, $types['types'])) {
  15          throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to perform the operation is denied");
  16      }
  17  
  18      global $log, $adb;
  19  
  20      // Cache the instance for re-use
  21      if(!isset($vtws_create_cache[$elementType]['webserviceobject'])) {
  22          $webserviceObject = VtigerWebserviceObject::fromName($adb,$elementType);
  23          $vtws_create_cache[$elementType]['webserviceobject'] = $webserviceObject;
  24      } else {
  25          $webserviceObject = $vtws_create_cache[$elementType]['webserviceobject'];
  26      }
  27      // END            
  28  
  29      $handlerPath = $webserviceObject->getHandlerPath();
  30      $handlerClass = $webserviceObject->getHandlerClass();
  31  
  32      require_once $handlerPath;
  33  
  34      $handler = new $handlerClass($webserviceObject, $user, $adb, $log);
  35      $meta = $handler->getMeta();
  36      if ($meta->hasWriteAccess() !== true) {
  37          throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Permission to write is denied");
  38      }
  39  
  40      $referenceFields = $meta->getReferenceFieldDetails();
  41      foreach ($referenceFields as $fieldName => $details) {
  42          if (isset($element[$fieldName]) && strlen($element[$fieldName]) > 0) {
  43              $ids = vtws_getIdComponents($element[$fieldName]);
  44              $elemTypeId = $ids[0];
  45              $elemId = $ids[1];
  46              $referenceObject = VtigerWebserviceObject::fromId($adb, $elemTypeId);
  47              if (!in_array($referenceObject->getEntityName(), $details)) {
  48                  throw new WebServiceException(WebServiceErrorCode::$REFERENCEINVALID,
  49                          "Invalid reference specified for $fieldName");
  50              }
  51              if ($referenceObject->getEntityName() == 'Users') {
  52                  if(!$meta->hasAssignPrivilege($element[$fieldName])) {
  53                      throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Cannot assign record to the given user");
  54                  }
  55              }
  56              if (!in_array($referenceObject->getEntityName(), $types['types']) && $referenceObject->getEntityName() != 'Users') {
  57                  throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED,
  58                          "Permission to access reference type is denied" . $referenceObject->getEntityName());
  59              }
  60          } else if ($element[$fieldName] !== NULL) {
  61              unset($element[$fieldName]);
  62          }
  63      }
  64  
  65  
  66      if ($meta->hasMandatoryFields($element)) {
  67  
  68          $ownerFields = $meta->getOwnerFields();
  69          if (is_array($ownerFields) && sizeof($ownerFields) > 0) {
  70              foreach ($ownerFields as $ownerField) {
  71                  if (isset($element[$ownerField]) && $element[$ownerField] !== null &&
  72                          !$meta->hasAssignPrivilege($element[$ownerField])) {
  73                      throw new WebServiceException(WebServiceErrorCode::$ACCESSDENIED, "Cannot assign record to the given user");
  74                  }
  75              }
  76          }
  77          $entity = $handler->create($elementType, $element);
  78          VTWS_PreserveGlobal::flush();
  79          return $entity;
  80      } else {
  81  
  82          return null;
  83      }
  84  }
  85  ?>


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