Пример #1
0
 /**
  * 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;
 }
Пример #2
0
 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');
 }
Пример #3
0
 /**
  * Control the access rights to the repository.
  *
  * @param string Username
  * @param string Path including the possible .git
  * @param string Type of access. 'readonly' or ('writable')
  * @return mixed False or array(base_git_reps, relative path to repo)
  */
 public function haveAccess($username, $path, $mode = 'writable')
 {
     if ('.git' == substr($path, -4)) {
         $path = substr($path, 0, -4);
     }
     $sql = new Pluf_SQL('shortname=%s', array($path));
     $projects = Pluf::factory('IDF_Project')->getList(array('filter' => $sql->gen()));
     if ($projects->count() != 1) {
         return false;
     }
     $project = $projects[0];
     $conf = new IDF_Conf();
     $conf->setProject($project);
     $scm = $conf->getVal('scm', 'git');
     if ($scm != 'git') {
         return false;
     }
     $sql = new Pluf_SQL('login=%s', array($username));
     $users = Pluf::factory('Pluf_User')->getList(array('filter' => $sql->gen()));
     if ($users->count() != 1 or !$users[0]->active) {
         return false;
     }
     $user = $users[0];
     $request = new StdClass();
     $request->user = $user;
     $request->conf = $conf;
     $request->project = $project;
     if (true === IDF_Precondition::accessSource($request)) {
         if ($mode == 'readonly') {
             return array(Pluf::f('idf_plugin_syncgit_base_repositories', '/home/git/repositories'), $project->shortname);
         }
         if (true === IDF_Precondition::projectMemberOrOwner($request)) {
             return array(Pluf::f('idf_plugin_syncgit_base_repositories', '/home/git/repositories'), $project->shortname);
         }
     }
     return false;
 }