Ejemplo n.º 1
0
 public static function setRights(&$request)
 {
     $ak = array('downloads_access_rights' => 'hasDownloadsAccess', 'wiki_access_rights' => 'hasWikiAccess', 'review_access_rights' => 'hasReviewAccess', 'source_access_rights' => 'hasSourceAccess', 'issues_access_rights' => 'hasIssuesAccess');
     $request->rights = array();
     foreach ($ak as $key => $val) {
         $request->rights[$val] = true === IDF_Precondition::accessTabGeneric($request, $key);
     }
 }
Ejemplo n.º 2
0
 public function timeline($request, $match)
 {
     $prj = $request->project;
     $model_filter = @$match[2];
     $all_model_filters = self::getAvailableModelFilters();
     if (!array_key_exists($model_filter, $all_model_filters)) {
         $model_filter = 'all';
     }
     $title = (string) $prj . ' ' . $all_model_filters[$model_filter];
     $pag = new IDF_Timeline_Paginator(new IDF_Timeline());
     $pag->class = 'recent-issues';
     $pag->item_extra_props = array('request' => $request);
     $pag->summary = __('This table shows the project updates.');
     $classes = self::determineModelClasses($request, $model_filter);
     $sql = sprintf('model_class IN (%s)', implode(', ', $classes));
     $pag->forced_where = new Pluf_SQL('project=%s AND ' . $sql, array($prj->id));
     $pag->sort_order = array('creation_dtime', 'ASC');
     $pag->sort_reverse_order = array('creation_dtime');
     $pag->action = array('IDF_Views_Project::timeline', array($prj->shortname, $model_filter));
     $list_display = array('creation_dtime' => __('Age'), 'id' => __('Change'));
     $pag->configure($list_display, array(), array('creation_dtime'));
     $pag->items_per_page = 20;
     $pag->no_results_text = __('No changes were found.');
     $pag->setFromRequest($request);
     if (!$request->user->isAnonymous() and $prj->isRestricted()) {
         $feedurl = Pluf_HTTP_URL_urlForView('idf_project_timeline_feed_auth', array($prj->shortname, $model_filter, IDF_Precondition::genFeedToken($prj, $request->user)));
     } else {
         $feedurl = Pluf_HTTP_URL_urlForView('idf_project_timeline_feed', array($prj->shortname, $model_filter));
     }
     return Pluf_Shortcuts_RenderToResponse('idf/project/timeline.html', array('page_title' => $title, 'feedurl' => $feedurl, 'timeline' => $pag, 'model_filter' => $model_filter, 'all_model_filters' => $all_model_filters), $request);
 }
Ejemplo n.º 3
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');
 }
Ejemplo n.º 4
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;
 }
Ejemplo n.º 5
0
 public function view($request, $match)
 {
     $prj = $request->project;
     $upload = Pluf_Shortcuts_GetObjectOr404('IDF_Upload', $match[2]);
     $prj->inOr404($upload);
     $title = sprintf(__('Download %s'), $upload->summary);
     $form = false;
     $ptags = self::getDownloadTags($prj);
     $dtag = array_pop($ptags);
     // The last tag is the deprecated tag.
     $tags = $upload->get_tags_list();
     $deprecated = Pluf_Model_InArray($dtag, $tags);
     if ($request->method == 'POST' and true === IDF_Precondition::projectMemberOrOwner($request)) {
         $form = new IDF_Form_UpdateUpload($request->POST, array('project' => $prj, 'upload' => $upload, 'user' => $request->user));
         if ($form->isValid()) {
             $upload = $form->save();
             $urlfile = Pluf_HTTP_URL_urlForView('IDF_Views_Download::view', array($prj->shortname, $upload->id));
             $request->user->setMessage(sprintf(__('The file <a href="%1$s">%2$s</a> has been updated.'), $urlfile, Pluf_esc($upload->file)));
             $url = Pluf_HTTP_URL_urlForView('IDF_Views_Download::index', array($prj->shortname));
             return new Pluf_HTTP_Response_Redirect($url);
         }
     } elseif (true === IDF_Precondition::projectMemberOrOwner($request)) {
         $form = new IDF_Form_UpdateUpload(null, array('upload' => $upload, 'project' => $prj, 'user' => $request->user));
     }
     return Pluf_Shortcuts_RenderToResponse('idf/downloads/view.html', array('file' => $upload, 'deprecated' => $deprecated, 'tags' => $tags, 'auto_labels' => self::autoCompleteArrays($prj), 'page_title' => $title, 'form' => $form), $request);
 }