mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-15 11:22:40 +01:00
d63789e4b2
Summary: Ref T603. Allows permitted users to set view and edit policies for repositories. So far the repository list, repository detail, repository edit, and browse interfaces respect these settings. Most other interfaces will respect stricter settings, but "Public" won't work. Lots of rough edges in the integration still. None of this makes policies any looser than they were already without explicit user intervention, so I just put a warning about it in the UI. Test Plan: Set a repository to public and browsed it. Verified I could not access non-public repositories. Reviewers: btrahan Reviewed By: btrahan CC: aran, davidressman Maniphest Tasks: T603 Differential Revision: https://secure.phabricator.com/D7061
202 lines
5.4 KiB
PHP
202 lines
5.4 KiB
PHP
<?php
|
|
|
|
abstract class DiffusionBrowseController extends DiffusionController {
|
|
|
|
public function shouldAllowPublic() {
|
|
return true;
|
|
}
|
|
|
|
protected function renderSearchForm($collapsed) {
|
|
$drequest = $this->getDiffusionRequest();
|
|
$form = id(new AphrontFormView())
|
|
->setUser($this->getRequest()->getUser())
|
|
->setMethod('GET');
|
|
|
|
switch ($drequest->getRepository()->getVersionControlSystem()) {
|
|
case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
|
|
$form->appendChild(pht('Search is not available in Subversion.'));
|
|
break;
|
|
|
|
default:
|
|
$form
|
|
->appendChild(
|
|
id(new AphrontFormTextControl())
|
|
->setLabel(pht('Search Here'))
|
|
->setName('grep')
|
|
->setValue($this->getRequest()->getStr('grep'))
|
|
->setCaption(pht('Enter a regular expression.')))
|
|
->appendChild(
|
|
id(new AphrontFormSubmitControl())
|
|
->setValue(pht('Search File Content')));
|
|
break;
|
|
}
|
|
|
|
$filter = new AphrontListFilterView();
|
|
$filter->appendChild($form);
|
|
|
|
if ($collapsed) {
|
|
$filter->setCollapsed(
|
|
pht('Show Search'),
|
|
pht('Hide Search'),
|
|
pht('Search for file content in this directory.'),
|
|
'#');
|
|
}
|
|
|
|
return $filter;
|
|
}
|
|
|
|
protected function markupText($text) {
|
|
$engine = PhabricatorMarkupEngine::newDiffusionMarkupEngine();
|
|
$engine->setConfig('viewer', $this->getRequest()->getUser());
|
|
$text = $engine->markupText($text);
|
|
|
|
$text = phutil_tag(
|
|
'div',
|
|
array(
|
|
'class' => 'phabricator-remarkup',
|
|
),
|
|
$text);
|
|
|
|
return $text;
|
|
}
|
|
|
|
protected function buildHeaderView(DiffusionRequest $drequest) {
|
|
$viewer = $this->getRequest()->getUser();
|
|
|
|
$header = id(new PHUIHeaderView())
|
|
->setUser($viewer)
|
|
->setHeader($this->renderPathLinks($drequest))
|
|
->setPolicyObject($drequest->getRepository());
|
|
|
|
return $header;
|
|
}
|
|
|
|
protected function buildActionView(DiffusionRequest $drequest) {
|
|
$viewer = $this->getRequest()->getUser();
|
|
|
|
$view = id(new PhabricatorActionListView())
|
|
->setUser($viewer);
|
|
|
|
$history_uri = $drequest->generateURI(
|
|
array(
|
|
'action' => 'history',
|
|
));
|
|
|
|
$view->addAction(
|
|
id(new PhabricatorActionView())
|
|
->setName(pht('View History'))
|
|
->setHref($history_uri)
|
|
->setIcon('history'));
|
|
|
|
$behind_head = $drequest->getRawCommit();
|
|
$head_uri = $drequest->generateURI(
|
|
array(
|
|
'commit' => '',
|
|
'action' => 'browse',
|
|
));
|
|
$view->addAction(
|
|
id(new PhabricatorActionView())
|
|
->setName(pht('Jump to HEAD'))
|
|
->setHref($head_uri)
|
|
->setIcon('home')
|
|
->setDisabled(!$behind_head));
|
|
|
|
// TODO: Ideally, this should live in Owners and be event-triggered, but
|
|
// there's no reasonable object for it to react to right now.
|
|
|
|
$owners_uri = id(new PhutilURI('/owners/view/search/'))
|
|
->setQueryParams(
|
|
array(
|
|
'repository' => $drequest->getCallsign(),
|
|
'path' => '/'.$drequest->getPath(),
|
|
));
|
|
|
|
$view->addAction(
|
|
id(new PhabricatorActionView())
|
|
->setName(pht('Find Owners'))
|
|
->setHref((string)$owners_uri)
|
|
->setIcon('preview'));
|
|
|
|
return $view;
|
|
}
|
|
|
|
protected function buildPropertyView(DiffusionRequest $drequest) {
|
|
$viewer = $this->getRequest()->getUser();
|
|
|
|
$view = id(new PhabricatorPropertyListView())
|
|
->setUser($viewer);
|
|
|
|
$stable_commit = $drequest->getStableCommitName();
|
|
$callsign = $drequest->getRepository()->getCallsign();
|
|
|
|
$view->addProperty(
|
|
pht('Commit'),
|
|
phutil_tag(
|
|
'a',
|
|
array(
|
|
'href' => $drequest->generateURI(
|
|
array(
|
|
'action' => 'commit',
|
|
'commit' => $stable_commit,
|
|
)),
|
|
),
|
|
$drequest->getRepository()->formatCommitName($stable_commit)));
|
|
|
|
if ($drequest->getTagContent()) {
|
|
$view->addProperty(
|
|
pht('Tag'),
|
|
$drequest->getSymbolicCommit());
|
|
|
|
$view->addSectionHeader(pht('Tag Content'));
|
|
$view->addTextContent($this->markupText($drequest->getTagContent()));
|
|
}
|
|
|
|
return $view;
|
|
}
|
|
|
|
protected function buildOpenRevisions() {
|
|
$user = $this->getRequest()->getUser();
|
|
|
|
$drequest = $this->getDiffusionRequest();
|
|
$repository = $drequest->getRepository();
|
|
$path = $drequest->getPath();
|
|
|
|
$path_map = id(new DiffusionPathIDQuery(array($path)))->loadPathIDs();
|
|
$path_id = idx($path_map, $path);
|
|
if (!$path_id) {
|
|
return null;
|
|
}
|
|
|
|
$revisions = id(new DifferentialRevisionQuery())
|
|
->setViewer($user)
|
|
->withPath($repository->getID(), $path_id)
|
|
->withStatus(DifferentialRevisionQuery::STATUS_OPEN)
|
|
->setOrder(DifferentialRevisionQuery::ORDER_PATH_MODIFIED)
|
|
->setLimit(10)
|
|
->needRelationships(true)
|
|
->execute();
|
|
|
|
if (!$revisions) {
|
|
return null;
|
|
}
|
|
|
|
$view = id(new DifferentialRevisionListView())
|
|
->setRevisions($revisions)
|
|
->setFields(DifferentialRevisionListView::getDefaultFields($user))
|
|
->setUser($user)
|
|
->loadAssets();
|
|
|
|
$phids = $view->getRequiredHandlePHIDs();
|
|
$handles = $this->loadViewerHandles($phids);
|
|
$view->setHandles($handles);
|
|
|
|
$header = id(new PHUIHeaderView())
|
|
->setHeader(pht('Pending Differential Revisions'));
|
|
|
|
return array(
|
|
$header,
|
|
$view,
|
|
);
|
|
}
|
|
|
|
}
|