/**
  * @Route("/publish/{id}", requirements={"id"="\d+"})
  * @ParamConverter("petition", class="CivixCoreBundle:Poll\Question")
  */
 public function publishAction(Request $request, Petition $petition)
 {
     if ($petition->getUser() !== $this->getUser() || $petition->getPublishedAt() || $request->get('token') !== $this->getToken()) {
         throw new AccessDeniedHttpException();
     }
     if (true === $petition->getIsOutsidersSign()) {
         return $this->redirect($this->generateUrl("civix_front_{$this->getUser()->getType()}_payment_buypublicpetition", array('petition' => $petition->getId())));
     }
     $petition->setPublishedAt(new \DateTime());
     $this->getDoctrine()->getManager()->flush($petition);
     $this->getDoctrine()->getRepository('CivixCoreBundle:HashTag')->addForQuestion($petition);
     $this->get('civix_core.activity_update')->publishPetitionToActivity($petition);
     $this->get('session')->getFlashBag()->add('notice', 'The petition has been successfully published');
     return $this->redirect($this->generateUrl("civix_front_{$this->getUser()->getType()}_petition_index"));
 }
 /**
  * @Route("/petitions/buy-outsiders/{petition}")
  * @ParamConverter(
  *      "petition",
  *      class="CivixCoreBundle:Poll\Question\Petition"
  * )
  * @Template("CivixFrontBundle:Payment:form.html.twig")
  */
 public function buyPublicPetitionAction(Request $request, Petition $petition)
 {
     if ($petition->getUser() !== $this->getUser()) {
         throw new AccessDeniedHttpException();
     }
     $card = new CardModel();
     $form = $this->createForm(new CardFormType(), $card);
     //get marketplace
     $marketplaceToken = $this->get('civix_core.payments')->getMarketPlaceToken();
     if ('POST' === $request->getMethod()) {
         if ($form->submit($request)->isValid()) {
             try {
                 $customer = $this->get('civix_core.customer_manager')->getCustomerByUser($this->getUser());
                 $this->get('civix_core.payments')->buyPublishOutsiderPetition($card, $customer);
                 $petition->setPublishedAt(new \DateTime());
                 $this->getDoctrine()->getManager()->flush($petition);
                 $this->get('civix_core.activity_update')->publishPetitionToActivity($petition);
                 $this->get('session')->getFlashBag()->add('notice', 'The petition has been successfully published');
                 return $this->redirect($this->generateUrl("civix_front_{$this->getUser()->getType()}_petition_index"));
             } catch (\Balanced\Errors\DuplicateAccountEmailAddress $ex) {
                 $this->get('session')->getFlashBag()->add('error', 'User with this email exist in balanced system.');
             } catch (\Balanced\Errors\Declined $ex) {
                 $this->get('session')->getFlashBag()->add('error', 'The processor declined the debit. ' . $ex->description);
             } catch (\Balanced\Errors\NoFundingSource $ex) {
                 $this->get('session')->getFlashBag()->add('error', 'The buyer has not active funding sources. ' . $ex->description);
             } catch (\Balanced\Errors\CannotDebit $ex) {
                 $this->get('session')->getFlashBag()->add('error', 'The buyer has no debitable funding sources. ' . $ex->description);
             } catch (\Balanced\Errors\Error $ex) {
                 $this->get('session')->getFlashBag()->add('error', $ex->description);
             }
         }
     }
     return array('formTitle' => '', 'marketplaceToken' => $marketplaceToken, 'petition' => $petition->getId(), 'form' => $form->createView());
 }