1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-20 05:42:40 +01:00

Merge branch 'master' into redesign-2015

This commit is contained in:
epriestley 2015-07-01 15:07:16 -07:00
commit 10ba64e892
9 changed files with 21 additions and 139 deletions

View file

@ -1889,7 +1889,6 @@ phutil_register_library_map(array(
'PhabricatorFeedListController' => 'applications/feed/controller/PhabricatorFeedListController.php',
'PhabricatorFeedManagementRepublishWorkflow' => 'applications/feed/management/PhabricatorFeedManagementRepublishWorkflow.php',
'PhabricatorFeedManagementWorkflow' => 'applications/feed/management/PhabricatorFeedManagementWorkflow.php',
'PhabricatorFeedPublicStreamController' => 'applications/feed/controller/PhabricatorFeedPublicStreamController.php',
'PhabricatorFeedQuery' => 'applications/feed/query/PhabricatorFeedQuery.php',
'PhabricatorFeedSearchEngine' => 'applications/feed/query/PhabricatorFeedSearchEngine.php',
'PhabricatorFeedStory' => 'applications/feed/story/PhabricatorFeedStory.php',
@ -5527,7 +5526,6 @@ phutil_register_library_map(array(
'PhabricatorFeedListController' => 'PhabricatorFeedController',
'PhabricatorFeedManagementRepublishWorkflow' => 'PhabricatorFeedManagementWorkflow',
'PhabricatorFeedManagementWorkflow' => 'PhabricatorManagementWorkflow',
'PhabricatorFeedPublicStreamController' => 'PhabricatorFeedController',
'PhabricatorFeedQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorFeedSearchEngine' => 'PhabricatorApplicationSearchEngine',
'PhabricatorFeedStory' => array(

View file

@ -81,14 +81,14 @@ final class PhabricatorCalendarEventCancelController
if ($is_cancelled) {
if ($sequence || $is_parent_cancelled) {
$title = pht('Cannot Reinstate Instance');
$paragraph = pht('Cannot reinstate an instance of a
cancelled recurring event.');
$paragraph = pht('Cannot reinstate an instance of a ' .
'cancelled recurring event.');
$cancel = pht('Cancel');
$submit = null;
} else if ($is_parent) {
$title = pht('Reinstate Recurrence');
$paragraph = pht('Reinstate the entire series
of recurring events?');
$paragraph = pht('Reinstate the entire series ' .
'of recurring events?');
$cancel = pht('Don\'t Reinstate Recurrence');
$submit = pht('Reinstate Recurrence');
} else {
@ -100,20 +100,20 @@ final class PhabricatorCalendarEventCancelController
} else {
if ($sequence) {
$title = pht('Cancel Instance');
$paragraph = pht('Cancel just this instance
of a recurring event.');
$paragraph = pht('Cancel just this instance ' .
'of a recurring event.');
$cancel = pht('Don\'t Cancel Instance');
$submit = pht('Cancel Instance');
} else if ($is_parent) {
$title = pht('Cancel Recurrence');
$paragraph = pht('Cancel the entire series
of recurring events?');
$paragraph = pht('Cancel the entire series ' .
'of recurring events?');
$cancel = pht('Don\'t Cancel Recurrence');
$submit = pht('Cancel Recurrence');
} else {
$title = pht('Cancel Event');
$paragraph = pht('You can always reinstate
the event later.');
$paragraph = pht('You can always reinstate ' .
'the event later.');
$cancel = pht('Don\'t Cancel Event');
$submit = pht('Cancel Event');
}

View file

@ -238,7 +238,7 @@ final class PhabricatorCalendarEventTransaction
} else if ($count_added > 0 && $count_uninvited > 0) {
$added_text = $this->renderHandleList($added);
$uninvited_text = $this->renderHandleList($uninvited);
$text = pht('%s invited %s and uninvited: %s',
$text = pht('%s invited %s and uninvited %s.',
$this->renderHandleLink($author_phid),
$added_text,
$uninvited_text);
@ -303,7 +303,7 @@ final class PhabricatorCalendarEventTransaction
case self::TYPE_NAME:
if ($old === null) {
return pht(
'%s created %s',
'%s created %s.',
$this->renderHandleLink($author_phid),
$this->renderHandleLink($object_phid));
} else {
@ -445,7 +445,7 @@ final class PhabricatorCalendarEventTransaction
} else if ($count_added > 0 && $count_uninvited > 0) {
$added_text = $this->renderHandleList($added);
$uninvited_text = $this->renderHandleList($uninvited);
$text = pht('%s invited %s and uninvited %s to %s',
$text = pht('%s invited %s and uninvited %s to %s.',
$this->renderHandleLink($author_phid),
$added_text,
$uninvited_text,

View file

@ -274,6 +274,8 @@ final class PhabricatorExtraConfigSetupCheck extends PhabricatorSetupCheck {
'security.allow-conduit-act-as-user' => pht(
'Impersonating users over the API is no longer supported.'),
'feed.public' => pht('The framable public feed is no longer supported.'),
);
return $ancient_config;

View file

@ -25,7 +25,6 @@ final class PhabricatorFeedApplication extends PhabricatorApplication {
public function getRoutes() {
return array(
'/feed/' => array(
'public/' => 'PhabricatorFeedPublicStreamController',
'(?P<id>\d+)/' => 'PhabricatorFeedDetailController',
'(?:query/(?P<queryKey>[^/]+)/)?' => 'PhabricatorFeedListController',
),

View file

@ -4,7 +4,6 @@ final class PhabricatorFeedBuilder extends Phobject {
private $user;
private $stories;
private $framed;
private $hovercards = false;
private $noDataString;
@ -13,11 +12,6 @@ final class PhabricatorFeedBuilder extends Phobject {
$this->stories = $stories;
}
public function setFramed($framed) {
$this->framed = $framed;
return $this;
}
public function setUser(PhabricatorUser $user) {
$this->user = $user;
return $this;
@ -47,7 +41,6 @@ final class PhabricatorFeedBuilder extends Phobject {
$last_date = null;
foreach ($stories as $story) {
$story->setFramed($this->framed);
$story->setHovercard($this->hovercards);
$date = ucfirst(phabricator_relative_date($story->getEpoch(), $user));

View file

@ -21,24 +21,6 @@ final class PhabricatorFeedConfigOptions
public function getOptions() {
return array(
$this->newOption('feed.public', 'bool', false)
->setLocked(true)
->setBoolOptions(
array(
pht('Allow anyone to view the feed'),
pht('Require authentication'),
))
->setSummary(pht('Should the feed be public?'))
->setDescription(
pht(
"If you set this to true, you can embed Phabricator activity ".
"feeds in other pages using iframes. These feeds are completely ".
"public, and a login is not required to view them! This is ".
"intended for things like open source projects that want to ".
"expose an activity feed on the project homepage.\n\n".
"NOTE: You must also set `%s` to true for this ".
"setting to work properly.",
'policy.allow-public')),
$this->newOption('feed.http-hooks', 'list<string>', array())
->setLocked(true)
->setSummary(pht('POST notifications of feed events.'))

View file

@ -1,39 +0,0 @@
<?php
final class PhabricatorFeedPublicStreamController
extends PhabricatorFeedController {
public function shouldRequireLogin() {
return false;
}
public function processRequest() {
if (!PhabricatorEnv::getEnvConfig('feed.public')) {
return new Aphront404Response();
}
$request = $this->getRequest();
$viewer = PhabricatorUser::getOmnipotentUser();
$query = new PhabricatorFeedQuery();
$query->setViewer($viewer);
$query->setLimit(100);
$stories = $query->execute();
$builder = new PhabricatorFeedBuilder($stories);
$builder
->setFramed(true)
->setUser($viewer);
$view = phutil_tag_div(
'phabricator-public-feed-frame',
$builder->buildView());
return $this->buildStandardPageResponse(
$view,
array(
'title' => pht('Public Feed'),
'public' => true,
));
}
}

View file

@ -16,7 +16,6 @@ abstract class PhabricatorFeedStory
private $data;
private $hasViewed;
private $framed;
private $hovercard = false;
private $renderingTarget = PhabricatorApplicationTransaction::TARGET_HTML;
@ -289,11 +288,6 @@ abstract class PhabricatorFeedStory
return $this->hasViewed;
}
final public function setFramed($framed) {
$this->framed = $framed;
return $this;
}
final public function setHandles(array $handles) {
assert_instances_of($handles, 'PhabricatorObjectHandle');
$this->handles = $handles;
@ -367,24 +361,7 @@ abstract class PhabricatorFeedStory
return $handle->getLinkName();
}
// NOTE: We render our own link here to customize the styling and add
// the '_top' target for framed feeds.
$class = null;
if ($handle->getType() == PhabricatorPeopleUserPHIDType::TYPECONST) {
$class = 'phui-link-person';
}
return javelin_tag(
'a',
array(
'href' => $handle->getURI(),
'target' => $this->framed ? '_top' : null,
'sigil' => $this->hovercard ? 'hovercard' : null,
'meta' => $this->hovercard ? array('hoverPHID' => $phid) : null,
'class' => $class,
),
$handle->getLinkName());
return $handle->renderLink();
}
final protected function renderString($str) {
@ -462,16 +439,10 @@ abstract class PhabricatorFeedStory
* @task policy
*/
public function getPolicy($capability) {
$policy_object = $this->getPrimaryPolicyObject();
if ($policy_object) {
return $policy_object->getPolicy($capability);
}
// TODO: Remove this once all objects are policy-aware. For now, keep
// respecting the `feed.public` setting.
return PhabricatorEnv::getEnvConfig('feed.public')
? PhabricatorPolicies::POLICY_PUBLIC
: PhabricatorPolicies::POLICY_USER;
// NOTE: We enforce that a user can see all the objects a story is about
// when loading it, so we don't need to perform a equivalent secondary
// policy check later.
return PhabricatorPolicies::getMostOpenPolicy();
}
@ -479,39 +450,15 @@ abstract class PhabricatorFeedStory
* @task policy
*/
public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {
$policy_object = $this->getPrimaryPolicyObject();
if ($policy_object) {
return $policy_object->hasAutomaticCapability($capability, $viewer);
}
return false;
}
public function describeAutomaticCapability($capability) {
return null;
}
/**
* Get the policy object this story is about, if such a policy object
* exists.
*
* @return PhabricatorPolicyInterface|null Policy object, if available.
* @task policy
*/
private function getPrimaryPolicyObject() {
$primary_phid = $this->getPrimaryObjectPHID();
if (empty($this->objects[$primary_phid])) {
$object = $this->objects[$primary_phid];
if ($object instanceof PhabricatorPolicyInterface) {
return $object;
}
}
return null;
}
/* -( PhabricatorMarkupInterface Implementation )--------------------------- */