@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add a "Description" field to Spaces

Summary:
Ref T8377.

- Add a description field.
- Add edges so files can be attached.

Test Plan: {F492410}

Reviewers: btrahan

Reviewed By: btrahan

Subscribers: epriestley

Maniphest Tasks: T8377

Differential Revision: https://secure.phabricator.com/D13235

+112 -2
+2
resources/sql/autopatches/20150610.spaces.1.desc.sql
··· 1 + ALTER TABLE {$NAMESPACE}_spaces.spaces_namespace 2 + ADD description LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL;
+16
resources/sql/autopatches/20150610.spaces.2.edge.sql
··· 1 + CREATE TABLE {$NAMESPACE}_spaces.edge ( 2 + src VARBINARY(64) NOT NULL, 3 + type INT UNSIGNED NOT NULL, 4 + dst VARBINARY(64) NOT NULL, 5 + dateCreated INT UNSIGNED NOT NULL, 6 + seq INT UNSIGNED NOT NULL, 7 + dataID INT UNSIGNED, 8 + PRIMARY KEY (src, type, dst), 9 + KEY `src` (src, type, dateCreated, seq), 10 + UNIQUE KEY `key_dst` (dst, type, src) 11 + ) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; 12 + 13 + CREATE TABLE {$NAMESPACE}_spaces.edgedata ( 14 + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, 15 + data LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT} 16 + ) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT};
+2
src/__phutil_library_map__.php
··· 2594 2594 'PhabricatorSpacesNamespaceTransaction' => 'applications/spaces/storage/PhabricatorSpacesNamespaceTransaction.php', 2595 2595 'PhabricatorSpacesNamespaceTransactionQuery' => 'applications/spaces/query/PhabricatorSpacesNamespaceTransactionQuery.php', 2596 2596 'PhabricatorSpacesRemarkupRule' => 'applications/spaces/remarkup/PhabricatorSpacesRemarkupRule.php', 2597 + 'PhabricatorSpacesSchemaSpec' => 'applications/spaces/storage/PhabricatorSpacesSchemaSpec.php', 2597 2598 'PhabricatorSpacesTestCase' => 'applications/spaces/__tests__/PhabricatorSpacesTestCase.php', 2598 2599 'PhabricatorSpacesViewController' => 'applications/spaces/controller/PhabricatorSpacesViewController.php', 2599 2600 'PhabricatorStandardCustomField' => 'infrastructure/customfield/standard/PhabricatorStandardCustomField.php', ··· 6110 6111 'PhabricatorSpacesNamespaceTransaction' => 'PhabricatorApplicationTransaction', 6111 6112 'PhabricatorSpacesNamespaceTransactionQuery' => 'PhabricatorApplicationTransactionQuery', 6112 6113 'PhabricatorSpacesRemarkupRule' => 'PhabricatorObjectRemarkupRule', 6114 + 'PhabricatorSpacesSchemaSpec' => 'PhabricatorConfigSchemaSpec', 6113 6115 'PhabricatorSpacesTestCase' => 'PhabricatorTestCase', 6114 6116 'PhabricatorSpacesViewController' => 'PhabricatorSpacesController', 6115 6117 'PhabricatorStandardCustomField' => 'PhabricatorCustomField',
+12
src/applications/spaces/controller/PhabricatorSpacesEditController.php
··· 54 54 $validation_exception = null; 55 55 $e_name = true; 56 56 $v_name = $space->getNamespaceName(); 57 + $v_desc = $space->getDescription(); 57 58 $v_view = $space->getViewPolicy(); 58 59 $v_edit = $space->getEditPolicy(); 59 60 ··· 62 63 $e_name = null; 63 64 64 65 $v_name = $request->getStr('name'); 66 + $v_desc = $request->getStr('description'); 65 67 $v_view = $request->getStr('viewPolicy'); 66 68 $v_edit = $request->getStr('editPolicy'); 67 69 68 70 $type_name = PhabricatorSpacesNamespaceTransaction::TYPE_NAME; 71 + $type_desc = PhabricatorSpacesNamespaceTransaction::TYPE_DESCRIPTION; 69 72 $type_default = PhabricatorSpacesNamespaceTransaction::TYPE_DEFAULT; 70 73 $type_view = PhabricatorTransactions::TYPE_VIEW_POLICY; 71 74 $type_edit = PhabricatorTransactions::TYPE_EDIT_POLICY; ··· 73 76 $xactions[] = id(new PhabricatorSpacesNamespaceTransaction()) 74 77 ->setTransactionType($type_name) 75 78 ->setNewValue($v_name); 79 + 80 + $xactions[] = id(new PhabricatorSpacesNamespaceTransaction()) 81 + ->setTransactionType($type_desc) 82 + ->setNewValue($v_desc); 76 83 77 84 $xactions[] = id(new PhabricatorSpacesNamespaceTransaction()) 78 85 ->setTransactionType($type_view) ··· 128 135 ->setName('name') 129 136 ->setValue($v_name) 130 137 ->setError($e_name)) 138 + ->appendControl( 139 + id(new PhabricatorRemarkupControl()) 140 + ->setLabel(pht('Description')) 141 + ->setName('description') 142 + ->setValue($v_desc)) 131 143 ->appendChild( 132 144 id(new AphrontFormPolicyControl()) 133 145 ->setUser($viewer)
+14
src/applications/spaces/controller/PhabricatorSpacesViewController.php
··· 75 75 pht('Editable By'), 76 76 $descriptions[PhabricatorPolicyCapability::CAN_EDIT]); 77 77 78 + $description = $space->getDescription(); 79 + if (strlen($description)) { 80 + $description = PhabricatorMarkupEngine::renderOneObject( 81 + id(new PhabricatorMarkupOneOff())->setContent($description), 82 + 'default', 83 + $viewer); 84 + 85 + $list->addSectionHeader( 86 + pht('Description'), 87 + PHUIPropertyListView::ICON_SUMMARY); 88 + 89 + $list->addTextContent($description); 90 + } 91 + 78 92 return $list; 79 93 } 80 94
+11
src/applications/spaces/editor/PhabricatorSpacesNamespaceEditor.php
··· 15 15 $types = parent::getTransactionTypes(); 16 16 17 17 $types[] = PhabricatorSpacesNamespaceTransaction::TYPE_NAME; 18 + $types[] = PhabricatorSpacesNamespaceTransaction::TYPE_DESCRIPTION; 18 19 $types[] = PhabricatorSpacesNamespaceTransaction::TYPE_DEFAULT; 19 20 20 21 $types[] = PhabricatorTransactions::TYPE_VIEW_POLICY; ··· 34 35 return null; 35 36 } 36 37 return $name; 38 + case PhabricatorSpacesNamespaceTransaction::TYPE_DESCRIPTION: 39 + if ($this->getIsNewObject()) { 40 + return null; 41 + } 42 + return $object->getDescription(); 37 43 case PhabricatorSpacesNamespaceTransaction::TYPE_DEFAULT: 38 44 return $object->getIsDefaultNamespace() ? 1 : null; 39 45 case PhabricatorTransactions::TYPE_VIEW_POLICY: ··· 51 57 52 58 switch ($xaction->getTransactionType()) { 53 59 case PhabricatorSpacesNamespaceTransaction::TYPE_NAME: 60 + case PhabricatorSpacesNamespaceTransaction::TYPE_DESCRIPTION: 54 61 case PhabricatorTransactions::TYPE_VIEW_POLICY: 55 62 case PhabricatorTransactions::TYPE_EDIT_POLICY: 56 63 return $xaction->getNewValue(); ··· 71 78 case PhabricatorSpacesNamespaceTransaction::TYPE_NAME: 72 79 $object->setNamespaceName($new); 73 80 return; 81 + case PhabricatorSpacesNamespaceTransaction::TYPE_DESCRIPTION: 82 + $object->setDescription($new); 83 + return; 74 84 case PhabricatorSpacesNamespaceTransaction::TYPE_DEFAULT: 75 85 $object->setIsDefaultNamespace($new ? 1 : null); 76 86 return; ··· 91 101 92 102 switch ($xaction->getTransactionType()) { 93 103 case PhabricatorSpacesNamespaceTransaction::TYPE_NAME: 104 + case PhabricatorSpacesNamespaceTransaction::TYPE_DESCRIPTION: 94 105 case PhabricatorSpacesNamespaceTransaction::TYPE_DEFAULT: 95 106 case PhabricatorTransactions::TYPE_VIEW_POLICY: 96 107 case PhabricatorTransactions::TYPE_EDIT_POLICY:
+4 -1
src/applications/spaces/phid/PhabricatorSpacesNamespacePHIDType.php
··· 32 32 33 33 foreach ($handles as $phid => $handle) { 34 34 $namespace = $objects[$phid]; 35 + 35 36 $monogram = $namespace->getMonogram(); 37 + $name = $namespace->getNamespaceName(); 36 38 37 - $handle->setName($namespace->getNamespaceName()); 39 + $handle->setName($name); 40 + $handle->setFullName(pht('%s %s', $monogram, $name)); 38 41 $handle->setURI('/'.$monogram); 39 42 } 40 43 }
+4 -1
src/applications/spaces/storage/PhabricatorSpacesNamespace.php
··· 11 11 protected $viewPolicy; 12 12 protected $editPolicy; 13 13 protected $isDefaultNamespace; 14 + protected $description; 14 15 15 16 public static function initializeNewNamespace(PhabricatorUser $actor) { 16 17 $app = id(new PhabricatorApplicationQuery()) ··· 26 27 return id(new PhabricatorSpacesNamespace()) 27 28 ->setIsDefaultNamespace(null) 28 29 ->setViewPolicy($view_policy) 29 - ->setEditPolicy($edit_policy); 30 + ->setEditPolicy($edit_policy) 31 + ->setDescription(''); 30 32 } 31 33 32 34 protected function getConfiguration() { ··· 35 37 self::CONFIG_COLUMN_SCHEMA => array( 36 38 'namespaceName' => 'text255', 37 39 'isDefaultNamespace' => 'bool?', 40 + 'description' => 'text', 38 41 ), 39 42 self::CONFIG_KEY_SCHEMA => array( 40 43 'key_default' => array(
+37
src/applications/spaces/storage/PhabricatorSpacesNamespaceTransaction.php
··· 5 5 6 6 const TYPE_NAME = 'spaces:name'; 7 7 const TYPE_DEFAULT = 'spaces:default'; 8 + const TYPE_DESCRIPTION = 'spaces:description'; 8 9 9 10 public function getApplicationName() { 10 11 return 'spaces'; ··· 18 19 return null; 19 20 } 20 21 22 + public function shouldHide() { 23 + $old = $this->getOldValue(); 24 + 25 + switch ($this->getTransactionType()) { 26 + case self::TYPE_DESCRIPTION: 27 + return ($old === null); 28 + } 29 + 30 + return parent::shouldHide(); 31 + } 32 + 33 + public function hasChangeDetails() { 34 + switch ($this->getTransactionType()) { 35 + case self::TYPE_DESCRIPTION: 36 + return true; 37 + } 38 + 39 + return parent::hasChangeDetails(); 40 + } 41 + 42 + public function getRemarkupBlocks() { 43 + $blocks = parent::getRemarkupBlocks(); 44 + 45 + switch ($this->getTransactionType()) { 46 + case self::TYPE_DESCRIPTION: 47 + $blocks[] = $this->getNewValue(); 48 + break; 49 + } 50 + 51 + return $blocks; 52 + } 53 + 21 54 public function getTitle() { 22 55 $old = $this->getOldValue(); 23 56 $new = $this->getNewValue(); ··· 37 70 $old, 38 71 $new); 39 72 } 73 + case self::TYPE_DESCRIPTION: 74 + return pht( 75 + '%s updated the description for this space.', 76 + $this->renderHandleLink($author_phid)); 40 77 case self::TYPE_DEFAULT: 41 78 return pht( 42 79 '%s made this the default space.',
+10
src/applications/spaces/storage/PhabricatorSpacesSchemaSpec.php
··· 1 + <?php 2 + 3 + final class PhabricatorSpacesSchemaSpec 4 + extends PhabricatorConfigSchemaSpec { 5 + 6 + public function buildSchemata() { 7 + $this->buildEdgeSchemata(new PhabricatorSpacesNamespace()); 8 + } 9 + 10 + }