33
44use verbb \workflow \Workflow ;
55use verbb \workflow \elements \Submission ;
6+ use verbb \workflow \models \Review ;
67
78use Craft ;
89use craft \db \Table ;
@@ -48,9 +49,34 @@ public function actionSaveSubmission(): ?Response
4849
4950 $ request = Craft::$ app ->getRequest ();
5051 $ session = Craft::$ app ->getSession ();
52+ $ currentUser = Craft::$ app ->getUser ()->getIdentity ();
5153
5254 $ submissionId = $ request ->getParam ('submissionId ' );
5355 $ submission = Craft::$ app ->getElements ()->getElementById ($ submissionId );
56+ $ status = $ request ->getParam ('status ' );
57+
58+ if (!$ submission ) {
59+ $ session ->setError (Craft::t ('workflow ' , 'Unable to find submission. ' ));
60+
61+ return null ;
62+ }
63+
64+ // Skip if there's nothing to change
65+ if ($ submission ->status !== $ status ) {
66+ // If trying to approve their own submission, fail
67+ if ($ status === Review::STATUS_APPROVED && $ submission ->editorId === $ currentUser ->id ) {
68+ $ session ->setError (Craft::t ('workflow ' , 'You cannot approve your own submission. ' ));
69+
70+ Craft::$ app ->getUrlManager ()->setRouteParams ([
71+ 'submission ' => $ submission ,
72+ 'errors ' => $ submission ->getErrors (),
73+ ]);
74+
75+ return null ;
76+ } else {
77+ Workflow::$ plugin ->getSubmissions ()->triggerSubmissionStatus ($ status , $ submission );
78+ }
79+ }
5480
5581 if (!Craft::$ app ->getElements ()->saveElement ($ submission )) {
5682 $ session ->setError (Craft::t ('workflow ' , 'Unable to save submission. ' ));
@@ -63,7 +89,7 @@ public function actionSaveSubmission(): ?Response
6389 return null ;
6490 }
6591
66- $ session ->setNotice (Craft::t ('workflow ' , 'Comment saved successfully. ' ));
92+ $ session ->setNotice (Craft::t ('workflow ' , 'Submission saved successfully. ' ));
6793
6894 return $ this ->redirectToPostedUrl ($ submission );
6995 }
0 commit comments