From de0e0d995baa8c9b99e6bc3a68b2d0672a394614 Mon Sep 17 00:00:00 2001 From: epriestley Date: Wed, 10 Jun 2015 15:52:49 -0700 Subject: [PATCH] Support Spaces in Pholio Summary: Ref T8493. Add Spaces support to Pholio. This is straightforward; Pholio has no clone/copy/fork or weird parent/child stuff going on. Test Plan: Created a mock, put it in a space, looked at it as another user, searched for stuff in spaces, viewed Macros. Reviewers: btrahan Reviewed By: btrahan Subscribers: epriestley Maniphest Tasks: T8493 Differential Revision: https://secure.phabricator.com/D13231 --- .../autopatches/20150609.spaces.1.pholio.sql | 2 ++ src/__phutil_library_map__.php | 3 +-- .../query/PhabricatorMacroSearchEngine.php | 5 ++++- .../controller/PholioMockEditController.php | 5 +++++ .../pholio/query/PholioMockSearchEngine.php | 9 +++------ .../pholio/storage/PholioMock.php | 13 ++++++++++++- src/view/phui/PHUIPinboardItemView.php | 19 +++++++++++++++++-- 7 files changed, 44 insertions(+), 12 deletions(-) create mode 100644 resources/sql/autopatches/20150609.spaces.1.pholio.sql diff --git a/resources/sql/autopatches/20150609.spaces.1.pholio.sql b/resources/sql/autopatches/20150609.spaces.1.pholio.sql new file mode 100644 index 0000000000..903afb86da --- /dev/null +++ b/resources/sql/autopatches/20150609.spaces.1.pholio.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_pholio.pholio_mock + ADD spacePHID VARBINARY(64); diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 674efa30b1..eaa7e4fa04 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -2580,7 +2580,6 @@ phutil_register_library_map(array( 'PhabricatorSpacesCapabilityCreateSpaces' => 'applications/spaces/capability/PhabricatorSpacesCapabilityCreateSpaces.php', 'PhabricatorSpacesCapabilityDefaultEdit' => 'applications/spaces/capability/PhabricatorSpacesCapabilityDefaultEdit.php', 'PhabricatorSpacesCapabilityDefaultView' => 'applications/spaces/capability/PhabricatorSpacesCapabilityDefaultView.php', - 'PhabricatorSpacesControl' => 'applications/spaces/view/PhabricatorSpacesControl.php', 'PhabricatorSpacesController' => 'applications/spaces/controller/PhabricatorSpacesController.php', 'PhabricatorSpacesDAO' => 'applications/spaces/storage/PhabricatorSpacesDAO.php', 'PhabricatorSpacesEditController' => 'applications/spaces/controller/PhabricatorSpacesEditController.php', @@ -6091,7 +6090,6 @@ phutil_register_library_map(array( 'PhabricatorSpacesCapabilityCreateSpaces' => 'PhabricatorPolicyCapability', 'PhabricatorSpacesCapabilityDefaultEdit' => 'PhabricatorPolicyCapability', 'PhabricatorSpacesCapabilityDefaultView' => 'PhabricatorPolicyCapability', - 'PhabricatorSpacesControl' => 'AphrontFormControl', 'PhabricatorSpacesController' => 'PhabricatorController', 'PhabricatorSpacesDAO' => 'PhabricatorLiskDAO', 'PhabricatorSpacesEditController' => 'PhabricatorSpacesController', @@ -6418,6 +6416,7 @@ phutil_register_library_map(array( 'PhabricatorApplicationTransactionInterface', 'PhabricatorProjectInterface', 'PhabricatorDestructibleInterface', + 'PhabricatorSpacesInterface', ), 'PholioMockCommentController' => 'PholioController', 'PholioMockEditController' => 'PholioController', diff --git a/src/applications/macro/query/PhabricatorMacroSearchEngine.php b/src/applications/macro/query/PhabricatorMacroSearchEngine.php index 5c69716bbf..9caf1e2f34 100644 --- a/src/applications/macro/query/PhabricatorMacroSearchEngine.php +++ b/src/applications/macro/query/PhabricatorMacroSearchEngine.php @@ -141,7 +141,10 @@ final class PhabricatorMacroSearchEngine foreach ($macros as $macro) { $file = $macro->getFile(); - $item = new PHUIPinboardItemView(); + $item = id(new PHUIPinboardItemView()) + ->setUser($viewer) + ->setObject($macro); + if ($file) { $item->setImageURI($file->getURIForTransform($xform)); list($x, $y) = $xform->getTransformedDimensions($file); diff --git a/src/applications/pholio/controller/PholioMockEditController.php b/src/applications/pholio/controller/PholioMockEditController.php index 3ed2cc0779..728c7b29d6 100644 --- a/src/applications/pholio/controller/PholioMockEditController.php +++ b/src/applications/pholio/controller/PholioMockEditController.php @@ -65,6 +65,7 @@ final class PholioMockEditController extends PholioController { $v_edit = $mock->getEditPolicy(); $v_cc = PhabricatorSubscribersQuery::loadSubscribersForPHID( $mock->getPHID()); + $v_space = $mock->getSpacePHID(); if ($request->isFormPost()) { $xactions = array(); @@ -75,6 +76,7 @@ final class PholioMockEditController extends PholioController { $type_view = PhabricatorTransactions::TYPE_VIEW_POLICY; $type_edit = PhabricatorTransactions::TYPE_EDIT_POLICY; $type_cc = PhabricatorTransactions::TYPE_SUBSCRIBERS; + $type_space = PhabricatorTransactions::TYPE_SPACE; $v_name = $request->getStr('name'); $v_desc = $request->getStr('description'); @@ -83,6 +85,7 @@ final class PholioMockEditController extends PholioController { $v_edit = $request->getStr('can_edit'); $v_cc = $request->getArr('cc'); $v_projects = $request->getArr('projects'); + $v_space = $request->getStr('spacePHID'); $mock_xactions = array(); $mock_xactions[$type_name] = $v_name; @@ -91,6 +94,7 @@ final class PholioMockEditController extends PholioController { $mock_xactions[$type_view] = $v_view; $mock_xactions[$type_edit] = $v_edit; $mock_xactions[$type_cc] = array('=' => $v_cc); + $mock_xactions[$type_space] = $v_space; if (!strlen($request->getStr('name'))) { $e_name = pht('Required'); @@ -350,6 +354,7 @@ final class PholioMockEditController extends PholioController { ->setCapability(PhabricatorPolicyCapability::CAN_VIEW) ->setPolicyObject($mock) ->setPolicies($policies) + ->setSpacePHID($v_space) ->setName('can_view')) ->appendChild( id(new AphrontFormPolicyControl()) diff --git a/src/applications/pholio/query/PholioMockSearchEngine.php b/src/applications/pholio/query/PholioMockSearchEngine.php index 26b22034a7..23c1decad5 100644 --- a/src/applications/pholio/query/PholioMockSearchEngine.php +++ b/src/applications/pholio/query/PholioMockSearchEngine.php @@ -83,12 +83,6 @@ final class PholioMockSearchEngine extends PhabricatorApplicationSearchEngine { return parent::buildSavedQueryFromBuiltin($query_key); } - protected function getRequiredHandlePHIDsForResultList( - array $mocks, - PhabricatorSavedQuery $query) { - return mpull($mocks, 'getAuthorPHID'); - } - protected function renderResultList( array $mocks, PhabricatorSavedQuery $query, @@ -96,6 +90,7 @@ final class PholioMockSearchEngine extends PhabricatorApplicationSearchEngine { assert_instances_of($mocks, 'PholioMock'); $viewer = $this->requireViewer(); + $handles = $viewer->loadHandles(mpull($mocks, 'getAuthorPHID')); $xform = PhabricatorFileTransform::getTransformByKey( PhabricatorFileThumbnailTransform::TRANSFORM_PINBOARD); @@ -109,7 +104,9 @@ final class PholioMockSearchEngine extends PhabricatorApplicationSearchEngine { $header = 'M'.$mock->getID().' '.$mock->getName(); $item = id(new PHUIPinboardItemView()) + ->setUser($viewer) ->setHeader($header) + ->setObject($mock) ->setURI('/M'.$mock->getID()) ->setImageURI($image_uri) ->setImageSize($x, $y) diff --git a/src/applications/pholio/storage/PholioMock.php b/src/applications/pholio/storage/PholioMock.php index d229aa8020..aaebed878e 100644 --- a/src/applications/pholio/storage/PholioMock.php +++ b/src/applications/pholio/storage/PholioMock.php @@ -9,7 +9,8 @@ final class PholioMock extends PholioDAO PhabricatorFlaggableInterface, PhabricatorApplicationTransactionInterface, PhabricatorProjectInterface, - PhabricatorDestructibleInterface { + PhabricatorDestructibleInterface, + PhabricatorSpacesInterface { const MARKUP_FIELD_DESCRIPTION = 'markup:description'; @@ -26,6 +27,7 @@ final class PholioMock extends PholioDAO protected $coverPHID; protected $mailKey; protected $status; + protected $spacePHID; private $images = self::ATTACHABLE; private $allImages = self::ATTACHABLE; @@ -308,4 +310,13 @@ final class PholioMock extends PholioDAO $this->saveTransaction(); } + +/* -( PhabricatorSpacesInterface )----------------------------------------- */ + + + public function getSpacePHID() { + return $this->spacePHID; + } + + } diff --git a/src/view/phui/PHUIPinboardItemView.php b/src/view/phui/PHUIPinboardItemView.php index db03b81def..5bde2aae6e 100644 --- a/src/view/phui/PHUIPinboardItemView.php +++ b/src/view/phui/PHUIPinboardItemView.php @@ -7,7 +7,7 @@ final class PHUIPinboardItemView extends AphrontView { private $header; private $iconBlock = array(); private $disabled; - + private $object; private $imageWidth; private $imageHeight; @@ -42,6 +42,11 @@ final class PHUIPinboardItemView extends AphrontView { return $this; } + public function setObject($object) { + $this->object = $object; + return $this; + } + public function render() { require_celerity_resource('phui-pinboard-view-css'); $header = null; @@ -57,7 +62,17 @@ final class PHUIPinboardItemView extends AphrontView { 'class' => 'phui-pinboard-item-header '. 'sprite-gradient '.$header_color, ), - phutil_tag('a', array('href' => $this->uri), $this->header)); + array( + id(new PHUISpacesNamespaceContextView()) + ->setUser($this->getUser()) + ->setObject($this->object), + phutil_tag( + 'a', + array( + 'href' => $this->uri, + ), + $this->header), + )); } $image = null;