Changeset View
Changeset View
Standalone View
Standalone View
src/applications/search/storage/PhabricatorNamedQuery.php
| <?php | <?php | ||||
| final class PhabricatorNamedQuery extends PhabricatorSearchDAO | final class PhabricatorNamedQuery extends PhabricatorSearchDAO | ||||
| implements PhabricatorPolicyInterface { | implements PhabricatorPolicyInterface { | ||||
| protected $queryKey; | protected $queryKey; | ||||
| protected $queryName; | protected $queryName; | ||||
| protected $userPHID; | protected $userPHID; | ||||
| protected $engineClassName; | protected $engineClassName; | ||||
| protected $isBuiltin = 0; | protected $isBuiltin = 0; | ||||
| protected $isDisabled = 0; | protected $isDisabled = 0; | ||||
| protected $sequence = 0; | protected $sequence = 0; | ||||
| const SCOPE_GLOBAL = 'scope.global'; | |||||
| protected function getConfiguration() { | protected function getConfiguration() { | ||||
| return array( | return array( | ||||
| self::CONFIG_COLUMN_SCHEMA => array( | self::CONFIG_COLUMN_SCHEMA => array( | ||||
| 'engineClassName' => 'text128', | 'engineClassName' => 'text128', | ||||
| 'queryName' => 'text255', | 'queryName' => 'text255', | ||||
| 'queryKey' => 'text12', | 'queryKey' => 'text12', | ||||
| 'isBuiltin' => 'bool', | 'isBuiltin' => 'bool', | ||||
| 'isDisabled' => 'bool', | 'isDisabled' => 'bool', | ||||
| 'sequence' => 'uint32', | 'sequence' => 'uint32', | ||||
| ), | ), | ||||
| self::CONFIG_KEY_SCHEMA => array( | self::CONFIG_KEY_SCHEMA => array( | ||||
| 'key_userquery' => array( | 'key_userquery' => array( | ||||
| 'columns' => array('userPHID', 'engineClassName', 'queryKey'), | 'columns' => array('userPHID', 'engineClassName', 'queryKey'), | ||||
| 'unique' => true, | 'unique' => true, | ||||
| ), | ), | ||||
| ), | ), | ||||
| ) + parent::getConfiguration(); | ) + parent::getConfiguration(); | ||||
| } | } | ||||
| public function getSortKey() { | public function isGlobal() { | ||||
| return sprintf('~%010d%010d', $this->sequence, $this->getID()); | if ($this->getIsBuiltin()) { | ||||
| return true; | |||||
| } | |||||
| if ($this->getUserPHID() === self::SCOPE_GLOBAL) { | |||||
| return true; | |||||
| } | |||||
| return false; | |||||
| } | |||||
| public function getNamedQuerySortVector() { | |||||
| if (!$this->isGlobal()) { | |||||
| $phase = 0; | |||||
| } else { | |||||
| $phase = 1; | |||||
| } | |||||
| return id(new PhutilSortVector()) | |||||
| ->addInt($phase) | |||||
| ->addInt($this->sequence) | |||||
| ->addInt($this->getID()); | |||||
| } | } | ||||
| /* -( PhabricatorPolicyInterface )----------------------------------------- */ | /* -( PhabricatorPolicyInterface )----------------------------------------- */ | ||||
| public function getCapabilities() { | public function getCapabilities() { | ||||
| return array( | return array( | ||||
| PhabricatorPolicyCapability::CAN_VIEW, | PhabricatorPolicyCapability::CAN_VIEW, | ||||
| PhabricatorPolicyCapability::CAN_EDIT, | |||||
| ); | ); | ||||
| } | } | ||||
| public function getPolicy($capability) { | public function getPolicy($capability) { | ||||
| return PhabricatorPolicies::POLICY_NOONE; | return PhabricatorPolicies::POLICY_NOONE; | ||||
| } | } | ||||
| public function hasAutomaticCapability($capability, PhabricatorUser $viewer) { | public function hasAutomaticCapability($capability, PhabricatorUser $viewer) { | ||||
| if ($viewer->getPHID() == $this->userPHID) { | if ($viewer->getPHID() == $this->getUserPHID()) { | ||||
| return true; | |||||
| } | |||||
| if ($this->isGlobal()) { | |||||
| switch ($capability) { | |||||
| case PhabricatorPolicyCapability::CAN_VIEW: | |||||
| return true; | return true; | ||||
| case PhabricatorPolicyCapability::CAN_EDIT: | |||||
| return $viewer->getIsAdmin(); | |||||
| } | } | ||||
| } | |||||
| return false; | return false; | ||||
| } | } | ||||
| public function describeAutomaticCapability($capability) { | public function describeAutomaticCapability($capability) { | ||||
| return pht( | return pht( | ||||
| 'The queries you have saved are private. Only you can view or edit '. | 'The queries you have saved are private. Only you can view or edit '. | ||||
| 'them.'); | 'them.'); | ||||
| } | } | ||||
| } | } | ||||