diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index 3fb48e6..a3f9cfc 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -46,6 +46,12 @@ public function getConfigTreeBuilder() ->scalarNode( 'enabled' )->isRequired()->defaultFalse()->end() ->end() ->end() // admin logger + ->arrayNode( 'storage_filename_cleaner' ) + ->addDefaultsIfNotSet() + ->children() + ->scalarNode( 'enabled' )->isRequired()->defaultFalse()->end() + ->end() + ->end() // end storage_filename_cleaner ->end(); return $treeBuilder; diff --git a/DependencyInjection/SQLIEzToolboxExtension.php b/DependencyInjection/SQLIEzToolboxExtension.php index 90a6f12..5c0d8d8 100644 --- a/DependencyInjection/SQLIEzToolboxExtension.php +++ b/DependencyInjection/SQLIEzToolboxExtension.php @@ -34,5 +34,23 @@ public function load( array $configs, ContainerBuilder $container ) $config['contenttype_installer']['is_absolute_path'] ); $container->setParameter( 'sqli_ez_toolbox.admin_logger.enabled', $config['admin_logger']['enabled'] ); + $container->setParameter( 'sqli_ez_toolbox.storage_filename_cleaner.enabled', + $config['storage_filename_cleaner']['enabled'] ); + + if( $config['storage_filename_cleaner']['enabled'] ) + { + $container->setParameter( + 'ezpublish.fieldType.ezimage.externalStorage.class', + 'SQLI\EzToolboxBundle\Services\Core\FieldType\ImageStorage' + ); + $container->setParameter( + 'ezpublish.fieldType.ezmedia.externalStorage.class', + 'SQLI\EzToolboxBundle\Services\Core\FieldType\MediaStorage' + ); + $container->setParameter( + 'ezpublish.fieldType.ezbinaryfile.externalStorage.class', + 'SQLI\EzToolboxBundle\Services\Core\FieldType\BinaryFileStorage' + ); + } } } diff --git a/README.md b/README.md index 6c12a63..efcd126 100644 --- a/README.md +++ b/README.md @@ -47,46 +47,27 @@ php bin/console cache:clear ### Parameters -##### Entity Manager +##### Full example -Configure directories (and namespaces if not according to PSR-0 rules) entities to lookup : - -```yml +```yaml sqli_ez_toolbox: entities: - - { directory: 'Acme/AcmeBundle/Entity/Doctrine' } - - { directory: 'Acme/AcmeBundle2/Entity/Doctrine', namespace: 'Acme\AcmeBundle2NoPSR0\ORM\Doctrine' } + - { directory: 'AcmeBundle/Entity/Doctrine' } contenttype_installer: installation_directory: app/content_types is_absolute_path: false -``` -Use "~" if the namespace of your classes observe PSR-0 rules or specify directory which contains them. - -##### Admin Logger - -Default values : -```yml -sqli_ez_toolbox: admin_logger: - enabled: false + enabled: true + storage_filename_cleaner: + enabled: true ``` -##### ContentType Installer - -Default values : -```yml -sqli_ez_toolbox: - contenttype_installer: - installation_directory: app/content_types - is_absolute_path: false -``` +### How to use *(Optional) Change label tabname* You can change label of the default tab using this translation key for domain `sqli_admin` : **sqli_admin__menu_entities_tab__default** -### How to use - [Entities Manager](README_entities_manager.md) [ContentTypes Installer](README_contenttype_installer.md) diff --git a/README_entities_manager.md b/README_entities_manager.md index 09ec79f..75cce19 100644 --- a/README_entities_manager.md +++ b/README_entities_manager.md @@ -1,6 +1,21 @@ SQLI Entities Manager ======================== +### Configuration + +Configure directories (and namespaces if not according to PSR-0 rules) entities to lookup : + +```yml +sqli_ez_toolbox: + entities: + - { directory: 'Acme/AcmeBundle/Entity/Doctrine' } + - { directory: 'Acme/AcmeBundle2/Entity/Doctrine', namespace: 'Acme\AcmeBundle2NoPSR0\ORM\Doctrine' } + contenttype_installer: + installation_directory: app/content_types + is_absolute_path: false +``` +Use "~" if the namespace of your classes observe PSR-0 rules or specify directory which contains them. + ### Annotations on entities ```php diff --git a/README_toolbox.md b/README_toolbox.md index 1ad8436..ac18ac0 100644 --- a/README_toolbox.md +++ b/README_toolbox.md @@ -1,6 +1,17 @@ SQLI ContentType Installer ======================== +### Configuration + +Default values : +```yml +sqli_ez_toolbox: + admin_logger: + enabled: false + storage_filename_cleaner: + enabled: true +``` + ### Services ```shell script @@ -42,3 +53,13 @@ All handlers can be accessible through a repository : `SQLI\EzToolboxBundle\Serv ### PrepublishVersionSignal A signal slot exists to make an action just before Content publication : `SQLI\EzToolboxBundle\Services\Core\Signal\PrepublishVersionSignal` + +### Admin Logger + +Save some actions made in backoffice into a log file + +### Storage filename cleaner + +Clean name of the file uploaded in backoffice when moving into storage to prevent SEO penalties. +Change special characters to their latin correspondence when it's possible (else they will be removed), replace spaces and force lower case. + \ No newline at end of file diff --git a/Services/Core/FieldType/BinaryFileStorage.php b/Services/Core/FieldType/BinaryFileStorage.php new file mode 100644 index 0000000..34b4c15 --- /dev/null +++ b/Services/Core/FieldType/BinaryFileStorage.php @@ -0,0 +1,28 @@ +value->externalData['fileName']; + $fileName = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $fileName); + // Replace spaces + $fileName = preg_replace('/\s/', '_', $fileName); + // Force lower case + $fileName = mb_convert_case($fileName, MB_CASE_LOWER); + // Cleaned filename can be used in original process + $field->value->externalData['fileName'] = $fileName; + + return parent::storeFieldData($versionInfo, $field, $context); + } +} diff --git a/Services/Core/FieldType/ImageStorage.php b/Services/Core/FieldType/ImageStorage.php new file mode 100644 index 0000000..63e3ea0 --- /dev/null +++ b/Services/Core/FieldType/ImageStorage.php @@ -0,0 +1,25 @@ +value->externalData['fileName']; + $fileName = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $fileName); + // Replace spaces + $fileName = preg_replace('/\s/', '_', $fileName); + // Force lower case + $fileName = mb_convert_case($fileName, MB_CASE_LOWER); + // Cleaned filename can be used in original process + $field->value->externalData['fileName'] = $fileName; + + return parent::storeFieldData($versionInfo, $field, $context); + } +} \ No newline at end of file diff --git a/Services/Core/FieldType/MediaStorage.php b/Services/Core/FieldType/MediaStorage.php new file mode 100644 index 0000000..ff9d6f2 --- /dev/null +++ b/Services/Core/FieldType/MediaStorage.php @@ -0,0 +1,28 @@ +value->externalData['fileName']; + $fileName = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $fileName); + // Replace spaces + $fileName = preg_replace('/\s/', '_', $fileName); + // Force lower case + $fileName = mb_convert_case($fileName, MB_CASE_LOWER); + // Cleaned filename can be used in original process + $field->value->externalData['fileName'] = $fileName; + + return parent::storeFieldData($versionInfo, $field, $context); + } +}