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); } }
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); }
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'); }
/** * 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; }
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); }