| // the first tag is the featured, the last is the deprecated.␊ | 
| $downloads = $tags[0]->get_idf_upload_list(); ␊ | 
| }␊ | 
| $pages = array();␊ | 
| if ($request->rights['hasWikiAccess']) {␊ | 
| $tags = IDF_Views_Wiki::getWikiTags($prj);␊ | 
| $pages = $tags[0]->get_idf_wikipage_list(); ␊ | 
| }␊ | 
| if (!$request->user->isAnonymous()) {␊ | 
| $feedurl = Pluf_HTTP_URL_urlForView('idf_project_timeline_feed_auth',␊ | 
| array($prj->shortname, ␊ | 
| IDF_Precondition::genFeedToken($prj, $request->user)));␊ | 
| } else {␊ | 
| $feedurl = Pluf_HTTP_URL_urlForView('idf_project_timeline_feed',␊ | 
| array($prj->shortname));␊ | 
| }␊ | 
| return Pluf_Shortcuts_RenderToResponse('idf/project/timeline.html',␊ | 
| array(␊ | 
| 'page_title' => $title,␊ | 
| 'feedurl' => $feedurl,␊ | 
| 'timeline' => $pag,␊ | 
| 'team' => $team,␊ | 
| 'downloads' => $downloads,␊ | 
| ),␊ | 
| $request);␊ | 
| ␊ | 
| }␊ | 
| ␊ | 
| /**␊ | 
| * Timeline feed.␊ | 
| *␊ | 
| * A custom view to have a bit more control on the way to handle␊ | 
| * it and optimize the output.␊ | 
| *␊ | 
| */␊ | 
| public $timelineFeed_precond = array('IDF_Precondition::feedSetUser',␊ | 
| 'IDF_Precondition::baseAccess');␊ | 
| public function timelineFeed($request, $match)␊ | 
| {␊ | 
| $prj = $request->project;␊ | 
| // Need to check the rights␊ | 
| $rights = array();␊ | 
| if (true === IDF_Precondition::accessSource($request)) {␊ | 
| $rights[] = '\'IDF_Commit\'';␊ | 
| IDF_Scm::syncTimeline($request);␊ | 
| }␊ | 
| if (true === IDF_Precondition::accessIssues($request)) {␊ | 
| $rights[] = '\'IDF_Issue\'';␊ | 
| $rights[] = '\'IDF_IssueComment\'';␊ | 
| }␊ | 
| if (true === IDF_Precondition::accessDownloads($request)) {␊ | 
| $rights[] = '\'IDF_Upload\'';␊ | 
| }␊ | 
| if (true === IDF_Precondition::accessWiki($request)) {␊ | 
| $rights[] = '\'IDF_WikiPage\'';␊ | 
| $rights[] = '\'IDF_WikiRevision\'';␊ | 
| }␊ | 
| if (count($rights) == 0) {␊ | 
| $rights[] = '\'IDF_Dummy\'';␊ | 
| }␊ | 
| $sqls = sprintf('model_class IN (%s)', implode(', ', $rights));␊ | 
| $sql = new Pluf_SQL('project=%s AND '.$sqls, array($prj->id));␊ | 
| $params = array(␊ | 
| 'filter' => $sql->gen(),␊ | 
| 'order' => 'creation_dtime DESC',␊ | 
| 'nb' => 50,␊ | 
| );␊ | 
| $items = Pluf::factory('IDF_Timeline')->getList($params);␊ | 
| $set = new Pluf_Model_Set($items, ␊ | 
| array('public_dtime' => 'public_dtime'));␊ | 
| $out = array();␊ | 
| foreach ($set as $item) {␊ | 
| $out[] = $item->feedFragment($request);␊ | 
| }␊ | 
| $out = Pluf_Template::markSafe(implode("\n", $out));␊ | 
| $tmpl = new Pluf_Template('idf/index.atom');␊ | 
| $title = __('Updates');␊ | 
| $feedurl = Pluf::f('url_base').Pluf::f('idf_base').$request->query;␊ | 
| $viewurl = Pluf_HTTP_URL_urlForView('IDF_Views_Project::timeline',␊ | 
| array($prj->shortname));␊ | 
| $context = new Pluf_Template_Context_Request($request, ␊ | 
| array('body' => $out,␊ | 
| 'title' => $title,␊ | 
| 'feedurl' => $feedurl,␊ | 
| 'viewurl' => $viewurl));␊ | 
| return new Pluf_HTTP_Response('<?xml version="1.0" encoding="utf-8"?>'␊ | 
| ."\n".$tmpl->render($context),␊ | 
| 'application/atom+xml; charset=utf-8');␊ | 
| }␊ | 
| ␊ | 
| ␊ |