From 25f69b46144af828cde028197f16798a1f8b26bb Mon Sep 17 00:00:00 2001 From: Henning Kvinnesland Date: Mon, 24 Mar 2014 15:06:06 +0100 Subject: [PATCH 1/9] Bundle is now compatible with 5.2. --- .../Controller/DefaultController.php | 10 --- .../FieldType/KeyMedia/Converter.php | 22 ++--- .../FieldType/KeyMedia/Type.php | 81 ++++++++++++++++--- .../FieldType/KeyMedia/Value.php | 2 +- .../Controller/DefaultControllerTest.php | 17 ---- 5 files changed, 84 insertions(+), 48 deletions(-) delete mode 100755 src/KTQ/Bundle/KeyMediaBundle/Controller/DefaultController.php delete mode 100755 src/KTQ/Bundle/KeyMediaBundle/Tests/Controller/DefaultControllerTest.php diff --git a/src/KTQ/Bundle/KeyMediaBundle/Controller/DefaultController.php b/src/KTQ/Bundle/KeyMediaBundle/Controller/DefaultController.php deleted file mode 100755 index c0fa470..0000000 --- a/src/KTQ/Bundle/KeyMediaBundle/Controller/DefaultController.php +++ /dev/null @@ -1,10 +0,0 @@ -dataText = $fieldValue->data; - $value->sortKeyString = $fieldValue->sortKey; + $value->dataText = $value->data; + $value->sortKeyString = $value->sortKey; } /** * Converts data from $value to $fieldValue * - * @param \eZ\Publish\Core\Persistence\Legacy\Content\StorageFieldValue $value - * @param \eZ\Publish\SPI\Persistence\Content\FieldValue $fieldValue + * @param StorageFieldValue $value + * @param FieldValue $fieldValue */ public function toFieldValue(StorageFieldValue $value, FieldValue $fieldValue) { @@ -50,8 +50,8 @@ public function toFieldValue(StorageFieldValue $value, FieldValue $fieldValue) /** * Converts field definition data in $fieldDef into $storageFieldDef * - * @param \eZ\Publish\SPI\Persistence\Content\Type\FieldDefinition $fieldDef - * @param \eZ\Publish\Core\Persistence\Legacy\Content\StorageFieldDefinition $storageDef + * @param FieldDefinition $fieldDef + * @param StorageFieldDefinition $storageDef */ public function toStorageFieldDefinition(FieldDefinition $fieldDef, StorageFieldDefinition $storageDef) { @@ -61,8 +61,8 @@ public function toStorageFieldDefinition(FieldDefinition $fieldDef, StorageField /** * Converts field definition data in $storageDef into $fieldDef * - * @param \eZ\Publish\Core\Persistence\Legacy\Content\StorageFieldDefinition $storageDef - * @param \eZ\Publish\SPI\Persistence\Content\Type\FieldDefinition $fieldDef + * @param StorageFieldDefinition $storageDef + * @param FieldDefinition $fieldDef */ public function toFieldDefinition(StorageFieldDefinition $storageDef, FieldDefinition $fieldDef) { diff --git a/src/KTQ/Bundle/KeyMediaBundle/FieldType/KeyMedia/Type.php b/src/KTQ/Bundle/KeyMediaBundle/FieldType/KeyMedia/Type.php index e99916b..aa0b3cf 100755 --- a/src/KTQ/Bundle/KeyMediaBundle/FieldType/KeyMedia/Type.php +++ b/src/KTQ/Bundle/KeyMediaBundle/FieldType/KeyMedia/Type.php @@ -12,6 +12,8 @@ namespace KTQ\Bundle\KeyMediaBundle\FieldType\KeyMedia; use eZ\Publish\Core\FieldType\FieldType; +use eZ\Publish\Core\FieldType\Value as CoreValue; +use eZ\Publish\SPI\FieldType\Value as SpiValue; use eZ\Publish\SPI\Persistence\Content\FieldValue; use eZ\Publish\Core\Base\Exceptions\InvalidArgumentType; @@ -44,7 +46,7 @@ public function getFieldTypeIdentifier() * * @return mixed */ - public function getName($value) + public function getName(SpiValue $value) { if ($value === null) { return ''; @@ -57,11 +59,11 @@ public function getName($value) * Returns the fallback default value of field type when no such default * value is provided in the field definition in content types. * - * @return KTQ\Bundle\KeyMediaBundle\FieldType\KeyMedia\Value + * @return Value */ public function getEmptyValue() { - return new Value; + return new Value(); } /** @@ -69,7 +71,8 @@ public function getEmptyValue() * * @param mixed $inputValue * - * @return KTQ\Bundle\KeyMediaBundle\FieldType\KeyMedia\Value The potentially converted and structurally plausible value. + * @throws InvalidArgumentType + * @return Value The potentially converted and structurally plausible value. */ protected function internalAcceptValue($inputValue) { @@ -100,9 +103,11 @@ protected function internalAcceptValue($inputValue) * * @todo Sort seems to not be supported by this FieldType, is this handled correctly? * + * @param CoreValue $value + * * @return array */ - protected function getSortInfo($value) + protected function getSortInfo(CoreValue $value) { return false; } @@ -112,7 +117,7 @@ protected function getSortInfo($value) * * @param mixed $hash * - * @return KTQ\Bundle\KeyMediaBundle\FieldType\KeyMedia\Value $value + * @return Value $value */ public function fromHash($hash) { @@ -128,11 +133,11 @@ public function fromHash($hash) /** * Converts a Value to a hash * - * @param KTQ\Bundle\KeyMediaBundle\FieldType\KeyMedia\Value $value + * @param SpiValue $value * * @return mixed */ - public function toHash($value) + public function toHash(SpiValue $value) { if ($this->isEmptyValue($value)) return null; @@ -162,7 +167,7 @@ public function toHash($value) * * @return \eZ\Publish\SPI\Persistence\Content\FieldValue the value processed by the storage engine */ - public function toPersistenceValue($value) + public function toPersistenceValue(SpiValue $value) { if ($value === null) { return new FieldValue( @@ -204,4 +209,62 @@ public function fromPersistenceValue(FieldValue $fieldValue) ); return $v; } + + /** + * Inspects given $inputValue and potentially converts it into a dedicated value object. + * + * If given $inputValue could not be converted or is already an instance of dedicate value object, + * the method should simply return it. + * + * This is an operation method for {@see acceptValue()}. + * + * Example implementation: + * + * protected function createValueFromInput( $inputValue ) + * { + * if ( is_array( $inputValue ) ) + * { + * $inputValue = \eZ\Publish\Core\FieldType\CookieJar\Value( $inputValue ); + * } + * + * return $inputValue; + * } + * + * + * @param mixed $inputValue + * + * @return mixed The potentially converted input value. + */ + protected function createValueFromInput($inputValue) + { + return $inputValue; + } + + /** + * Throws an exception if value structure is not of expected format. + * + * Note that this does not include validation after the rules + * from validators, but only plausibility checks for the general data + * format. + * + * This is an operation method for {@see acceptValue()}. + * + * Example implementation: + * + * protected function checkValueStructure( Value $value ) + * { + * if ( !is_array( $value->cookies ) ) + * { + * throw new InvalidArgumentException( "An array of assorted cookies was expected." ); + * } + * } + * + * + * @throws \eZ\Publish\API\Repository\Exceptions\InvalidArgumentException If the value does not match the expected structure. + * + * @param \eZ\Publish\Core\FieldType\Value $value + * + * @return void + */ + protected function checkValueStructure(CoreValue $value) {} } diff --git a/src/KTQ/Bundle/KeyMediaBundle/FieldType/KeyMedia/Value.php b/src/KTQ/Bundle/KeyMediaBundle/FieldType/KeyMedia/Value.php index 8d90aba..77c1944 100755 --- a/src/KTQ/Bundle/KeyMediaBundle/FieldType/KeyMedia/Value.php +++ b/src/KTQ/Bundle/KeyMediaBundle/FieldType/KeyMedia/Value.php @@ -39,4 +39,4 @@ public function __toString() { return json_encode($this); } -} +} \ No newline at end of file diff --git a/src/KTQ/Bundle/KeyMediaBundle/Tests/Controller/DefaultControllerTest.php b/src/KTQ/Bundle/KeyMediaBundle/Tests/Controller/DefaultControllerTest.php deleted file mode 100755 index 04638e9..0000000 --- a/src/KTQ/Bundle/KeyMediaBundle/Tests/Controller/DefaultControllerTest.php +++ /dev/null @@ -1,17 +0,0 @@ -request('GET', '/hello/Fabien'); - - $this->assertTrue($crawler->filter('html:contains("Hello Fabien")')->count() > 0); - } -} From 00dc34614729ce5dbc9e0f5007132bfb23bec52f Mon Sep 17 00:00:00 2001 From: whitefire Date: Fri, 28 Mar 2014 10:41:31 +0100 Subject: [PATCH 2/9] Rename to keymedia-ezpublish-bundle --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 5f2efa4..dba74d4 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,5 @@ { - "name": "keyteqlabs/keymediabundle", + "name": "keyteqlabs/keymedia-ezpublish-bundle", "autoload" : { "psr-0":{ "KTQ": "src/" From 39f7bc5ec5e359cfa713d8c5957db9ea370997a4 Mon Sep 17 00:00:00 2001 From: Henning Kvinnesland Date: Thu, 3 Apr 2014 14:32:06 +0200 Subject: [PATCH 3/9] Added port of legacy keymedia-operator. --- .../Resources/config/services.yml | 6 ++ .../KeyMediaBundle/Twig/KeymediaExtension.php | 67 +++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 src/KTQ/Bundle/KeyMediaBundle/Twig/KeymediaExtension.php diff --git a/src/KTQ/Bundle/KeyMediaBundle/Resources/config/services.yml b/src/KTQ/Bundle/KeyMediaBundle/Resources/config/services.yml index b70801a..8f56da0 100755 --- a/src/KTQ/Bundle/KeyMediaBundle/Resources/config/services.yml +++ b/src/KTQ/Bundle/KeyMediaBundle/Resources/config/services.yml @@ -13,3 +13,9 @@ services: class: %ezpublish.fieldType.keymedia.converter.class% tags: - {name: ezpublish.storageEngine.legacy.converter, alias: keymedia, lazy: true, callback: '::create'} + + keymedia.twig_extension: + class: KTQ\Bundle\KeyMediaBundle\Twig\KeymediaExtension + arguments: [@ezpublish_legacy.kernel] + tags: + - { name: twig.extension } \ No newline at end of file diff --git a/src/KTQ/Bundle/KeyMediaBundle/Twig/KeymediaExtension.php b/src/KTQ/Bundle/KeyMediaBundle/Twig/KeymediaExtension.php new file mode 100644 index 0000000..7764bff --- /dev/null +++ b/src/KTQ/Bundle/KeyMediaBundle/Twig/KeymediaExtension.php @@ -0,0 +1,67 @@ + + * @since 03.04.14 + */ + +namespace KTQ\Bundle\KeyMediaBundle\Twig; + +use eZ\Publish\Core\MVC\Legacy\Kernel; +use eZ\Publish\Core\Repository\Values\Content\Content; + +class KeymediaExtension extends \Twig_Extension +{ + /** @var Kernel|\Closure */ + protected $legacyKernel; + + public function __construct(\Closure $kernelClosure) + { + $this->legacyKernel = $kernelClosure; + } + + /** + * Returns the name of the extension. + * + * @return string The extension name + */ + public function getName() + { + return 'KeyteqLabs:KeyMedia'; + } + + public function getFunctions() + { + return array(new \Twig_SimpleFunction('keymedia', array($this, 'keyMedia'))); + } + + public function keyMedia(Content $content, $identifier, $parameters = array()) + { + // Lazy-loading prevents "InactiveScopeException". It also increases performance. + if ($this->legacyKernel instanceof \Closure) { + /** @noinspection PhpUndefinedMethodInspection */ + $this->legacyKernel = $this->legacyKernel->__invoke(); + } + + $objectId = $content->id; + return $this->legacyKernel->runCallback(function() use($objectId, $identifier, $parameters) + { + $object = \eZContentObject::fetch($objectId); + $attributes = $object->dataMap(); + + if (!isset($attributes[$identifier])) { + throw new \Exception('Field with identifier: '. $identifier .' does not exist.'); + } + + $parameters['attribute'] = $attributes[$identifier]; + $parameters += array('quality' => false); + $result = null; + + $operator = new \TemplateKeymediaOperator(); + $operator->modify('', 'keymedia', null, null, null, $result, $parameters, null); + + return $result; + }); + } +} \ No newline at end of file From 92c0bbebe8d5dde107c1c5fa88219dd544ddee80 Mon Sep 17 00:00:00 2001 From: Henning Kvinnesland Date: Mon, 5 May 2014 13:24:56 +0200 Subject: [PATCH 4/9] Fixed issue with non-translatable attributes. --- .../Resources/config/services.yml | 2 +- .../KeyMediaBundle/Twig/KeymediaExtension.php | 25 ++++++++++++------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/KTQ/Bundle/KeyMediaBundle/Resources/config/services.yml b/src/KTQ/Bundle/KeyMediaBundle/Resources/config/services.yml index 8f56da0..f2eb816 100755 --- a/src/KTQ/Bundle/KeyMediaBundle/Resources/config/services.yml +++ b/src/KTQ/Bundle/KeyMediaBundle/Resources/config/services.yml @@ -16,6 +16,6 @@ services: keymedia.twig_extension: class: KTQ\Bundle\KeyMediaBundle\Twig\KeymediaExtension - arguments: [@ezpublish_legacy.kernel] + arguments: [@ezpublish_legacy.kernel, @ezpublish.translation_helper] tags: - { name: twig.extension } \ No newline at end of file diff --git a/src/KTQ/Bundle/KeyMediaBundle/Twig/KeymediaExtension.php b/src/KTQ/Bundle/KeyMediaBundle/Twig/KeymediaExtension.php index 7764bff..dc3a992 100644 --- a/src/KTQ/Bundle/KeyMediaBundle/Twig/KeymediaExtension.php +++ b/src/KTQ/Bundle/KeyMediaBundle/Twig/KeymediaExtension.php @@ -8,6 +8,7 @@ namespace KTQ\Bundle\KeyMediaBundle\Twig; +use eZ\Publish\Core\Helper\TranslationHelper; use eZ\Publish\Core\MVC\Legacy\Kernel; use eZ\Publish\Core\Repository\Values\Content\Content; @@ -15,10 +16,13 @@ class KeymediaExtension extends \Twig_Extension { /** @var Kernel|\Closure */ protected $legacyKernel; + /** @var TranslationHelper */ + protected $translationHelper; - public function __construct(\Closure $kernelClosure) + public function __construct(\Closure $kernelClosure, TranslationHelper $translationHelper) { $this->legacyKernel = $kernelClosure; + $this->translationHelper = $translationHelper; } /** @@ -38,23 +42,26 @@ public function getFunctions() public function keyMedia(Content $content, $identifier, $parameters = array()) { + $field = $this->translationHelper->getTranslatedField($content, $identifier); + if (!$field) { + throw new \Exception("Field with identifier: {$identifier} does not exist."); + } + // Lazy-loading prevents "InactiveScopeException". It also increases performance. if ($this->legacyKernel instanceof \Closure) { /** @noinspection PhpUndefinedMethodInspection */ $this->legacyKernel = $this->legacyKernel->__invoke(); } - $objectId = $content->id; - return $this->legacyKernel->runCallback(function() use($objectId, $identifier, $parameters) + $attributeId = $field->id; + $version = $content->versionInfo->versionNo; + return $this->legacyKernel->runCallback(function() use($attributeId, $version, $parameters) { - $object = \eZContentObject::fetch($objectId); - $attributes = $object->dataMap(); - - if (!isset($attributes[$identifier])) { - throw new \Exception('Field with identifier: '. $identifier .' does not exist.'); + if (!$attribute = \eZContentObjectAttribute::fetch($attributeId, $version)) { + throw new \Exception("Field with id: {$attributeId} does not exist for version: {$version}."); } - $parameters['attribute'] = $attributes[$identifier]; + $parameters['attribute'] = $attribute; $parameters += array('quality' => false); $result = null; From 45e5f51a40b2ce93bbd7da1c27e723419524859b Mon Sep 17 00:00:00 2001 From: Raymond Julin Date: Wed, 3 Dec 2014 16:25:58 +0100 Subject: [PATCH 5/9] Support eZXMLText inline images in eZ 5.2+ --- .../Resources/config/overrides.yml | 4 +++ .../KeyMediaBundle/Resources/xsl/keymedia.xsl | 31 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 src/KTQ/Bundle/KeyMediaBundle/Resources/xsl/keymedia.xsl diff --git a/src/KTQ/Bundle/KeyMediaBundle/Resources/config/overrides.yml b/src/KTQ/Bundle/KeyMediaBundle/Resources/config/overrides.yml index 5cf750a..98db9ef 100755 --- a/src/KTQ/Bundle/KeyMediaBundle/Resources/config/overrides.yml +++ b/src/KTQ/Bundle/KeyMediaBundle/Resources/config/overrides.yml @@ -2,3 +2,7 @@ system: %keymedia_active_siteaccess%: field_templates: - { template: "KTQKeyMediaBundle::field.html.twig", priority: 0 } + fieldtypes: + ezxml: + custom_tags: + - { path: %kernel.root_dir%/../vendor/keyteqlabs/keymedia-ezpublish-bundle/src/KTQ/Bundle/KeyMediaBundle/Resources/xsl/keymedia.xsl, priority: 1} diff --git a/src/KTQ/Bundle/KeyMediaBundle/Resources/xsl/keymedia.xsl b/src/KTQ/Bundle/KeyMediaBundle/Resources/xsl/keymedia.xsl new file mode 100644 index 0000000..cb9c6c5 --- /dev/null +++ b/src/KTQ/Bundle/KeyMediaBundle/Resources/xsl/keymedia.xsl @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + From 989b0dabdfeb123fd21c7b43a7408df1b78e344b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rnar=20Helland?= Date: Tue, 9 Dec 2014 10:52:20 +0100 Subject: [PATCH 6/9] Added css-class and alt-text output in editor output --- src/KTQ/Bundle/KeyMediaBundle/Resources/xsl/keymedia.xsl | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/KTQ/Bundle/KeyMediaBundle/Resources/xsl/keymedia.xsl b/src/KTQ/Bundle/KeyMediaBundle/Resources/xsl/keymedia.xsl index cb9c6c5..4505191 100644 --- a/src/KTQ/Bundle/KeyMediaBundle/Resources/xsl/keymedia.xsl +++ b/src/KTQ/Bundle/KeyMediaBundle/Resources/xsl/keymedia.xsl @@ -14,6 +14,12 @@ + + + + + + From d16f0649cf75c0d3f637384edf5f88ca0395f942 Mon Sep 17 00:00:00 2001 From: Henning Kvinnesland Date: Tue, 16 Dec 2014 12:53:33 +0100 Subject: [PATCH 7/9] Fix issue with converter. --- .../Bundle/KeyMediaBundle/FieldType/KeyMedia/Converter.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/KTQ/Bundle/KeyMediaBundle/FieldType/KeyMedia/Converter.php b/src/KTQ/Bundle/KeyMediaBundle/FieldType/KeyMedia/Converter.php index 24fd250..f74d5d8 100755 --- a/src/KTQ/Bundle/KeyMediaBundle/FieldType/KeyMedia/Converter.php +++ b/src/KTQ/Bundle/KeyMediaBundle/FieldType/KeyMedia/Converter.php @@ -31,8 +31,8 @@ static public function create() */ public function toStorageValue(FieldValue $value, StorageFieldValue $storageFieldValue) { - $value->dataText = $value->data; - $value->sortKeyString = $value->sortKey; + $storageFieldValue->dataText = $value->data; + $storageFieldValue->sortKeyString = $value->sortKey; } /** From 853bab3434dd7cd838e6003385d98027262cbbdb Mon Sep 17 00:00:00 2001 From: Henning Kvinnesland Date: Tue, 20 Jan 2015 10:57:14 +0100 Subject: [PATCH 8/9] Better handling of empty values. --- src/KTQ/Bundle/KeyMediaBundle/FieldType/KeyMedia/Type.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/KTQ/Bundle/KeyMediaBundle/FieldType/KeyMedia/Type.php b/src/KTQ/Bundle/KeyMediaBundle/FieldType/KeyMedia/Type.php index aa0b3cf..87ed4f0 100755 --- a/src/KTQ/Bundle/KeyMediaBundle/FieldType/KeyMedia/Type.php +++ b/src/KTQ/Bundle/KeyMediaBundle/FieldType/KeyMedia/Type.php @@ -181,9 +181,7 @@ public function toPersistenceValue(SpiValue $value) return new FieldValue( array( - 'data' => array( - 'value' => $value->value - ), + 'data' => (string)$value, 'externalData' => null, 'sortKey' => $this->getSortInfo($value) ) From 25b372336d645fb69e5179d01500891fc3f01fc7 Mon Sep 17 00:00:00 2001 From: Henning Kvinnesland Date: Tue, 3 Feb 2015 10:45:54 +0100 Subject: [PATCH 9/9] Better handling of empty images. --- src/KTQ/Bundle/KeyMediaBundle/Twig/KeymediaExtension.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/KTQ/Bundle/KeyMediaBundle/Twig/KeymediaExtension.php b/src/KTQ/Bundle/KeyMediaBundle/Twig/KeymediaExtension.php index dc3a992..4f48ce0 100644 --- a/src/KTQ/Bundle/KeyMediaBundle/Twig/KeymediaExtension.php +++ b/src/KTQ/Bundle/KeyMediaBundle/Twig/KeymediaExtension.php @@ -68,7 +68,8 @@ public function keyMedia(Content $content, $identifier, $parameters = array()) $operator = new \TemplateKeymediaOperator(); $operator->modify('', 'keymedia', null, null, null, $result, $parameters, null); - return $result; + // Return "valid" invalid url to prevent warnings and extra server-requests. + return $result ?: array('url' => '//:0'); }); } } \ No newline at end of file