Skip to content

Commit

Permalink
123
Browse files Browse the repository at this point in the history
  • Loading branch information
Koc committed Sep 2, 2016
1 parent e2a57c5 commit d91613a
Show file tree
Hide file tree
Showing 13 changed files with 117 additions and 175 deletions.
45 changes: 11 additions & 34 deletions DependencyInjection/Compiler/RegisterPropelModelsPass.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,10 @@
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;

use Vich\UploaderBundle\Exception\MappingNotFoundException;

/**
* Register the uploadable models in BazingaPropelEventDispatcherBundle
*
* @author Konstantin Myakshin <koc-dp@yandex.ru>
* @author Kévin Gomez <contact@kevingomez.fr>
*/
class RegisterPropelModelsPass implements CompilerPassInterface
Expand All @@ -19,40 +18,18 @@ class RegisterPropelModelsPass implements CompilerPassInterface
*/
public function process(ContainerBuilder $container)
{
if (!$container->hasParameter('vich_uploader.mappings')) {
return;
}

$serviceTypes = array(
'inject', 'clean', 'remove', 'upload',
);

$metadata = $container->get('vich_uploader.metadata_reader');
$mappings = $container->getParameter('vich_uploader.mappings');

foreach ($metadata->getUploadableClasses() as $class) {
foreach ($metadata->getUploadableFields($class) as $field) {
if (empty($mappings[$field['mapping']])) {
throw MappingNotFoundException::createNotFoundForClassAndField($field['mapping'], $class, $field['propertyName']);
}
$serviceTypes = array('inject', 'clean', 'remove', 'upload');

$mapping = $mappings[$field['mapping']];

if ($mapping['db_driver'] !== 'propel') {
continue;
}

foreach ($serviceTypes as $type) {
if (!$container->has(sprintf('vich_uploader.listener.%s.%s', $type, $field['mapping']))) {
continue;
}

$definition = $container->getDefinition(sprintf('vich_uploader.listener.%s.%s', $type, $field['mapping']));
$definition->setClass($container->getDefinition($definition->getParent())->getClass());
$definition->setPublic(true);
$definition->addTag('propel.event_subscriber', array('class' => $class));
}
foreach ($serviceTypes as $type) {
$listenerId = sprintf('vich_uploader.listener.%s.propel', $type);
if (!$container->has($listenerId)) {
continue;
}

$definition = $container->getDefinition($listenerId);
$definition->setClass($container->getDefinition($definition->getParent())->getClass());
$definition->setPublic(true);
$definition->addTag('propel.event_subscriber', array('class' => $class));
}
}
}
61 changes: 61 additions & 0 deletions EventListener/BaseListener.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<?php

namespace Vich\UploaderBundle\EventListener;

use Vich\UploaderBundle\Adapter\AdapterInterface;
use Vich\UploaderBundle\Handler\UploadHandler;
use Vich\UploaderBundle\Metadata\MetadataReader;

/**
* BaseListener
*
* @author Konstantin Myakshin <koc-dp@yandex.ru>
*/
abstract class BaseListener
{
/**
* @var array
*/
protected $mappings;

/**
* @var AdapterInterface $adapter
*/
protected $adapter;

/**
* @var MetadataReader $metadata
*/
protected $metadata;

/**
* @var UploadHandler $handler
*/
protected $handler;

/**
* Constructs a new instance of UploaderListener.
*
* @param array $mappings The mappings configuration.
* @param AdapterInterface $adapter The adapter.
* @param MetadataReader $metadata The metadata reader.
* @param UploadHandler $handler The upload handler.
*/
public function __construct($mappings, AdapterInterface $adapter, MetadataReader $metadata, UploadHandler $handler)
{
$this->mappings = $mappings;
$this->adapter = $adapter;
$this->metadata = $metadata;
$this->handler = $handler;
}

protected function isFlagEnabledForField($flag, array $field)
{
return true === $this->mappings[$field['mapping']][$flag];
}

public function getUploadableFields($object)
{
return $this->metadata->getUploadableFields(ClassUtils::getClass($object));
}
}
49 changes: 3 additions & 46 deletions EventListener/Doctrine/BaseListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,57 +3,14 @@
namespace Vich\UploaderBundle\EventListener\Doctrine;

use Doctrine\Common\EventSubscriber;

use Vich\UploaderBundle\Adapter\AdapterInterface;
use Vich\UploaderBundle\Handler\UploadHandler;
use Vich\UploaderBundle\Metadata\MetadataReader;
use Vich\UploaderBundle\Util\ClassUtils;
use Vich\UploaderBundle\EventListener\BaseListener as CommonListener;

/**
* BaseListener
*
* @author Kévin Gomez <contact@kevingomez.fr>
* @author Konstantin Myakshin <koc-dp@yandex.ru>
*/
abstract class BaseListener implements EventSubscriber
abstract class BaseListener extends CommonListener implements EventSubscriber
{
/**
* @var array
*/
protected $mappings;

/**
* @var AdapterInterface $adapter
*/
protected $adapter;

/**
* @var MetadataReader $metadata
*/
protected $metadata;

/**
* @var UploadHandler $handler
*/
protected $handler;

/**
* Constructs a new instance of UploaderListener.
*
* @param array $mappings The mappings configuration.
* @param AdapterInterface $adapter The adapter.
* @param MetadataReader $metadata The metadata reader.
* @param UploadHandler $handler The upload handler.
*/
public function __construct($mappings, AdapterInterface $adapter, MetadataReader $metadata, UploadHandler $handler)
{
$this->mappings = $mappings;
$this->adapter = $adapter;
$this->metadata = $metadata;
$this->handler = $handler;
}

protected function isFlagEnabledForField($flag, array $field)
{
return true === $this->mappings[$field['mapping']][$flag];
}
}
2 changes: 1 addition & 1 deletion EventListener/Doctrine/CleanListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public function getSubscribedEvents()
}

/**
* {@inheritdoc}
* @param PreFlushEventArgs $event
*/
public function preFlush(PreFlushEventArgs $event)
{
Expand Down
6 changes: 3 additions & 3 deletions EventListener/Doctrine/InjectListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
*
* Listen to the load event in order to inject File objects.
*
* @author Konstantin Myakshin <koc-dp@yandex.ru>
* @author Kévin Gomez <contact@kevingomez.fr>
*/
class InjectListener extends BaseListener
Expand All @@ -23,14 +24,13 @@ public function getSubscribedEvents()
}

/**
* {@inheritdoc}
* @param LifecycleEventArgs $event
*/
public function postLoad(LifecycleEventArgs $event)
{
$object = $this->adapter->getObjectFromArgs($event);
$fields = $this->metadata->getUploadableFields(ClassUtils::getClass($object));

foreach ($fields as $field) {
foreach ($this->getUploadableFields($object) as $field) {
if (!$this->isFlagEnabledForField('inject_on_load', $field)) {
continue;
}
Expand Down
3 changes: 1 addition & 2 deletions EventListener/Doctrine/RemoveListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,8 @@ public function preRemove(LifecycleEventArgs $event)
public function postRemove(LifecycleEventArgs $event)
{
$object = $this->adapter->getObjectFromArgs($event);
$fields = $this->metadata->getUploadableFields(ClassUtils::getClass($object));

foreach ($fields as $field) {
foreach ($this->getUploadableFields($object) as $field) {
if (!$this->isFlagEnabledForField('delete_on_remove', $field)) {
continue;
}
Expand Down
2 changes: 1 addition & 1 deletion EventListener/Doctrine/UploadListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public function getSubscribedEvents()
}

/**
* {@inheritdoc}
* @param PreFlushEventArgs $event
*/
public function preFlush(PreFlushEventArgs $event)
{
Expand Down
61 changes: 3 additions & 58 deletions EventListener/Propel/BaseListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,68 +3,13 @@
namespace Vich\UploaderBundle\EventListener\Propel;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;

use Vich\UploaderBundle\Adapter\AdapterInterface;
use Vich\UploaderBundle\Handler\UploadHandler;
use Vich\UploaderBundle\Metadata\MetadataReader;
use Vich\UploaderBundle\Util\ClassUtils;
use Vich\UploaderBundle\EventListener\BaseListener as CommonListener;

/**
* BaseListener
*
* @author Kévin Gomez <contact@kevingomez.fr>
* @author Konstantin Myakshin <koc-dp@yandex.ru>
*/
abstract class BaseListener implements EventSubscriberInterface
abstract class BaseListener extends CommonListener implements EventSubscriberInterface
{
/**
* @var string
*/
protected $mapping;

/**
* @var AdapterInterface $adapter
*/
protected $adapter;

/**
* @var MetadataReader $metadata
*/
protected $metadata;

/**
* @var UploaderHandler $handler
*/
protected $handler;

/**
* Constructs a new instance of BaseListener.
*
* @param string $mapping The mapping name.
* @param AdapterInterface $adapter The adapter.
* @param MetadataReader $metadata The metadata reader.
* @param UploaderHandler $handler The upload handler.
*/
public function __construct($mapping, AdapterInterface $adapter, MetadataReader $metadata, UploadHandler $handler)
{
$this->mapping = $mapping;
$this->adapter = $adapter;
$this->metadata = $metadata;
$this->handler = $handler;
}

/**
* Returns a list of uploadable fields for the given object and mapping.
*
* @param mixed $object The object to use.
*
* @return array<string> A list of field names.
*/
protected function getUploadableFields($object)
{
$fields = $this->metadata->getUploadableFields(ClassUtils::getClass($object), $this->mapping);

return array_map(function($data) {
return $data['propertyName'];
}, $fields);
}
}
11 changes: 7 additions & 4 deletions EventListener/Propel/CleanListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,13 @@
*
* Listen to the update event to delete old files accordingly.
*
* @author Konstantin Myakshin <koc-dp@yandex.ru>
* @author Kévin Gomez <contact@kevingomez.fr>
*/
class CleanListener extends BaseListener
{
/**
* The events the listener is subscribed to.
*
* @return array The array of events.
* {@inheritdoc}
*/
public static function getSubscribedEvents()
{
Expand All @@ -33,7 +32,11 @@ public function onUpload(GenericEvent $event)
$object = $this->adapter->getObjectFromArgs($event);

foreach ($this->getUploadableFields($object) as $field) {
$this->handler->clean($object, $field);
if (!$this->isFlagEnabledForField('delete_on_update', $field)) {
continue;
}

$this->handler->clean($object, $field['propertyName']);
}
}
}
11 changes: 7 additions & 4 deletions EventListener/Propel/InjectListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,13 @@
*
* Listen to the load event in order to inject File objects.
*
* @author Konstantin Myakshin <koc-dp@yandex.ru>
* @author Kévin Gomez <contact@kevingomez.fr>
*/
class InjectListener extends BaseListener
{
/**
* The events the listener is subscribed to.
*
* @return array The array of events.
* {@inheritdoc}
*/
public static function getSubscribedEvents()
{
Expand All @@ -33,7 +32,11 @@ public function onHydrate(GenericEvent $event)
$object = $this->adapter->getObjectFromArgs($event);

foreach ($this->getUploadableFields($object) as $field) {
$this->handler->inject($object, $field);
if (!$this->isFlagEnabledForField('inject_on_load', $field)) {
continue;
}

$this->handler->inject($object, $field['propertyName']);
}
}
}
7 changes: 6 additions & 1 deletion EventListener/Propel/RemoveListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
*
* Listen to the remove event to delete files accordingly.
*
* @author Konstantin Myakshin <koc-dp@yandex.ru>
* @author Kévin Gomez <contact@kevingomez.fr>
*/
class RemoveListener extends BaseListener
Expand All @@ -33,7 +34,11 @@ public function onDelete(GenericEvent $event)
$object = $this->adapter->getObjectFromArgs($event);

foreach ($this->getUploadableFields($object) as $field) {
$this->handler->remove($object, $field);
if (!$this->isFlagEnabledForField('delete_on_remove', $field)) {
continue;
}

$this->handler->remove($object, $field['propertyName']);
}
}
}
Loading

0 comments on commit d91613a

Please sign in to comment.