22
33namespace Sherlockode \AdvancedFormBundle \Controller ;
44
5+ use Sherlockode \AdvancedFormBundle \Event \GetResponseRemoveTmpFileEvent ;
6+ use Sherlockode \AdvancedFormBundle \Event \GetResponseUploadTmpFileEvent ;
7+ use Sherlockode \AdvancedFormBundle \Event \GetResponseViewTmpFileEvent ;
58use Sherlockode \AdvancedFormBundle \Manager \UploadManager ;
69use Sherlockode \AdvancedFormBundle \Model \TemporaryUploadedFileInterface ;
710use Sherlockode \AdvancedFormBundle \Storage \StorageInterface ;
811use Symfony \Bundle \FrameworkBundle \Controller \AbstractController ;
12+ use Symfony \Component \EventDispatcher \EventDispatcherInterface ;
913use Symfony \Component \Form \Extension \Core \Type \FileType ;
1014use Symfony \Component \HttpFoundation \JsonResponse ;
1115use Symfony \Component \HttpFoundation \Request ;
1216use Symfony \Component \HttpFoundation \Response ;
1317use Symfony \Component \HttpFoundation \ResponseHeaderBag ;
18+ use Symfony \Component \HttpKernel \Kernel ;
1419
1520class TemporaryFileUploadController extends AbstractController
1621{
@@ -29,18 +34,29 @@ class TemporaryFileUploadController extends AbstractController
2934 */
3035 private $ tmpStorage ;
3136
37+ /**
38+ * @var EventDispatcherInterface
39+ */
40+ private $ eventDispatcher ;
41+
3242 /**
3343 * FileUploadController constructor.
3444 *
35- * @param UploadManager $uploadManager
36- * @param string $tmpUploadClass
37- * @param StorageInterface $tmpStorage
45+ * @param UploadManager $uploadManager
46+ * @param string $tmpUploadClass
47+ * @param StorageInterface $tmpStorage
48+ * @param EventDispatcherInterface $eventDispatcher
3849 */
39- public function __construct ($ uploadManager , $ tmpUploadClass , $ tmpStorage )
40- {
50+ public function __construct (
51+ UploadManager $ uploadManager ,
52+ string $ tmpUploadClass ,
53+ StorageInterface $ tmpStorage ,
54+ EventDispatcherInterface $ eventDispatcher
55+ ) {
4156 $ this ->uploadManager = $ uploadManager ;
4257 $ this ->tmpUploadClass = $ tmpUploadClass ;
4358 $ this ->tmpStorage = $ tmpStorage ;
59+ $ this ->eventDispatcher = $ eventDispatcher ;
4460 }
4561
4662 /**
@@ -50,6 +66,16 @@ public function __construct($uploadManager, $tmpUploadClass, $tmpStorage)
5066 */
5167 public function uploadTmpAction (Request $ request )
5268 {
69+ $ event = new GetResponseUploadTmpFileEvent ();
70+ if (Kernel::VERSION_ID < 40300 ) {
71+ $ this ->eventDispatcher ->dispatch (get_class ($ event ), $ event );
72+ } else {
73+ $ this ->eventDispatcher ->dispatch ($ event );
74+ }
75+ if ($ event ->getResponse () !== null ) {
76+ return $ event ->getResponse ();
77+ }
78+
5379 $ form = $ this ->createForm (FileType::class, null , ['csrf_protection ' => false ]);
5480 $ form ->submit ($ request ->files ->get ('afb_upload_file ' )['file ' ]);
5581
@@ -84,6 +110,16 @@ public function removeTmpFileAction(Request $request)
84110 $ token = $ request ->get ('token ' );
85111 $ fileInfo = $ this ->getDoctrine ()->getRepository ($ this ->tmpUploadClass )->findOneBy (['token ' => $ token ]);
86112 if ($ fileInfo instanceof TemporaryUploadedFileInterface) {
113+ $ event = new GetResponseRemoveTmpFileEvent ($ fileInfo );
114+ if (Kernel::VERSION_ID < 40300 ) {
115+ $ this ->eventDispatcher ->dispatch (get_class ($ event ), $ event );
116+ } else {
117+ $ this ->eventDispatcher ->dispatch ($ event );
118+ }
119+ if ($ event ->getResponse () !== null ) {
120+ return $ event ->getResponse ();
121+ }
122+
87123 $ this ->uploadManager ->removeTemporary ($ fileInfo );
88124 }
89125
@@ -99,6 +135,20 @@ public function viewUploadedFileAction($token)
99135 {
100136 $ fileInfo = $ this ->getDoctrine ()->getRepository ($ this ->tmpUploadClass )->findOneBy (['token ' => $ token ]);
101137
138+ if (!$ fileInfo instanceof TemporaryUploadedFileInterface) {
139+ throw $ this ->createNotFoundException ();
140+ }
141+
142+ $ event = new GetResponseViewTmpFileEvent ($ fileInfo );
143+ if (Kernel::VERSION_ID < 40300 ) {
144+ $ this ->eventDispatcher ->dispatch (get_class ($ event ), $ event );
145+ } else {
146+ $ this ->eventDispatcher ->dispatch ($ event );
147+ }
148+ if ($ event ->getResponse () !== null ) {
149+ return $ event ->getResponse ();
150+ }
151+
102152 $ data = $ this ->tmpStorage ->read ($ fileInfo ->getKey ());
103153
104154 return $ this ->createDownloadResponse (
0 commit comments