@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

Allow Owners Packages to be archived

Summary: Fixes T8428. Adds status to packages, allows setting and application search. I presume though these need checked elsewhere?

Test Plan: New package, edit package, archive package, run search queries.

Reviewers: epriestley

Reviewed By: epriestley

Subscribers: Korvin

Maniphest Tasks: T8428

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

+111 -2
+2
resources/sql/autopatches/20150815.owners.status.1.sql
··· 1 + ALTER TABLE {$NAMESPACE}_owners.owners_package 2 + ADD status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT};
+2
resources/sql/autopatches/20150815.owners.status.2.sql
··· 1 + UPDATE {$NAMESPACE}_owners.owners_package 2 + SET status = 'active' WHERE status = '';
+2
src/applications/differential/controller/DifferentialController.php
··· 47 47 if ($viewer->getPHID()) { 48 48 $packages = id(new PhabricatorOwnersPackageQuery()) 49 49 ->setViewer($viewer) 50 + ->withStatuses(array(PhabricatorOwnersPackage::STATUS_ACTIVE)) 50 51 ->withAuthorityPHIDs(array($viewer->getPHID())) 51 52 ->execute(); 52 53 $toc_view->setAuthorityPackages($packages); ··· 58 59 59 60 $control_query = id(new PhabricatorOwnersPackageQuery()) 60 61 ->setViewer($viewer) 62 + ->withStatuses(array(PhabricatorOwnersPackage::STATUS_ACTIVE)) 61 63 ->withControl($repository_phid, $paths); 62 64 $control_query->execute(); 63 65 }
+1
src/applications/diffusion/controller/DiffusionBrowseController.php
··· 167 167 if (PhabricatorApplication::isClassInstalled($owners)) { 168 168 $package_query = id(new PhabricatorOwnersPackageQuery()) 169 169 ->setViewer($viewer) 170 + ->withStatuses(array(PhabricatorOwnersPackage::STATUS_ACTIVE)) 170 171 ->withControl( 171 172 $repository->getPHID(), 172 173 array(
+2
src/applications/diffusion/controller/DiffusionCommitController.php
··· 1089 1089 if ($viewer->getPHID()) { 1090 1090 $packages = id(new PhabricatorOwnersPackageQuery()) 1091 1091 ->setViewer($viewer) 1092 + ->withStatuses(array(PhabricatorOwnersPackage::STATUS_ACTIVE)) 1092 1093 ->withAuthorityPHIDs(array($viewer->getPHID())) 1093 1094 ->execute(); 1094 1095 $toc_view->setAuthorityPackages($packages); ··· 1099 1100 1100 1101 $control_query = id(new PhabricatorOwnersPackageQuery()) 1101 1102 ->setViewer($viewer) 1103 + ->withStatuses(array(PhabricatorOwnersPackage::STATUS_ACTIVE)) 1102 1104 ->withControl($repository_phid, mpull($changesets, 'getFilename')); 1103 1105 $control_query->execute(); 1104 1106 }
+11
src/applications/owners/controller/PhabricatorOwnersDetailController.php
··· 41 41 $properties = $this->buildPackagePropertyView($package); 42 42 $properties->setActionList($actions); 43 43 44 + if ($package->isArchived()) { 45 + $header_icon = 'fa-ban'; 46 + $header_name = pht('Archived'); 47 + $header_color = 'dark'; 48 + } else { 49 + $header_icon = 'fa-check'; 50 + $header_name = pht('Active'); 51 + $header_color = 'bluegrey'; 52 + } 53 + 44 54 $header = id(new PHUIHeaderView()) 45 55 ->setUser($viewer) 46 56 ->setHeader($package->getName()) 57 + ->setStatus($header_icon, $header_color, $header_name) 47 58 ->setPolicyObject($package); 48 59 49 60 $panel = id(new PHUIObjectBoxView())
+21 -2
src/applications/owners/controller/PhabricatorOwnersEditController.php
··· 34 34 $v_owners = mpull($package->getOwners(), 'getUserPHID'); 35 35 $v_auditing = $package->getAuditingEnabled(); 36 36 $v_description = $package->getDescription(); 37 + $v_status = $package->getStatus(); 37 38 38 39 39 40 $errors = array(); ··· 44 45 $v_owners = $request->getArr('owners'); 45 46 $v_auditing = ($request->getStr('auditing') == 'enabled'); 46 47 $v_description = $request->getStr('description'); 48 + $v_status = $request->getStr('status'); 47 49 48 50 $type_name = PhabricatorOwnersPackageTransaction::TYPE_NAME; 49 51 $type_owners = PhabricatorOwnersPackageTransaction::TYPE_OWNERS; 50 52 $type_auditing = PhabricatorOwnersPackageTransaction::TYPE_AUDITING; 51 53 $type_description = PhabricatorOwnersPackageTransaction::TYPE_DESCRIPTION; 54 + $type_status = PhabricatorOwnersPackageTransaction::TYPE_STATUS; 52 55 53 56 $xactions[] = id(new PhabricatorOwnersPackageTransaction()) 54 57 ->setTransactionType($type_name) ··· 65 68 $xactions[] = id(new PhabricatorOwnersPackageTransaction()) 66 69 ->setTransactionType($type_description) 67 70 ->setNewValue($v_description); 71 + 72 + if (!$is_new) { 73 + $xactions[] = id(new PhabricatorOwnersPackageTransaction()) 74 + ->setTransactionType($type_status) 75 + ->setNewValue($v_status); 76 + } 68 77 69 78 $editor = id(new PhabricatorOwnersPackageTransactionEditor()) 70 79 ->setActor($viewer) ··· 115 124 ->setDatasource(new PhabricatorProjectOrUserDatasource()) 116 125 ->setLabel(pht('Owners')) 117 126 ->setName('owners') 118 - ->setValue($v_owners)) 119 - ->appendChild( 127 + ->setValue($v_owners)); 128 + 129 + if (!$is_new) { 130 + $form->appendChild( 131 + id(new AphrontFormSelectControl()) 132 + ->setLabel(pht('Status')) 133 + ->setName('status') 134 + ->setValue($v_status) 135 + ->setOptions($package->getStatusNameMap())); 136 + } 137 + 138 + $form->appendChild( 120 139 id(new AphrontFormSelectControl()) 121 140 ->setName('auditing') 122 141 ->setLabel(pht('Auditing'))
+8
src/applications/owners/editor/PhabricatorOwnersPackageTransactionEditor.php
··· 19 19 $types[] = PhabricatorOwnersPackageTransaction::TYPE_AUDITING; 20 20 $types[] = PhabricatorOwnersPackageTransaction::TYPE_DESCRIPTION; 21 21 $types[] = PhabricatorOwnersPackageTransaction::TYPE_PATHS; 22 + $types[] = PhabricatorOwnersPackageTransaction::TYPE_STATUS; 22 23 23 24 return $types; 24 25 } ··· 42 43 case PhabricatorOwnersPackageTransaction::TYPE_PATHS: 43 44 $paths = $object->getPaths(); 44 45 return mpull($paths, 'getRef'); 46 + case PhabricatorOwnersPackageTransaction::TYPE_STATUS: 47 + return $object->getStatus(); 45 48 } 46 49 } 47 50 ··· 53 56 case PhabricatorOwnersPackageTransaction::TYPE_NAME: 54 57 case PhabricatorOwnersPackageTransaction::TYPE_DESCRIPTION: 55 58 case PhabricatorOwnersPackageTransaction::TYPE_PATHS: 59 + case PhabricatorOwnersPackageTransaction::TYPE_STATUS: 56 60 return $xaction->getNewValue(); 57 61 case PhabricatorOwnersPackageTransaction::TYPE_AUDITING: 58 62 return (int)$xaction->getNewValue(); ··· 99 103 case PhabricatorOwnersPackageTransaction::TYPE_OWNERS: 100 104 case PhabricatorOwnersPackageTransaction::TYPE_PATHS: 101 105 return; 106 + case PhabricatorOwnersPackageTransaction::TYPE_STATUS: 107 + $object->setStatus($xaction->getNewValue()); 108 + return; 102 109 } 103 110 104 111 return parent::applyCustomInternalTransaction($object, $xaction); ··· 112 119 case PhabricatorOwnersPackageTransaction::TYPE_NAME: 113 120 case PhabricatorOwnersPackageTransaction::TYPE_DESCRIPTION: 114 121 case PhabricatorOwnersPackageTransaction::TYPE_AUDITING: 122 + case PhabricatorOwnersPackageTransaction::TYPE_STATUS: 115 123 return; 116 124 case PhabricatorOwnersPackageTransaction::TYPE_OWNERS: 117 125 $old = $xaction->getOldValue();
+13
src/applications/owners/query/PhabricatorOwnersPackageQuery.php
··· 10 10 private $repositoryPHIDs; 11 11 private $paths; 12 12 private $namePrefix; 13 + private $statuses; 13 14 14 15 private $controlMap = array(); 15 16 private $controlResults; ··· 54 55 55 56 public function withPaths(array $paths) { 56 57 $this->paths = $paths; 58 + return $this; 59 + } 60 + 61 + public function withStatuses(array $statuses) { 62 + $this->statuses = $statuses; 57 63 return $this; 58 64 } 59 65 ··· 198 204 $conn, 199 205 'rpath.path IN (%Ls)', 200 206 $this->getFragmentsForPaths($this->paths)); 207 + } 208 + 209 + if ($this->statuses !== null) { 210 + $where[] = qsprintf( 211 + $conn, 212 + 'p.status IN (%Ls)', 213 + $this->statuses); 201 214 } 202 215 203 216 if (strlen($this->namePrefix)) {
+21
src/applications/owners/query/PhabricatorOwnersPackageSearchEngine.php
··· 31 31 ->setLabel(pht('Paths')) 32 32 ->setKey('paths') 33 33 ->setAliases(array('path')), 34 + id(new PhabricatorSearchCheckboxesField()) 35 + ->setKey('statuses') 36 + ->setLabel(pht('Status')) 37 + ->setOptions( 38 + id(new PhabricatorOwnersPackage()) 39 + ->getStatusNameMap()), 34 40 ); 35 41 } 36 42 ··· 49 55 $query->withPaths($map['paths']); 50 56 } 51 57 58 + if ($map['statuses']) { 59 + $query->withStatuses($map['statuses']); 60 + } 61 + 52 62 return $query; 53 63 } 54 64 ··· 64 74 } 65 75 66 76 $names += array( 77 + 'active' => pht('Active Packages'), 67 78 'all' => pht('All Packages'), 68 79 ); 69 80 ··· 77 88 switch ($query_key) { 78 89 case 'all': 79 90 return $query; 91 + case 'active': 92 + return $query->setParameter( 93 + 'statuses', 94 + array( 95 + PhabricatorOwnersPackage::STATUS_ACTIVE, 96 + )); 80 97 case 'authority': 81 98 return $query->setParameter( 82 99 'authorityPHIDs', ··· 104 121 ->setObjectName(pht('Package %d', $id)) 105 122 ->setHeader($package->getName()) 106 123 ->setHref('/owners/package/'.$id.'/'); 124 + 125 + if ($package->isArchived()) { 126 + $item->setDisabled(true); 127 + } 107 128 108 129 $list->addItem($item); 109 130 }
+17
src/applications/owners/storage/PhabricatorOwnersPackage.php
··· 12 12 protected $description; 13 13 protected $primaryOwnerPHID; 14 14 protected $mailKey; 15 + protected $status; 15 16 16 17 private $paths = self::ATTACHABLE; 17 18 private $owners = self::ATTACHABLE; 18 19 20 + const STATUS_ACTIVE = 'active'; 21 + const STATUS_ARCHIVED = 'archived'; 22 + 19 23 public static function initializeNewPackage(PhabricatorUser $actor) { 20 24 return id(new PhabricatorOwnersPackage()) 21 25 ->setAuditingEnabled(0) 22 26 ->attachPaths(array()) 27 + ->setStatus(self::STATUS_ACTIVE) 23 28 ->attachOwners(array()); 24 29 } 25 30 ··· 41 46 return null; 42 47 } 43 48 49 + public static function getStatusNameMap() { 50 + return array( 51 + self::STATUS_ACTIVE => pht('Active'), 52 + self::STATUS_ARCHIVED => pht('Archived'), 53 + ); 54 + } 55 + 44 56 protected function getConfiguration() { 45 57 return array( 46 58 // This information is better available from the history table. ··· 53 65 'primaryOwnerPHID' => 'phid?', 54 66 'auditingEnabled' => 'bool', 55 67 'mailKey' => 'bytes20', 68 + 'status' => 'text32', 56 69 ), 57 70 self::CONFIG_KEY_SCHEMA => array( 58 71 'key_phid' => null, ··· 79 92 } 80 93 81 94 return parent::save(); 95 + } 96 + 97 + public function isArchived() { 98 + return ($this->getStatus() == self::STATUS_ARCHIVED); 82 99 } 83 100 84 101 public function setName($name) {
+11
src/applications/owners/storage/PhabricatorOwnersPackageTransaction.php
··· 9 9 const TYPE_AUDITING = 'owners.auditing'; 10 10 const TYPE_DESCRIPTION = 'owners.description'; 11 11 const TYPE_PATHS = 'owners.paths'; 12 + const TYPE_STATUS = 'owners.status'; 12 13 13 14 public function getApplicationName() { 14 15 return 'owners'; ··· 115 116 return pht( 116 117 '%s updated paths for this package.', 117 118 $this->renderHandleLink($author_phid)); 119 + case self::TYPE_STATUS: 120 + if ($new == PhabricatorOwnersPackage::STATUS_ACTIVE) { 121 + return pht( 122 + '%s activated this package.', 123 + $this->renderHandleLink($author_phid)); 124 + } else if ($new == PhabricatorOwnersPackage::STATUS_ARCHIVED) { 125 + return pht( 126 + '%s archived this package.', 127 + $this->renderHandleLink($author_phid)); 128 + } 118 129 } 119 130 120 131 return parent::getTitle();