/** * @Route("/portfolio/{id}", name="icap_portfolio_internal_portfolio_put") * @Method({"PUT"}) * * @ParamConverter("loggedUser", options={"authenticatedUser" = true}) */ public function putAction(Request $request, User $loggedUser, Portfolio $portfolio) { $this->checkPortfolioToolAccess(); if ($portfolio->getUser() === $loggedUser) { $data = $this->getPortfolioManager()->handle($portfolio, $request->request->all(), $this->get('kernel')->getEnvironment()); } else { $portfolioGuide = $this->getPortfolioGuideManager()->getByPortfolioAndGuide($portfolio, $loggedUser); if (null !== $portfolioGuide) { $this->getPortfolioGuideManager()->updateCommentsViewDate($portfolioGuide); $data = $this->getPortfolioManager()->getPortfolioData($portfolio); $data['unreadComments'] = $portfolio->getCountUnreadComments($portfolioGuide->getCommentsViewAt()); $data['commentsViewAt'] = $portfolioGuide->getCommentsViewAt(); } else { throw new NotFoundHttpException(); } } $response = new JsonResponse(); $response->setData($data); return $response; }
/** * @param Portfolio $portfolio * @param User $user * * @return bool */ public function visibleToUser(Portfolio $portfolio, User $user) { $visibility = $portfolio->getVisibility(); $isVisible = false; if ($portfolio->getUser() === $user) { $isVisible = true; } else { if (Portfolio::VISIBILITY_EVERYBODY === $visibility || Portfolio::VISIBILITY_PLATFORM_USER === $visibility) { $isVisible = true; } elseif (Portfolio::VISIBILITY_USER === $visibility) { $portfolioUsers = $portfolio->getPortfolioUsers(); foreach ($portfolioUsers as $portfolioUser) { if ($user === $portfolioUser->getUser()) { $isVisible = true; break; } } if (!$isVisible) { $portfolioGroups = $portfolio->getPortfolioGroups(); $userGroups = $user->getGroups(); foreach ($portfolioGroups as $portfolioGroup) { foreach ($userGroups as $userGroup) { if ($userGroup === $portfolioGroup->getGroup()) { $isVisible = true; break; } } } } if (!$isVisible) { $portfolioTeams = $portfolio->getPortfolioTeams(); /** @var \Claroline\TeamBundle\Entity\Team[] $userTeams */ $userTeams = $this->teamManager->getTeamsByUser($user); foreach ($portfolioTeams as $portfolioTeam) { foreach ($userTeams as $userTeam) { if ($userTeam === $portfolioTeam->getTeam()) { $isVisible = true; break; } } } } } } return $isVisible; }
/** * @param Portfolio $portfolio * @param PortfolioGuide $portfolioGuide */ public function __construct(Portfolio $portfolio, PortfolioGuide $portfolioGuide) { $this->portfolio = $portfolio; $user = $portfolio->getUser(); parent::__construct(self::ACTION, array('owner' => array('lastName' => $user->getLastName(), 'firstName' => $user->getFirstName()), 'portfolio' => array('id' => $this->portfolio->getId(), 'title' => $this->portfolio->getTitle(), 'slug' => $this->portfolio->getSlug())), $portfolioGuide->getUser(), null, null, null, null, $user); }
/** * @Route("/delete/{id}", name="icap_portfolio_delete", requirements={"id" = "\d+"}) * * @ParamConverter("loggedUser", options={"authenticatedUser" = true}) * @Template() */ public function deleteAction(Request $request, User $loggedUser, Portfolio $portfolio) { $this->checkPortfolioToolAccess(); if ($loggedUser !== $portfolio->getUser()) { throw $this->createNotFoundException('Unkown user for this portfolio.'); } try { $this->getPortfolioFormHandler()->handleDelete($portfolio); if ($request->isXmlHttpRequest()) { return new Response($this->refreshPortfolioList($loggedUser)); } else { $this->getSessionFlashbag()->add('success', $this->getTranslator()->trans('portfolio_delete_success_message', [], 'icap_portfolio')); } } catch (\Exception $exception) { if ($request->isXmlHttpRequest()) { return new JsonResponse('Error while deleting the portfolio', 500); } else { $this->getSessionFlashbag()->add('error', $this->getTranslator()->trans('portfolio_delete_error_message', [], 'icap_portfolio')); } } return $this->redirect($this->generateUrl('icap_portfolio_index')); }
/** * @param null|User $user * @param null|Portfolio $portfolio * * @throws NotFoundHttpException */ public function checkPortfolioToolAccess(User $user = null, Portfolio $portfolio = null) { if (!$this->getPortfolioToolAccess()) { throw $this->createNotFoundException(); } if (null !== $user && null !== $portfolio && $portfolio->getUser() !== $user) { $portfolioGuide = $this->getPortfolioGuideManager()->getByPortfolioAndGuide($portfolio, $user); if (null === $portfolioGuide) { throw $this->createNotFoundException(); } } }