Page MenuHomePhabricator

D13925.id33607.diff
No OneTemporary

D13925.id33607.diff

diff --git a/resources/sql/autopatches/20150815.owners.status.1.sql b/resources/sql/autopatches/20150815.owners.status.1.sql
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20150815.owners.status.1.sql
@@ -0,0 +1,2 @@
+ALTER TABLE {$NAMESPACE}_owners.owners_package
+ ADD status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT};
diff --git a/resources/sql/autopatches/20150815.owners.status.2.sql b/resources/sql/autopatches/20150815.owners.status.2.sql
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20150815.owners.status.2.sql
@@ -0,0 +1,2 @@
+UPDATE {$NAMESPACE}_owners.owners_package
+ SET status = 'active' WHERE status = '';
diff --git a/src/applications/owners/controller/PhabricatorOwnersDetailController.php b/src/applications/owners/controller/PhabricatorOwnersDetailController.php
--- a/src/applications/owners/controller/PhabricatorOwnersDetailController.php
+++ b/src/applications/owners/controller/PhabricatorOwnersDetailController.php
@@ -41,9 +41,20 @@
$properties = $this->buildPackagePropertyView($package);
$properties->setActionList($actions);
+ if ($package->isArchived()) {
+ $header_icon = 'fa-ban';
+ $header_name = pht('Archived');
+ $header_color = 'dark';
+ } else {
+ $header_icon = 'fa-check';
+ $header_name = pht('Active');
+ $header_color = 'bluegrey';
+ }
+
$header = id(new PHUIHeaderView())
->setUser($viewer)
->setHeader($package->getName())
+ ->setStatus($header_icon, $header_color, $header_name)
->setPolicyObject($package);
$panel = id(new PHUIObjectBoxView())
diff --git a/src/applications/owners/controller/PhabricatorOwnersEditController.php b/src/applications/owners/controller/PhabricatorOwnersEditController.php
--- a/src/applications/owners/controller/PhabricatorOwnersEditController.php
+++ b/src/applications/owners/controller/PhabricatorOwnersEditController.php
@@ -34,6 +34,7 @@
$v_owners = mpull($package->getOwners(), 'getUserPHID');
$v_auditing = $package->getAuditingEnabled();
$v_description = $package->getDescription();
+ $v_status = $package->getStatus();
$errors = array();
@@ -44,11 +45,13 @@
$v_owners = $request->getArr('owners');
$v_auditing = ($request->getStr('auditing') == 'enabled');
$v_description = $request->getStr('description');
+ $v_status = $request->getStr('status');
$type_name = PhabricatorOwnersPackageTransaction::TYPE_NAME;
$type_owners = PhabricatorOwnersPackageTransaction::TYPE_OWNERS;
$type_auditing = PhabricatorOwnersPackageTransaction::TYPE_AUDITING;
$type_description = PhabricatorOwnersPackageTransaction::TYPE_DESCRIPTION;
+ $type_status = PhabricatorOwnersPackageTransaction::TYPE_STATUS;
$xactions[] = id(new PhabricatorOwnersPackageTransaction())
->setTransactionType($type_name)
@@ -66,6 +69,12 @@
->setTransactionType($type_description)
->setNewValue($v_description);
+ if (!$is_new) {
+ $xactions[] = id(new PhabricatorOwnersPackageTransaction())
+ ->setTransactionType($type_status)
+ ->setNewValue($v_status);
+ }
+
$editor = id(new PhabricatorOwnersPackageTransactionEditor())
->setActor($viewer)
->setContentSourceFromRequest($request)
@@ -115,8 +124,18 @@
->setDatasource(new PhabricatorProjectOrUserDatasource())
->setLabel(pht('Owners'))
->setName('owners')
- ->setValue($v_owners))
- ->appendChild(
+ ->setValue($v_owners));
+
+ if (!$is_new) {
+ $form->appendChild(
+ id(new AphrontFormSelectControl())
+ ->setLabel(pht('Status'))
+ ->setName('status')
+ ->setValue($v_status)
+ ->setOptions($package->getStatusNameMap()));
+ }
+
+ $form->appendChild(
id(new AphrontFormSelectControl())
->setName('auditing')
->setLabel(pht('Auditing'))
diff --git a/src/applications/owners/editor/PhabricatorOwnersPackageTransactionEditor.php b/src/applications/owners/editor/PhabricatorOwnersPackageTransactionEditor.php
--- a/src/applications/owners/editor/PhabricatorOwnersPackageTransactionEditor.php
+++ b/src/applications/owners/editor/PhabricatorOwnersPackageTransactionEditor.php
@@ -19,6 +19,7 @@
$types[] = PhabricatorOwnersPackageTransaction::TYPE_AUDITING;
$types[] = PhabricatorOwnersPackageTransaction::TYPE_DESCRIPTION;
$types[] = PhabricatorOwnersPackageTransaction::TYPE_PATHS;
+ $types[] = PhabricatorOwnersPackageTransaction::TYPE_STATUS;
return $types;
}
@@ -42,6 +43,8 @@
case PhabricatorOwnersPackageTransaction::TYPE_PATHS:
$paths = $object->getPaths();
return mpull($paths, 'getRef');
+ case PhabricatorOwnersPackageTransaction::TYPE_STATUS:
+ return $object->getStatus();
}
}
@@ -53,6 +56,7 @@
case PhabricatorOwnersPackageTransaction::TYPE_NAME:
case PhabricatorOwnersPackageTransaction::TYPE_DESCRIPTION:
case PhabricatorOwnersPackageTransaction::TYPE_PATHS:
+ case PhabricatorOwnersPackageTransaction::TYPE_STATUS:
return $xaction->getNewValue();
case PhabricatorOwnersPackageTransaction::TYPE_AUDITING:
return (int)$xaction->getNewValue();
@@ -99,6 +103,9 @@
case PhabricatorOwnersPackageTransaction::TYPE_OWNERS:
case PhabricatorOwnersPackageTransaction::TYPE_PATHS:
return;
+ case PhabricatorOwnersPackageTransaction::TYPE_STATUS:
+ $object->setStatus($xaction->getNewValue());
+ return;
}
return parent::applyCustomInternalTransaction($object, $xaction);
@@ -112,6 +119,7 @@
case PhabricatorOwnersPackageTransaction::TYPE_NAME:
case PhabricatorOwnersPackageTransaction::TYPE_DESCRIPTION:
case PhabricatorOwnersPackageTransaction::TYPE_AUDITING:
+ case PhabricatorOwnersPackageTransaction::TYPE_STATUS:
return;
case PhabricatorOwnersPackageTransaction::TYPE_OWNERS:
$old = $xaction->getOldValue();
diff --git a/src/applications/owners/query/PhabricatorOwnersPackageQuery.php b/src/applications/owners/query/PhabricatorOwnersPackageQuery.php
--- a/src/applications/owners/query/PhabricatorOwnersPackageQuery.php
+++ b/src/applications/owners/query/PhabricatorOwnersPackageQuery.php
@@ -10,6 +10,7 @@
private $repositoryPHIDs;
private $paths;
private $namePrefix;
+ private $statuses;
private $controlMap = array();
private $controlResults;
@@ -57,6 +58,11 @@
return $this;
}
+ public function withStatuses(array $statuses) {
+ $this->statuses = $statuses;
+ return $this;
+ }
+
public function withControl($repository_phid, array $paths) {
if (empty($this->controlMap[$repository_phid])) {
$this->controlMap[$repository_phid] = array();
@@ -200,6 +206,13 @@
$this->getFragmentsForPaths($this->paths));
}
+ if ($this->statuses !== null) {
+ $where[] = qsprintf(
+ $conn,
+ 'p.status IN (%Ls)',
+ $this->statuses);
+ }
+
if (strlen($this->namePrefix)) {
// NOTE: This is a hacky mess, but this column is currently case
// sensitive and unique.
diff --git a/src/applications/owners/query/PhabricatorOwnersPackageSearchEngine.php b/src/applications/owners/query/PhabricatorOwnersPackageSearchEngine.php
--- a/src/applications/owners/query/PhabricatorOwnersPackageSearchEngine.php
+++ b/src/applications/owners/query/PhabricatorOwnersPackageSearchEngine.php
@@ -31,6 +31,12 @@
->setLabel(pht('Paths'))
->setKey('paths')
->setAliases(array('path')),
+ id(new PhabricatorSearchCheckboxesField())
+ ->setKey('statuses')
+ ->setLabel(pht('Status'))
+ ->setOptions(
+ id(new PhabricatorOwnersPackage())
+ ->getStatusNameMap()),
);
}
@@ -49,6 +55,10 @@
$query->withPaths($map['paths']);
}
+ if ($map['statuses']) {
+ $query->withStatuses($map['statuses']);
+ }
+
return $query;
}
@@ -64,6 +74,7 @@
}
$names += array(
+ 'active' => pht('Active Packages'),
'all' => pht('All Packages'),
);
@@ -77,6 +88,12 @@
switch ($query_key) {
case 'all':
return $query;
+ case 'active':
+ return $query->setParameter(
+ 'statuses',
+ array(
+ PhabricatorOwnersPackage::STATUS_ACTIVE,
+ ));
case 'authority':
return $query->setParameter(
'authorityPHIDs',
@@ -105,6 +122,10 @@
->setHeader($package->getName())
->setHref('/owners/package/'.$id.'/');
+ if ($package->isArchived()) {
+ $item->setDisabled(true);
+ }
+
$list->addItem($item);
}
diff --git a/src/applications/owners/storage/PhabricatorOwnersPackage.php b/src/applications/owners/storage/PhabricatorOwnersPackage.php
--- a/src/applications/owners/storage/PhabricatorOwnersPackage.php
+++ b/src/applications/owners/storage/PhabricatorOwnersPackage.php
@@ -12,14 +12,19 @@
protected $description;
protected $primaryOwnerPHID;
protected $mailKey;
+ protected $status;
private $paths = self::ATTACHABLE;
private $owners = self::ATTACHABLE;
+ const STATUS_ACTIVE = 'active';
+ const STATUS_ARCHIVED = 'archived';
+
public static function initializeNewPackage(PhabricatorUser $actor) {
return id(new PhabricatorOwnersPackage())
->setAuditingEnabled(0)
->attachPaths(array())
+ ->setStatus(self::STATUS_ACTIVE)
->attachOwners(array());
}
@@ -41,6 +46,13 @@
return null;
}
+ public static function getStatusNameMap() {
+ return array(
+ self::STATUS_ACTIVE => pht('Active'),
+ self::STATUS_ARCHIVED => pht('Archived'),
+ );
+ }
+
protected function getConfiguration() {
return array(
// This information is better available from the history table.
@@ -53,6 +65,7 @@
'primaryOwnerPHID' => 'phid?',
'auditingEnabled' => 'bool',
'mailKey' => 'bytes20',
+ 'status' => 'text32',
),
self::CONFIG_KEY_SCHEMA => array(
'key_phid' => null,
@@ -81,6 +94,10 @@
return parent::save();
}
+ public function isArchived() {
+ return ($this->getStatus() == self::STATUS_ARCHIVED);
+ }
+
public function setName($name) {
$this->name = $name;
if (!$this->getID()) {
diff --git a/src/applications/owners/storage/PhabricatorOwnersPackageTransaction.php b/src/applications/owners/storage/PhabricatorOwnersPackageTransaction.php
--- a/src/applications/owners/storage/PhabricatorOwnersPackageTransaction.php
+++ b/src/applications/owners/storage/PhabricatorOwnersPackageTransaction.php
@@ -9,6 +9,7 @@
const TYPE_AUDITING = 'owners.auditing';
const TYPE_DESCRIPTION = 'owners.description';
const TYPE_PATHS = 'owners.paths';
+ const TYPE_STATUS = 'owners.status';
public function getApplicationName() {
return 'owners';
@@ -115,6 +116,19 @@
return pht(
'%s updated paths for this package.',
$this->renderHandleLink($author_phid));
+ case self::TYPE_STATUS:
+ if ($new == PhabricatorOwnersPackage::STATUS_ACTIVE) {
+ if ($old === '') {
+ return;
+ }
+ return pht(
+ '%s activated this package.',
+ $this->renderHandleLink($author_phid));
+ } else if ($new == PhabricatorOwnersPackage::STATUS_ARCHIVED) {
+ return pht(
+ '%s archived this package.',
+ $this->renderHandleLink($author_phid));
+ }
}
return parent::getTitle();

File Metadata

Mime Type
text/plain
Expires
Fri, Mar 21, 12:00 AM (3 d, 13 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7714656
Default Alt Text
D13925.id33607.diff (11 KB)

Event Timeline