Skip to content

Commit

Permalink
Add a filename cleaning for storage when uploading an image, media or…
Browse files Browse the repository at this point in the history
… file

Signed-off-by: daverner <[email protected]>
  • Loading branch information
daverner committed Jan 13, 2021
1 parent 4742c20 commit 832c68f
Show file tree
Hide file tree
Showing 8 changed files with 148 additions and 26 deletions.
6 changes: 6 additions & 0 deletions DependencyInjection/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
18 changes: 18 additions & 0 deletions DependencyInjection/SQLIEzToolboxExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -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'
);
}
}
}
33 changes: 7 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
15 changes: 15 additions & 0 deletions README_entities_manager.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
21 changes: 21 additions & 0 deletions README_toolbox.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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.

28 changes: 28 additions & 0 deletions Services/Core/FieldType/BinaryFileStorage.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

namespace SQLI\EzToolboxBundle\Services\Core\FieldType;

use eZ\Publish\Core\FieldType\BinaryBase\BinaryBaseStorage;
use eZ\Publish\SPI\Persistence\Content\Field;
use eZ\Publish\SPI\Persistence\Content\VersionInfo;

/**
* Description of BinaryFileStorage.
*/
class BinaryFileStorage extends BinaryBaseStorage
{
public function storeFieldData(VersionInfo $versionInfo, Field $field, array $context)
{
// Original filename, convert characters when it's possible (or remove them)
$fileName = $field->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);
}
}
25 changes: 25 additions & 0 deletions Services/Core/FieldType/ImageStorage.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php

namespace SQLI\EzToolboxBundle\Services\Core\FieldType;

use eZ\Publish\Core\FieldType\Image\ImageStorage as BaseImageStorage;
use eZ\Publish\SPI\Persistence\Content\Field;
use eZ\Publish\SPI\Persistence\Content\VersionInfo;

class ImageStorage extends BaseImageStorage
{
public function storeFieldData(VersionInfo $versionInfo, Field $field, array $context)
{
// Original filename, convert characters when it's possible (or remove them)
$fileName = $field->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);
}
}
28 changes: 28 additions & 0 deletions Services/Core/FieldType/MediaStorage.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

namespace SQLI\EzToolboxBundle\Services\Core\FieldType;

use eZ\Publish\Core\FieldType\BinaryBase\BinaryBaseStorage;
use eZ\Publish\SPI\Persistence\Content\Field;
use eZ\Publish\SPI\Persistence\Content\VersionInfo;

/**
* Description of MediaStorage.
*/
class MediaStorage extends BinaryBaseStorage
{
public function storeFieldData(VersionInfo $versionInfo, Field $field, array $context)
{
// Original filename, convert characters when it's possible (or remove them)
$fileName = $field->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);
}
}

0 comments on commit 832c68f

Please sign in to comment.