diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..0e36ec8
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+/vendor
+/composer.lock
+/.idea
diff --git a/composer.json b/composer.json
index 6dfa380..05cce74 100644
--- a/composer.json
+++ b/composer.json
@@ -7,7 +7,7 @@
"almaviacx"
],
"homepage": "https://github.com/Novactive/AlmaviaCXCalameoBundle",
- "type": "ezplatform-bundle",
+ "type": "ibexa-bundle",
"authors": [
{
"name": "AlmaviaCX",
@@ -19,15 +19,13 @@
"MIT"
],
"require": {
- "php": "^7.2",
+ "ext-pdo": "*",
+ "php": "^7.4 || ^8.0",
"ext-json": "*",
- "doctrine/cache": "^1.10",
- "ezsystems/ezpublish-kernel": "^7.5",
- "ezsystems/repository-forms": "^2.5",
- "guzzlehttp/guzzle": "^6.0",
- "jms/serializer": "^1.0",
- "jms/serializer-bundle": "^2.0",
- "symfony/symfony": "^3.4"
+ "ibexa/core": "^4.2",
+ "jms/serializer": "^3.5",
+ "jms/serializer-bundle": "^3.5",
+ "symfony/var-exporter": "^6.0"
},
"autoload": {
"psr-4": {
@@ -46,6 +44,9 @@
"phpunit/phpunit": "^9.5"
},
"config": {
- "sort-packages": true
+ "sort-packages": true,
+ "allow-plugins": {
+ "php-http/discovery": true
+ }
}
}
diff --git a/src/bundles/APIBundle/Resources/config/services.yml b/src/bundles/APIBundle/Resources/config/services.yml
index e0a1eba..18bd789 100644
--- a/src/bundles/APIBundle/Resources/config/services.yml
+++ b/src/bundles/APIBundle/Resources/config/services.yml
@@ -15,6 +15,7 @@ services:
public: false
AlmaviaCX\Calameo\API\HttpClient:
+ lazy: true
arguments:
$APIKey: "%almaviacx.calameo.api.key%"
$APISecret: "%almaviacx.calameo.api.secret%"
@@ -22,7 +23,7 @@ services:
AlmaviaCX\Calameo\API\Serializer:
arguments:
- $baseSerializer: "@jms_serializer"
+ $baseSerializer: '@JMS\Serializer\SerializerInterface'
AlmaviaCX\Calameo\API\Gateway\:
resource: "../../../../lib/API/Gateway/*"
@@ -32,3 +33,5 @@ services:
AlmaviaCX\Calameo\API\Service\:
resource: "../../../../lib/API/Service/*"
+
+ AlmaviaCX\Calameo\Exception\ExceptionThrower:
diff --git a/src/bundles/EzBundle/DependencyInjection/EzCalameoExtension.php b/src/bundles/EzBundle/DependencyInjection/EzCalameoExtension.php
index 7b54025..827f1a8 100644
--- a/src/bundles/EzBundle/DependencyInjection/EzCalameoExtension.php
+++ b/src/bundles/EzBundle/DependencyInjection/EzCalameoExtension.php
@@ -35,12 +35,12 @@ public function load(array $configs, ContainerBuilder $container): void
/**
* Allow an extension to prepend the extension configurations.
*
- * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
+ * @param ContainerBuilder $container
*/
public function prepend(ContainerBuilder $container)
{
$configs = [
- 'field_templates.yml' => 'ezpublish',
+ 'field_templates.yml' => 'ibexa',
'twig.yml' => 'twig',
];
diff --git a/src/bundles/EzBundle/Resources/config/field_templates.yml b/src/bundles/EzBundle/Resources/config/field_templates.yml
index fb7b361..fd19000 100644
--- a/src/bundles/EzBundle/Resources/config/field_templates.yml
+++ b/src/bundles/EzBundle/Resources/config/field_templates.yml
@@ -1,4 +1,4 @@
system:
default:
field_templates:
- - { template: '@ezdesign/field/calameo_publication_field.html.twig', priority: 10 }
+ - { template: '@ibexadesign/field/calameo_publication_field.html.twig', priority: 10 }
diff --git a/src/bundles/EzBundle/Resources/config/fieldtypes.yml b/src/bundles/EzBundle/Resources/config/fieldtypes.yml
index e847c8b..b094c64 100644
--- a/src/bundles/EzBundle/Resources/config/fieldtypes.yml
+++ b/src/bundles/EzBundle/Resources/config/fieldtypes.yml
@@ -14,17 +14,20 @@ services:
AlmaviaCX\Calameo\Ez\FieldType\CalameoPublication\Type:
tags:
- { name: ezpublish.fieldType, alias: calameo_publication }
- - { name: ezpublish.fieldType.nameable, alias: calameo_publication }
+ - { name: ibexa.field_type, alias: calameo_publication }
AlmaviaCX\Calameo\Ez\FieldType\CalameoPublication\LegacyConverter:
tags:
- { name: ezpublish.storageEngine.legacy.converter, alias: calameo_publication }
+ - { name: ibexa.field_type.storage.legacy.converter, alias: calameo_publication }
AlmaviaCX\Calameo\Ez\FieldType\CalameoPublication\FieldStorage:
tags:
- { name: ezpublish.fieldType.externalStorageHandler, alias: calameo_publication }
+ - { name: ibexa.field_type.storage.external.handler, alias: calameo_publication }
almaviacx.calameo.fieldtype.indexable.calameo_publication:
- class: "%ezpublish.fieldType.indexable.unindexed.class%"
+ class: Ibexa\Core\FieldType\Unindexed
tags:
- { name: ezpublish.fieldType.indexable, alias: calameo_publication }
+ - { name: ibexa.field_type.indexable, alias: calameo_publication }
diff --git a/src/bundles/EzBundle/Resources/config/services.yml b/src/bundles/EzBundle/Resources/config/services.yml
index b568d8d..e4bf7c6 100644
--- a/src/bundles/EzBundle/Resources/config/services.yml
+++ b/src/bundles/EzBundle/Resources/config/services.yml
@@ -15,18 +15,19 @@ services:
tags:
- { name: ez.fieldFormMapper.definition, fieldType: calameo_publication }
- { name: ez.fieldFormMapper.value, fieldType: calameo_publication }
+ - { name: ibexa.admin_ui.field_type.form.mapper.definition, fieldType: calameo_publication }
+ - { name: ibexa.admin_ui.field_type.form.mapper.value, fieldType: calameo_publication }
AlmaviaCX\Calameo\Ez\Form\Type\FieldType\CalameoPublicationFieldType:
AlmaviaCX\Calameo\Ez\FieldType\CalameoPublication\Gateway\DoctrineStorage:
+ AlmaviaCX\Calameo\API\HttpClientFactory: ~
+
almaviacx.calameo.httpclient.siteaccessaware:
lazy: true
class: AlmaviaCX\Calameo\API\HttpClient
decorates: AlmaviaCX\Calameo\API\HttpClient
- arguments:
- $APIKey: "$calameo.api.key;almaviacx$"
- $APISecret: "$calameo.api.secret;almaviacx$"
- $config: "$calameo.config;almaviacx$"
+ factory: ['@AlmaviaCX\Calameo\API\HttpClientFactory', 'create']
AlmaviaCX\Calameo\Ez\Twig\CalameoTwigExtension:
diff --git a/src/bundles/EzBundle/Resources/config/twig.yml b/src/bundles/EzBundle/Resources/config/twig.yml
index 0ad5134..908ebd4 100644
--- a/src/bundles/EzBundle/Resources/config/twig.yml
+++ b/src/bundles/EzBundle/Resources/config/twig.yml
@@ -1,2 +1,2 @@
form_themes:
- - '@ezdesign/fieldtypes/edit/calameo_publication.html.twig'
+ - '@ibexadesign/fieldtypes/edit/calameo_publication.html.twig'
diff --git a/src/bundles/EzBundle/Resources/public/js/scripts/fieldType/calameo_publication.js b/src/bundles/EzBundle/Resources/public/js/scripts/fieldType/calameo_publication.js
index 38513f9..f99a288 100644
--- a/src/bundles/EzBundle/Resources/public/js/scripts/fieldType/calameo_publication.js
+++ b/src/bundles/EzBundle/Resources/public/js/scripts/fieldType/calameo_publication.js
@@ -1,6 +1,6 @@
(function (global) {
- const SELECTOR_FIELD = '.ez-field-edit--calameo_publication';
- const SELECTOR_LABEL_WRAPPER = '.ez-field-edit__label-wrapper';
+ const SELECTOR_FIELD = '.ibexa-field-edit--calameo_publication';
+ const SELECTOR_LABEL_WRAPPER = '.ibexa-field-edit__label-wrapper';
class CalameoPublicationPreviewField extends global.eZ.BasePreviewField {
/**
@@ -9,14 +9,14 @@
* @param {Event} event
*/
loadDroppedFilePreview(event) {
- const preview = this.fieldContainer.querySelector('.ez-field-edit__preview');
- const nameContainer = preview.querySelector('.ez-field-edit-preview__file-name');
+ const preview = this.fieldContainer.querySelector('.ibexa-field-edit__preview');
+ const nameContainer = preview.querySelector('.ibexa-field-edit-preview__file-name');
const files = [].slice.call(event.target.files);
nameContainer.innerHTML = files[0].name;
nameContainer.title = files[0].name;
- preview.querySelector('.ez-field-edit-preview__action--preview').href = URL.createObjectURL(files[0]);
+ preview.querySelector('.ibexa-field-edit-preview__action--preview').href = URL.createObjectURL(files[0]);
}
}
diff --git a/src/bundles/EzBundle/Resources/public/scss/fieldType/edit/calameo_publication.scss b/src/bundles/EzBundle/Resources/public/scss/fieldType/edit/calameo_publication.scss
index eca4962..59f1f92 100644
--- a/src/bundles/EzBundle/Resources/public/scss/fieldType/edit/calameo_publication.scss
+++ b/src/bundles/EzBundle/Resources/public/scss/fieldType/edit/calameo_publication.scss
@@ -1,34 +1,73 @@
-.ez-field-edit--calameo_publication {
- &.ez-field-edit--with-preview {
- .ez-field-edit-preview {
- width: 500px;
- height: 80px;
- line-height: 80px;
+$ibexa-color-danger: #db0032;
+$ibexa-color-danger-100: #fbe5ea;
- &__visual {
- display: flex;
- }
+$base-font-size: 16px;
+
+@function div($number1, $number2) {
+ @return $number1 / $number2;
+}
+
+@function calculateRem($size) {
+ $remSize: div($size, $base-font-size);
+
+ @return $remSize + 0rem; // + 0rem converts value to proper `rem`
+}
+
+
+@mixin area-invalid {
+ color: $ibexa-color-danger;
+ border-color: $ibexa-color-danger;
+ background-color: $ibexa-color-danger-100;
+
+ .ibexa-btn {
+ background-color: $ibexa-color-danger-100;
+ }
+}
- &__actions {
- flex: 0 0 100px;
+.ibexa-field-edit--calameo_publication {
+ &.is-invalid {
+ .ibexa-data-source {
+ @include area-invalid();
+ }
+ }
+
+ &.ibexa-field-edit--with-preview {
+ .ibexa-field-edit-preview {
+ &__file-icon {
+ flex: 0 0 calculateRem(32px);
display: flex;
align-items: center;
- flex-direction: row;
- justify-content: space-between;
+ justify-content: center;
}
- &__action--preview {
- margin-top: 0;
+ &__visual {
+ grid-template-rows: auto;
}
- &__file-name {
- flex: 1 1 auto;
- font-size: .75rem;
- text-overflow: ellipsis;
- white-space: nowrap;
- overflow: hidden;
- display: flex;
- align-items: center;
+ &__media-wrapper {
+ justify-content: start;
+ flex-direction: column;
+ align-items: flex-start;
+ padding: calculateRem(24px);
+ }
+
+ &__file-name-wrapper,
+ &__file-size-wrapper {
+ display: inline-block;
+ font-size: calculateRem(16px);
+ margin-right: calculateRem(40px);
+
+ .ibexa-label {
+ margin-bottom: 0;
+ }
+ }
+
+ &__file-name-wrapper {
+ max-width: calculateRem(500px);
+ }
+
+ &__file-size-wrapper {
+ max-width: calculateRem(150px);
}
}
}
diff --git a/src/bundles/EzBundle/Resources/views/themes/admin/field/calameo_publication_field.html.twig b/src/bundles/EzBundle/Resources/views/themes/admin/field/calameo_publication_field.html.twig
index 9a34abf..d54d89c 100644
--- a/src/bundles/EzBundle/Resources/views/themes/admin/field/calameo_publication_field.html.twig
+++ b/src/bundles/EzBundle/Resources/views/themes/admin/field/calameo_publication_field.html.twig
@@ -1,5 +1,5 @@
{# @var publication \AlmaviaCX\Calameo\API\Value\Publication #}
-{% extends '@EzPublishCore/content_fields.html.twig' %}
+{% extends '@IbexaCore/content_fields.html.twig' %}
{% block calameo_publication_field %}
{% set publication = loadCalameoPublication(field.value) %}
@@ -9,5 +9,11 @@
{% else %}
{{ publication.name }} ({{ publication.id }})
{% endif %}
+ {% else %}
+
ERREUR CALAMEO
+
+ publicationId : {{ field.value.publicationId|default }}
+ folderId : {{ field.value.folderId|default }}
+
{% endif %}
{% endblock %}
diff --git a/src/bundles/EzBundle/Resources/views/themes/admin/fieldtypes/edit/calameo_publication.html.twig b/src/bundles/EzBundle/Resources/views/themes/admin/fieldtypes/edit/calameo_publication.html.twig
index 6e5c538..306073a 100644
--- a/src/bundles/EzBundle/Resources/views/themes/admin/fieldtypes/edit/calameo_publication.html.twig
+++ b/src/bundles/EzBundle/Resources/views/themes/admin/fieldtypes/edit/calameo_publication.html.twig
@@ -1,7 +1,7 @@
{# @var publication \AlmaviaCX\Calameo\API\Value\Publication #}
{% trans_default_domain 'ezrepoforms_content' %}
-{% use '@ezdesign/fieldtypes/edit/binary_base.html.twig' %}
+{% use '@ibexadesign/ui/field_type/edit/binary_base.html.twig' %}
{%- block ezplatform_fieldtype_calameo_publication_row -%}
{% set widget_container_block_name = 'calameo_publication_widget_container' %}
@@ -12,23 +12,38 @@
{%- endblock -%}
{% block calameo_publication_preview %}
+ {% set readonly = attr.readonly|default(false) %}
{% set publication = loadCalameoPublication(form.parent.vars.value.value) %}
-
-
-
{{ publication ? publication.name }}
-
-
-
-
-
-
+
{% endblock %}
@@ -36,12 +51,18 @@
{% block calameo_publication_widget_container %}
{{- form_widget(form.publicationId) -}}
{{- form_widget(form.folderId) -}}
+
+
+ {% set fieldtype = form.parent %}
+ {% set field_type_descriptions = fieldtype.vars.value.fieldDefinition.descriptions %}
+
{{ block(preview_block_name) }}
-
+
{{ block('binary_base_widget') }}
-{% endblock %}
+
+{% endblock %}
\ No newline at end of file
diff --git a/src/bundles/EzBundle/Resources/views/themes/standard/field/calameo_publication_field.html.twig b/src/bundles/EzBundle/Resources/views/themes/standard/field/calameo_publication_field.html.twig
index 7e1d9ed..b809cef 100644
--- a/src/bundles/EzBundle/Resources/views/themes/standard/field/calameo_publication_field.html.twig
+++ b/src/bundles/EzBundle/Resources/views/themes/standard/field/calameo_publication_field.html.twig
@@ -1,5 +1,5 @@
{# @var publication \AlmaviaCX\Calameo\API\Value\Publication #}
-{% extends '@EzPublishCore/content_fields.html.twig' %}
+{% extends '@IbexaCore/content_fields.html.twig' %}
{% block calameo_publication_field %}
{% set publicationId = field.value.publicationId %}
diff --git a/src/lib/API/Gateway/AbstractGateway.php b/src/lib/API/Gateway/AbstractGateway.php
index ae4cf31..ce61b37 100644
--- a/src/lib/API/Gateway/AbstractGateway.php
+++ b/src/lib/API/Gateway/AbstractGateway.php
@@ -21,23 +21,10 @@
abstract class AbstractGateway
{
+ protected HttpClient $client;
+ protected Serializer $serializer;
+ protected ExceptionThrower $exceptionThrower;
- /** @var HttpClient */
- protected $client;
-
- /** @var Serializer */
- protected $serializer;
-
- /** @var ExceptionThrower */
- protected $exceptionThrower;
-
- /**
- * AbstractGateway constructor.
- *
- * @param HttpClient $client
- * @param Serializer $serializer
- * @param ExceptionThrower $exceptionThrower
- */
public function __construct(
HttpClient $client,
Serializer $serializer,
@@ -49,11 +36,11 @@ public function __construct(
}
/**
- * @param string $action
+ * @param string $action
* @param string|null $responseContentType
- * @param array $requestParameters
- * @param string $method
- *
+ * @param array $requestParameters
+ * @param string $method
+ * @param array $options
* @return Response
* @throws ApiResponseErrorException
* @throws GuzzleException
diff --git a/src/lib/API/HttpClient.php b/src/lib/API/HttpClient.php
index 368fbe2..11201e4 100644
--- a/src/lib/API/HttpClient.php
+++ b/src/lib/API/HttpClient.php
@@ -20,24 +20,20 @@ class HttpClient extends Client
{
/**
* Calameo API Key
- *
- * @var string
*/
- protected $APIKey;
+ protected ?string $APIKey;
/**
* CalameoAPI Secret
- *
- * @var string
*/
- protected $APISecret;
+ protected ?string $APISecret;
/**
* HttpClient constructor.
*
- * @param string $APIKey
- * @param string $APISecret
- * @param array $config
+ * @param string|null $APIKey
+ * @param string|null $APISecret
+ * @param array $config
*/
public function __construct(?string $APIKey, ?string $APISecret, array $config = [])
{
diff --git a/src/lib/API/HttpClientFactory.php b/src/lib/API/HttpClientFactory.php
new file mode 100644
index 0000000..5b0d988
--- /dev/null
+++ b/src/lib/API/HttpClientFactory.php
@@ -0,0 +1,26 @@
+configResolver = $configResolver;
+ }
+
+ public function create(): HttpClient
+ {
+ $key = $this->configResolver->getParameter('calameo.api.key', 'almaviacx');
+ $secret = $this->configResolver->getParameter('calameo.api.secret', 'almaviacx');
+ $config = $this->configResolver->getParameter('calameo.config', 'almaviacx');
+
+ return new HttpClient($key, $secret, $config);
+ }
+}
diff --git a/src/lib/API/Repository/AccountRepository.php b/src/lib/API/Repository/AccountRepository.php
index 4f193b2..f6f9c0e 100644
--- a/src/lib/API/Repository/AccountRepository.php
+++ b/src/lib/API/Repository/AccountRepository.php
@@ -21,13 +21,8 @@
class AccountRepository
{
- /** @var AccountGateway */
- protected $gateway;
+ protected AccountGateway $gateway;
- /**
- * AccountRepository constructor.
- * @param AccountGateway $gateway
- */
public function __construct(AccountGateway $gateway)
{
$this->gateway = $gateway;
diff --git a/src/lib/API/Repository/FolderRepository.php b/src/lib/API/Repository/FolderRepository.php
index 6ccd6d7..e31d2de 100644
--- a/src/lib/API/Repository/FolderRepository.php
+++ b/src/lib/API/Repository/FolderRepository.php
@@ -22,13 +22,8 @@
class FolderRepository
{
- /** @var FolderGateway */
- protected $gateway;
+ protected FolderGateway $gateway;
- /**
- * SubscriptionRepository constructor.
- * @param FolderGateway $gateway
- */
public function __construct(FolderGateway $gateway)
{
$this->gateway = $gateway;
diff --git a/src/lib/API/Repository/PublicationRepository.php b/src/lib/API/Repository/PublicationRepository.php
index d06dc09..8377375 100644
--- a/src/lib/API/Repository/PublicationRepository.php
+++ b/src/lib/API/Repository/PublicationRepository.php
@@ -19,14 +19,8 @@
class PublicationRepository
{
+ protected PublicationGateway $gateway;
- /** @var PublicationGateway */
- protected $gateway;
-
- /**
- * PublicationRepository constructor.
- * @param PublicationGateway $gateway
- */
public function __construct(PublicationGateway $gateway)
{
$this->gateway = $gateway;
diff --git a/src/lib/API/Serializer.php b/src/lib/API/Serializer.php
index 8c07694..02e7714 100644
--- a/src/lib/API/Serializer.php
+++ b/src/lib/API/Serializer.php
@@ -17,14 +17,9 @@
class Serializer
{
- /** @var \JMS\Serializer\Serializer */
- protected $baseSerializer;
-
- /**
- * Serializer constructor.
- * @param \JMS\Serializer\Serializer $baseSerializer
- */
- public function __construct(\JMS\Serializer\Serializer $baseSerializer)
+ protected \JMS\Serializer\SerializerInterface $baseSerializer;
+
+ public function __construct(\JMS\Serializer\SerializerInterface $baseSerializer)
{
$this->baseSerializer = $baseSerializer;
}
diff --git a/src/lib/API/Service/PublishingService.php b/src/lib/API/Service/PublishingService.php
index 8f05dc5..bfc6534 100644
--- a/src/lib/API/Service/PublishingService.php
+++ b/src/lib/API/Service/PublishingService.php
@@ -21,13 +21,8 @@
class PublishingService
{
- /** @var UploadGateway */
- protected $gateway;
+ protected UploadGateway $gateway;
- /**
- * PublishingService constructor.
- * @param UploadGateway $gateway
- */
public function __construct(UploadGateway $gateway)
{
$this->gateway = $gateway;
diff --git a/src/lib/API/Value/ContentList.php b/src/lib/API/Value/ContentList.php
index 2d91ea4..d493e1d 100644
--- a/src/lib/API/Value/ContentList.php
+++ b/src/lib/API/Value/ContentList.php
@@ -22,17 +22,17 @@ abstract class ContentList extends ResponseContent
* @var int
* @Serializer\Type("int")
*/
- public $total;
+ public int $total;
/**
* @var int
* @Serializer\Type("int")
*/
- public $start;
+ public int $start;
/**
* @var int
* @Serializer\Type("int")
*/
- public $step;
+ public int $step;
}
diff --git a/src/lib/API/Value/Folder.php b/src/lib/API/Value/Folder.php
index 2cab44d..6c5d7cf 100644
--- a/src/lib/API/Value/Folder.php
+++ b/src/lib/API/Value/Folder.php
@@ -33,7 +33,7 @@ class Folder extends ResponseContent
* @Serializer\Type("int")
* @Serializer\SerializedName("ID")
*/
- public $id;
+ public int $id;
/**
* Unique identifying key for the account of the folder
@@ -41,7 +41,7 @@ class Folder extends ResponseContent
* @Serializer\Type("int")
* @Serializer\SerializedName("AccountID")
*/
- public $accountId;
+ public int $accountId;
/**
* Title of the folder
@@ -49,7 +49,7 @@ class Folder extends ResponseContent
* @Serializer\Type("string")
* @Serializer\SerializedName("Name")
*/
- public $name;
+ public string $name;
/**
* Description of the folder
@@ -57,7 +57,7 @@ class Folder extends ResponseContent
* @Serializer\Type("string")
* @Serializer\SerializedName("Description")
*/
- public $description;
+ public string $description;
/**
* Available publications inside the folder
@@ -65,7 +65,7 @@ class Folder extends ResponseContent
* @Serializer\Type("int")
* @Serializer\SerializedName("Books")
*/
- public $books;
+ public int $books;
/**
* Available subscribers inside the folder (only returned for your account's folder)
@@ -73,7 +73,7 @@ class Folder extends ResponseContent
* @Serializer\Type("int")
* @Serializer\SerializedName("Subscribers")
*/
- public $subscribers;
+ public int $subscribers;
/**
* Date of the folder's creation
@@ -81,7 +81,7 @@ class Folder extends ResponseContent
* @Serializer\Type("DateTime<'Y-m-d H:i:s'>")
* @Serializer\SerializedName("Creation")
*/
- public $creation;
+ public DateTime $creation;
/**
* Date of the folder's last modification
@@ -89,7 +89,7 @@ class Folder extends ResponseContent
* @Serializer\Type("DateTime<'Y-m-d H:i:s'>")
* @Serializer\SerializedName("Modification")
*/
- public $modification;
+ public DateTime $modification;
/**
* Absolute URL for the folder's overview
@@ -97,5 +97,5 @@ class Folder extends ResponseContent
* @Serializer\Type("string")
* @Serializer\SerializedName("PublicUrl")
*/
- public $publicUrl;
+ public string $publicUrl;
}
diff --git a/src/lib/API/Value/FolderList.php b/src/lib/API/Value/FolderList.php
index 001442c..ae12909 100644
--- a/src/lib/API/Value/FolderList.php
+++ b/src/lib/API/Value/FolderList.php
@@ -20,5 +20,5 @@ class FolderList extends ContentList
* @var Folder[]
* @Serializer\Type("array
")
*/
- public $items;
+ public array $items;
}
diff --git a/src/lib/API/Value/Publication.php b/src/lib/API/Value/Publication.php
index fcbb876..379bf98 100644
--- a/src/lib/API/Value/Publication.php
+++ b/src/lib/API/Value/Publication.php
@@ -15,11 +15,12 @@
use DateTime;
use JMS\Serializer\Annotation as Serializer;
use AlmaviaCX\Calameo\API\Value\Response\ResponseContent;
-use SplFileInfo;
-use Symfony\Component\HttpFoundation\File\UploadedFile;
+use Symfony\Component\VarExporter\LazyGhostTrait;
class Publication extends ResponseContent
{
+ use LazyGhostTrait;
+
/** @var string Title of the publication */
public const SORT_NAME = "Name";
/** @var string Number of pages of the publication */
@@ -56,7 +57,7 @@ class Publication extends ResponseContent
* @Serializer\Type("string")
* @Serializer\SerializedName("ID")
*/
- public $id;
+ public string $id;
/**
* Publication's owner account ID (should be your account ID)
@@ -65,7 +66,7 @@ class Publication extends ResponseContent
* @Serializer\Type("int")
* @Serializer\SerializedName("AccountID")
*/
- public $accountId;
+ public int $accountId;
/**
* Publication's owner subscription ID
@@ -74,7 +75,7 @@ class Publication extends ResponseContent
* @Serializer\Type("int")
* @Serializer\SerializedName("SubscriptionID")
*/
- public $folderId;
+ public int $folderId;
/**
* Title of the publication
@@ -83,7 +84,7 @@ class Publication extends ResponseContent
* @Serializer\Type("string")
* @Serializer\SerializedName("Name")
*/
- public $name;
+ public string $name;
/**
* Description of the publication
@@ -92,7 +93,7 @@ class Publication extends ResponseContent
* @Serializer\Type("string")
* @Serializer\SerializedName("Description")
*/
- public $description;
+ public string $description;
/**
* Conversion status of the publication.
@@ -106,7 +107,7 @@ class Publication extends ResponseContent
* @Serializer\Type("string")
* @Serializer\SerializedName("Status")
*/
- public $status;
+ public string $status;
/**
* Sends 1 if the publication is private and 0 if not
@@ -115,7 +116,7 @@ class Publication extends ResponseContent
* @Serializer\Type("bool")
* @Serializer\SerializedName("IsPrivate")
*/
- public $isPrivate;
+ public bool $isPrivate;
/**
* Authentication parameter for private URLs (authid)
@@ -124,7 +125,7 @@ class Publication extends ResponseContent
* @Serializer\Type("string")
* @Serializer\SerializedName("AuthID")
*/
- public $authId;
+ public string $authId;
/**
* Sends 1 if the publication allows access to the miniCalaméo and 0 if not
@@ -133,7 +134,7 @@ class Publication extends ResponseContent
* @Serializer\Type("bool")
* @Serializer\SerializedName("AllowMini")
*/
- public $allowMini;
+ public bool $allowMini;
/**
* Number of pages of the publication
@@ -142,7 +143,7 @@ class Publication extends ResponseContent
* @Serializer\Type("int")
* @Serializer\SerializedName("Pages")
*/
- public $pages;
+ public int $pages;
/**
* Width of a page of the publication
@@ -151,7 +152,7 @@ class Publication extends ResponseContent
* @Serializer\Type("int")
* @Serializer\SerializedName("Width")
*/
- public $width;
+ public int $width;
/**
* Height of a page of the publication
@@ -160,7 +161,7 @@ class Publication extends ResponseContent
* @Serializer\Type("int")
* @Serializer\SerializedName("Height")
*/
- public $height;
+ public int $height;
/**
* Number of views of the publication
@@ -169,7 +170,7 @@ class Publication extends ResponseContent
* @Serializer\Type("int")
* @Serializer\SerializedName("Views")
*/
- public $views;
+ public int $views;
/**
* Number of downloads of the publication
@@ -178,7 +179,7 @@ class Publication extends ResponseContent
* @Serializer\Type("int")
* @Serializer\SerializedName("Downloads")
*/
- public $downloads;
+ public int $downloads;
/**
* Number of comments of the publication
@@ -187,7 +188,7 @@ class Publication extends ResponseContent
* @Serializer\Type("int")
* @Serializer\SerializedName("Comments")
*/
- public $comments;
+ public int $comments;
/**
* Number of favorites from the publication
@@ -196,7 +197,7 @@ class Publication extends ResponseContent
* @Serializer\Type("int")
* @Serializer\SerializedName("Favorites")
*/
- public $favorites;
+ public int $favorites;
/**
* Reference date of the publication
@@ -206,7 +207,7 @@ class Publication extends ResponseContent
* @Serializer\SerializedName("Date")
* @Serializer\Accessor(setter="setDate")
*/
- public $date;
+ public DateTime $date;
/**
* Date of creation of the publication
*
@@ -214,7 +215,7 @@ class Publication extends ResponseContent
* @Serializer\Type("DateTime<'Y-m-d H:i:s'>")
* @Serializer\SerializedName("Creation")
*/
- public $creation;
+ public DateTime $creation;
/**
* Scheduled date of the publication (UTC)
*
@@ -222,7 +223,7 @@ class Publication extends ResponseContent
* @Serializer\Type("DateTime<'Y-m-d H:i:s'>")
* @Serializer\SerializedName("Publication")
*/
- public $publication;
+ public DateTime $publication;
/**
* Date of the last modification of the publication
*
@@ -230,7 +231,7 @@ class Publication extends ResponseContent
* @Serializer\Type("DateTime<'Y-m-d H:i:s'>")
* @Serializer\SerializedName("Modification")
*/
- public $modification;
+ public DateTime $modification;
/**
* Absolute URL for the publication's larger cover
*
@@ -238,7 +239,7 @@ class Publication extends ResponseContent
* @Serializer\Type("string")
* @Serializer\SerializedName("PosterUrl")
*/
- public $posterUrl;
+ public string $posterUrl;
/**
* Absolute URL for the publication's cover
*
@@ -246,7 +247,7 @@ class Publication extends ResponseContent
* @Serializer\Type("string")
* @Serializer\SerializedName("PictureUrl")
*/
- public $pictureUrl;
+ public string $pictureUrl;
/**
* Absolute URL for the publication's thumbnail
*
@@ -254,7 +255,7 @@ class Publication extends ResponseContent
* @Serializer\Type("string")
* @Serializer\SerializedName("ThumbUrl")
*/
- public $thumbUrl;
+ public string $thumbUrl;
/**
* Absolute URL for the publication's overview
*
@@ -262,7 +263,7 @@ class Publication extends ResponseContent
* @Serializer\Type("string")
* @Serializer\SerializedName("PublicUrl")
*/
- public $publicUrl;
+ public string $publicUrl;
/**
* Absolute URL for the publication's reading page
*
@@ -270,7 +271,7 @@ class Publication extends ResponseContent
* @Serializer\Type("string")
* @Serializer\SerializedName("ViewUrl")
*/
- public $viewUrl;
+ public string $viewUrl;
/**
* @param DateTime $date
diff --git a/src/lib/API/Value/PublicationList.php b/src/lib/API/Value/PublicationList.php
index e20d6f2..6b5ebcc 100644
--- a/src/lib/API/Value/PublicationList.php
+++ b/src/lib/API/Value/PublicationList.php
@@ -20,5 +20,5 @@ class PublicationList extends ContentList
* @var Publication[]
* @Serializer\Type("array")
*/
- public $items;
+ public array $items;
}
diff --git a/src/lib/API/Value/Response/Error.php b/src/lib/API/Value/Response/Error.php
index 78ae266..b85686d 100644
--- a/src/lib/API/Value/Response/Error.php
+++ b/src/lib/API/Value/Response/Error.php
@@ -20,11 +20,11 @@ class Error
* @var int
* @Serializer\Type("int")
*/
- public $code;
+ public int $code;
/**
* @var string
* @Serializer\Type("string")
*/
- public $message;
+ public string $message;
}
diff --git a/src/lib/API/Value/Response/Response.php b/src/lib/API/Value/Response/Response.php
index dce38b0..f8baa92 100644
--- a/src/lib/API/Value/Response/Response.php
+++ b/src/lib/API/Value/Response/Response.php
@@ -23,35 +23,35 @@ class Response
* @var string
* @Serializer\Type("string")
*/
- public $status;
+ public string $status;
/**
* @var int
* @Serializer\Type("int")
*/
- public $version;
+ public int $version;
/**
* @var string
* @Serializer\Type("string")
*/
- public $requestid;
+ public string $requestid;
/**
* @var int
* @Serializer\Type("int")
*/
- public $requests;
+ public int $requests;
/**
* @var Error|null
* @Serializer\Type("AlmaviaCX\Calameo\API\Value\Response\Error")
*/
- public $error;
+ public ?Error $error;
/**
* @var ResponseContent
* @Serializer\Type("AlmaviaCX\Calameo\API\Value\Response\ResponseContent")
*/
- public $content;
+ public ResponseContent $content;
}
diff --git a/src/lib/Exception/ExceptionThrower.php b/src/lib/Exception/ExceptionThrower.php
index 7f64c61..e68b089 100644
--- a/src/lib/Exception/ExceptionThrower.php
+++ b/src/lib/Exception/ExceptionThrower.php
@@ -13,7 +13,7 @@
class ExceptionThrower
{
- private $exceptionsByCode = [
+ private array $exceptionsByCode = [
99 => Response\TooManyRequestsException::class,
101 => Response\InvalidSignatureException::class,
102 => Response\InvalidEndpointException::class,
diff --git a/src/lib/Ez/FieldType/CalameoPublication/FieldStorage.php b/src/lib/Ez/FieldType/CalameoPublication/FieldStorage.php
index 60ac511..bf92692 100644
--- a/src/lib/Ez/FieldType/CalameoPublication/FieldStorage.php
+++ b/src/lib/Ez/FieldType/CalameoPublication/FieldStorage.php
@@ -16,31 +16,23 @@
use AlmaviaCX\Calameo\API\Service\PublishingService;
use AlmaviaCX\Calameo\API\Value\Publication;
use AlmaviaCX\Calameo\Exception\ApiResponseErrorException;
-use AlmaviaCX\Calameo\Exception\NotImplementedException;
-use AlmaviaCX\Calameo\Exception\Response\ApiResponseException;
+use AlmaviaCX\Calameo\Exception\Response\MissingOrIncorrectParameterException;
use AlmaviaCX\Calameo\Exception\Response\UnknownBookIDException;
use AlmaviaCX\Calameo\Ez\FieldType\CalameoPublication\Gateway\DoctrineStorage;
-use eZ\Publish\SPI\Persistence\Content\Field;
-use eZ\Publish\SPI\Persistence\Content\VersionInfo;
-use eZ\Publish\SPI\FieldType\FieldStorage as FieldStorageInterface;
+use Doctrine\DBAL\Exception;
use GuzzleHttp\Exception\GuzzleException;
+use Ibexa\Contracts\Core\FieldType\FieldStorage as FieldStorageInterface;
+use Ibexa\Contracts\Core\Persistence\Content\Field;
+use Ibexa\Contracts\Core\Persistence\Content\VersionInfo;
use Psr\Log\LoggerInterface;
use SplFileInfo;
-use Symfony\Component\HttpFoundation\File\UploadedFile;
class FieldStorage implements FieldStorageInterface
{
- /** @var PublicationRepository */
- public $publicationRepository;
-
- /** @var PublishingService */
- public $publishingService;
-
- /** @var DoctrineStorage */
- public $gateway;
-
- /** @var LoggerInterface */
- public $logger;
+ public PublicationRepository $publicationRepository;
+ public PublishingService $publishingService;
+ public DoctrineStorage $gateway;
+ public LoggerInterface $logger;
/**
* @param PublicationRepository $publicationRepository
@@ -63,72 +55,80 @@ public function __construct(
/**
* @param VersionInfo $versionInfo
* @param Field $field
- * @param array $context
+ * @param array $context ["identifier" => "LegacyStorage"]
* @return bool
* @throws ApiResponseErrorException
* @throws GuzzleException
+ * @throws Exception
*/
- public function storeFieldData(VersionInfo $versionInfo, Field $field, array $context)
+ public function storeFieldData(VersionInfo $versionInfo, Field $field, array $context): ?bool
{
$inputUri = $field->value->externalData['inputUri'] ?? null;
if ($inputUri) {
$file = new SplFileInfo($inputUri);
- try {
- if ($field->value->externalData['publicationId'] === null) {
- throw new UnknownBookIDException();
+ if ($field->value->externalData['publicationId'] === null) {
+ $folderId = $field->value->externalData['folderId'];
+ if (!$folderId) { // null ou 0
+ // Est-ce possible ?
+ $this->logger->error(sprintf('[Calameo] FolderId is %s',
+ $folderId === null ? 'null' : $folderId
+ ));
}
- $publication = $this->publishingService->revise(
- $field->value->externalData['publicationId'],
- $file
- );
- } catch (UnknownBookIDException $exception) {
+
+ $name = $versionInfo->contentInfo->name;
+ // $name === '' car le contenu n'est pas encore enregistré.
+ // Du coup calaméo va mettre : "Custom Filename"
+ if (!$name) {
+ $name = 'c' . $versionInfo->contentInfo->id; //
+ }
+
+ // Création
$publication = $this->publishingService->publish(
- $field->value->externalData['folderId'],
+ $folderId,
$file,
[
- 'name' => $versionInfo->contentInfo->name,
+ 'name' => $name, // expected to be of type "string"
'is_published' => 1,
'publishing_mode' => Publication::PUBLISHING_MODE_PUBLIC,
]
);
$field->value->externalData['publicationId'] = $publication->id;
+ } else {
+ // Modification
+ $this->publishingService->revise(
+ $field->value->externalData['publicationId'],
+ $file
+ );
}
}
$this->gateway->storePublicationReference($versionInfo, $field);
+ return true;
}
/**
* @param VersionInfo $versionInfo
* @param Field $field
* @param array $context
- * @throws ApiResponseErrorException
- * @throws GuzzleException
+ * @throws Exception
*/
public function getFieldData(VersionInfo $versionInfo, Field $field, array $context): void
{
- $repository = $this->publicationRepository;
-
- $publicationReferenceData = $this->gateway->getPublicationReferenceData($field->id, $versionInfo->versionNo);
- if ($publicationReferenceData === null || !$publicationReferenceData['publicationId']) {
- return;
+ $publicationReferenceData = $this->gateway->getPublicationReferenceData($field->id, $versionInfo->versionNo);
+ if ($publicationReferenceData
+ && !empty($publicationReferenceData['publicationId'])
+ && !empty($publicationReferenceData['folderId'])
+ ) {
+ $field->value->externalData = $publicationReferenceData;
}
-
- $field->value->externalData = $publicationReferenceData;
- $field->value->externalData['publicationLoader'] = static function () use ($repository, $field) {
- try {
- return $repository->getPublicationInfos($field->value->externalData['publicationId']);
- } catch (UnknownBookIDException $exception) {
- return;
- }
- };
}
/**
* @param VersionInfo $versionInfo
* @param array $fieldIds
* @param array $context
- * @return bool|void
+ * @return void
+ * @throws GuzzleException
*/
public function deleteFieldData(VersionInfo $versionInfo, array $fieldIds, array $context): void
{
@@ -136,7 +136,7 @@ public function deleteFieldData(VersionInfo $versionInfo, array $fieldIds, array
return;
}
- $publicationIds = $this->gateway->getReferencedPublications($fieldIds, $versionInfo->versionNo);
+ $publicationIds = $this->gateway->getReferencedPublications($fieldIds);
$versionPublicationId = $publicationIds[$versionInfo->versionNo] ?? null;
$this->gateway->removePublicationReferences($fieldIds, $versionInfo->versionNo);
@@ -165,23 +165,14 @@ public function hasFieldData(): bool
* @param VersionInfo $versionInfo
* @param Field $field
* @param array $context
- * @return \eZ\Publish\SPI\Search\Field[]|void
+ * @return \Ibexa\Contracts\Core\Search\Field[]|void
*/
public function getIndexData(VersionInfo $versionInfo, Field $field, array $context)
{
}
- public function copyLegacyField(VersionInfo $versionInfo, Field $field, Field $originalField, array $context)
+ public function copyLegacyField(VersionInfo $versionInfo, Field $field, Field $originalField, array $context): bool
{
-// if ($field->id !== $originalField->id) {
-// var_dump([
-// $versionInfo,
-// $field,
-// $originalField,
-// $context
-// ]);
-// die;
-// }
if ($originalField->value->externalData === null) {
return false;
}
diff --git a/src/lib/Ez/FieldType/CalameoPublication/FormMapper.php b/src/lib/Ez/FieldType/CalameoPublication/FormMapper.php
index 958284c..8fd6146 100644
--- a/src/lib/Ez/FieldType/CalameoPublication/FormMapper.php
+++ b/src/lib/Ez/FieldType/CalameoPublication/FormMapper.php
@@ -15,30 +15,21 @@
use AlmaviaCX\Calameo\API\Repository\AccountRepository;
use AlmaviaCX\Calameo\Exception\ApiResponseErrorException;
use AlmaviaCX\Calameo\Ez\Form\Type\FieldType\CalameoPublicationFieldType;
-use eZ\Publish\API\Repository\FieldTypeService;
-use eZ\Publish\Core\FieldType\BinaryFile\Value;
-use EzSystems\EzPlatformAdminUi\Notification\NotificationHandlerInterface;
use EzSystems\RepositoryForms\Data\Content\FieldData;
-use EzSystems\RepositoryForms\Data\FieldDefinitionData;
-use EzSystems\RepositoryForms\FieldType\DataTransformer\BinaryFileValueTransformer;
use EzSystems\RepositoryForms\FieldType\FieldDefinitionFormMapperInterface;
use EzSystems\RepositoryForms\FieldType\FieldValueFormMapperInterface;
-use EzSystems\RepositoryForms\Form\Type\FieldType\BinaryFileFieldType;
-use GuzzleHttp\Exception\GuzzleException;
+use Ibexa\AdminUi\Form\Data\FieldDefinitionData;
+use Ibexa\Contracts\AdminUi\Notification\NotificationHandlerInterface;
+use Ibexa\Contracts\Core\Repository\FieldTypeService;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class FormMapper implements FieldValueFormMapperInterface, FieldDefinitionFormMapperInterface
{
- /** @var FieldTypeService */
- protected $fieldTypeService;
-
- /** @var AccountRepository */
- protected $accountRepository;
-
- /** @var NotificationHandlerInterface */
- protected $notificationHandler;
+ protected FieldTypeService $fieldTypeService;
+ protected AccountRepository $accountRepository;
+ protected NotificationHandlerInterface $notificationHandler;
/**
* @param FieldTypeService $fieldTypeService
@@ -55,7 +46,8 @@ public function __construct(
$this->notificationHandler = $notificationHandler;
}
- public function mapFieldDefinitionForm(FormInterface $fieldDefinitionForm, FieldDefinitionData $data)
+ // f
+ public function mapFieldDefinitionForm(FormInterface $fieldDefinitionForm, FieldDefinitionData $data): void
{
$folderChoices = [];
$offset = 0;
diff --git a/src/lib/Ez/FieldType/CalameoPublication/Gateway/DoctrineStorage.php b/src/lib/Ez/FieldType/CalameoPublication/Gateway/DoctrineStorage.php
index a31bfe3..6668902 100644
--- a/src/lib/Ez/FieldType/CalameoPublication/Gateway/DoctrineStorage.php
+++ b/src/lib/Ez/FieldType/CalameoPublication/Gateway/DoctrineStorage.php
@@ -13,17 +13,17 @@
namespace AlmaviaCX\Calameo\Ez\FieldType\CalameoPublication\Gateway;
use Doctrine\DBAL\Connection;
+use Doctrine\DBAL\Exception;
use Doctrine\DBAL\FetchMode;
use Doctrine\DBAL\Query\QueryBuilder;
-use eZ\Publish\SPI\FieldType\StorageGateway;
-use eZ\Publish\SPI\Persistence\Content\Field;
-use eZ\Publish\SPI\Persistence\Content\VersionInfo;
+use Ibexa\Contracts\Core\FieldType\StorageGateway;
+use Ibexa\Contracts\Core\Persistence\Content\Field;
+use Ibexa\Contracts\Core\Persistence\Content\VersionInfo;
use PDO;
class DoctrineStorage extends StorageGateway
{
- /** @var Connection */
- protected $connection;
+ protected Connection $connection;
/**
* DoctrineStorage constructor.
@@ -37,10 +37,11 @@ public function __construct(Connection $connection)
/**
* Store the file reference in $field for $versionNo.
*
- * @param \eZ\Publish\SPI\Persistence\Content\VersionInfo $versionInfo
- * @param \eZ\Publish\SPI\Persistence\Content\Field $field
+ * @param VersionInfo $versionInfo
+ * @param Field $field
*
* @return bool
+ * @throws Exception
*/
public function storePublicationReference(VersionInfo $versionInfo, Field $field)
{
@@ -62,9 +63,9 @@ public function storePublicationReference(VersionInfo $versionInfo, Field $field
* add additional columns to be set in the database. Please do not forget
* to call the parent when overwriting this method.
*
- * @param \Doctrine\DBAL\Query\QueryBuilder $queryBuilder
- * @param \eZ\Publish\SPI\Persistence\Content\VersionInfo $versionInfo
- * @param \eZ\Publish\SPI\Persistence\Content\Field $field
+ * @param QueryBuilder $queryBuilder
+ * @param VersionInfo $versionInfo
+ * @param Field $field
*/
protected function setInsertColumns(QueryBuilder $queryBuilder, VersionInfo $versionInfo, Field $field)
{
@@ -81,9 +82,9 @@ protected function setInsertColumns(QueryBuilder $queryBuilder, VersionInfo $ver
}
/**
- * @param \Doctrine\DBAL\Query\QueryBuilder $queryBuilder
- * @param \eZ\Publish\SPI\Persistence\Content\VersionInfo $versionInfo
- * @param \eZ\Publish\SPI\Persistence\Content\Field $field
+ * @param QueryBuilder $queryBuilder
+ * @param VersionInfo $versionInfo
+ * @param Field $field
*/
protected function setUpdateColumns(QueryBuilder $queryBuilder, VersionInfo $versionInfo, Field $field)
{
@@ -100,8 +101,9 @@ protected function setUpdateColumns(QueryBuilder $queryBuilder, VersionInfo $ver
}
/**
- * @param \eZ\Publish\SPI\Persistence\Content\VersionInfo $versionInfo
- * @param \eZ\Publish\SPI\Persistence\Content\Field $field
+ * @param VersionInfo $versionInfo
+ * @param Field $field
+ * @throws Exception
*/
protected function updateFieldData(VersionInfo $versionInfo, Field $field)
{
@@ -132,8 +134,9 @@ protected function updateFieldData(VersionInfo $versionInfo, Field $field)
}
/**
- * @param \eZ\Publish\SPI\Persistence\Content\VersionInfo $versionInfo
- * @param \eZ\Publish\SPI\Persistence\Content\Field $field
+ * @param VersionInfo $versionInfo
+ * @param Field $field
+ * @throws Exception
*/
protected function storeNewFieldData(VersionInfo $versionInfo, Field $field)
{
@@ -155,7 +158,7 @@ protected function storeNewFieldData(VersionInfo $versionInfo, Field $field)
*
* @return mixed
*/
- protected function castToPropertyValue($value, $columnName)
+ protected function castToPropertyValue($value, string $columnName)
{
$propertyMap = $this->getPropertyMapping();
$castFunction = $propertyMap[$columnName]['cast'];
@@ -170,7 +173,7 @@ protected function castToPropertyValue($value, $columnName)
* add additional columns to be fetched from the database. Please do not
* forget to call the parent when overwriting this method.
*
- * @param \Doctrine\DBAL\Query\QueryBuilder $queryBuilder
+ * @param QueryBuilder $queryBuilder
* @param int $fieldId
* @param int $versionNo
*/
@@ -189,8 +192,9 @@ protected function setFetchColumns(QueryBuilder $queryBuilder, $fieldId, $versio
* @param int $versionNo
*
* @return array|null
+ * @throws Exception
*/
- public function getPublicationReferenceData(int $fieldId, int $versionNo)
+ public function getPublicationReferenceData(int $fieldId, int $versionNo): ?array
{
$selectQuery = $this->connection->createQueryBuilder();
@@ -236,8 +240,9 @@ public function getPublicationReferenceData(int $fieldId, int $versionNo)
* @param array $fieldIds
*
* @return array
+ * @throws Exception
*/
- public function getReferencedPublications(array $fieldIds)
+ public function getReferencedPublications(array $fieldIds): array
{
if (empty($fieldIds)) {
return [];
@@ -274,7 +279,7 @@ public function getReferencedPublications(array $fieldIds)
*
* @return string
*/
- protected function toPropertyName($columnName)
+ protected function toPropertyName(string $columnName): string
{
$propertyMap = $this->getPropertyMapping();
@@ -286,8 +291,9 @@ protected function toPropertyName($columnName)
*
* @param array $fieldIds
* @param int $versionNo
+ * @throws Exception
*/
- public function removePublicationReferences(array $fieldIds, $versionNo)
+ public function removePublicationReferences(array $fieldIds, int $versionNo)
{
if (empty($fieldIds)) {
return;
@@ -320,7 +326,7 @@ public function removePublicationReferences(array $fieldIds, $versionNo)
*
* @return array
*/
- protected function getPropertyMapping()
+ protected function getPropertyMapping(): array
{
return [
'publication_id' => [
diff --git a/src/lib/Ez/FieldType/CalameoPublication/LegacyConverter.php b/src/lib/Ez/FieldType/CalameoPublication/LegacyConverter.php
index 557e4ef..145d7ac 100644
--- a/src/lib/Ez/FieldType/CalameoPublication/LegacyConverter.php
+++ b/src/lib/Ez/FieldType/CalameoPublication/LegacyConverter.php
@@ -12,11 +12,11 @@
namespace AlmaviaCX\Calameo\Ez\FieldType\CalameoPublication;
-use eZ\Publish\Core\Persistence\Legacy\Content\FieldValue\Converter;
-use eZ\Publish\Core\Persistence\Legacy\Content\StorageFieldDefinition;
-use eZ\Publish\Core\Persistence\Legacy\Content\StorageFieldValue;
-use eZ\Publish\SPI\Persistence\Content\FieldValue;
-use eZ\Publish\SPI\Persistence\Content\Type\FieldDefinition;
+use Ibexa\Core\Persistence\Legacy\Content\FieldValue\Converter;
+use Ibexa\Core\Persistence\Legacy\Content\StorageFieldDefinition;
+use Ibexa\Core\Persistence\Legacy\Content\StorageFieldValue;
+use Ibexa\Contracts\Core\Persistence\Content\FieldValue;
+use Ibexa\Contracts\Core\Persistence\Content\Type\FieldDefinition;
class LegacyConverter implements Converter
{
@@ -42,7 +42,7 @@ public function toFieldDefinition(StorageFieldDefinition $storageDef, FieldDefin
];
}
- public function getIndexColumn()
+ public function getIndexColumn(): string
{
return 'sort_key_string';
}
diff --git a/src/lib/Ez/FieldType/CalameoPublication/Type.php b/src/lib/Ez/FieldType/CalameoPublication/Type.php
index ef21dde..279c1b4 100644
--- a/src/lib/Ez/FieldType/CalameoPublication/Type.php
+++ b/src/lib/Ez/FieldType/CalameoPublication/Type.php
@@ -12,15 +12,13 @@
namespace AlmaviaCX\Calameo\Ez\FieldType\CalameoPublication;
-use AlmaviaCX\Calameo\API\Value\Publication;
-use eZ\Publish\API\Repository\Values\ContentType\FieldDefinition;
-use eZ\Publish\Core\Base\Exceptions\InvalidArgumentValue;
-use eZ\Publish\Core\FieldType\FieldType;
-use eZ\Publish\Core\FieldType\ValidationError;
-use eZ\Publish\SPI\FieldType\Nameable;
-use eZ\Publish\SPI\FieldType\Value as SPIValue;
-use eZ\Publish\Core\FieldType\Value as BaseValue;
-use eZ\Publish\SPI\Persistence\Content\FieldValue as PersistenceValue;
+use Ibexa\Contracts\Core\FieldType\Value as BaseValue;
+use Ibexa\Contracts\Core\FieldType\Value as SPIValue;
+use Ibexa\Contracts\Core\Persistence\Content\FieldValue as PersistenceValue;
+use Ibexa\Contracts\Core\Repository\Values\ContentType\FieldDefinition;
+use Ibexa\Core\Base\Exceptions\InvalidArgumentValue;
+use Ibexa\Core\FieldType\FieldType;
+use Ibexa\Core\FieldType\ValidationError;
use RuntimeException;
class Type extends FieldType
@@ -35,7 +33,7 @@ class Type extends FieldType
/**
* @inheritDoc
*/
- public function validateFieldSettings($fieldSettings)
+ public function validateFieldSettings($fieldSettings): array
{
$validationErrors = [];
@@ -99,23 +97,26 @@ protected function checkValueStructure(BaseValue $value)
}
}
- public function getFieldTypeIdentifier()
+ public function getFieldTypeIdentifier(): string
{
return "calameo_publication";
}
/**
- * @param Value $value
- * @return string|void
+ * @param BaseValue $value
+ * @param FieldDefinition $fieldDefinition
+ * @param string $languageCode
+ * @return string
*/
- public function getName(SPIValue $value)
+ public function getName(BaseValue $value, FieldDefinition $fieldDefinition, string $languageCode): string
{
+ // return (string)$value->text;
throw new RuntimeException(
'Name generation provided via NameableField set via "ezpublish.fieldType.nameable" service tag'
);
}
- public function getEmptyValue()
+ public function getEmptyValue(): Value
{
return new Value();
}
@@ -133,7 +134,7 @@ public function fromHash($hash)
* @param Value $value
* @return array
*/
- public function toHash(SPIValue $value)
+ public function toHash(SPIValue $value): ?array
{
if ($this->isEmptyValue($value)) {
return null;
@@ -147,9 +148,9 @@ public function toHash(SPIValue $value)
/**
* @param Value $value
- * @return string|null
+ * @return false
*/
- protected function getSortInfo(BaseValue $value)
+ protected function getSortInfo(BaseValue $value): bool
{
return false;
}
@@ -183,6 +184,6 @@ public function fromPersistenceValue(PersistenceValue $fieldValue): Value
return $this->getEmptyValue();
}
- return new Value($fieldValue->externalData ?? []);
+ return new Value($fieldValue->externalData);
}
}
diff --git a/src/lib/Ez/FieldType/CalameoPublication/Value.php b/src/lib/Ez/FieldType/CalameoPublication/Value.php
index 51882e4..9386575 100644
--- a/src/lib/Ez/FieldType/CalameoPublication/Value.php
+++ b/src/lib/Ez/FieldType/CalameoPublication/Value.php
@@ -13,56 +13,26 @@
namespace AlmaviaCX\Calameo\Ez\FieldType\CalameoPublication;
use AlmaviaCX\Calameo\API\Value\Publication;
-use eZ\Publish\Core\FieldType\Value as BaseValue;
+use Closure;
+use Ibexa\Core\FieldType\Value as BaseValue;
class Value extends BaseValue
{
- /**
- * @var string|null
- */
- public $publicationId;
-
- /**
- * @var int|null
- */
- public $folderId;
-
+ public ?string $publicationId = null;
+ public ?int $folderId = null;
/**
* Input file URI, as a path to a file on a disk.
*
* @var string|null
*/
- public $inputUri;
-
- /**
- * @var \Closure
- */
- public $publicationLoader;
-
- /** @var Publication|null */
- protected $publication;
+ public ?string $inputUri = null;
+ protected ?Publication $publication = null;
/**
* Returns a string representation of the field value.
- *
- * @return string
*/
public function __toString(): string
{
return $this->publicationId;
}
-
- /**
- * @inheritDoc
- */
- public function __get($property)
- {
- if ($property === "publication") {
- if (!$this->publication && $this->publicationLoader) {
- $loader = $this->publicationLoader;
- $this->publication = $loader();
- }
- }
- return parent::__get($property); // TODO: Change the autogenerated stub
- }
}
diff --git a/src/lib/Ez/FieldType/CalameoPublication/ValueTransformer.php b/src/lib/Ez/FieldType/CalameoPublication/ValueTransformer.php
index 718d8bf..27c0156 100644
--- a/src/lib/Ez/FieldType/CalameoPublication/ValueTransformer.php
+++ b/src/lib/Ez/FieldType/CalameoPublication/ValueTransformer.php
@@ -12,25 +12,15 @@
namespace AlmaviaCX\Calameo\Ez\FieldType\CalameoPublication;
-use AlmaviaCX\Calameo\API\Value\Publication;
-use eZ\Publish\API\Repository\FieldType;
+use Ibexa\Contracts\Core\Repository\FieldType;
use Symfony\Component\Form\DataTransformerInterface;
use Symfony\Component\Form\Exception\TransformationFailedException;
-use Symfony\Component\HttpFoundation\File\UploadedFile;
class ValueTransformer implements DataTransformerInterface
{
- /** @var FieldType */
- protected $fieldType;
+ protected FieldType $fieldType;
+ protected Value $initialValue;
- /** @var Value */
- protected $initialValue;
-
- /**
- * ValueTransformer constructor.
- * @param FieldType $fieldType
- * @param Value $initialValue
- */
public function __construct(FieldType $fieldType, Value $initialValue)
{
$this->fieldType = $fieldType;
@@ -38,10 +28,10 @@ public function __construct(FieldType $fieldType, Value $initialValue)
}
/**
- * @param Value $value
+ * @param Value|null $value
* @return array
*/
- public function transform($value): array
+ public function transform($value)
{
if (null === $value) {
$value = $this->fieldType->getEmptyValue();
@@ -56,7 +46,7 @@ public function transform($value): array
}
/**
- * @param array $value
+ * @param array|null $value
* @return Value
*/
public function reverseTransform($value)
diff --git a/src/lib/Ez/Form/Type/FieldType/CalameoPublicationFieldType.php b/src/lib/Ez/Form/Type/FieldType/CalameoPublicationFieldType.php
index 4166a28..599c639 100644
--- a/src/lib/Ez/Form/Type/FieldType/CalameoPublicationFieldType.php
+++ b/src/lib/Ez/Form/Type/FieldType/CalameoPublicationFieldType.php
@@ -13,12 +13,11 @@
namespace AlmaviaCX\Calameo\Ez\Form\Type\FieldType;
use AlmaviaCX\Calameo\API\Repository\AccountRepository;
-use AlmaviaCX\Calameo\API\Repository\FolderRepository;
use AlmaviaCX\Calameo\Exception\ApiResponseErrorException;
use AlmaviaCX\Calameo\Ez\FieldType\CalameoPublication\Value;
-use EzSystems\EzPlatformAdminUi\Notification\NotificationHandlerInterface;
-use EzSystems\RepositoryForms\Form\Type\FieldType\BinaryBaseFieldType;
-use GuzzleHttp\Exception\GuzzleException;
+use GuzzleHttp\Exception\ClientException;
+use Ibexa\ContentForms\Form\Type\FieldType\BinaryBaseFieldType;
+use Ibexa\Contracts\AdminUi\Notification\NotificationHandlerInterface;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
@@ -31,28 +30,21 @@
class CalameoPublicationFieldType extends AbstractType
{
- /** @var AccountRepository */
- protected $accountRepository;
+ protected AccountRepository $accountRepository;
+ protected NotificationHandlerInterface $notificationHandler;
- /** @var NotificationHandlerInterface */
- protected $notificationHandler;
-
- /**
- * @param AccountRepository $accountRepository
- * @param NotificationHandlerInterface $notificationHandler
- */
public function __construct(AccountRepository $accountRepository, NotificationHandlerInterface $notificationHandler)
{
$this->accountRepository = $accountRepository;
$this->notificationHandler = $notificationHandler;
}
- public function getName()
+ public function getName(): string
{
return $this->getBlockPrefix();
}
- public function getBlockPrefix()
+ public function getBlockPrefix(): string
{
return 'ezplatform_fieldtype_calameo_publication';
}
@@ -66,7 +58,7 @@ public function buildForm(FormBuilderInterface $builder, array $options)
do {
try {
$availableFolders = $this->accountRepository->fetchAccountFolders($limit, $offset);
- } catch (ApiResponseErrorException $exception) {
+ } catch (ClientException|ApiResponseErrorException $exception) {
$this->notificationHandler->error(
sprintf("[Calameo] %s", $exception->getMessage())
);
@@ -135,7 +127,7 @@ static function (FormEvent $event) use ($folderChoices) {
);
}
- public function getParent()
+ public function getParent(): string
{
return BinaryBaseFieldType::class;
}
diff --git a/src/lib/Ez/Twig/CalameoTwigExtension.php b/src/lib/Ez/Twig/CalameoTwigExtension.php
index 9147092..a42e1f3 100644
--- a/src/lib/Ez/Twig/CalameoTwigExtension.php
+++ b/src/lib/Ez/Twig/CalameoTwigExtension.php
@@ -9,27 +9,29 @@
namespace AlmaviaCX\Calameo\Ez\Twig;
+use AlmaviaCX\Calameo\API\Repository\PublicationRepository;
use AlmaviaCX\Calameo\API\Value\Publication;
use AlmaviaCX\Calameo\Exception\ApiResponseErrorException;
+use AlmaviaCX\Calameo\Exception\Response\UnknownBookIDException;
use AlmaviaCX\Calameo\Ez\FieldType\CalameoPublication\Value;
-use EzSystems\EzPlatformAdminUi\Notification\NotificationHandlerInterface;
+use Ibexa\Contracts\AdminUi\Notification\NotificationHandlerInterface;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;
class CalameoTwigExtension extends AbstractExtension
{
- /** @var NotificationHandlerInterface */
- protected $notificationHandler;
-
- /**
- * @param NotificationHandlerInterface $notificationHandler
- */
- public function __construct(NotificationHandlerInterface $notificationHandler)
- {
+ protected NotificationHandlerInterface $notificationHandler;
+ protected PublicationRepository $publicationRepository;
+
+ public function __construct(
+ NotificationHandlerInterface $notificationHandler,
+ PublicationRepository $publicationRepository
+ ) {
+ $this->publicationRepository = $publicationRepository;
$this->notificationHandler = $notificationHandler;
}
- public function getFunctions()
+ public function getFunctions(): array
{
return [
new TwigFunction('loadCalameoPublication', [$this, 'loadCalameoPublication']),
@@ -38,12 +40,22 @@ public function getFunctions()
public function loadCalameoPublication(Value $value): ?Publication
{
- try {
- return $value->publication;
- } catch (ApiResponseErrorException $exception) {
- $this->notificationHandler->error(
- sprintf("[Calameo] %s", $exception->getMessage())
- );
+ if ($value->folderId && $value->publicationId) {
+ try {
+ return $this->publicationRepository->getPublicationInfos($value->publicationId);
+ } catch (UnknownBookIDException $unknownBookIDException) {
+ $this->notificationHandler->warning(
+ sprintf("[Calameo][UnknownBookIDException] %s", $unknownBookIDException->getMessage()) // Unknown book
+ );
+ } catch (ApiResponseErrorException $exception) {
+ $this->notificationHandler->error(
+ sprintf("[Calameo][ApiResponseErrorException] %s", $exception->getMessage())
+ );
+ } catch (\Exception $exception) {
+ $this->notificationHandler->error(
+ sprintf("[Calameo] %s", $exception->getMessage())
+ );
+ }
}
return null;
}