diff --git a/public/index.php b/public/index.php index 358e189..f55cee1 100644 --- a/public/index.php +++ b/public/index.php @@ -9,12 +9,14 @@ $loader = new SplClassLoader('Silex', __DIR__ . '/../src'); $loader->register(); $security = new \Silex\Controller\SecurityController(); +$visitor = new \Silex\Controller\VisitorController(); $user = new \Silex\Controller\UserController(); $admin = new \Silex\Controller\AdminController(); $router = new Router($_SERVER['REQUEST_URI']); -$router->get('/^$/', [$user, 'index']); -$router->get('/^recent\/(?\d+)$/', [$user, 'index']); -$router->get('/^news\/(?[A-Za-z0-9-]+)-(?\d+)$/', [$user, 'viewPost']); +$router->setBasePath("~cofrizot/silex/index.php"); +$router->get('/^$/', [$visitor, 'index']); +$router->get('/^recent\/(?\d+)$/', [$visitor, 'index']); +$router->get('/^news\/(?[A-Za-z0-9-]+)-(?\d+)$/', [$visitor, 'viewPost']); $router->post('/^comment\/(?\d+)$/', [$user, 'comment']); $router->match('/^login$/', [$security, 'login']); $router->match('/^register$/', [$security, 'register']); diff --git a/src/Silex/Controller/FrontController.php b/src/Silex/Controller/FrontController.php index 747c1ca..ff149c3 100644 --- a/src/Silex/Controller/FrontController.php +++ b/src/Silex/Controller/FrontController.php @@ -23,6 +23,13 @@ class FrontController && ($di->getSecurity()->getCurrentUser() === null || !$di->getSecurity()->getCurrentUser()->isAdmin())) { HttpResponse::redirect($di->getRouter()->url('login')); } + + if($this->route->getController() instanceof UserController + && $di->getSecurity()->getCurrentUser() === null) + { + HttpResponse::redirect($di->getRouter()->url('login')); + } + return $this->route->call($di); } } diff --git a/src/Silex/Controller/UserController.php b/src/Silex/Controller/UserController.php index 75f03ca..d7b855d 100644 --- a/src/Silex/Controller/UserController.php +++ b/src/Silex/Controller/UserController.php @@ -14,36 +14,6 @@ class UserController { private const PER_PAGE = 12; - public function index(DI $di, array $params): HttpResponse - { - $gw = $di->getNewsGateway(); - $gwc = $di->getCommentGateway(); - $user = $di->getSecurity()->getCurrentUser(); - - $page = intval($params['page'] ?? 1); - $total = $gw->getCount(); - $nbPages = Pagination::getNbPages($total, self::PER_PAGE); - $news = $gw->getPaginatedRecentNews($page , self::PER_PAGE); - $nbComments = $gwc->getCommentNumber(); - if($user !== null){ - $nbCommentsByUser = $gwc->getCommentNumberFromUser($user->getId()); - } else { - $nbCommentsByUser = 0; - } - return new HttpResponse(200, 'home', ['news' => $news, 'page' => $page, 'nbPages' => $nbPages, 'nbComments' => $nbComments, 'nbCommentsByUser' => $nbCommentsByUser]); - } - - public function viewPost(DI $di, array $params): HttpResponse - { - $newsId = intval($params['id']); - $news = $di->getNewsGateway()->getById($newsId); - if($news->getSlug() !== $params['slug']){ - HttpResponse::redirect($di->getRouter()->url($news->getSlugRedirect())); - } - $comments = $di->getCommentGateway()->getByNewsId($newsId); - return new HttpResponse(200, 'newsView', ['news' => $news, 'comments' => $comments]); - } - public function comment(DI $di, array $params): void { $newsId = intval($params['id']); diff --git a/src/Silex/Controller/VisitorController.php b/src/Silex/Controller/VisitorController.php new file mode 100644 index 0000000..2164ebb --- /dev/null +++ b/src/Silex/Controller/VisitorController.php @@ -0,0 +1,44 @@ +getNewsGateway(); + $gwc = $di->getCommentGateway(); + $user = $di->getSecurity()->getCurrentUser(); + + $page = intval($params['page'] ?? 1); + $total = $gw->getCount(); + $nbPages = Pagination::getNbPages($total, self::PER_PAGE); + $news = $gw->getPaginatedRecentNews($page , self::PER_PAGE); + $nbComments = $gwc->getCommentNumber(); + if($user !== null){ + $nbCommentsByUser = $gwc->getCommentNumberFromUser($user->getId()); + } else { + $nbCommentsByUser = 0; + } + return new HttpResponse(200, 'home', ['news' => $news, 'page' => $page, 'nbPages' => $nbPages, 'nbComments' => $nbComments, 'nbCommentsByUser' => $nbCommentsByUser]); + } + + public function viewPost(DI $di, array $params): HttpResponse + { + $newsId = intval($params['id']); + $news = $di->getNewsGateway()->getById($newsId); + if($news->getSlug() !== $params['slug']){ + HttpResponse::redirect($di->getRouter()->url($news->getSlugRedirect())); + } + $comments = $di->getCommentGateway()->getByNewsId($newsId); + return new HttpResponse(200, 'newsView', ['news' => $news, 'comments' => $comments]); + } +} \ No newline at end of file