1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- <?php
-
- namespace OpenFoodFacts;
-
- /**
- * In mongoDB all element are object, it not possible to define property.
- * All property of the mongodb entity are store in one property of this class and the magic call try to access to it
- */
- class Document
- {
- use RecursiveSortingTrait;
-
- /**
- * the whole data
- * @var array
- */
- private $data;
-
- /**
- * the whole data
- * @var array
- */
- private $api;
-
- /**
- * Initialization the document and specify from which API it was extract
- * @param array $data the whole data
- * @param string $api the api name
- */
- public function __construct(array $data, string $api = null)
- {
- $this->data = $data;
- $this->api = $api;
- }
-
- /**
- * @inheritDoc
- */
- public function __get(string $name)
- {
- return $this->data[$name];
- }
- /**
- * @inheritDoc
- */
- public function __isset(string $name):bool
- {
- return isset($this->data[$name]);
- }
-
- /**
- * Returns a sorted representation of the complete Document Data
- * @return array
- */
- public function getData(): array
- {
- $this->recursiveSortArray($this->data);
- return $this->data;
- }
-
- /**
- * Returns a Document in the type regarding to the API used.
- * May be a Child of "Document" e.g.: FoodDocument or ProductDocument
- * @param string $apiIdentifier
- * @param array $data
- * @return Document
- */
- public static function createSpecificDocument(string $apiIdentifier, array $data): Document
- {
- if ($apiIdentifier === '') {
- return new Document($data, $apiIdentifier);
- }
-
- $className = "OpenFoodFacts\Document\\" . ucfirst($apiIdentifier) . 'Document';
-
- if (class_exists($className) && is_subclass_of($className, Document::class)) {
- return new $className($data, $apiIdentifier);
- }
-
- return new Document($data, $apiIdentifier);
- }
-
- }
|