コード例 #1
0
ファイル: news.php プロジェクト: noackorama/source-talk-2012
 /**
  *
  **/
 public function routes(&$router)
 {
     // Get news of a range id
     $router->get('/news(/range/:range_id)', function ($range_id = false) use($router) {
         $range_id = $range_id ?: $GLOBALS['user']->id;
         if (!Helper::UserHasAccessToRange($range_id)) {
             $router->halt(403, sprintf('User may not access range %s', $range_id));
         }
         $news = array_values(News::loadRange($range_id));
         if ($router->compact()) {
             $router->render(compact('news'));
             return;
         }
         foreach ($news as $index => $n) {
             if ($n['allow_comments']) {
                 $comments = $router->dispatch('get', '/news/:news_id/comments', $n['news_id']);
                 $news[$index]['comments'] = $comments['comments'];
             }
         }
         $users = array_values(NewsRoute::extractUsers($news, $router));
         $router->render(compact('news', 'users'));
     })->conditions(array('range_id' => '(studip|[a-f0-9]{32})'));
     // Create news for a specific range
     $router->post('/news(/range/:range_id)', function () use($router) {
         $range_id = $range_id ?: $GLOBALS['user']->id;
         if (!Helper::UserHasAccessToRange($range_id)) {
             $router->halt(403, sprintf('User may not access range %s', $range_id));
         }
         $title = trim(Request::get('title'));
         if (empty($title)) {
             $router->halt(406, 'No news title provided');
         }
         $body = trim(Request::get('body'));
         if (empty($body)) {
             $router->halt(406, 'No news body provided');
         }
         $news = new \StudipNews();
         $news->user_id = $GLOBALS['user']->id;
         $news->author = $GLOBALS['user']->getFullName();
         $news->topic = $title;
         $news->body = $body;
         $news->date = time();
         $news->expire = Request::int('expire', 2 * 7 * 24 * 60 * 60);
         $news->allow_comments = Request::int('allow_comments', 0);
         if (!$news->store()) {
             $router->halt(501, 'Could not create news');
         }
         $news->addRange($range_id);
         $news->storeRanges();
         $router->render($router->dispatch('get', '/news/:news_id', $news->news_id), 201);
     })->conditions(array('range_id' => '(studip|[a-f0-9]{32})'));
     // Get news data
     $router->get('/news/:news_id', function ($news_id) use($router) {
         $news = News::load($news_id);
         if (!$news) {
             $router->halt(404, sprintf('News %s not found', $news_id));
         }
         if ($router->compact()) {
             $router->render(compact('news'));
             return;
         }
         $users = NewsRoute::extractUsers(array($news), $router);
         if ($news['allow_comments']) {
             $news['comments'] = reset($router->dispatch('get', '/news/:news_id/comments', $news_id));
         }
         $router->render(compact('news', 'users'));
     });
     // Update news
     $router->put('/news/:news_id', function ($news_id) use($router) {
         global $_PUT;
         $news = new \StudipNews($news_id);
         if (!$news) {
             $router->halt(404, sprintf('News %s not found', $news_id));
         }
         /*
                     // TODO Check access
                     if (!Helper::UserHasAccessToRange($range_id)) {
                         $router->halt(403, sprintf('User may not access range %s', $range_id));
                     }
         */
         if (isset($_PUT['title'])) {
             $title = trim($_PUT['title']);
             if (empty($title)) {
                 $router->halt(406, 'No news title provided');
             }
             $news->topic = $title;
         }
         if (isset($_PUT['body'])) {
             $body = trim($_PUT['body']);
             if (empty($body)) {
                 $router->halt(406, 'No news body provided');
             }
             $news->body = $body;
         }
         // date?
         if (isset($_PUT['expire'])) {
             $news->expire = $_PUT['expire'] ?: $news->expire;
         }
         if (isset($_PUT['allow_comments'])) {
             $news->allow_comments = (int) $_PUT['allow_comments'];
         }
         if (!$news->store()) {
             $router->halt(501, 'Could not update news');
         }
         $router->render($router->dispatch('get', '/news/:news_id', $news->news_id), 201);
     });
     // Delete news
     $router->delete('/news/:news_id', function ($news_id) use($router) {
         $news = \StudipNews::find($news_id);
         if (!$news) {
             $router->halt(404, sprintf('News %s not found', $news_id));
         }
         $news->delete();
         $router->halt(200, sprintf('Deleted news %s.', $news_id));
     });
 }