Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F14450319
D17829.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
22 KB
Referenced Files
None
Subscribers
None
D17829.diff
View Options
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -3937,13 +3937,18 @@
'PhabricatorSpacesInterface' => 'applications/spaces/interface/PhabricatorSpacesInterface.php',
'PhabricatorSpacesListController' => 'applications/spaces/controller/PhabricatorSpacesListController.php',
'PhabricatorSpacesNamespace' => 'applications/spaces/storage/PhabricatorSpacesNamespace.php',
+ 'PhabricatorSpacesNamespaceArchiveTransaction' => 'applications/spaces/xaction/PhabricatorSpacesNamespaceArchiveTransaction.php',
'PhabricatorSpacesNamespaceDatasource' => 'applications/spaces/typeahead/PhabricatorSpacesNamespaceDatasource.php',
+ 'PhabricatorSpacesNamespaceDefaultTransaction' => 'applications/spaces/xaction/PhabricatorSpacesNamespaceDefaultTransaction.php',
+ 'PhabricatorSpacesNamespaceDescriptionTransaction' => 'applications/spaces/xaction/PhabricatorSpacesNamespaceDescriptionTransaction.php',
'PhabricatorSpacesNamespaceEditor' => 'applications/spaces/editor/PhabricatorSpacesNamespaceEditor.php',
+ 'PhabricatorSpacesNamespaceNameTransaction' => 'applications/spaces/xaction/PhabricatorSpacesNamespaceNameTransaction.php',
'PhabricatorSpacesNamespacePHIDType' => 'applications/spaces/phid/PhabricatorSpacesNamespacePHIDType.php',
'PhabricatorSpacesNamespaceQuery' => 'applications/spaces/query/PhabricatorSpacesNamespaceQuery.php',
'PhabricatorSpacesNamespaceSearchEngine' => 'applications/spaces/query/PhabricatorSpacesNamespaceSearchEngine.php',
'PhabricatorSpacesNamespaceTransaction' => 'applications/spaces/storage/PhabricatorSpacesNamespaceTransaction.php',
'PhabricatorSpacesNamespaceTransactionQuery' => 'applications/spaces/query/PhabricatorSpacesNamespaceTransactionQuery.php',
+ 'PhabricatorSpacesNamespaceTransactionType' => 'applications/spaces/xaction/PhabricatorSpacesNamespaceTransactionType.php',
'PhabricatorSpacesNoAccessController' => 'applications/spaces/controller/PhabricatorSpacesNoAccessController.php',
'PhabricatorSpacesRemarkupRule' => 'applications/spaces/remarkup/PhabricatorSpacesRemarkupRule.php',
'PhabricatorSpacesSchemaSpec' => 'applications/spaces/storage/PhabricatorSpacesSchemaSpec.php',
@@ -9373,13 +9378,18 @@
'PhabricatorApplicationTransactionInterface',
'PhabricatorDestructibleInterface',
),
+ 'PhabricatorSpacesNamespaceArchiveTransaction' => 'PhabricatorSpacesNamespaceTransactionType',
'PhabricatorSpacesNamespaceDatasource' => 'PhabricatorTypeaheadDatasource',
+ 'PhabricatorSpacesNamespaceDefaultTransaction' => 'PhabricatorSpacesNamespaceTransactionType',
+ 'PhabricatorSpacesNamespaceDescriptionTransaction' => 'PhabricatorSpacesNamespaceTransactionType',
'PhabricatorSpacesNamespaceEditor' => 'PhabricatorApplicationTransactionEditor',
+ 'PhabricatorSpacesNamespaceNameTransaction' => 'PhabricatorSpacesNamespaceTransactionType',
'PhabricatorSpacesNamespacePHIDType' => 'PhabricatorPHIDType',
'PhabricatorSpacesNamespaceQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
'PhabricatorSpacesNamespaceSearchEngine' => 'PhabricatorApplicationSearchEngine',
- 'PhabricatorSpacesNamespaceTransaction' => 'PhabricatorApplicationTransaction',
+ 'PhabricatorSpacesNamespaceTransaction' => 'PhabricatorModularTransaction',
'PhabricatorSpacesNamespaceTransactionQuery' => 'PhabricatorApplicationTransactionQuery',
+ 'PhabricatorSpacesNamespaceTransactionType' => 'PhabricatorModularTransactionType',
'PhabricatorSpacesNoAccessController' => 'PhabricatorSpacesController',
'PhabricatorSpacesRemarkupRule' => 'PhabricatorObjectRemarkupRule',
'PhabricatorSpacesSchemaSpec' => 'PhabricatorConfigSchemaSpec',
diff --git a/src/applications/spaces/__tests__/PhabricatorSpacesTestCase.php b/src/applications/spaces/__tests__/PhabricatorSpacesTestCase.php
--- a/src/applications/spaces/__tests__/PhabricatorSpacesTestCase.php
+++ b/src/applications/spaces/__tests__/PhabricatorSpacesTestCase.php
@@ -190,8 +190,10 @@
$space = PhabricatorSpacesNamespace::initializeNewNamespace($actor);
- $type_name = PhabricatorSpacesNamespaceTransaction::TYPE_NAME;
- $type_default = PhabricatorSpacesNamespaceTransaction::TYPE_DEFAULT;
+ $type_name =
+ PhabricatorSpacesNamespaceNameTransaction::TRANSACTIONTYPE;
+ $type_default =
+ PhabricatorSpacesNamespaceDefaultTransaction::TRANSACTIONTYPE;
$type_view = PhabricatorTransactions::TYPE_VIEW_POLICY;
$type_edit = PhabricatorTransactions::TYPE_EDIT_POLICY;
diff --git a/src/applications/spaces/controller/PhabricatorSpacesArchiveController.php b/src/applications/spaces/controller/PhabricatorSpacesArchiveController.php
--- a/src/applications/spaces/controller/PhabricatorSpacesArchiveController.php
+++ b/src/applications/spaces/controller/PhabricatorSpacesArchiveController.php
@@ -23,7 +23,8 @@
$cancel_uri = '/'.$space->getMonogram();
if ($request->isFormPost()) {
- $type_archive = PhabricatorSpacesNamespaceTransaction::TYPE_ARCHIVE;
+ $type_archive =
+ PhabricatorSpacesNamespaceArchiveTransaction::TRANSACTIONTYPE;
$xactions = array();
$xactions[] = id(new PhabricatorSpacesNamespaceTransaction())
diff --git a/src/applications/spaces/controller/PhabricatorSpacesEditController.php b/src/applications/spaces/controller/PhabricatorSpacesEditController.php
--- a/src/applications/spaces/controller/PhabricatorSpacesEditController.php
+++ b/src/applications/spaces/controller/PhabricatorSpacesEditController.php
@@ -67,9 +67,12 @@
$v_view = $request->getStr('viewPolicy');
$v_edit = $request->getStr('editPolicy');
- $type_name = PhabricatorSpacesNamespaceTransaction::TYPE_NAME;
- $type_desc = PhabricatorSpacesNamespaceTransaction::TYPE_DESCRIPTION;
- $type_default = PhabricatorSpacesNamespaceTransaction::TYPE_DEFAULT;
+ $type_name =
+ PhabricatorSpacesNamespaceNameTransaction::TRANSACTIONTYPE;
+ $type_desc =
+ PhabricatorSpacesNamespaceDescriptionTransaction::TRANSACTIONTYPE;
+ $type_default =
+ PhabricatorSpacesNamespaceDefaultTransaction::TRANSACTIONTYPE;
$type_view = PhabricatorTransactions::TYPE_VIEW_POLICY;
$type_edit = PhabricatorTransactions::TYPE_EDIT_POLICY;
diff --git a/src/applications/spaces/controller/PhabricatorSpacesViewController.php b/src/applications/spaces/controller/PhabricatorSpacesViewController.php
--- a/src/applications/spaces/controller/PhabricatorSpacesViewController.php
+++ b/src/applications/spaces/controller/PhabricatorSpacesViewController.php
@@ -39,7 +39,7 @@
->setHeaderIcon('fa-th-large');
if ($space->getIsArchived()) {
- $header->setStatus('fa-ban', 'red', pht('Archived'));
+ $header->setStatus('fa-ban', 'indigo', pht('Archived'));
} else {
$header->setStatus('fa-check', 'bluegrey', pht('Active'));
}
diff --git a/src/applications/spaces/editor/PhabricatorSpacesNamespaceEditor.php b/src/applications/spaces/editor/PhabricatorSpacesNamespaceEditor.php
--- a/src/applications/spaces/editor/PhabricatorSpacesNamespaceEditor.php
+++ b/src/applications/spaces/editor/PhabricatorSpacesNamespaceEditor.php
@@ -14,153 +14,18 @@
public function getTransactionTypes() {
$types = parent::getTransactionTypes();
- $types[] = PhabricatorSpacesNamespaceTransaction::TYPE_NAME;
- $types[] = PhabricatorSpacesNamespaceTransaction::TYPE_DESCRIPTION;
- $types[] = PhabricatorSpacesNamespaceTransaction::TYPE_DEFAULT;
- $types[] = PhabricatorSpacesNamespaceTransaction::TYPE_ARCHIVE;
-
$types[] = PhabricatorTransactions::TYPE_VIEW_POLICY;
$types[] = PhabricatorTransactions::TYPE_EDIT_POLICY;
return $types;
}
- protected function getCustomTransactionOldValue(
- PhabricatorLiskDAO $object,
- PhabricatorApplicationTransaction $xaction) {
-
- switch ($xaction->getTransactionType()) {
- case PhabricatorSpacesNamespaceTransaction::TYPE_NAME:
- $name = $object->getNamespaceName();
- if (!strlen($name)) {
- return null;
- }
- return $name;
- case PhabricatorSpacesNamespaceTransaction::TYPE_DESCRIPTION:
- if ($this->getIsNewObject()) {
- return null;
- }
- return $object->getDescription();
- case PhabricatorSpacesNamespaceTransaction::TYPE_ARCHIVE:
- return $object->getIsArchived();
- case PhabricatorSpacesNamespaceTransaction::TYPE_DEFAULT:
- return $object->getIsDefaultNamespace() ? 1 : null;
- case PhabricatorTransactions::TYPE_VIEW_POLICY:
- return $object->getViewPolicy();
- case PhabricatorTransactions::TYPE_EDIT_POLICY:
- return $object->getEditPolicy();
- }
-
- return parent::getCustomTransactionOldValue($object, $xaction);
- }
-
- protected function getCustomTransactionNewValue(
- PhabricatorLiskDAO $object,
- PhabricatorApplicationTransaction $xaction) {
-
- switch ($xaction->getTransactionType()) {
- case PhabricatorSpacesNamespaceTransaction::TYPE_NAME:
- case PhabricatorSpacesNamespaceTransaction::TYPE_DESCRIPTION:
- case PhabricatorTransactions::TYPE_VIEW_POLICY:
- case PhabricatorTransactions::TYPE_EDIT_POLICY:
- return $xaction->getNewValue();
- case PhabricatorSpacesNamespaceTransaction::TYPE_ARCHIVE:
- return $xaction->getNewValue() ? 1 : 0;
- case PhabricatorSpacesNamespaceTransaction::TYPE_DEFAULT:
- return $xaction->getNewValue() ? 1 : null;
- }
-
- return parent::getCustomTransactionNewValue($object, $xaction);
- }
-
- protected function applyCustomInternalTransaction(
- PhabricatorLiskDAO $object,
- PhabricatorApplicationTransaction $xaction) {
-
- $new = $xaction->getNewValue();
-
- switch ($xaction->getTransactionType()) {
- case PhabricatorSpacesNamespaceTransaction::TYPE_NAME:
- $object->setNamespaceName($new);
- return;
- case PhabricatorSpacesNamespaceTransaction::TYPE_DESCRIPTION:
- $object->setDescription($new);
- return;
- case PhabricatorSpacesNamespaceTransaction::TYPE_DEFAULT:
- $object->setIsDefaultNamespace($new ? 1 : null);
- return;
- case PhabricatorSpacesNamespaceTransaction::TYPE_ARCHIVE:
- $object->setIsArchived($new ? 1 : 0);
- return;
- case PhabricatorTransactions::TYPE_VIEW_POLICY:
- $object->setViewPolicy($new);
- return;
- case PhabricatorTransactions::TYPE_EDIT_POLICY:
- $object->setEditPolicy($new);
- return;
- }
-
- return parent::applyCustomInternalTransaction($object, $xaction);
- }
-
- protected function applyCustomExternalTransaction(
- PhabricatorLiskDAO $object,
- PhabricatorApplicationTransaction $xaction) {
-
- switch ($xaction->getTransactionType()) {
- case PhabricatorSpacesNamespaceTransaction::TYPE_NAME:
- case PhabricatorSpacesNamespaceTransaction::TYPE_DESCRIPTION:
- case PhabricatorSpacesNamespaceTransaction::TYPE_DEFAULT:
- case PhabricatorSpacesNamespaceTransaction::TYPE_ARCHIVE:
- case PhabricatorTransactions::TYPE_VIEW_POLICY:
- case PhabricatorTransactions::TYPE_EDIT_POLICY:
- return;
- }
-
- return parent::applyCustomExternalTransaction($object, $xaction);
+ public function getCreateObjectTitle($author, $object) {
+ return pht('%s created this space.', $author);
}
- protected function validateTransaction(
- PhabricatorLiskDAO $object,
- $type,
- array $xactions) {
-
- $errors = parent::validateTransaction($object, $type, $xactions);
-
- switch ($type) {
- case PhabricatorSpacesNamespaceTransaction::TYPE_NAME:
- $missing = $this->validateIsEmptyTextField(
- $object->getNamespaceName(),
- $xactions);
-
- if ($missing) {
- $error = new PhabricatorApplicationTransactionValidationError(
- $type,
- pht('Required'),
- pht('Spaces must have a name.'),
- nonempty(last($xactions), null));
-
- $error->setIsMissingFieldError(true);
- $errors[] = $error;
- }
- break;
- case PhabricatorSpacesNamespaceTransaction::TYPE_DEFAULT:
- if (!$this->getIsNewObject()) {
- foreach ($xactions as $xaction) {
- $errors[] = new PhabricatorApplicationTransactionValidationError(
- $type,
- pht('Invalid'),
- pht(
- 'Only the first space created can be the default space, and '.
- 'it must remain the default space evermore.'),
- $xaction);
- }
- }
- break;
-
- }
-
- return $errors;
+ public function getCreateObjectTitleForFeed($author, $object) {
+ return pht('%s created space %s.', $author, $object);
}
}
diff --git a/src/applications/spaces/storage/PhabricatorSpacesNamespaceTransaction.php b/src/applications/spaces/storage/PhabricatorSpacesNamespaceTransaction.php
--- a/src/applications/spaces/storage/PhabricatorSpacesNamespaceTransaction.php
+++ b/src/applications/spaces/storage/PhabricatorSpacesNamespaceTransaction.php
@@ -1,12 +1,7 @@
<?php
final class PhabricatorSpacesNamespaceTransaction
- extends PhabricatorApplicationTransaction {
-
- const TYPE_NAME = 'spaces:name';
- const TYPE_DEFAULT = 'spaces:default';
- const TYPE_DESCRIPTION = 'spaces:description';
- const TYPE_ARCHIVE = 'spaces:archive';
+ extends PhabricatorModularTransaction {
public function getApplicationName() {
return 'spaces';
@@ -20,78 +15,8 @@
return null;
}
- public function shouldHide() {
- $old = $this->getOldValue();
-
- switch ($this->getTransactionType()) {
- case self::TYPE_DESCRIPTION:
- return ($old === null);
- }
-
- return parent::shouldHide();
- }
-
- public function hasChangeDetails() {
- switch ($this->getTransactionType()) {
- case self::TYPE_DESCRIPTION:
- return true;
- }
-
- return parent::hasChangeDetails();
- }
-
- public function getRemarkupBlocks() {
- $blocks = parent::getRemarkupBlocks();
-
- switch ($this->getTransactionType()) {
- case self::TYPE_DESCRIPTION:
- $blocks[] = $this->getNewValue();
- break;
- }
-
- return $blocks;
- }
-
- public function getTitle() {
- $old = $this->getOldValue();
- $new = $this->getNewValue();
-
- $author_phid = $this->getAuthorPHID();
-
- switch ($this->getTransactionType()) {
- case self::TYPE_NAME:
- if ($old === null) {
- return pht(
- '%s created this space.',
- $this->renderHandleLink($author_phid));
- } else {
- return pht(
- '%s renamed this space from "%s" to "%s".',
- $this->renderHandleLink($author_phid),
- $old,
- $new);
- }
- case self::TYPE_DESCRIPTION:
- return pht(
- '%s updated the description for this space.',
- $this->renderHandleLink($author_phid));
- case self::TYPE_DEFAULT:
- return pht(
- '%s made this the default space.',
- $this->renderHandleLink($author_phid));
- case self::TYPE_ARCHIVE:
- if ($new) {
- return pht(
- '%s archived this space.',
- $this->renderHandleLink($author_phid));
- } else {
- return pht(
- '%s activated this space.',
- $this->renderHandleLink($author_phid));
- }
- }
-
- return parent::getTitle();
+ public function getBaseTransactionClass() {
+ return 'PhabricatorSpacesNamespaceTransactionType';
}
}
diff --git a/src/applications/spaces/xaction/PhabricatorSpacesNamespaceArchiveTransaction.php b/src/applications/spaces/xaction/PhabricatorSpacesNamespaceArchiveTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/spaces/xaction/PhabricatorSpacesNamespaceArchiveTransaction.php
@@ -0,0 +1,60 @@
+<?php
+
+final class PhabricatorSpacesNamespaceArchiveTransaction
+ extends PhabricatorSpacesNamespaceTransactionType {
+
+ const TRANSACTIONTYPE = 'spaces:archive';
+
+ public function generateOldValue($object) {
+ return $object->getIsArchived();
+ }
+
+ public function applyInternalEffects($object, $value) {
+ $object->setIsArchived((int)$value);
+ }
+
+ public function getTitle() {
+ $new = $this->getNewValue();
+ if ($new) {
+ return pht(
+ '%s archived this space.',
+ $this->renderAuthor());
+ } else {
+ return pht(
+ '%s activated this space.',
+ $this->renderAuthor());
+ }
+ }
+
+ public function getTitleForFeed() {
+ $new = $this->getNewValue();
+ if ($new) {
+ return pht(
+ '%s archived space %s.',
+ $this->renderAuthor(),
+ $this->renderObject());
+ } else {
+ return pht(
+ '%s activated space %s.',
+ $this->renderAuthor(),
+ $this->renderObject());
+ }
+ }
+
+ public function getIcon() {
+ $new = $this->getNewValue();
+ if ($new) {
+ return 'fa-ban';
+ } else {
+ return 'fa-check';
+ }
+ }
+
+ public function getColor() {
+ $new = $this->getNewValue();
+ if ($new) {
+ return 'indigo';
+ }
+ }
+
+}
diff --git a/src/applications/spaces/xaction/PhabricatorSpacesNamespaceDefaultTransaction.php b/src/applications/spaces/xaction/PhabricatorSpacesNamespaceDefaultTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/spaces/xaction/PhabricatorSpacesNamespaceDefaultTransaction.php
@@ -0,0 +1,44 @@
+<?php
+
+final class PhabricatorSpacesNamespaceDefaultTransaction
+ extends PhabricatorSpacesNamespaceTransactionType {
+
+ const TRANSACTIONTYPE = 'spaces:default';
+
+ public function generateOldValue($object) {
+ return $object->getIsDefaultNamespace();
+ }
+
+ public function applyInternalEffects($object, $value) {
+ $object->setIsDefaultNamespace($value);
+ }
+
+ public function getTitle() {
+ return pht(
+ '%s made this the default space.',
+ $this->renderAuthor());
+ }
+
+ public function getTitleForFeed() {
+ return pht(
+ '%s made space %s the default space.',
+ $this->renderAuthor(),
+ $this->renderObject());
+
+ }
+
+ public function validateTransactions($object, array $xactions) {
+ $errors = array();
+
+ if (!$this->isNewObject()) {
+ foreach ($xactions as $xaction) {
+ $errors[] = $this->newInvalidError(
+ pht('Only the first space created can be the default space, and '.
+ 'it must remain the default space evermore.'));
+ }
+ }
+
+ return $errors;
+ }
+
+}
diff --git a/src/applications/spaces/xaction/PhabricatorSpacesNamespaceDescriptionTransaction.php b/src/applications/spaces/xaction/PhabricatorSpacesNamespaceDescriptionTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/spaces/xaction/PhabricatorSpacesNamespaceDescriptionTransaction.php
@@ -0,0 +1,57 @@
+<?php
+
+final class PhabricatorSpacesNamespaceDescriptionTransaction
+ extends PhabricatorSpacesNamespaceTransactionType {
+
+ const TRANSACTIONTYPE = 'spaces:description';
+
+ public function generateOldValue($object) {
+ return $object->getDescription();
+ }
+
+ public function applyInternalEffects($object, $value) {
+ $object->setDescription($value);
+ }
+
+ public function getTitle() {
+ return pht(
+ '%s updated the space description.',
+ $this->renderAuthor());
+ }
+
+ public function getTitleForFeed() {
+ return pht(
+ '%s updated the space description for %s.',
+ $this->renderAuthor(),
+ $this->renderObject());
+ }
+
+ public function hasChangeDetailView() {
+ return true;
+ }
+
+ public function getMailDiffSectionHeader() {
+ return pht('CHANGES TO SPACE DESCRIPTION');
+ }
+
+ public function newChangeDetailView() {
+ $viewer = $this->getViewer();
+
+ return id(new PhabricatorApplicationTransactionTextDiffDetailView())
+ ->setViewer($viewer)
+ ->setOldText($this->getOldValue())
+ ->setNewText($this->getNewValue());
+ }
+
+ public function newRemarkupChanges() {
+ $changes = array();
+
+ $changes[] = $this->newRemarkupChange()
+ ->setOldValue($this->getOldValue())
+ ->setNewValue($this->getNewValue());
+
+ return $changes;
+ }
+
+
+}
diff --git a/src/applications/spaces/xaction/PhabricatorSpacesNamespaceNameTransaction.php b/src/applications/spaces/xaction/PhabricatorSpacesNamespaceNameTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/spaces/xaction/PhabricatorSpacesNamespaceNameTransaction.php
@@ -0,0 +1,62 @@
+<?php
+
+final class PhabricatorSpacesNamespaceNameTransaction
+ extends PhabricatorSpacesNamespaceTransactionType {
+
+ const TRANSACTIONTYPE = 'spaces:name';
+
+ public function generateOldValue($object) {
+ return $object->getNamespaceName();
+ }
+
+ public function applyInternalEffects($object, $value) {
+ $object->setNamespaceName($value);
+ }
+
+ public function getTitle() {
+ $old = $this->getOldValue();
+ if (!strlen($old)) {
+ return pht(
+ '%s created this space.',
+ $this->renderAuthor());
+ } else {
+ return pht(
+ '%s renamed this space from %s to %s.',
+ $this->renderAuthor(),
+ $this->renderOldValue(),
+ $this->renderNewValue());
+ }
+ }
+
+ public function getTitleForFeed() {
+ return pht(
+ '%s renamed space %s from %s to %s.',
+ $this->renderAuthor(),
+ $this->renderObject(),
+ $this->renderOldValue(),
+ $this->renderNewValue());
+ }
+
+ public function validateTransactions($object, array $xactions) {
+ $errors = array();
+
+ if ($this->isEmptyTextTransaction($object->getNamespaceName(), $xactions)) {
+ $errors[] = $this->newRequiredError(
+ pht('Spaces must have a name.'));
+ }
+
+ $max_length = $object->getColumnMaximumByteLength('namespaceName');
+ foreach ($xactions as $xaction) {
+ $new_value = $xaction->getNewValue();
+ $new_length = strlen($new_value);
+ if ($new_length > $max_length) {
+ $errors[] = $this->newInvalidError(
+ pht('The name can be no longer than %s characters.',
+ new PhutilNumber($max_length)));
+ }
+ }
+
+ return $errors;
+ }
+
+}
diff --git a/src/applications/spaces/xaction/PhabricatorSpacesNamespaceTransactionType.php b/src/applications/spaces/xaction/PhabricatorSpacesNamespaceTransactionType.php
new file mode 100644
--- /dev/null
+++ b/src/applications/spaces/xaction/PhabricatorSpacesNamespaceTransactionType.php
@@ -0,0 +1,4 @@
+<?php
+
+abstract class PhabricatorSpacesNamespaceTransactionType
+ extends PhabricatorModularTransactionType {}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Dec 28, 2:56 AM (7 h, 3 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6933944
Default Alt Text
D17829.diff (22 KB)
Attached To
Mode
D17829: Update Spaces for modular transactions
Attached
Detach File
Event Timeline
Log In to Comment