diff --git a/src/Controller/Controller.php b/src/Controller/Controller.php index 29f584c..9f9bf83 100644 --- a/src/Controller/Controller.php +++ b/src/Controller/Controller.php @@ -1,6 +1,6 @@ getIdAttributeValidator()->parse($id); @@ -63,4 +63,4 @@ public static function handleDelete( //204 or view callback } -} \ No newline at end of file +} diff --git a/src/Controller/Get.php b/src/Controller/Get.php index 5cfd3e6..5e5104b 100644 --- a/src/Controller/Get.php +++ b/src/Controller/Get.php @@ -1,6 +1,6 @@ relationships; } - - } diff --git a/src/Controller/Patch.php b/src/Controller/Patch.php index 97284a3..950403d 100644 --- a/src/Controller/Patch.php +++ b/src/Controller/Patch.php @@ -1,6 +1,6 @@ getIdAttributeValidator()->parse($id); @@ -64,4 +64,4 @@ public static function handlePatch( //204 or view callback } -} \ No newline at end of file +} diff --git a/src/Controller/Post.php b/src/Controller/Post.php index 0fd8ee0..185ca8f 100644 --- a/src/Controller/Post.php +++ b/src/Controller/Post.php @@ -1,6 +1,6 @@ getIdAttributeValidator()->parse($id); @@ -63,4 +63,4 @@ public static function handlePut( //204 or view callback } -} \ No newline at end of file +} diff --git a/src/Controller/Relationship.php b/src/Controller/Relationship.php index 22870cf..74d6b09 100644 --- a/src/Controller/Relationship.php +++ b/src/Controller/Relationship.php @@ -1,6 +1,6 @@ resourceModel; @@ -223,10 +223,10 @@ private function handleSort( );*/ $replace = "\n" . sprintf( - 'ORDER BY "%s" %s', - $sortAttribute, - ($sort->getAttribute() ? 'ASC' : 'DESC') - ); + 'ORDER BY "%s" %s', + $sortAttribute, + ($sort->getAttribute() ? 'ASC' : 'DESC') + ); } $query = str_replace( @@ -289,9 +289,9 @@ private function handleFilterParseIn(array $array) return implode( ',', array_map( - /** - * Apply single quotes around key - */ + /** + * Apply single quotes around key + */ function ($key) { return '\'' . $key . '\''; }, diff --git a/src/Directive/AdditionalParameters.php b/src/Directive/AdditionalParameters.php index 421838a..2b9b0de 100644 --- a/src/Directive/AdditionalParameters.php +++ b/src/Directive/AdditionalParameters.php @@ -1,6 +1,6 @@ attributes, - $validationModel->attributes->properties->{$attribute}) + $validationModel->attributes->properties->{$attribute} + ) ) { //Then attempt to use attribute validation resourceModel first $attributeValidator = $validationModel->attributes->properties->{$attribute}; @@ -297,7 +298,8 @@ public function validate(ResourceModel $model) : bool } //Check if operator is allowed - if (!$isJSONFilter && !in_array( + if (!$isJSONFilter + && !in_array( $operator, Operator::getByClassFlags($operatorClass) ) diff --git a/src/Directive/FilterAttribute.php b/src/Directive/FilterAttribute.php index c76caf4..de94d7a 100644 --- a/src/Directive/FilterAttribute.php +++ b/src/Directive/FilterAttribute.php @@ -1,6 +1,6 @@ operand; } - } diff --git a/src/Directive/FilterJSONAttribute.php b/src/Directive/FilterJSONAttribute.php index 4bde3e4..cb0bffa 100644 --- a/src/Directive/FilterJSONAttribute.php +++ b/src/Directive/FilterJSONAttribute.php @@ -1,6 +1,6 @@ key; } - } diff --git a/src/Directive/IncludeResources.php b/src/Directive/IncludeResources.php index 5752e51..15fb7a9 100644 --- a/src/Directive/IncludeResources.php +++ b/src/Directive/IncludeResources.php @@ -1,6 +1,6 @@ attribute = $attribute; $this->ascending = $ascending; @@ -125,7 +126,7 @@ public static function parseFromRequest( /** * @return boolean */ - public function getAscending() + public function getAscending() : bool { return $this->ascending; } @@ -133,7 +134,7 @@ public function getAscending() /** * @return string */ - public function getAttribute() + public function getAttribute() : string { return $this->attribute; } diff --git a/src/Model.php b/src/Model.php index 7a783a6..1faed06 100644 --- a/src/Model.php +++ b/src/Model.php @@ -1,6 +1,6 @@ privateAttributes; } -} \ No newline at end of file +} diff --git a/src/Model/RelationshipsTrait.php b/src/Model/RelationshipsTrait.php index b57c573..368efac 100644 --- a/src/Model/RelationshipsTrait.php +++ b/src/Model/RelationshipsTrait.php @@ -1,5 +1,6 @@ variables, $key); } -} \ No newline at end of file +} diff --git a/src/ModelTrait.php b/src/ModelTrait.php index 5748adb..0ff6e04 100644 --- a/src/ModelTrait.php +++ b/src/ModelTrait.php @@ -1,6 +1,6 @@ getIdAttribute(); @@ -255,7 +255,7 @@ public static function parseFromRecord( //Initialize resource $resource = new $resourceClass( $model->getResourceType(), - (string) $record->{$idAttribute} + (string)$record->{$idAttribute} ); //Delete $idAttribute from record's attributes @@ -266,7 +266,7 @@ public static function parseFromRecord( $meta = $record->{Resource::META_MEMBER}; if (is_array($meta) && Util::isArrayAssoc($meta)) { - $meta = (object) $meta; + $meta = (object)$meta; } if (!is_object($meta)) { @@ -292,7 +292,7 @@ public static function parseFromRecord( } } - if (count((array) $privateAttributes)) { + if (count((array)$privateAttributes)) { $resource->{'private-attributes'} = $privateAttributes; } @@ -303,145 +303,144 @@ public static function parseFromRecord( //Attach relationships if resource's relationships are set // if (/*$flagRelationships &&*/ ($relationships = $resourceModel->getRelationships())) { - $resourceRelationships = new \stdClass(); - //Parse relationships - foreach ($model->getRelationships() ?? [] as $relationshipKey => $relationshipObject) { - //Initialize an new relationship entry object - $relationshipEntry = new \stdClass(); - - //Attach relationship links - //TODO RESTORE - /* if ($flagRelationshipLinks) { - $relationshipEntry->links = [ - 'self' => $resourceModel::getSelfLink( - $resource->id . '/relationships/' . $relationshipKey - ), - 'related' => $resourceModel::getSelfLink( - $resource->id . '/' . $relationshipKey - ) - ]; - }*/ - - $relationshipFlagData = ($relationshipObject->getFlags() & Relationship::FLAG_DATA) != 0; - - /** - * @var ResourceModel - */ - $relationshipModel = $relationshipObject->getResourceModel(); - $relationshipType = $relationshipObject->getType(); - $recordDataAttribute = $relationshipObject->getRecordDataAttribute(); - - $relationshipResourceType = $relationshipModel->getResourceType(); - - //todo Define callback signature to fetch data - /** - * @return string[]|RelationshipResource[] - */ - $dataCallback = function () use ( - $relationshipObject, - $resource, - $relationshipKey, - $directives, - $flags - ) { - $cb = $relationshipObject->getCallbacks()->{'GET'}; - - return $cb( - $resource->id, - $directives, - $flags // use $flagRelationshipsAttributes to enable/disable parsing of relationship attributes - ); - }; - - if ($flagRelationships && ($flagRelationshipData || $relationshipFlagData)) { - //Include data only if $flagRelationshipData is true - if ($relationshipType === Relationship::TYPE_TO_ONE) { - $relationshipEntryResource = null; - - if (isset($record->{$recordDataAttribute}) && $record->{$recordDataAttribute}) { //preloaded - $relationshipEntryResource = $record->{$recordDataAttribute}; - } elseif (isset($relationshipObject->getCallbacks()->{'GET'})) { //available from callback - $relationshipEntryResource = $dataCallback(); - } - - if ($relationshipEntryResource !== null) { - //parse relationship resource - if (is_string($relationshipEntryResource)) { - //If returned $relationshipEntryResource is an id string - $relationshipEntry->data = new RelationshipResource( - $relationshipResourceType, - (string) $relationshipEntryResource - ); - } elseif ($relationshipEntryResource instanceof RelationshipResource) { - //If returned $relationshipEntryResource is RelationshipResource - $relationshipEntry->data = $relationshipEntryResource; - } else { - throw new \Exception(sprintf( - 'Unexpected relationship entry resource of relationship "%s",' - . ' expecting string or RelationshipResource "%s" given', - $relationshipKey, - gettype($relationshipEntryResource) - )); - } - } - } elseif ($relationshipType === Relationship::TYPE_TO_MANY) { - //Initialize - $relationshipEntry->data = []; - - $relationshipEntryResources = []; - - if (isset($record->{$recordDataAttribute}) && $record->{$recordDataAttribute}) { //preloaded - $relationshipEntryResources = $record->{$recordDataAttribute}; - } elseif (isset($relationshipObject->getCallbacks()->{'GET'})) { //available from callback - $relationshipEntryResources = $dataCallback(); - } + $resourceRelationships = new \stdClass(); + //Parse relationships + foreach ($model->getRelationships() ?? [] as $relationshipKey => $relationshipObject) { + //Initialize an new relationship entry object + $relationshipEntry = new \stdClass(); + + //Attach relationship links + //TODO RESTORE + /* if ($flagRelationshipLinks) { + $relationshipEntry->links = [ + 'self' => $resourceModel::getSelfLink( + $resource->id . '/relationships/' . $relationshipKey + ), + 'related' => $resourceModel::getSelfLink( + $resource->id . '/' . $relationshipKey + ) + ]; + }*/ + + $relationshipFlagData = ($relationshipObject->getFlags() & Relationship::FLAG_DATA) != 0; + + /** + * @var ResourceModel + */ + $relationshipModel = $relationshipObject->getResourceModel(); + $relationshipType = $relationshipObject->getType(); + $recordDataAttribute = $relationshipObject->getRecordDataAttribute(); + + $relationshipResourceType = $relationshipModel->getResourceType(); + + //todo Define callback signature to fetch data + /** + * @return string[]|RelationshipResource[] + */ + $dataCallback = function () use ( + $relationshipObject, + $resource, + $relationshipKey, + $directives, + $flags + ) { + $cb = $relationshipObject->getCallbacks()->{'GET'}; - if (!is_array($relationshipEntryResources)) { - throw new \Exception(sprintf( - 'Expecting array for relationship entry resources of relationship "%s"', - $relationshipKey - )); - } + return $cb( + $resource->id, + $directives, + $flags // use $flagRelationshipsAttributes to enable/disable parsing of relationship attributes + ); + }; + + if ($flagRelationships && ($flagRelationshipData || $relationshipFlagData)) { + //Include data only if $flagRelationshipData is true + if ($relationshipType === Relationship::TYPE_TO_ONE) { + $relationshipEntryResource = null; + + if (isset($record->{$recordDataAttribute}) && $record->{$recordDataAttribute}) { //preloaded + $relationshipEntryResource = $record->{$recordDataAttribute}; + } elseif (isset($relationshipObject->getCallbacks()->{'GET'})) { //available from callback + $relationshipEntryResource = $dataCallback(); + } - //Parse relationship resources - - if (Util::isArrayOf($relationshipEntryResources, 'string')) { - //If returned $relationshipEntryResources are id strings - foreach ($relationshipEntryResources as $relationshipEntryResourceId) { - $relationshipEntry->data[] = new RelationshipResource( - $relationshipResourceType, - (string)$relationshipEntryResourceId - ); - } - } elseif (Util::isArrayOf($relationshipEntryResources, RelationshipResource::class)) { - //If returned $relationshipEntryResources are RelationshipResource - $relationshipEntry->data = $relationshipEntryResources; + if ($relationshipEntryResource !== null) { + //parse relationship resource + if (is_string($relationshipEntryResource)) { + //If returned $relationshipEntryResource is an id string + $relationshipEntry->data = new RelationshipResource( + $relationshipResourceType, + (string)$relationshipEntryResource + ); + } elseif ($relationshipEntryResource instanceof RelationshipResource) { + //If returned $relationshipEntryResource is RelationshipResource + $relationshipEntry->data = $relationshipEntryResource; } else { throw new \Exception(sprintf( - 'Unexpected relationship entry resources of relationship "%s",' + 'Unexpected relationship entry resource of relationship "%s",' . ' expecting string or RelationshipResource "%s" given', $relationshipKey, - gettype($relationshipEntryResources[0]) + gettype($relationshipEntryResource) )); } } - } + } elseif ($relationshipType === Relationship::TYPE_TO_MANY) { + //Initialize + $relationshipEntry->data = []; + + $relationshipEntryResources = []; + + if (isset($record->{$recordDataAttribute}) && $record->{$recordDataAttribute}) { //preloaded + $relationshipEntryResources = $record->{$recordDataAttribute}; + } elseif (isset($relationshipObject->getCallbacks()->{'GET'})) { //available from callback + $relationshipEntryResources = $dataCallback(); + } + + if (!is_array($relationshipEntryResources)) { + throw new \Exception(sprintf( + 'Expecting array for relationship entry resources of relationship "%s"', + $relationshipKey + )); + } + + //Parse relationship resources - if ($recordDataAttribute !== null) { - //Unset this attribute (MUST not be visible in resource's attributes) - unset($record->{$recordDataAttribute}); + if (Util::isArrayOf($relationshipEntryResources, 'string')) { + //If returned $relationshipEntryResources are id strings + foreach ($relationshipEntryResources as $relationshipEntryResourceId) { + $relationshipEntry->data[] = new RelationshipResource( + $relationshipResourceType, + (string)$relationshipEntryResourceId + ); + } + } elseif (Util::isArrayOf($relationshipEntryResources, RelationshipResource::class)) { + //If returned $relationshipEntryResources are RelationshipResource + $relationshipEntry->data = $relationshipEntryResources; + } else { + throw new \Exception(sprintf( + 'Unexpected relationship entry resources of relationship "%s",' + . ' expecting string or RelationshipResource "%s" given', + $relationshipKey, + gettype($relationshipEntryResources[0]) + )); + } } + } - //Push relationship to relationships - $resourceRelationships->{$relationshipKey} = $relationshipEntry; + if ($recordDataAttribute !== null) { + //Unset this attribute (MUST not be visible in resource's attributes) + unset($record->{$recordDataAttribute}); } + //Push relationship to relationships + $resourceRelationships->{$relationshipKey} = $relationshipEntry; + } - //Attach only if set - if ($flagRelationships) { - $resource->relationships = $resourceRelationships; - } - //} + + //Attach only if set + if ($flagRelationships) { + $resource->relationships = $resourceRelationships; + } //Attach resource attributes if ($flagAttributes) { diff --git a/src/ResourceModel.php b/src/ResourceModel.php index d665f09..12d5c78 100644 --- a/src/ResourceModel.php +++ b/src/ResourceModel.php @@ -1,6 +1,6 @@ prepareRecord = function (array &$record) { - }; $this->dataSource = $dataSource; diff --git a/src/ValidationModel.php b/src/ValidationModel.php index 91d2ee9..d5d30f7 100644 --- a/src/ValidationModel.php +++ b/src/ValidationModel.php @@ -1,6 +1,6 @@