/** * Handle POST requests * * @param EventInterface $event The current event */ public function post(EventInterface $event) { $request = $event->getRequest(); $event->getManager()->trigger('db.metadata.update', ['metadata' => json_decode($request->getContent(), true)]); $model = new Model\Metadata(); $model->setData($event->getDatabase()->getMetadata($request->getUser(), $request->getImageIdentifier())); $event->getResponse()->setModel($model); }
/** * Get data from the cache * * @param EventInterface $event The event instance */ public function loadFromCache(EventInterface $event) { $request = $event->getRequest(); $response = $event->getResponse(); $cacheKey = $this->getCacheKey($request->getPublicKey(), $request->getImageIdentifier()); $result = $this->cache->get($cacheKey); if (is_array($result) && isset($result['lastModified']) && $result['lastModified'] instanceof DateTime && isset($result['metadata'])) { $model = new Model\Metadata(); $model->setData($result['metadata']); $response->setModel($model)->setLastModified($result['lastModified']); $response->headers->set('X-Imbo-MetadataCache', 'Hit'); // Stop propagation of listeners for this event $event->stopPropagation(); return; } else { if ($result) { // Invalid result stored in the cache. Delete $this->cache->delete($cacheKey); } } $response->headers->set('X-Imbo-MetadataCache', 'Miss'); }
/** * Load metadata * * @param EventInterface $event An event instance */ public function loadMetadata(EventInterface $event) { $request = $event->getRequest(); $response = $event->getResponse(); $publicKey = $request->getPublicKey(); $imageIdentifier = $request->getImageIdentifier(); $database = $event->getDatabase(); $model = new Model\Metadata(); $model->setData($database->getMetadata($publicKey, $imageIdentifier)); $response->setModel($model)->setLastModified($database->getLastModified($publicKey, $imageIdentifier)); }
/** * {@inheritdoc} */ public function formatMetadata(Model\Metadata $model) { $metadata = ''; foreach ($model->getData() as $key => $value) { $metadata .= '<tag key="' . $key . '">' . $value . '</tag>'; } return <<<METADATA <?xml version="1.0" encoding="UTF-8"?> <imbo> <metadata>{$metadata}</metadata> </imbo> METADATA; }
/** * {@inheritdoc} */ public function formatMetadataModel(Model\Metadata $model) { $metadata = $this->formatMetadata($model->getData()); return <<<METADATA <?xml version="1.0" encoding="UTF-8"?> <imbo> <metadata>{$metadata}</metadata> </imbo> METADATA; }
/** * {@inheritdoc} */ public function formatMetadata(Model\Metadata $model) { return $this->encode($model->getData() ?: new stdClass()); }