/** * @Patch("/chapters/{lesson}/{chapter}", * requirements={"lesson" = "\d+"}) * @ParamConverter("lesson", class="IcapLessonBundle:Lesson") * @ParamConverter("chapter", class="IcapLessonBundle:Chapter", options={"mapping": {"chapter": "slug"}}) * @View(serializerEnableMaxDepthChecks=true) */ public function moveChapterAction(Lesson $lesson, Chapter $chapter) { // CHECK ACCESS $this->apiCheckAccess('EDIT', $lesson); $translator = $this->get('translator'); $oldParent = $chapter->getParent(); $newParentSlug = $this->request->request->get('newParent'); $prevSiblingSlug = $this->request->request->get('prevSibling'); $em = $this->getDoctrine()->getManager(); $repo = $em->getRepository('IcapLessonBundle:Chapter'); $newParent = $repo->findOneBySlug($newParentSlug); if ($prevSiblingSlug == null) { $repo->persistAsFirstChildOf($chapter, $newParent); } else { $prevSibling = $repo->findOneBySlug($prevSiblingSlug); $repo->persistAsNextSiblingOf($chapter, $prevSibling); } $em->flush(); $this->dispatchChapterMoveEvent($lesson, $chapter, $oldParent, $chapter->getParent()); return array('message' => $translator->trans('Your chapter has been modified', array(), 'icap_lesson'), 'chapter' => $this->formatChapterData($chapter)); }