123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- <?php
- namespace Packagist\WebBundle\Controller;
- use Packagist\WebBundle\Form\Type\AbandonedType;
- use Symfony\Component\HttpFoundation\Request;
- use Symfony\Component\Security\Core\Exception\AccessDeniedException;
- use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
- use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
- use Packagist\WebBundle\Entity\Package;
- class PackageController extends Controller
- {
- /**
- * @Template()
- * @Route(
- * "/packages/{name}/edit",
- * name="edit_package",
- * requirements={"name"="[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+?"}
- * )
- */
- public function editAction(Request $req, $name)
- {
- /** @var $packageRepo \Packagist\WebBundle\Entity\PackageRepository */
- $packageRepo = $this->getDoctrine()->getRepository('PackagistWebBundle:Package');
- /** @var $package Package */
- $package = $packageRepo->findOneByName($name);
- if (!$package) {
- throw $this->createNotFoundException("The requested package, $name, could not be found.");
- }
- if (!$package->getMaintainers()->contains($this->getUser()) && !$this->get('security.context')->isGranted('ROLE_EDIT_PACKAGES')) {
- throw new AccessDeniedException;
- }
- $form = $this->createFormBuilder($package, array("validation_groups" => array("Update")))
- ->add("repository", "text")
- ->getForm();
- if ($req->isMethod("POST")) {
- $form->bind($req);
- if ($form->isValid()) {
- // Force updating of packages once the package is viewed after the redirect.
- $package->setCrawledAt(null);
- $em = $this->getDoctrine()->getManager();
- $em->persist($package);
- $em->flush();
- $this->get("session")->getFlashBag()->set("success", "Changes saved.");
- return $this->redirect(
- $this->generateUrl("view_package", array("name" => $package->getName()))
- );
- }
- }
- return array(
- "package" => $package, "form" => $form->createView()
- );
- }
- /**
- * @Route(
- * "/packages/{name}/abandon",
- * name="abandon_package",
- * requirements={"name"="[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+?"}
- * )
- * @Template()
- */
- public function abandonAction(Request $request, $name)
- {
- /** @var $packageRepo \Packagist\WebBundle\Entity\PackageRepository */
- $packageRepo = $this->getDoctrine()->getRepository('PackagistWebBundle:Package');
- /** @var $package Package */
- $package = $packageRepo->findOneByName($name);
- if (!$package) {
- throw $this->createNotFoundException("The requested package, $name, could not be found.");
- }
- if (!$package->getMaintainers()->contains($this->getUser()) && !$this->get('security.context')->isGranted('ROLE_EDIT_PACKAGES')) {
- throw new AccessDeniedException;
- }
- $form = $this->createForm(new AbandonedType());
- if ($request->getMethod() === 'POST') {
- $form->bind($request->request->get('package'));
- if ($form->isValid()) {
- $package->setAbandoned(true);
- $package->setReplacementPackage(str_replace('https://packagist.org/packages/', '', $form->get('replacement')->getData()));
- $package->setIndexedAt(null);
- $em = $this->getDoctrine()->getManager();
- $em->flush();
- return $this->redirect($this->generateUrl('view_package', array('name' => $package->getName())));
- }
- }
- return array(
- 'package' => $package,
- 'form' => $form->createView()
- );
- }
- /**
- * @Route(
- * "/packages/{name}/unabandon",
- * name="unabandon_package",
- * requirements={"name"="[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+?"}
- * )
- */
- public function unabandonAction($name)
- {
- /** @var $packageRepo \Packagist\WebBundle\Entity\PackageRepository */
- $packageRepo = $this->getDoctrine()->getRepository('PackagistWebBundle:Package');
- /** @var $package Package */
- $package = $packageRepo->findOneByName($name);
- if (!$package) {
- throw $this->createNotFoundException("The requested package, $name, could not be found.");
- }
- if (!$package->getMaintainers()->contains($this->getUser()) && !$this->get('security.context')->isGranted('ROLE_EDIT_PACKAGES')) {
- throw new AccessDeniedException;
- }
- $package->setAbandoned(false);
- $package->setReplacementPackage(null);
- $package->setIndexedAt(null);
- $em = $this->getDoctrine()->getManager();
- $em->flush();
- return $this->redirect($this->generateUrl('view_package', array('name' => $package->getName())));
- }
- }
|