/** * Method to transform a type to publish it in the WSDL file * * @param array $field Field definition. * @param SimpleXMLElement &$sequence XML with the fields sequence * @param SimpleXMLElement &$typeSchema XML of the typeSchema in case new derived types need to be added * @param string $elementName Parent element name to add the new derived types with unique names * @param boolean $validateOptional Optional parameter to validate if the field is optional. Otherwise it's always set as required * @param array $extraFields Array of extra fields to process - in case of array types * @param SimpleXMLElmenet $complexArrays Complex arrays definitions * * @return void */ public function wsdlField($field, &$sequence, &$typeSchema, $elementName, $validateOptional = false, $extraFields = array(), $complexArrays = null) { if (!isset($this->element)) { $this->element = $sequence->addChild('element', null, 'http://www.w3.org/2001/XMLSchema'); } if (!isset($this->element['minOccurs'])) { $this->element->addAttribute('minOccurs', $validateOptional && RApiHalHelper::isAttributeTrue($field, 'isRequiredField') || !$validateOptional ? '1' : '0'); } $this->element->addAttribute('maxOccurs', 'unbounded'); if (!isset($this->element['name']) && isset($field['name'])) { $this->element->addAttribute('name', $field['name']); } $this->element->addAttribute('type', 'tns:' . $elementName . '_' . $field['name']); if (!empty($extraFields)) { RApiSoapHelper::addElementFields($extraFields, $typeSchema, $elementName . '_' . $field['name'], true, '', $complexArrays); } }
/** * Method to transform a type to publish it in the WSDL file * * @param array $field Field definition. * @param SimpleXMLElement &$sequence XML with the fields sequence * @param SimpleXMLElement &$typeSchema XML of the typeSchema in case new derived types need to be added * @param string $elementName Parent element name to add the new derived types with unique names * @param boolean $validateOptional Optional parameter to validate if the field is optional. Otherwise it's always set as required * @param array $extraFields Array of extra fields to process - in case of array types * * @return void */ public function wsdlField($field, &$sequence, &$typeSchema, $elementName, $validateOptional = false, $extraFields = array()) { if (!isset($this->element)) { $this->element = $sequence->addChild('element', null, 'http://www.w3.org/2001/XMLSchema'); } if (!isset($this->element['minOccurs'])) { $this->element->addAttribute('minOccurs', $validateOptional && RApiHalHelper::isAttributeTrue($field, 'isRequiredField') || !$validateOptional ? '1' : '0'); } if (!isset($this->element['maxOccurs'])) { $this->element->addAttribute('maxOccurs', RApiHalHelper::attributeToString($field, 'maxOccurs', 1)); } if (!isset($this->element['name']) && isset($field['name'])) { $this->element->addAttribute('name', $field['name']); } if ($this->type != '') { $this->element->addAttribute('type', $this->type); } }
data-remote-format="doc" data-remote="../index.php?api=Hal&format=doc&option=<?php echo $item->xml->config->name . $webserviceClientUri; ?> " data-target="#webservicePreview"> <i class="icon-file-text"></i> <?php echo JText::_('COM_REDCORE_WEBSERVICES_WEBSERVICE_DOCUMENTATION'); ?> </button> <button class="btn btn-xs btn-primary" type="button" <?php if (RApiHalHelper::isAttributeTrue($item->xml->operations->read, 'authorizationNeeded', true)) { ?> disabled="disabled" <?php } ?> data-remote-format="json" data-remote="../index.php?api=Hal&option=<?php echo $item->xml->config->name . $webserviceClientUri; ?> " data-target="#webservicePreview"> <i class="icon-file-text"></i> <?php echo JText::_('COM_REDCORE_WEBSERVICES_WEBSERVICE_PREVIEW_JSON'); ?>
/** * Read item * * @param object $data Primary keys and $language * * @return array */ public function readItem($data) { // We are setting the operation of the webservice to Read $this->setOperation('read'); $dataGet = $this->webservice->options->get('dataGet', array()); $primaryKeysFromFields = RApiHalHelper::getFieldsArray($this->webservice->configuration->operations->read->item, true); // If there are no primary keys defined we will use id field as default if (empty($primaryKeysFromFields)) { $primaryKeysFromFields['id'] = array('transform' => 'int'); } foreach ($primaryKeysFromFields as $primaryKey => $primaryKeyField) { $keyData = ''; if (isset($data->{$primaryKey}) && $data->{$primaryKey} != '') { $keyData = $data->{$primaryKey}; } $dataGet->{$primaryKey} = $this->webservice->transformField($primaryKeyField['transform'], $keyData, false); } // Handle different language switch $this->setLanguage((string) (isset($data->language) ? $data->language : '')); $this->webservice->options->set('dataGet', $dataGet); $this->webservice->options->set('task', ''); $this->webservice->options->set('filterOutResourcesGroups', array('_links', '_messages')); $this->webservice->execute(); $arr = $this->webservice->hal->toArray(); $outputResources = RApiSoapHelper::getOutputResources($this->webservice->configuration->operations->read->item, '', true); $response = RApiSoapHelper::selectListResources($outputResources, array($arr)); $final = new stdClass(); $final->item = empty($response) ? array() : $response[0]; $match = true; if (RApiHalHelper::isAttributeTrue($this->webservice->configuration->operations->read->item, 'enforcePKs', true)) { foreach ($primaryKeysFromFields as $primaryKey => $primaryKeyField) { if ($dataGet->{$primaryKey} != $final->item->{$primaryKey}) { $match = false; } } } if (!$match) { $final = array(); } if (!count((array) $final->item)) { $final = array(); } return $final; }
<?php if ($isOperationRead) { ?> <td><?php echo RApiHalHelper::isAttributeTrue($field, 'isFilterField') ? JText::_('JYES') : JText::_('JNO'); ?> </td> <td><?php echo RApiHalHelper::isAttributeTrue($field, 'isSearchableField') ? JText::_('JYES') : JText::_('JNO'); ?> </td> <?php } else { ?> <td><?php echo RApiHalHelper::isAttributeTrue($field, 'isRequiredField') ? JText::_('JYES') : JText::_('JNO'); ?> </td> <?php } ?> <td><?php echo !empty($field->description) ? $field->description : ''; ?> </td> </tr> <?php } ?> <?php }
/** * Load model class for data manipulation * * @param string $elementName Element name * @param SimpleXMLElement $configuration Configuration for current action * * @return mixed Model class for data manipulation * * @since 1.2 */ public function loadModel($elementName, $configuration) { $this->setOptionViewName($elementName, $configuration); $isAdmin = RApiHalHelper::isAttributeTrue($configuration, 'isAdminClass'); $this->addModelIncludePaths($isAdmin, $this->optionName); $this->loadExtensionLanguage($this->optionName, $isAdmin ? JPATH_ADMINISTRATOR : JPATH_SITE); $this->triggerFunction('loadExtensionLibrary', $this->optionName); $dataMode = strtolower(RApiHalHelper::attributeToString($configuration, 'dataMode', 'model')); if ($dataMode == 'helper') { return $this->getHelperObject(); } if ($dataMode == 'table') { return $this->getDynamicModelObject($configuration); } if (!empty($configuration['modelClassName'])) { $modelClass = (string) $configuration['modelClassName']; if (!empty($configuration['modelClassPath'])) { require_once JPATH_SITE . '/' . $configuration['modelClassPath']; if (class_exists($modelClass)) { return new $modelClass(); } } else { $componentName = ucfirst(strtolower(substr($this->optionName, 4))); $prefix = $componentName . 'Model'; $model = RModel::getInstance($modelClass, $prefix); if ($model) { return $model; } } } if (!empty($this->viewName)) { $elementName = $this->viewName; } if ($isAdmin) { return RModel::getAdminInstance($elementName, array(), $this->optionName); } return RModel::getFrontInstance($elementName, array(), $this->optionName); }
} if ($operationName == 'read list') { if (RApiHalHelper::isAttributeTrue($field, 'isFilterField')) { $field['name'] = 'filter[' . $field['name'] . ']'; } else { continue; } } if ($operationName == 'read item') { if (!RApiHalHelper::isAttributeTrue($field, 'isPrimaryField')) { continue; } // We set it as a required field for read item $field['isRequiredField'] = 'true'; } $fieldsContainer[] = '<strong>' . $field['name'] . '</strong> ' . '(<em>' . (!empty($field['transform']) ? $field['transform'] : 'string') . ', ' . (RApiHalHelper::isAttributeTrue($field, 'isRequiredField') ? JText::_('LIB_REDCORE_API_HAL_WEBSERVICE_DOCUMENTATION_FIELD_REQUIRED') : JText::_('LIB_REDCORE_API_HAL_WEBSERVICE_DOCUMENTATION_FIELD_OPTIONAL')) . '</em>)'; } echo implode(',<br />', $fieldsContainer); } } ?> </small> </div> <div class="col-xs4 col-md-4 well" style="border: 2px solid #fff;"> <h5 style="border-bottom: 1px solid #ddd"><strong><?php echo JText::_('LIB_REDCORE_API_HAL_WEBSERVICE_DOCUMENTATION_RESPONSE'); ?> </strong></h5> <small> <?php if (!empty($resources)) {
/** * Gets an array of fields ready for SOAP documentation purposes * * @param array $fields Array of fields using their xml properties (using 'name' for the field name itself) * @param boolean $allRequired Mark all the fields as required * @param string $assignation Assignation operation * * @return array * * @since 1.4 */ public static function documentationFields($fields, $allRequired = false, $assignation = '=') { $fieldsArray = array(); if ($fields && is_array($fields)) { foreach ($fields as $field) { $transform = RApiHalHelper::attributeToString($field, 'transform', 'string'); $defaultValue = RApiHalHelper::attributeToString($field, 'defaultValue', 'null'); if ($defaultValue == 'null' && ($allRequired || RApiHalHelper::isAttributeTrue($field, 'isRequiredField'))) { $transformClass = 'RApiSoapTransform' . ucfirst($transform); if (!class_exists($transformClass)) { $transformClass = 'RApiSoapTransformBase'; } $transformObject = new $transformClass(); $defaultValue = $transformObject->defaultValue; } $fieldsArray[] = '$' . RApiHalHelper::attributeToString($field, 'name') . ' ' . $assignation . ' (' . $transform . ') ' . $defaultValue; } } return $fieldsArray; }