PackageController.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. namespace Packagist\WebBundle\Controller;
  3. use Symfony\Component\HttpFoundation\Request;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  6. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  7. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  8. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  9. use Packagist\WebBundle\Entity\Package;
  10. use Packagist\WebBundle\Package\Updater;
  11. use Composer\IO\NullIO;
  12. use Composer\Factory;
  13. use Composer\Repository\VcsRepository;
  14. class PackageController extends Controller
  15. {
  16. /**
  17. * @Template()
  18. * @Route(
  19. * "/packages/{name}/edit",
  20. * name="edit_package",
  21. * requirements={"name"="[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+?"}
  22. * )
  23. */
  24. public function editAction(Request $req, $name)
  25. {
  26. /** @var $packageRepo \Packagist\WebBundle\Entity\PackageRepository */
  27. $packageRepo = $this->getDoctrine()->getRepository('PackagistWebBundle:Package');
  28. /** @var $package Package */
  29. $package = $packageRepo->findOneByName($name);
  30. if (!$package) {
  31. throw $this->createNotFoundException("The requested package, $name, could not be found.");
  32. }
  33. if (!$package->getMaintainers()->contains($this->getUser()) && !$this->get('security.context')->isGranted('ROLE_EDIT_PACKAGES')) {
  34. throw new AccessDeniedException;
  35. }
  36. $form = $this->createFormBuilder($package, array("validation_groups" => array("Update")))
  37. ->add("repository", "text")
  38. ->getForm();
  39. if ($req->isMethod("POST")) {
  40. $form->bind($req);
  41. if ($form->isValid()) {
  42. // Force updating of packages once the package is viewed after the redirect.
  43. $package->setCrawledAt(null);
  44. $em = $this->getDoctrine()->getManager();
  45. $em->persist($package);
  46. $em->flush();
  47. $this->get("session")->getFlashBag()->set("success", "Changes saved.");
  48. return $this->redirect(
  49. $this->generateUrl("view_package", array("name" => $package->getName()))
  50. );
  51. }
  52. }
  53. return array(
  54. "package" => $package, "form" => $form->createView()
  55. );
  56. }
  57. }