src/FMT/Application/Controller/Common/PublicDashboardController.php line 116

Open in your IDE?
  1. <?php
  2. namespace FMT\Application\Controller\Common;
  3. use FMT\Data\Entity\User;
  4. use FMT\Data\Model\BaseFilterOptions;
  5. use FMT\Domain\Service\CampaignManagerInterface;
  6. use FMT\Domain\Service\UserTransactionManagerInterface;
  7. use FMT\Application\Controller\AbstractBaseController;
  8. use FMT\Application\FormType\Filter\FilterFormFactory;
  9. use FMT\Application\FormType\Filter\FilterFormFactoryInterface;
  10. use FMT\Application\Traits\ControllerHelperTrait;
  11. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
  12. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  13. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  14. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  15. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  16. use Symfony\Component\HttpFoundation\JsonResponse;
  17. use Symfony\Component\HttpFoundation\RedirectResponse;
  18. use Symfony\Component\HttpFoundation\Request;
  19. /**
  20.  * Class PublicDashboardController
  21.  * @package FMT\Application\Controller\Common
  22.  * @Route("/")
  23.  * @Template()
  24.  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  25.  */
  26. class PublicDashboardController extends AbstractBaseController
  27. {
  28.     use ControllerHelperTrait;
  29.     const ROUTE_STUDENT_INDEX "fmt-common-dashboard-student-index";
  30.     const ROUTE_DONOR_INVITATION_PAGE "fmt-common-donor-invitation-page";
  31.     const ROUTE_DONOR_INDEX "fmt-common-dashboard-donor-index";
  32.     const ROUTE_INDEX "fmt-common-dashboard-index";
  33.     const ROUTE_ACTIVE_CAMPAIGN "fmt-common-dashboard-active-campaign";
  34.     const ROUTE_LOG_IN "fmt-log-in";
  35.     const ROUTE_SIGN_UP "fmt-sign-up";
  36.     const ROUTE_SEARCH "fmt-search";
  37.     /**
  38.      * @var $campaignManager CampaignManagerInterface
  39.      */
  40.     private $campaignManager;
  41.     /**
  42.      * @var FilterFormFactoryInterface
  43.      */
  44.     private $filterFormFactory;
  45.     /**
  46.      * @var UserTransactionManagerInterface
  47.      */
  48.     private $userTransactionManager;
  49.     /**
  50.      * @required
  51.      * @param CampaignManagerInterface $campaignManager
  52.      */
  53.     public function setCampaignManager(CampaignManagerInterface $campaignManager)
  54.     {
  55.         $this->campaignManager $campaignManager;
  56.     }
  57.     /**
  58.      * @param UserTransactionManagerInterface $manager
  59.      * @required
  60.      */
  61.     public function setUserTransactionManager(UserTransactionManagerInterface $manager)
  62.     {
  63.         $this->userTransactionManager $manager;
  64.     }
  65.     /**
  66.      * @required
  67.      * @param FilterFormFactoryInterface $filterFormFactory
  68.      */
  69.     public function setFilterFormManager(FilterFormFactoryInterface $filterFormFactory)
  70.     {
  71.         $this->filterFormFactory $filterFormFactory;
  72.     }
  73.     /**
  74.      * @param Request $request
  75.      * @return array|RedirectResponse
  76.      * @Route("/search", name=PublicDashboardController::ROUTE_SEARCH)
  77.      */
  78.     public function searchAction(Request $request)
  79.     {
  80.         $formFilter $this->filterFormFactory->createForm(
  81.             FilterFormFactory::TYPE_ACTIVE_CAMPAIGN,
  82.             [
  83.                 'action' => $this->generateUrl(PublicDashboardController::ROUTE_ACTIVE_CAMPAIGN),
  84.                 'method' => 'GET'
  85.             ]
  86.         );
  87.         $form $this->filterFormFactory->createForm(
  88.             FilterFormFactory::TYPE_ACTIVE_CAMPAIGN,
  89.             [
  90.                 'action' => $this->generateUrl(PublicDashboardController::ROUTE_ACTIVE_CAMPAIGN),
  91.             ]
  92.         );
  93.         return [
  94.             'form' => $form->createView(),
  95.             'formFilter' => $formFilter->createView(),
  96.         ];
  97.     }
  98.     /**
  99.      * @return RedirectResponse
  100.      * @Route("/", name=PublicDashboardController::ROUTE_INDEX)
  101.      */
  102.     public function indexAction()
  103.     {
  104.         $user $this->getUser();
  105.         if ($user != null) {
  106.             $url $this->generateSuccessRedirectHref($user);
  107.             return $this->redirect($url);
  108.         }
  109.         return $this->redirectToRoute(PublicDashboardController::ROUTE_LOG_IN);
  110.     }
  111.     /**
  112.      * @return RedirectResponse|void
  113.      * @Route("/log-in", name=PublicDashboardController::ROUTE_LOG_IN)
  114.      */
  115.     public function logInAction()
  116.     {
  117.         $user $this->getUser();
  118.         if ($user != null) {
  119.             $url $this->generateSuccessRedirectHref($user);
  120.             return $this->redirect($url);
  121.         }
  122.     }
  123.     /**
  124.      * @return RedirectResponse|void
  125.      * @Route("/sign-up", name=PublicDashboardController::ROUTE_SIGN_UP)
  126.      */
  127.     public function signUpAction()
  128.     {
  129.         $user $this->getUser();
  130.         if ($user != null) {
  131.             $url $this->generateSuccessRedirectHref($user);
  132.             return $this->redirect($url);
  133.         }
  134.     }
  135.     /**
  136.      * @Route("/student/{id}/", requirements={"id":"\d+"}, name=PublicDashboardController::ROUTE_STUDENT_INDEX)
  137.      * @Security("owner.isStudent()")
  138.      * @param User $owner
  139.      * @return array
  140.      */
  141.     public function studentIndexAction(User $owner)
  142.     {
  143.         return [
  144.             'campaigns' => $owner->getCampaigns(),
  145.             'user' => $owner,
  146.             'statistic' => $owner->getStatistic(),
  147.         ];
  148.     }
  149.     /**
  150.      * @Route(
  151.      *     "/student/{id}/invitation/{token}",
  152.      *     requirements={"id":"\d+"},
  153.      *     name=PublicDashboardController::ROUTE_DONOR_INVITATION_PAGE,
  154.      *     defaults={
  155.      *          "token" = null
  156.      *     }
  157.      * )
  158.      * @ParamConverter("student", class="FMT\Data\Entity\User", options={"invitation":true})
  159.      * @param User $student
  160.      * @return array|RedirectResponse
  161.      */
  162.     public function donorInvitationPageAction(User $student$token)
  163.     {
  164.         if ($this->getUser()) {
  165.             return $this->redirectToRoute(PaymentController::ROUTE_DONATE, ['id' => $student->getId()]);
  166.         }
  167.         return [
  168.             'student' => $student,
  169.             'token' => $token,
  170.         ];
  171.     }
  172.     /**
  173.      * @param User $owner
  174.      * @param $page
  175.      * @return array
  176.      * @Route("/donor/{id}/{page}",
  177.      *     name=PublicDashboardController::ROUTE_DONOR_INDEX,
  178.      *     defaults={
  179.      *      "page" = 1
  180.      *     },
  181.      *     requirements={"id"="\d+", "page"="\d+"},
  182.      * )
  183.      * @Security("owner.isDonor()")
  184.      */
  185.     public function donorIndexAction(User $owner$page)
  186.     {
  187.         $limits BaseFilterOptions::RECORDS_LIMIT;
  188.         $statistic $owner->getStatistic();
  189.         return [
  190.             //TODO change repository method to actual method which will find all students belongs to donor by donation
  191.             'campaigns' => $this->paginator->paginate(
  192.                 $this->campaignManager->getRepository()->findAll(),
  193.                 $page,
  194.                 array_shift($limits)
  195.             ),
  196.             'user' => $owner,
  197.             'students_founded' => $statistic->getStudentsFounded(),
  198.             'books_purchased' => $statistic->getBooksPurchasedFor(),
  199.             'amount_founded' => $statistic->getAmountFounded(),
  200.             'thanks_for_donations' => $this->userTransactionManager->getThanksData($owner),
  201.         ];
  202.     }
  203.     /**
  204.      * @param Request $request
  205.      * @param $page
  206.      * @return array|JsonResponse
  207.      * @Route("/public/active-campaigns/{page}",
  208.      *     name=PublicDashboardController::ROUTE_ACTIVE_CAMPAIGN,
  209.      *     defaults={
  210.      *      "page" = 1
  211.      *     },
  212.      *     requirements={"page"="\d+"}
  213.      * )
  214.      * @Method({"GET"})
  215.      */
  216.     public function activeCampaignsAction(Request $request$page)
  217.     {
  218.         $formFilter $this->filterFormFactory->createForm(
  219.             FilterFormFactory::TYPE_ACTIVE_CAMPAIGN,
  220.             [
  221.                 'action' => $this->generateUrl(self::ROUTE_ACTIVE_CAMPAIGN),
  222.                 'method' => 'GET'
  223.             ]
  224.         );
  225.         //query->parameters->base_filter: sortDirection, search, _token
  226.         $formFilter->handleRequest($request);
  227.         
  228.         $formFilterParams $formFilter->getData();
  229.        
  230.         $user $this->getUser();
  231.         $userIsNotStudent $user ? !$user->isStudent() : null;
  232.         $activeUserId $user $user->getId() : null;
  233.         $responseParams = [
  234.             'formFilter' => $formFilter->createView(),
  235.             'campaigns' => $this->paginate(
  236.                 $this->campaignManager->getByFilter($formFilterParams),
  237.                 $page,
  238.                 $formFilterParams->getFilterLimit()
  239.             ),
  240.             'sortByMajor' => true,
  241.             'total' => $this->campaignManager->getTotalCountByFilter($formFilterParams),
  242.             'userIsNotStudent' => $userIsNotStudent,
  243.             'activeUserId' => $activeUserId
  244.         ];
  245.         if ($request->isXmlHttpRequest()) {
  246.             return $this->prepareJsonResponse(
  247.                 $responseParams,
  248.                 '@Public/common/public_dashboard/_search.html.twig',
  249.                 true,
  250.                 false
  251.             );
  252.         }
  253.         return $responseParams;
  254.     }
  255. }