Skip to content

Commit

Permalink
Implements the deletion of SnippetTemplates
Browse files Browse the repository at this point in the history
  • Loading branch information
terwey committed May 5, 2014
1 parent 4e6934b commit ab3094e
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -201,11 +201,28 @@ public function getCurrentlyUsed()
return $queryBuilder->getQuery();
}

/**
* Flush method
*/
public function flush()
public function deleteSnippetTemplate($id, $force = false)
{
$this->getEntityManager()->flush();
// check if the SnippetTemplate has any Snippets attached to it.
$snippetTemplate = $this->getTemplateById($id, 'all');
if (!is_null($snippetTemplate)) {
$snippets = $snippetTemplate->getSnippets()->toArray();
if (count($snippets) == 0 || $force == true) {
$em = $this->getEntityManager();
$em->remove($snippetTemplate);
$em->flush();

return true;
} else {
foreach ($snippets as $snippet) {
$snippetIdArr[$snippet->getId()] = $snippet->getId();
}
$snippetIds = implode(", ", array_flip($snippetIdArr));

throw new \Newscoop\Exception\ResourcesConflictException('SnippetTemplate with ID: '.$id.' is in use by Snippets ('.$snippetIds.')');
}
} else {
throw new \Exception('SnippetTemplate with ID: '.$id.' does not exist');
}
}
}
4 changes: 2 additions & 2 deletions newscoop/library/Newscoop/Entity/Snippet/SnippetTemplate.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class SnippetTemplate
protected $id;

/**
* @ORM\OneToMany(targetEntity="Newscoop\Entity\Snippet", mappedBy="template")
* @ORM\OneToMany(targetEntity="Newscoop\Entity\Snippet", cascade={"remove"}, mappedBy="template")
* @var Doctrine\Common\Collections\ArrayCollection
*/
protected $snippets;
Expand All @@ -47,7 +47,7 @@ class SnippetTemplate
protected $controller;

/**
* @ORM\OneToMany(targetEntity="Newscoop\Entity\Snippet\SnippetTemplate\SnippetTemplateField", mappedBy="template", cascade={"persist"}, indexBy="templateFieldName")
* @ORM\OneToMany(targetEntity="Newscoop\Entity\Snippet\SnippetTemplate\SnippetTemplateField", mappedBy="template", cascade={"persist", "remove"}, indexBy="templateFieldName")
* @var Doctrine\Common\Collections\ArrayCollection
*/
protected $fields;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,4 +101,31 @@ public function getSingleSnippetTemplateAction(Request $request, $id)
return $snippetTemplate;
}

/**
* Delete SnippetTemplate
*
* @ApiDoc(
* statusCodes={
* 204="Returned when SnippetTemplate removed succesfuly",
* 404={
* "Returned when the SnippetTemplate is not found",
* },
* 409="Returned when SnippetTemplate is used by Articles"
* },
* parameters={
* {"name"="force", "dataType"="boolean", "required"=false, "description"="Force delete"},
* }
* )
*
* @Route("/snippetTemplates/{id}.{_format}", defaults={"_format"="json"})
* @Method("DELETE")
* @View(statusCode=204)
*/
public function deleteSnippetTemplateAction(Request $request, $id)
{
$force = $request->query->get('force', false);
$em = $this->container->get('em');
$articleSnippets = $em->getRepository('Newscoop\Entity\Snippet\SnippetTemplate')
->deleteSnippetTemplate($id, $force);
}
}

0 comments on commit ab3094e

Please sign in to comment.