/** * Returns an array of model classes for which the current user * has rights and which should be used according to his filter * * @param object $request * @param string $model_filter * @return array */ private static function determineModelClasses($request, $model_filter = 'all') { $classes = array(); if (true === IDF_Precondition::accessSource($request) && ($model_filter == 'all' || $model_filter == 'commits')) { $classes[] = '\'IDF_Commit\''; // FIXME: this looks like a hack... IDF_Scm::syncTimeline($request->project); } if (true === IDF_Precondition::accessIssues($request) && ($model_filter == 'all' || $model_filter == 'issues')) { $classes[] = '\'IDF_Issue\''; $classes[] = '\'IDF_IssueComment\''; } if (true === IDF_Precondition::accessDownloads($request) && ($model_filter == 'all' || $model_filter == 'downloads')) { $classes[] = '\'IDF_Upload\''; } if (true === IDF_Precondition::accessWiki($request) && ($model_filter == 'all' || $model_filter == 'documents')) { $classes[] = '\'IDF_WikiPage\''; $classes[] = '\'IDF_WikiRevision\''; } if (true === IDF_Precondition::accessReview($request) && ($model_filter == 'all' || $model_filter == 'reviews')) { $classes[] = '\'IDF_Review_Comment\''; $classes[] = '\'IDF_Review_Patch\''; } if (count($classes) == 0) { $classes[] = '\'IDF_Dummy\''; } return $classes; }
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->project); } 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 (true === IDF_Precondition::accessReview($request)) { $rights[] = '\'IDF_Review_Comment\''; $rights[] = '\'IDF_Review_Patch\''; } 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' => 20); $items = Pluf::factory('IDF_Timeline')->getList($params); $set = new Pluf_Model_Set($items, array('public_dtime' => 'public_dtime')); $out = array(); foreach ($set as $item) { if ($item->id) { $out[] = $item->feedFragment($request); } } if ($items->count() > 0) { $date = Pluf_Date::gmDateToGmString($items[0]->creation_dtime); } else { $date = gmdate('c'); } $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, 'date' => $date, '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'); }