diff --git a/src/KTQ/Bundle/KeyMediaBundle/OpenGraph/Handler/KeymediaHandler.php b/src/KTQ/Bundle/KeyMediaBundle/OpenGraph/Handler/KeymediaHandler.php new file mode 100644 index 0000000..a38027d --- /dev/null +++ b/src/KTQ/Bundle/KeyMediaBundle/OpenGraph/Handler/KeymediaHandler.php @@ -0,0 +1,152 @@ +keymediaExtension = $keymediaExtension; + $this->logger = $logger; + } + + /** + * Returns if this field type handler supports current field + * + * @param \eZ\Publish\API\Repository\Values\Content\Field $field + * + * @return bool + */ + protected function supports( Field $field ) + { + return $field->value instanceof Value; + } + + /** + * Returns the field value, converted to string + * + * @param \eZ\Publish\API\Repository\Values\Content\Field $field + * @param string $tagName + * @param array $params + * + * @return string + */ + protected function getFieldValue( Field $field, $tagName, array $params = array() ) + { + if ( !$this->fieldHelper->isFieldEmpty( $this->content, $params[0] ) ) + { + if ( !isset( $params[1] ) ) + { + throw new InvalidArgumentException( + '$params[1]', + 'Keymedia field type handler requires at least two parameters: field identifier and image format.' + ); + } + + try + { + $keymediaField = $this->keymediaExtension->keyMedia( + $this->content, + $params[0], + array( + "format" => $params[1] + ) + ); + + return 'http:' . $keymediaField["url"]; + } + catch ( Exception $e ) + { + if ( $this->logger !== null ) + { + $this->logger->error( + "Open Graph keymedia handler: Error while getting image with id {$field->value->id}: " . $e->getMessage() + ); + } + } + } + + return ''; + } + + /** + * Returns the array of meta tags + * + * @param string $tagName + * @param array $params + * + * @throws \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException If number of params is incorrect + * + * @return \Netgen\Bundle\OpenGraphBundle\MetaTag\Item[] + */ + public function getMetaTags( $tagName, array $params = array() ) + { + if ( !isset( $params[0] ) ) + { + throw new InvalidArgumentException( + '$params[0]', + 'Field type handlers require at least a field identifier.' + ); + } + $field = $this->translationHelper->getTranslatedField( $this->content, $params[0] ); + + if ( !$field instanceof Field ) + { + return ''; + } + + if ( !$this->supports( $field ) ) + { + throw new InvalidArgumentException( + '$params[0]', + get_class($this) . ' field type handler does not support field with identifier \'' . $field->fieldDefIdentifier . '\'.' + ); + } + + return array( + new Item( + $tagName, + $this->getFieldValue( $field, $tagName, $params ) + ) + ); + } +} \ No newline at end of file diff --git a/src/KTQ/Bundle/KeyMediaBundle/Resources/config/services.yml b/src/KTQ/Bundle/KeyMediaBundle/Resources/config/services.yml old mode 100755 new mode 100644 index f2eb816..f9691a4 --- a/src/KTQ/Bundle/KeyMediaBundle/Resources/config/services.yml +++ b/src/KTQ/Bundle/KeyMediaBundle/Resources/config/services.yml @@ -1,6 +1,7 @@ parameters: ezpublish.fieldType.keymedia.class: KTQ\Bundle\KeyMediaBundle\FieldType\KeyMedia\Type ezpublish.fieldType.keymedia.converter.class: KTQ\Bundle\KeyMediaBundle\FieldType\KeyMedia\Converter + keymedia_open_graph_handler.field_type.keymedia.class: KTQ\Bundle\KeymediaBundle\OpenGraph\Handler\KeymediaHandler services: ezpublish.fieldType.keymedia: @@ -18,4 +19,14 @@ services: class: KTQ\Bundle\KeyMediaBundle\Twig\KeymediaExtension arguments: [@ezpublish_legacy.kernel, @ezpublish.translation_helper] tags: - - { name: twig.extension } \ No newline at end of file + - { name: twig.extension } + + keymedia_open_graph_handler.field_type.keymedia: + class: %keymedia_open_graph_handler.field_type.keymedia.class% + parent: netgen_open_graph.handler.field_type.abstract + arguments: + - @keymedia.twig_extension + - @?logger + lazy: true + tags: + - { name: netgen_open_graph.meta_tag_handler, alias: field_type/keymedia } \ No newline at end of file