99use PhpList \Core \Domain \Common \Model \Filter \PaginatedFilter ;
1010use PhpList \Core \Domain \Identity \Model \PrivilegeFlag ;
1111use PhpList \Core \Domain \Subscription \Model \SubscribePage ;
12- use PhpList \Core \Domain \Subscription \Model \SubscriberList ;
1312use PhpList \Core \Domain \Subscription \Service \Manager \SubscribePageManager ;
14- use PhpList \Core \Domain \Subscription \Service \Manager \SubscriberAttributeManager ;
15- use PhpList \Core \Domain \Subscription \Service \Manager \SubscriptionManager ;
1613use PhpList \Core \Security \Authentication ;
1714use PhpList \RestBundle \Common \Controller \BaseController ;
1815use PhpList \RestBundle \Common \Service \Provider \PaginatedDataProvider ;
1916use PhpList \RestBundle \Common \Validator \RequestValidator ;
20- use PhpList \RestBundle \Subscription \Request \PublicSubscriptionRequest ;
2117use PhpList \RestBundle \Subscription \Request \SubscribePageRequest ;
2218use PhpList \RestBundle \Subscription \Serializer \SubscribePageNormalizer ;
23- use PhpList \RestBundle \Subscription \Serializer \SubscribePagePublicNormalizer ;
24- use PhpList \RestBundle \Subscription \Serializer \SubscriptionNormalizer ;
2519use Symfony \Bridge \Doctrine \Attribute \MapEntity ;
2620use Symfony \Component \HttpFoundation \JsonResponse ;
2721use Symfony \Component \HttpFoundation \Request ;
@@ -38,9 +32,6 @@ public function __construct(
3832 private readonly SubscribePageNormalizer $ normalizer ,
3933 private readonly EntityManagerInterface $ entityManager ,
4034 private readonly PaginatedDataProvider $ paginatedProvider ,
41- private readonly SubscriptionManager $ subscriptionManager ,
42- private readonly SubscriptionNormalizer $ subscriptionNormalizer ,
43- private readonly SubscriberAttributeManager $ subscriberAttributeManager ,
4435 ) {
4536 parent ::__construct ($ authentication , $ validator );
4637 }
@@ -120,101 +111,7 @@ className: SubscribePage::class,
120111 );
121112 }
122113
123- #[Route('/{id} ' , name: 'get ' , requirements: ['id ' => '\\d+ ' ], methods: ['GET ' ])]
124- #[OA \Get(
125- path: '/api/v2/subscribe-pages/{id} ' ,
126- description: '🚧 **Status: Beta** – This method is under development. Avoid using in production. ' ,
127- summary: 'Get subscribe page ' ,
128- tags: ['subscriptions ' ],
129- parameters: [
130- new OA \Parameter (
131- name: 'php-auth-pw ' ,
132- description: 'Session key obtained from login ' ,
133- in: 'header ' ,
134- required: false ,
135- schema: new OA \Schema (type: 'string ' )
136- ),
137- new OA \Parameter (
138- name: 'id ' ,
139- description: 'Subscribe page ID ' ,
140- in: 'path ' ,
141- required: true ,
142- schema: new OA \Schema (type: 'integer ' )
143- )
144- ],
145- responses: [
146- new OA \Response (
147- response: 200 ,
148- description: 'Success ' ,
149- content: new OA \JsonContent (ref: '#/components/schemas/SubscribePage ' ),
150- ),
151- new OA \Response (
152- response: 403 ,
153- description: 'Failure ' ,
154- content: new OA \JsonContent (ref: '#/components/schemas/UnauthorizedResponse ' )
155- ),
156- new OA \Response (
157- response: 404 ,
158- description: 'Not Found ' ,
159- content: new OA \JsonContent (ref: '#/components/schemas/NotFoundErrorResponse ' )
160- ),
161- ]
162- )]
163- public function getPage (Request $ request ): JsonResponse
164- {
165- $ admin = $ this ->requireAuthentication ($ request );
166- if (!$ admin ->getPrivileges ()->has (PrivilegeFlag::Subscribers)) {
167- throw $ this ->createAccessDeniedException ('You are not allowed to view subscribe pages. ' );
168- }
169-
170- $ page = $ this ->subscribePageManager ->findPage (id: (int ) $ request ->get ('id ' ));
171- if (!$ page ) {
172- throw $ this ->createNotFoundException ('Subscribe page not found ' );
173- }
174-
175- return $ this ->json ($ this ->normalizer ->normalize ($ page ), Response::HTTP_OK );
176- }
177-
178- #[Route('/{id}/public ' , name: 'get_public ' , requirements: ['id ' => '\\d+ ' ], methods: ['GET ' ])]
179- #[OA \Get(
180- path: '/api/v2/subscribe-pages/{id}/public ' ,
181- description: '🚧 **Status: Beta** – This method is under development. Avoid using in production. ' ,
182- summary: 'Get public subscribe page (placeholders replaced with actual values) ' ,
183- tags: ['subscriptions ' ],
184- parameters: [
185- new OA \Parameter (
186- name: 'id ' ,
187- description: 'Subscribe page ID ' ,
188- in: 'path ' ,
189- required: true ,
190- schema: new OA \Schema (type: 'integer ' )
191- )
192- ],
193- responses: [
194- new OA \Response (
195- response: 200 ,
196- description: 'Success ' ,
197- content: new OA \JsonContent (ref: '#/components/schemas/SubscribePagePublic ' ),
198- ),
199- new OA \Response (
200- response: 404 ,
201- description: 'Not Found ' ,
202- content: new OA \JsonContent (ref: '#/components/schemas/NotFoundErrorResponse ' )
203- ),
204- ]
205- )]
206- public function getPublicPage (Request $ request , SubscribePagePublicNormalizer $ normalizer ): JsonResponse
207- {
208- $ page = $ this ->subscribePageManager ->findPublicPage (id: (int ) $ request ->get ('id ' ));
209-
210- if (!$ page || $ page ->isActive () === false ) {
211- throw $ this ->createNotFoundException ('Subscribe page not found ' );
212- }
213-
214- return $ this ->json ($ normalizer ->normalize ($ page ), Response::HTTP_OK );
215- }
216-
217- #[Route('' , name: 'create ' , methods: ['POST ' ])]
114+ #[Route('/ ' , name: 'create ' , methods: ['POST ' ])]
218115 #[OA \Post(
219116 path: '/api/v2/subscribe-pages ' ,
220117 description: '🚧 **Status: Beta** – This method is under development. Avoid using in production. ' ,
@@ -288,6 +185,61 @@ public function createPage(Request $request): JsonResponse
288185 return $ this ->json ($ this ->normalizer ->normalize ($ page ), Response::HTTP_CREATED );
289186 }
290187
188+ #[Route('/{id} ' , name: 'get ' , requirements: ['id ' => '\\d+ ' ], methods: ['GET ' ])]
189+ #[OA \Get(
190+ path: '/api/v2/subscribe-pages/{id} ' ,
191+ description: '🚧 **Status: Beta** – This method is under development. Avoid using in production. ' ,
192+ summary: 'Get subscribe page ' ,
193+ tags: ['subscriptions ' ],
194+ parameters: [
195+ new OA \Parameter (
196+ name: 'php-auth-pw ' ,
197+ description: 'Session key obtained from login ' ,
198+ in: 'header ' ,
199+ required: false ,
200+ schema: new OA \Schema (type: 'string ' )
201+ ),
202+ new OA \Parameter (
203+ name: 'id ' ,
204+ description: 'Subscribe page ID ' ,
205+ in: 'path ' ,
206+ required: true ,
207+ schema: new OA \Schema (type: 'integer ' )
208+ )
209+ ],
210+ responses: [
211+ new OA \Response (
212+ response: 200 ,
213+ description: 'Success ' ,
214+ content: new OA \JsonContent (ref: '#/components/schemas/SubscribePage ' ),
215+ ),
216+ new OA \Response (
217+ response: 403 ,
218+ description: 'Failure ' ,
219+ content: new OA \JsonContent (ref: '#/components/schemas/UnauthorizedResponse ' )
220+ ),
221+ new OA \Response (
222+ response: 404 ,
223+ description: 'Not Found ' ,
224+ content: new OA \JsonContent (ref: '#/components/schemas/NotFoundErrorResponse ' )
225+ ),
226+ ]
227+ )]
228+ public function getPage (Request $ request ): JsonResponse
229+ {
230+ $ admin = $ this ->requireAuthentication ($ request );
231+ if (!$ admin ->getPrivileges ()->has (PrivilegeFlag::Subscribers)) {
232+ throw $ this ->createAccessDeniedException ('You are not allowed to view subscribe pages. ' );
233+ }
234+
235+ $ page = $ this ->subscribePageManager ->findPage (id: (int ) $ request ->get ('id ' ));
236+ if (!$ page ) {
237+ throw $ this ->createNotFoundException ('Subscribe page not found ' );
238+ }
239+
240+ return $ this ->json ($ this ->normalizer ->normalize ($ page ), Response::HTTP_OK );
241+ }
242+
291243 #[Route('/{id} ' , name: 'update ' , requirements: ['id ' => '\\d+ ' ], methods: ['PUT ' ])]
292244 #[OA \Put(
293245 path: '/api/v2/subscribe-pages/{id} ' ,
@@ -433,102 +385,4 @@ public function deletePage(
433385
434386 return $ this ->json (null , Response::HTTP_NO_CONTENT );
435387 }
436-
437- #[Route(
438- '/{id}/lists/{listId}/subscribers ' ,
439- name: 'subscribe ' ,
440- requirements: ['listId ' => '\d+ ' , 'id ' => '\d+ ' ],
441- methods: ['POST ' ]
442- )]
443- #[OA \Post(
444- path: '/api/v2/subscribe-pages/{id}/lists/{listId}/subscribers ' ,
445- description: '🚧 **Status: Beta** – This method is under development. Avoid using in production. ' .
446- 'Subscribe subscriber to a list from subscribe page. ' ,
447- summary: 'Create subscription ' ,
448- requestBody: new OA \RequestBody (
449- description: '' ,
450- required: true ,
451- content: new OA \JsonContent (ref: '#/components/schemas/PublicSubscriptionRequest ' )
452- ),
453- tags: ['subscriptions ' ],
454- parameters: [
455- new OA \Parameter (
456- name: 'listId ' ,
457- description: 'List ID ' ,
458- in: 'path ' ,
459- required: true ,
460- schema: new OA \Schema (type: 'string ' )
461- ),
462- new OA \Parameter (
463- name: 'id ' ,
464- description: 'Subscribe page ID ' ,
465- in: 'path ' ,
466- required: true ,
467- schema: new OA \Schema (type: 'integer ' )
468- ),
469- ],
470- responses: [
471- new OA \Response (
472- response: 201 ,
473- description: 'Success ' ,
474- content: new OA \JsonContent (
475- type: 'array ' ,
476- items: new OA \Items (ref: '#/components/schemas/Subscription ' )
477- )
478- ),
479- new OA \Response (
480- response: 400 ,
481- description: 'Failure ' ,
482- content: new OA \JsonContent (ref: '#/components/schemas/BadRequestResponse ' )
483- ),
484- new OA \Response (
485- response: 404 ,
486- description: 'Failure ' ,
487- content: new OA \JsonContent (ref: '#/components/schemas/NotFoundErrorResponse ' )
488- ),
489- new OA \Response (
490- response: 422 ,
491- description: 'Failure ' ,
492- content: new OA \JsonContent (ref: '#/components/schemas/ValidationErrorResponse ' )
493- ),
494- ]
495- )]
496- public function subscribe (
497- Request $ request ,
498- int $ id ,
499- #[MapEntity(mapping: ['listId ' => 'id ' ])] ?SubscriberList $ list = null ,
500- ): JsonResponse {
501- $ page = $ this ->subscribePageManager ->findPublicPage (id: $ id );
502- if (!$ list || !$ page ) {
503- throw $ this ->createNotFoundException ('Subscriber list or subscribe page not found. ' );
504- }
505-
506- /** @var PublicSubscriptionRequest $subscriptionRequest */
507- $ subscriptionRequest = $ this ->validator ->validate (
508- request: $ request ,
509- dtoClass: PublicSubscriptionRequest::class,
510- beforeValidation: static function (PublicSubscriptionRequest $ dto ) use ($ page ): void {
511- $ dto ->setSubscribePage ($ page );
512- }
513- );
514- $ subscriberEmail = $ subscriptionRequest ->email ;
515- $ subscriptions = $ this ->subscriptionManager ->createSubscriptions (
516- subscriberList: $ list ,
517- emails: [$ subscriberEmail ],
518- autoConfirm: false ,
519- );
520- $ this ->entityManager ->flush ();
521-
522- if ($ subscriptionRequest ->attributes !== []) {
523- $ this ->subscriberAttributeManager ->processAttributes (
524- subscriber: $ subscriptions [0 ]->getSubscriber (),
525- attributeData: $ subscriptionRequest ->attributes
526- );
527- }
528- $ this ->entityManager ->flush ();
529-
530- $ normalized = array_map (fn ($ item ) => $ this ->subscriptionNormalizer ->normalize ($ item ), $ subscriptions );
531-
532- return $ this ->json ($ normalized , Response::HTTP_CREATED );
533- }
534388}
0 commit comments