PackageController.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <?php
  2. namespace Packagist\WebBundle\Controller;
  3. use Packagist\WebBundle\Form\Type\AbandonedType;
  4. use Symfony\Component\HttpFoundation\Request;
  5. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  6. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  7. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  8. use Packagist\WebBundle\Entity\Package;
  9. class PackageController extends Controller
  10. {
  11. /**
  12. * @Template()
  13. * @Route(
  14. * "/packages/{name}/edit",
  15. * name="edit_package",
  16. * requirements={"name"="[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+?"}
  17. * )
  18. */
  19. public function editAction(Request $req, $name)
  20. {
  21. /** @var $packageRepo \Packagist\WebBundle\Entity\PackageRepository */
  22. $packageRepo = $this->getDoctrine()->getRepository('PackagistWebBundle:Package');
  23. /** @var $package Package */
  24. $package = $packageRepo->findOneByName($name);
  25. if (!$package) {
  26. throw $this->createNotFoundException("The requested package, $name, could not be found.");
  27. }
  28. if (!$package->getMaintainers()->contains($this->getUser()) && !$this->get('security.context')->isGranted('ROLE_EDIT_PACKAGES')) {
  29. throw new AccessDeniedException;
  30. }
  31. $form = $this->createFormBuilder($package, array("validation_groups" => array("Update")))
  32. ->add("repository", "text")
  33. ->getForm();
  34. if ($req->isMethod("POST")) {
  35. $form->bind($req);
  36. if ($form->isValid()) {
  37. // Force updating of packages once the package is viewed after the redirect.
  38. $package->setCrawledAt(null);
  39. $em = $this->getDoctrine()->getManager();
  40. $em->persist($package);
  41. $em->flush();
  42. $this->get("session")->getFlashBag()->set("success", "Changes saved.");
  43. return $this->redirect(
  44. $this->generateUrl("view_package", array("name" => $package->getName()))
  45. );
  46. }
  47. }
  48. return array(
  49. "package" => $package, "form" => $form->createView()
  50. );
  51. }
  52. /**
  53. * @Route(
  54. * "/packages/{name}/abandon",
  55. * name="abandon_package",
  56. * requirements={"name"="[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+?"}
  57. * )
  58. * @Template()
  59. */
  60. public function abandonAction(Request $request, $name)
  61. {
  62. /** @var $packageRepo \Packagist\WebBundle\Entity\PackageRepository */
  63. $packageRepo = $this->getDoctrine()->getRepository('PackagistWebBundle:Package');
  64. /** @var $package Package */
  65. $package = $packageRepo->findOneByName($name);
  66. if (!$package) {
  67. throw $this->createNotFoundException("The requested package, $name, could not be found.");
  68. }
  69. if (!$package->getMaintainers()->contains($this->getUser()) && !$this->get('security.context')->isGranted('ROLE_EDIT_PACKAGES')) {
  70. throw new AccessDeniedException;
  71. }
  72. $form = $this->createForm(new AbandonedType());
  73. if ($request->getMethod() === 'POST') {
  74. $form->bind($request->request->get('package'));
  75. if ($form->isValid()) {
  76. $package->setAbandoned(true);
  77. $package->setReplacementPackage(str_replace('https://packagist.org/packages/', '', $form->get('replacement')->getData()));
  78. $package->setIndexedAt(null);
  79. $em = $this->getDoctrine()->getManager();
  80. $em->flush();
  81. return $this->redirect($this->generateUrl('view_package', array('name' => $package->getName())));
  82. }
  83. }
  84. return array(
  85. 'package' => $package,
  86. 'form' => $form->createView()
  87. );
  88. }
  89. /**
  90. * @Route(
  91. * "/packages/{name}/unabandon",
  92. * name="unabandon_package",
  93. * requirements={"name"="[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+?"}
  94. * )
  95. */
  96. public function unabandonAction($name)
  97. {
  98. /** @var $packageRepo \Packagist\WebBundle\Entity\PackageRepository */
  99. $packageRepo = $this->getDoctrine()->getRepository('PackagistWebBundle:Package');
  100. /** @var $package Package */
  101. $package = $packageRepo->findOneByName($name);
  102. if (!$package) {
  103. throw $this->createNotFoundException("The requested package, $name, could not be found.");
  104. }
  105. if (!$package->getMaintainers()->contains($this->getUser()) && !$this->get('security.context')->isGranted('ROLE_EDIT_PACKAGES')) {
  106. throw new AccessDeniedException;
  107. }
  108. $package->setAbandoned(false);
  109. $package->setReplacementPackage(null);
  110. $package->setIndexedAt(null);
  111. $em = $this->getDoctrine()->getManager();
  112. $em->flush();
  113. return $this->redirect($this->generateUrl('view_package', array('name' => $package->getName())));
  114. }
  115. }