/** * Configure routes to be handled by application. * * @param \Slim\Slim $slim Application */ protected function configureRoutes(\Slim\Slim $slim) { $middleware = array('must-revalidate' => function () use($slim) { $slim->response->headers->set('Cache-Control', 'private, must-revalidate, max-age=0'); $slim->response->headers->set('Expires', 'Thu, 01 Jan 1970 00:00:00 GMT'); }, 'inject-user' => function () use($slim) { $user = $slim->authManager->getUserData(); $slim->view->set('user', $user); }, 'require-user' => function () use($slim) { if ($slim->authManager->isAnonymous()) { if ($slim->request->isGet()) { $uri = $slim->request->getUrl() . $slim->request->getPath(); $qs = Form::qsMerge(); if ($qs) { $uri = "{$uri}?{$qs}"; } $_SESSION[AuthManager::NEXTPAGE_SESSION_KEY] = $uri; } // FIXME: use i18n $slim->flash('error', 'Login required'); $slim->flashKeep(); $slim->redirect($slim->urlFor('login')); } }); $slim->group('/', $middleware['inject-user'], function () use($slim, $middleware) { App::redirect($slim, '', 'random', 'home'); App::redirect($slim, 'index', 'random'); $slim->get('random', function () use($slim) { $page = new Pages\Random($slim); $page->setI18nContext($slim->i18nContext); $page->setQuips($slim->quips); $page(); })->name('random'); $slim->get('random.json', function () use($slim) { $slim->response->headers->set('Content-Type', 'application/json'); $page = new Pages\Random($slim); $page->setI18nContext($slim->i18nContext); $page->setQuips($slim->quips); $page->setTemplate('random.json'); $page(); })->name('random.json'); $slim->get('search', function () use($slim) { $page = new Pages\Search($slim); $page->setI18nContext($slim->i18nContext); $page->setQuips($slim->quips); $page(); })->name('search'); $slim->get('top', function () use($slim) { $page = new Pages\Top($slim); $page->setI18nContext($slim->i18nContext); $page->setQuips($slim->quips); $page(); })->name('top'); App::template($slim, 'login'); $slim->get('logout', $middleware['must-revalidate'], function () use($slim) { $slim->authManager->logout(); $slim->redirect($slim->urlFor('home')); })->name('logout'); App::template($slim, 'about'); App::template($slim, 'help'); }); // end group '/' $slim->group('/quip/', $middleware['inject-user'], function () use($slim, $middleware) { $slim->get(':id', function ($id) use($slim) { $page = new Pages\Quip($slim); $page->setI18nContext($slim->i18nContext); $page->setQuips($slim->quips); $page($id); })->name('quip'); $slim->get(':id/edit', $middleware['require-user'], function ($id) use($slim) { $page = new Pages\Edit($slim); $page->setI18nContext($slim->i18nContext); $page->setQuips($slim->quips); $page($id); })->name('edit'); $slim->post(':id/post', $middleware['require-user'], function ($id) use($slim) { $page = new Pages\Edit($slim); $page->setI18nContext($slim->i18nContext); $page->setQuips($slim->quips); $page($id); })->name('edit_post'); $slim->post(':id/delete', $middleware['require-user'], function ($id) use($slim) { $page = new Pages\Delete($slim); $page->setI18nContext($slim->i18nContext); $page->setQuips($slim->quips); $page($id); })->name('delete_post'); $slim->post(':id/vote', $middleware['require-user'], function ($id) use($slim) { $page = new Pages\Vote($slim); $page->setI18nContext($slim->i18nContext); $page->setQuips($slim->quips); $page($id); })->name('vote_post'); }); $slim->group('/oauth/', function () use($slim) { $slim->get('', function () use($slim) { $page = new Pages\OAuth($slim); $page->setOAuth($slim->oauthClient); $page('init'); })->name('oauth_init'); $slim->get('callback', function () use($slim) { $page = new Pages\OAuth($slim); $page->setI18nContext($slim->i18nContext); $page->setOAuth($slim->oauthClient); $page->setUserManager($slim->userManager); $page('callback'); })->name('oauth_callback'); }); $slim->notFound(function () use($slim) { $slim->render('404.html'); }); }