1 | <?php |
||
36 | class ContentPushController extends Controller |
||
37 | { |
||
38 | /** |
||
39 | * Receives HTTP Push Request's payload which is then processed by the pipeline. |
||
40 | * |
||
41 | * @ApiDoc( |
||
42 | * resource=true, |
||
43 | * description="Adds a new content from HTTP Push", |
||
44 | * statusCodes={ |
||
45 | * 201="Returned on successful post." |
||
46 | * } |
||
47 | * ) |
||
48 | * @Route("/api/{version}/content/push", options={"expose"=true}, defaults={"version"="v1"}, name="swp_api_content_push") |
||
49 | * @Method("POST") |
||
50 | */ |
||
51 | 11 | public function pushContentAction(Request $request) |
|
52 | { |
||
53 | 11 | $package = $this->handlePackage($request); |
|
54 | 11 | $articleRepository = $this->get('swp.repository.article'); |
|
55 | |||
56 | 11 | $existingArticle = $articleRepository->findOneBy(['slug' => Transliterator::urlize($package->getSlugline())]); |
|
57 | |||
58 | 11 | if (null !== $existingArticle) { |
|
59 | $this->get('swp.hydrator.article')->hydrate($existingArticle, $package); |
||
60 | $this->get('event_dispatcher')->dispatch(ArticleEvents::PRE_CREATE, new ArticleEvent($existingArticle, $package)); |
||
61 | |||
62 | $this->get('swp.object_manager.article')->flush(); |
||
63 | |||
64 | return new SingleResourceResponse(['status' => 'OK'], new ResponseContext(201)); |
||
65 | } |
||
66 | |||
67 | 11 | $article = $this->get('swp_content.transformer.package_to_article')->transform($package); |
|
68 | 11 | $this->get('event_dispatcher')->dispatch(ArticleEvents::PRE_CREATE, new ArticleEvent($article, $package)); |
|
69 | 10 | $articleRepository->add($article); |
|
70 | 10 | $this->get('event_dispatcher')->dispatch(ArticleEvents::POST_CREATE, new ArticleEvent($article)); |
|
71 | |||
72 | 10 | return new SingleResourceResponse(['status' => 'OK'], new ResponseContext(201)); |
|
73 | } |
||
74 | |||
75 | /** |
||
76 | * Receives HTTP Push Request's assets payload which is then processed and stored. |
||
77 | * |
||
78 | * @ApiDoc( |
||
79 | * resource=true, |
||
80 | * description="Adds new assets from HTTP Push", |
||
81 | * statusCodes={ |
||
82 | * 201="Returned on successful post.", |
||
83 | * 500="Returned on invalid file.", |
||
84 | * 200="Returned on form errors" |
||
85 | * }, |
||
86 | * input="SWP\Bundle\ContentBundle\Form\Type\MediaFileType" |
||
87 | * ) |
||
88 | * @Route("/api/{version}/assets/push", options={"expose"=true}, defaults={"version"="v1"}, name="swp_api_assets_push") |
||
89 | * @Method("POST") |
||
90 | */ |
||
91 | public function pushAssetsAction(Request $request) |
||
121 | |||
122 | /** |
||
123 | * Checks if media exists in storage. |
||
124 | * |
||
125 | * @ApiDoc( |
||
126 | * resource=true, |
||
127 | * description="Gets a single media file", |
||
128 | * statusCodes={ |
||
129 | * 404="Returned when file doesn't exist.", |
||
130 | * 200="Returned on form errors" |
||
131 | * } |
||
132 | * ) |
||
133 | * @Route("/api/{version}/assets/push/{mediaId}", options={"expose"=true}, defaults={"version"="v1"}, requirements={"mediaId"=".+"}, name="swp_api_assets_get") |
||
134 | * @Route("/api/{version}/assets/get/{mediaId}", options={"expose"=true}, defaults={"version"="v1"}, requirements={"mediaId"=".+"}, name="swp_api_assets_get_1") |
||
135 | * @Method("GET") |
||
136 | */ |
||
137 | public function getAssetsAction($mediaId) |
||
157 | |||
158 | /** |
||
159 | * @param Request $request |
||
160 | * |
||
161 | * @return PackageInterface |
||
162 | */ |
||
163 | 11 | private function handlePackage(Request $request): PackageInterface |
|
177 | } |
||
178 |