Example #1
0
 /**
  * Read list
  *
  * @param   object  $data  $limitStart, $limit, $filterSearch,
  *                         $filters, $ordering, $orderingDirection, $language
  *
  * @return  array
  */
 public function readList($data)
 {
     // We are setting the operation of the webservice to Read
     $this->setOperation('read');
     $dataGet = $this->webservice->options->get('dataGet', array());
     if (is_object($dataGet)) {
         $dataGet = JArrayHelper::fromObject($dataGet);
     }
     $dataGet['list']['limitstart'] = isset($data->limitStart) ? (int) $data->limitStart : 0;
     $dataGet['list']['limit'] = isset($data->limit) ? (int) $data->limit : 20;
     $dataGet['filter']['search'] = isset($data->filterSearch) ? (string) $data->filterSearch : '';
     $filters = RApiHalHelper::getFilterFields($this->webservice->configuration->operations->read->list, true);
     foreach ($filters as $filter) {
         $dataGet['filter'][$filter] = isset($data->filters->{$filter}) ? $data->filters->{$filter} : '';
     }
     $dataGet['list']['ordering'] = isset($data->ordering) ? (string) $data->ordering : '';
     $dataGet['list']['direction'] = isset($data->orderingDirection) ? (string) $data->orderingDirection : '';
     // Handle different language switch
     $this->setLanguage(isset($data->language) ? (string) $data->language : '');
     $this->webservice->options->set('dataGet', $dataGet);
     $this->webservice->options->set('task', '');
     $this->webservice->options->set('filterOutResourcesGroups', array('_links', '_messages'));
     $this->webservice->options->set('filterResourcesSpecific', 'listItem');
     $this->webservice->execute();
     $arr = $this->webservice->hal->toArray();
     $outputResources = RApiSoapHelper::getOutputResources($this->webservice->configuration->operations->read->list, 'listItem', true);
     if ($arr['_embedded'] && $arr['_embedded']['item']) {
         $response = RApiSoapHelper::selectListResources($outputResources, $arr['_embedded']['item']);
     } else {
         $response = array();
     }
     $final = new stdClass();
     $final->list = $response;
     return $final;
 }
Example #2
0
 /**
  * Returns generated WSDL file for the webservice
  *
  * @param   string  $wsdlPath  Path of WSDL file
  *
  * @return  SimpleXMLElement
  */
 public function generateWsdl($wsdlPath)
 {
     $wsdlFullPath = JUri::root() . $wsdlPath;
     $client = RApiHalHelper::attributeToString($this->webserviceXml, 'client', 'site');
     $version = !empty($this->webserviceXml->config->version) ? $this->webserviceXml->config->version : '1.0.0';
     $this->webserviceFullName = $client . '.' . $this->webserviceXml->config->name . '.' . $version;
     $this->webserviceUrl = RApiHalHelper::buildWebserviceFullUrl($client, $this->webserviceXml->config->name, $version, 'soap');
     // Root of the document
     $this->wsdl = new SimpleXMLElement('<?xml version="1.0" encoding="utf-8" ?><wsdl:definitions' . ' xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"' . ' xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"' . ' xmlns:tns="' . $wsdlFullPath . '"' . ' xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/"' . ' xmlns:s="http://www.w3.org/2001/XMLSchema"' . ' xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"' . ' targetNamespace="' . $wsdlFullPath . '"' . ' xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"' . ' ></wsdl:definitions>', 0, false, 'wsdl', true);
     $types = $this->wsdl->addChild('types');
     $this->typeSchema = $types->addChild('schema', null, 'http://www.w3.org/2001/XMLSchema');
     $this->typeSchema->addAttribute('targetNamespace', $wsdlFullPath);
     $this->typeSchema->addAttribute('elementFormDefault', 'unqualified');
     $this->addGlobalTypes($this->typeSchema);
     // Adding service
     $this->wsdlServices = $this->wsdl->addChild('service');
     $this->wsdlServices->addAttribute('name', $this->webserviceFullName);
     $this->wsdlServices->addChild('documentation', $this->webserviceXml->description);
     // Add new port binding
     $port = $this->wsdlServices->addChild('port');
     $port->addAttribute('name', $this->webserviceFullName . '_Soap');
     $port->addAttribute('binding', 'tns:' . $this->webserviceFullName);
     // Add soap addresses
     $soapAddress = $port->addChild('soap:address', null, 'http://schemas.xmlsoap.org/wsdl/soap12/');
     $soapAddress->addAttribute('location', $this->webserviceUrl);
     // Add webservice operations
     if (isset($this->webserviceXml->operations)) {
         // Read list
         if (isset($this->webserviceXml->operations->read->list)) {
             $filters = RApiHalHelper::getFilterFields($this->webserviceXml->operations->read->list, true, true);
             if (empty($filters)) {
                 $filtersDef = array('name' => 'filters', 'transform' => 'array');
             } else {
                 $filtersDef = array('name' => 'filters', 'transform' => 'arraydefined', 'fields' => $filters);
             }
             // Add read list messages
             $inputFields = array(array('name' => 'limitStart', 'transform' => 'int'), array('name' => 'limit', 'transform' => 'int'), array('name' => 'filterSearch', 'transform' => 'string'), $filtersDef, array('name' => 'ordering', 'transform' => 'string'), array('name' => 'orderingDirection', 'transform' => 'string'), array('name' => 'language', 'transform' => 'string'));
             // Add read list response messages
             $outputFields = array(array('name' => 'list', 'transform' => 'arrayrequired', 'fields' => array(array('name' => 'item', 'maxOccurs' => 'unbounded', 'transform' => 'arrayrequired', 'fields' => RApiSoapHelper::getOutputResources($this->webserviceXml->operations->read->list, 'listItem')))));
             $this->addOperation($this->wsdl, 'readList', $inputFields, $outputFields, true, true);
         }
         // Read item
         if (isset($this->webserviceXml->operations->read->item)) {
             // Add read item messages
             $inputFields = array_merge(RApiHalHelper::getFieldsArray($this->webserviceXml->operations->read->item, true), array(array('name' => 'language', 'transform' => 'string')));
             // Add read item response messages
             $outputFields = array(array('name' => 'item', 'typeName' => 'item', 'transform' => 'arrayrequired', 'fields' => RApiSoapHelper::getOutputResources($this->webserviceXml->operations->read->item)));
             $this->addOperation($this->wsdl, 'readItem', $inputFields, $outputFields, false, true);
         }
         // Create operation
         if (isset($this->webserviceXml->operations->create)) {
             // Add create messages
             $inputFields = RApiHalHelper::getFieldsArray($this->webserviceXml->operations->create);
             // Add create response messages
             $outputFields = array(RApiSoapHelper::getResultResource($this->webserviceXml->operations->create));
             $this->addOperation($this->wsdl, 'create', $inputFields, $outputFields, true);
         }
         // Update operation
         if (isset($this->webserviceXml->operations->update)) {
             // Add update messages
             $inputFields = RApiHalHelper::getFieldsArray($this->webserviceXml->operations->update);
             // Add update response messages
             $outputFields = array(RApiSoapHelper::getResultResource($this->webserviceXml->operations->update));
             $this->addOperation($this->wsdl, 'update', $inputFields, $outputFields, true);
         }
         // Delete operation
         if (isset($this->webserviceXml->operations->delete)) {
             // Add delete messages
             $inputFields = RApiHalHelper::getFieldsArray($this->webserviceXml->operations->delete, true);
             // Add delete response messages
             $outputFields = array(RApiSoapHelper::getResultResource($this->webserviceXml->operations->delete));
             $this->addOperation($this->wsdl, 'delete', $inputFields, $outputFields);
         }
         // Task operation
         if (isset($this->webserviceXml->operations->task)) {
             foreach ($this->webserviceXml->operations->task->children() as $taskName => $task) {
                 // Add task messages
                 $inputFields = RApiHalHelper::getFieldsArray($task);
                 // Add task response messages
                 $outputFields = array(RApiSoapHelper::getResultResource($task));
                 $this->addOperation($this->wsdl, 'task_' . $taskName, $inputFields, $outputFields, true);
             }
         }
     }
     return $this->wsdl;
 }
Example #3
0
 /**
  * Gets instance of dynamic model object class (for table bind)
  *
  * @param   SimpleXMLElement  $configuration  Configuration for current action
  *
  * @return mixed It will return Api dynamic model class
  *
  * @throws Exception
  * @since   1.3
  */
 public function getDynamicModelObject($configuration)
 {
     if (!empty($this->apiDynamicModelClass)) {
         return $this->apiDynamicModelClass;
     }
     $tableName = RApiHalHelper::attributeToString($configuration, 'tableName', '');
     if (empty($tableName)) {
         throw new Exception(JText::_('LIB_REDCORE_API_HAL_WEBSERVICE_TABLE_NAME_NOT_SET'));
     }
     $context = $this->webserviceName . '.' . $this->webserviceVersion;
     // We are not using prefix like str_replace(array('.', '-'), array('_', '_'), $context) . '_';
     $paginationPrefix = '';
     $filterFields = RApiHalHelper::getFilterFields($configuration);
     $primaryFields = $this->getPrimaryFields($configuration);
     $fields = $this->getAllFields($configuration);
     $config = array('tableName' => $tableName, 'context' => $context, 'paginationPrefix' => $paginationPrefix, 'filterFields' => $filterFields, 'primaryFields' => $primaryFields, 'fields' => $fields);
     $apiDynamicModelClassName = $this->apiDynamicModelClassName;
     if (class_exists($apiDynamicModelClassName)) {
         $this->apiDynamicModelClass = new $apiDynamicModelClassName($config);
     }
     return $this->apiDynamicModelClass;
 }