Open Journal Systems  3.3.0
Response/JsonVisitor.php
1 <?php
2 
4 
8 
18 {
19  public function before(CommandInterface $command, array &$result)
20  {
21  // Ensure that the result of the command is always rooted with the parsed JSON data
22  $result = $command->getResponse()->json();
23  }
24 
25  public function visit(
26  CommandInterface $command,
27  Response $response,
28  Parameter $param,
29  &$value,
30  $context = null
31  ) {
32  $name = $param->getName();
33  $key = $param->getWireName();
34  if (isset($value[$key])) {
35  $this->recursiveProcess($param, $value[$key]);
36  if ($key != $name) {
37  $value[$name] = $value[$key];
38  unset($value[$key]);
39  }
40  }
41  }
42 
49  protected function recursiveProcess(Parameter $param, &$value)
50  {
51  if ($value === null) {
52  return;
53  }
54 
55  if (is_array($value)) {
56  $type = $param->getType();
57  if ($type == 'array') {
58  foreach ($value as &$item) {
59  $this->recursiveProcess($param->getItems(), $item);
60  }
61  } elseif ($type == 'object' && !isset($value[0])) {
62  // On the above line, we ensure that the array is associative and not numerically indexed
63  $knownProperties = array();
64  if ($properties = $param->getProperties()) {
65  foreach ($properties as $property) {
66  $name = $property->getName();
67  $key = $property->getWireName();
68  $knownProperties[$name] = 1;
69  if (isset($value[$key])) {
70  $this->recursiveProcess($property, $value[$key]);
71  if ($key != $name) {
72  $value[$name] = $value[$key];
73  unset($value[$key]);
74  }
75  }
76  }
77  }
78 
79  // Remove any unknown and potentially unsafe properties
80  if ($param->getAdditionalProperties() === false) {
81  $value = array_intersect_key($value, $knownProperties);
82  } elseif (($additional = $param->getAdditionalProperties()) !== true) {
83  // Validate and filter additional properties
84  foreach ($value as &$v) {
85  $this->recursiveProcess($additional, $v);
86  }
87  }
88  }
89  }
90 
91  $value = $param->filter($value);
92  }
93 }
Guzzle\Service\Description\Parameter\getItems
getItems()
Definition: Parameter.php:820
Guzzle\Service\Command\LocationVisitor\Response\JsonVisitor\before
before(CommandInterface $command, array &$result)
Definition: Response/JsonVisitor.php:19
Guzzle\Service\Command\LocationVisitor\Response
Definition: AbstractResponseVisitor.php:3
Guzzle\Service\Command\LocationVisitor\Response\JsonVisitor
Definition: Response/JsonVisitor.php:17
Guzzle\Service\Description\Parameter\filter
filter($value)
Definition: Parameter.php:201
Guzzle\Service\Description\Parameter
Definition: Parameter.php:10
Guzzle\Http\Message\Response
Definition: lib/vendor/guzzle/guzzle/src/Guzzle/Http/Message/Response.php:17
Guzzle\Service\Command\LocationVisitor\Response\JsonVisitor\recursiveProcess
recursiveProcess(Parameter $param, &$value)
Definition: Response/JsonVisitor.php:49
Guzzle\Service\Command\LocationVisitor\Response\JsonVisitor\visit
visit(CommandInterface $command, Response $response, Parameter $param, &$value, $context=null)
Definition: Response/JsonVisitor.php:25
Guzzle\Service\Command\CommandInterface
Definition: CommandInterface.php:17
Guzzle\Service\Command\CommandInterface\getResponse
getResponse()
Guzzle\Service\Description\Parameter\getWireName
getWireName()
Definition: Parameter.php:250
Guzzle\Service\Description\Parameter\getProperties
getProperties()
Definition: Parameter.php:705
Guzzle\Service\Description\Parameter\getName
getName()
Definition: Parameter.php:240
Guzzle\Service\Description\Parameter\getAdditionalProperties
getAdditionalProperties()
Definition: Parameter.php:775
Guzzle\Service\Description\Parameter\getType
getType()
Definition: Parameter.php:274
Guzzle\Service\Command\LocationVisitor\Response\AbstractResponseVisitor
Definition: AbstractResponseVisitor.php:13