Skip to content

Commit

Permalink
Merge pull request #5216 from firstred/webservicecompat16
Browse files Browse the repository at this point in the history
[-] WS : Fix for PHP 5.2, 5.3 and 7.0 compatibility
  • Loading branch information
Julien Martin committed May 18, 2016
2 parents f7cff12 + 114f10b commit 62481ff
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 25 deletions.
36 changes: 25 additions & 11 deletions classes/webservice/WebserviceOutputBuilder.php
Expand Up @@ -368,7 +368,8 @@ public function getContent($objects, $schema_to_display = null, $fields_to_displ

foreach ($this->wsParamOverrides as $p) {
$object = $p['object'];
$ws_params = $object->{$p['method']}($ws_params);
$method = $p['method'];
$ws_params = $object->$method($ws_params);
}

// If a list is asked, need to wrap with a plural node
Expand Down Expand Up @@ -462,7 +463,8 @@ public function renderEntity($object, $depth)

foreach ($this->wsParamOverrides as $p) {
$o = $p['object'];
$ws_params = $o->{$p['method']}($ws_params);
$method = $p['method'];
$ws_params = $o->$method($ws_params);
}
$output .= $this->setIndent($depth).$this->objectRender->renderNodeHeader($ws_params['objectNodeName'], $ws_params);

Expand Down Expand Up @@ -539,7 +541,8 @@ protected function renderField($object, $ws_params, $field_name, $field, $depth)
unset($field['xlink_resource']);
}
} elseif (isset($field['getter']) && $object != null && method_exists($object, $field['getter'])) {
$field['value'] = $object->$field['getter']();
$field_getter = $field['getter'];
$field['value'] = $object->$field_getter();
} elseif (!isset($field['value'])) {
$field['value'] = $object->$field_name;
}
Expand Down Expand Up @@ -756,19 +759,29 @@ public function getSpecificField()
{
return $this->specificFields;
}

protected function overrideSpecificField($entity_name, $field_name, $field, $entity_object, $ws_params)
{
if (array_key_exists($field_name, $this->specificFields) && $this->specificFields[$field_name]['entity'] == $entity_name) {
if ($this->specificFields[$field_name]['type'] == 'string') {
$object = new $this->specificFields[$field_name]['object']();
} elseif ($this->specificFields[$field_name]['type'] == 'object') {
$object = $this->specificFields[$field_name]['object'];
}
if (array_key_exists($field_name, $this->specificFields)) {
$specific_fields_field_name = $this->specificFields[$field_name];
if ($specific_fields_field_name['entity'] == $entity_name) {

if ($specific_fields_field_name['type'] == 'string') {
$object = new $specific_fields_field_name['object']();
} elseif ($specific_fields_field_name['type'] == 'object') {
$object = $specific_fields_field_name['object'];
}

$field = $object->{$this->specificFields[$field_name]['method']}($field, $entity_object, $ws_params);
if (isset($object)) {
$method = $specific_fields_field_name['method'];
$field = $object->$method($field, $entity_object, $ws_params);
}
}
}

return $field;
}

public function setVirtualField($object, $method, $entity_name, $parameters)
{
try {
Expand Down Expand Up @@ -797,7 +810,8 @@ public function addVirtualFields($entity_name, $entity_object)
$object = $function_infos['object'];
}

$return_fields = $object->{$function_infos['method']}($entity_object, $function_infos['parameters']);
$method = $function_infos['method'];
$return_fields = $object->$method($entity_object, $function_infos['parameters']);
foreach ($return_fields as $field_name => $value) {
if (Validate::isConfigName($field_name)) {
$arr_return[$field_name] = $value;
Expand Down
35 changes: 22 additions & 13 deletions classes/webservice/WebserviceRequest.php
Expand Up @@ -498,7 +498,8 @@ public function fetch($key, $method, $url, $params, $bad_class_name, $inputXml =
// load resource configuration
if ($this->urlSegment[0] != '') {
/** @var ObjectModel $object */
$object = new $this->resourceList[$this->urlSegment[0]]['class']();
$url_resource = $this->resourceList[$this->urlSegment[0]];
$object = new $url_resource['class']();
if (isset($this->resourceList[$this->urlSegment[0]]['parameters_attribute'])) {
$this->resourceConfiguration = $object->getWebserviceParameters($this->resourceList[$this->urlSegment[0]]['parameters_attribute']);
} else {
Expand Down Expand Up @@ -885,7 +886,8 @@ protected function setObjects()
}
if (!empty($ids)) {
foreach ($ids as $id) {
$object = new $this->resourceConfiguration['retrieveData']['className']((int)$id);
$retrieve_data = $this->resourceConfiguration['retrieveData'];
$object = new $retrieve_data['className']((int)$id);
if (!$object->id) {
$arr_avoid_id[] = $id;
} else {
Expand Down Expand Up @@ -1143,7 +1145,8 @@ protected function manageFilters()
$sql_sort .= 'main_i18n.`'.pSQL($this->resourceConfiguration['fields'][$fieldName]['sqlId']).'` '.$direction.', ';// ORDER BY main_i18n.`field` ASC|DESC
} else {
/** @var ObjectModel $object */
$object = new $this->resourceConfiguration['retrieveData']['className']();
$retrieve_data = $this->resourceConfiguration['retrieveData'];
$object = new $retrieve_data['className']();
$assoc = Shop::getAssoTable($this->resourceConfiguration['retrieveData']['table']);
if ($assoc !== false && $assoc['type'] == 'shop' && ($object->isMultiShopField($this->resourceConfiguration['fields'][$fieldName]['sqlId']) || $fieldName == 'id')) {
$table_alias = 'multi_shop_'.$this->resourceConfiguration['retrieveData']['table'];
Expand Down Expand Up @@ -1191,16 +1194,17 @@ public function getFilteredObjectList()
$this->resourceConfiguration['retrieveData']['params'][] = $filters['sql_limit'];
//list entities

$tmp = new $this->resourceConfiguration['retrieveData']['className']();
$retrieve_data = $this->resourceConfiguration['retrieveData'];
$tmp = new $retrieve_data['className']();
$sqlObjects = call_user_func_array(array($tmp, $this->resourceConfiguration['retrieveData']['retrieveMethod']), $this->resourceConfiguration['retrieveData']['params']);
if ($sqlObjects) {
foreach ($sqlObjects as $sqlObject) {
if ($this->fieldsToDisplay == 'minimum') {
$obj = new $this->resourceConfiguration['retrieveData']['className']();
$obj = new $retrieve_data['className']();
$obj->id = (int)$sqlObject[$this->resourceConfiguration['fields']['id']['sqlId']];
$objects[] = $obj;
} else {
$objects[] = new $this->resourceConfiguration['retrieveData']['className']((int)$sqlObject[$this->resourceConfiguration['fields']['id']['sqlId']]);
$objects[] = new $retrieve_data['className']((int)$sqlObject[$this->resourceConfiguration['fields']['id']['sqlId']]);
}
}
return $objects;
Expand All @@ -1215,7 +1219,8 @@ public function getFilteredObjectDetails()
}

//get entity details
$object = new $this->resourceConfiguration['retrieveData']['className']((int)$this->urlSegment[1]);
$retrieve_data = $this->resourceConfiguration['retrieveData'];
$object = new $retrieve_data['className']((int)$this->urlSegment[1]);
if ($object->id) {
$objects[] = $object;
// Check if Object is accessible for this/those id_shop
Expand All @@ -1224,7 +1229,7 @@ public function getFilteredObjectDetails()
$check_shop_group = false;

$sql = 'SELECT 1
FROM `'.bqSQL(_DB_PREFIX_.$this->resourceConfiguration['retrieveData']['table']);
FROM `'.bqSQL(_DB_PREFIX_.$retrieve_data['table']);
if ($assoc['type'] != 'fk_shop') {
$sql .= '_'.$assoc['type'];
} else {
Expand Down Expand Up @@ -1321,7 +1326,8 @@ protected function executeEntityDelete()
}
if (!empty($ids)) {
foreach ($ids as $id) {
$object = new $this->resourceConfiguration['retrieveData']['className']((int)$id);
$retrieve_data = $this->resourceConfiguration['retrieveData'];
$object = new $retrieve_data['className']((int)$id);
if (!$object->id) {
$arr_avoid_id[] = $id;
} else {
Expand All @@ -1337,7 +1343,8 @@ protected function executeEntityDelete()
foreach ($objects as $object) {
/** @var ObjectModel $object */
if (isset($this->resourceConfiguration['objectMethods']) && isset($this->resourceConfiguration['objectMethods']['delete'])) {
$result = $object->{$this->resourceConfiguration['objectMethods']['delete']}();
$resource_config = $this->resourceConfiguration['objectMethods']['delete'];
$result = $object->$resource_config();
} else {
$result = $object->delete();
}
Expand Down Expand Up @@ -1402,10 +1409,11 @@ protected function saveEntityFromXml($successReturnCode)
$attributes = $xmlEntity->children();

/** @var ObjectModel $object */
$retrieve_data = $this->resourceConfiguration['retrieveData'];
if ($this->method == 'POST') {
$object = new $this->resourceConfiguration['retrieveData']['className']();
$object = new $retrieve_data['className']();
} elseif ($this->method == 'PUT') {
$object = new $this->resourceConfiguration['retrieveData']['className']((int)$attributes->id);
$object = new $retrieve_data['className']((int)$attributes->id);
if (!$object->id) {
$this->setError(404, 'Invalid ID', 92);
return false;
Expand All @@ -1428,7 +1436,8 @@ protected function saveEntityFromXml($successReturnCode)
$this->setError(400, 'parameter "'.$fieldName.'" not writable. Please remove this attribute of this XML', 93);
return false;
} else {
$object->$fieldProperties['setter']((string)$attributes->$fieldName);
$setter = $fieldProperties['setter'];
$object->$setter((string)$attributes->$fieldName);
}
} elseif (property_exists($object, $sqlId)) {
$object->$sqlId = (string)$attributes->$fieldName;
Expand Down
3 changes: 2 additions & 1 deletion classes/webservice/WebserviceSpecificManagementImages.php
Expand Up @@ -805,7 +805,8 @@ protected function manageDeclinatedImagesCRUD($filename_exists, $filename, $imag
} elseif ($filename_exists) {
if (in_array($this->imageType, array('categories', 'manufacturers', 'suppliers', 'stores'))) {
/** @var ObjectModel $object */
$object = new $this->wsObject->resourceList[$this->imageType]['class']((int)$this->wsObject->urlSegment[2]);
$image_class = $this->wsObject->resourceList[$this->imageType]['class'];
$object = new $image_class((int)$this->wsObject->urlSegment[2]);
return $object->deleteImage(true);
} else {
return $this->deleteImageOnDisk($filename, $image_sizes, $directory);
Expand Down

0 comments on commit 62481ff

Please sign in to comment.