<?php
/**
* Created by PhpStorm.
* User: eph
* Date: 18/03/15
* Time: 12:00
*/
namespace Oi\FileBundle\Listener;
use Oi\FileBundle\Entity\Upload;
use Oi\FileBundle\Exceptions\AlphaException;
use Oi\FileBundle\Exceptions\MimetypeException;
use Oi\FileBundle\Exceptions\SizeException;
use Oi\FileBundle\Service\FileHandlerInterface;
use Oi\FileBundle\Singleton\MimeTypeSingleton;
use Oneup\UploaderBundle\Event\PostPersistEvent;
use Oneup\UploaderBundle\Uploader\Response\EmptyResponse;
use Symfony\Component\Routing\Router;
use Symfony\Component\Routing\RouterInterface;
class UploadListener
{
/**
* @var RouterInterface
*/
protected $router;
/**
* @var FileHandlerInterface
*/
protected $fileHandler;
/**
* UploadListener constructor.
* @param RouterInterface $router
* @param FileHandlerInterface $fileHandler
*/
public function __construct(RouterInterface $router, FileHandlerInterface $fileHandler)
{
$this->router = $router;
$this->fileHandler = $fileHandler;
}
public function onUpload(PostPersistEvent $event)
{
/* @var $file \Symfony\Component\HttpFoundation\File\File */
$file = $event->getFile();
$request = $event->getRequest();
$r = null;
try {
$upload = $this->fileHandler->makeUploadFromUploadedFile($file, $request);
$r = $upload->getJson();
$r['id'] = $upload->getId();
$r['bytes'] = $upload->getBytes();
if ($request->get('mode') == 'ckeditor') {
$url = str_replace('app_dev.php/', '', $this->router->generate('homepage', array(), Router::ABSOLUTE_URL));
echo json_encode([
'uploaded' => 1,
'filename' => $upload->getFilename(),
'url' => str_replace(' ', '%20', substr($url, 0, strlen($url) - 1) . $r['url'])
]);
exit;
}
} catch (MimetypeException $exception) {
$r = [
'error' => 'upload.error.mimetype_not_allowed',
'params' => [
'mimetype' => $exception->getMimetype(),
'valid' => $exception->getAcceptedMimetypes(),
]
];
} catch (AlphaException $exception) {
$r = [
'error' => 'upload.error.min_alpha',
'params' => [
'expected' => $exception->getExpectedAlpha(),
'given' => $exception->getGivenAlpha(),
]
];
} catch (SizeException $exception) {
$r = [
'error' => 'upload.error.size_not_allowed',
'params' => [
'expected' => $exception->getExpectedSize(),
'given' => $exception->getGivenSize(),
]
];
} catch (\Exception $exception) {
$r = [
'error' => $exception->getMessage(),
'params' => [],
];
}
$response = $event->getResponse();
/* @var $response EmptyResponse */
$response['files'] = [$r];
}
}