Path: blob/master/src/applications/packages/storage/PhabricatorPackagesVersion.php
13450 views
<?php12final class PhabricatorPackagesVersion3extends PhabricatorPackagesDAO4implements5PhabricatorPolicyInterface,6PhabricatorExtendedPolicyInterface,7PhabricatorApplicationTransactionInterface,8PhabricatorDestructibleInterface,9PhabricatorSubscribableInterface,10PhabricatorProjectInterface,11PhabricatorConduitResultInterface,12PhabricatorNgramsInterface {1314protected $name;15protected $packagePHID;1617private $package;1819public static function initializeNewVersion(PhabricatorUser $actor) {20return id(new self());21}2223protected function getConfiguration() {24return array(25self::CONFIG_AUX_PHID => true,26self::CONFIG_COLUMN_SCHEMA => array(27'name' => 'sort64',28),29self::CONFIG_KEY_SCHEMA => array(30'key_package' => array(31'columns' => array('packagePHID', 'name'),32'unique' => true,33),34),35) + parent::getConfiguration();36}3738public function generatePHID() {39return PhabricatorPHID::generateNewPHID(40PhabricatorPackagesVersionPHIDType::TYPECONST);41}4243public function getURI() {44$package = $this->getPackage();45$full_key = $package->getFullKey();46$name = $this->getName();4748return "/package/{$full_key}/{$name}/";49}5051public function attachPackage(PhabricatorPackagesPackage $package) {52$this->package = $package;53return $this;54}5556public function getPackage() {57return $this->assertAttached($this->package);58}5960public static function assertValidVersionName($value) {61$length = phutil_utf8_strlen($value);62if (!$length) {63throw new Exception(64pht(65'Version name "%s" is not valid: version names are required.',66$value));67}6869$max_length = 64;70if ($length > $max_length) {71throw new Exception(72pht(73'Version name "%s" is not valid: version names must not be '.74'more than %s characters long.',75$value,76new PhutilNumber($max_length)));77}7879if (!preg_match('/^[A-Za-z0-9.-]+\z/', $value)) {80throw new Exception(81pht(82'Version name "%s" is not valid: version names may only contain '.83'latin letters, digits, periods, and hyphens.',84$value));85}8687if (preg_match('/^[.-]|[.-]$/', $value)) {88throw new Exception(89pht(90'Version name "%s" is not valid: version names may not start or '.91'end with a period or hyphen.',92$value));93}94}959697/* -( PhabricatorSubscribableInterface )----------------------------------- */9899100public function isAutomaticallySubscribed($phid) {101return false;102}103104105/* -( Policy Interface )--------------------------------------------------- */106107108public function getCapabilities() {109return array(110PhabricatorPolicyCapability::CAN_VIEW,111PhabricatorPolicyCapability::CAN_EDIT,112);113}114115public function getPolicy($capability) {116switch ($capability) {117case PhabricatorPolicyCapability::CAN_VIEW:118return PhabricatorPolicies::getMostOpenPolicy();119case PhabricatorPolicyCapability::CAN_EDIT:120return PhabricatorPolicies::POLICY_USER;121}122}123124public function hasAutomaticCapability($capability, PhabricatorUser $user) {125return false;126}127128129/* -( PhabricatorExtendedPolicyInterface )--------------------------------- */130131132public function getExtendedPolicy($capability, PhabricatorUser $viewer) {133return array(134array(135$this->getPackage(),136$capability,137),138);139}140141142/* -( PhabricatorDestructibleInterface )----------------------------------- */143144145public function destroyObjectPermanently(146PhabricatorDestructionEngine $engine) {147$this->delete();148}149150151/* -( PhabricatorApplicationTransactionInterface )------------------------- */152153154public function getApplicationTransactionEditor() {155return new PhabricatorPackagesVersionEditor();156}157158public function getApplicationTransactionTemplate() {159return new PhabricatorPackagesVersionTransaction();160}161162163/* -( PhabricatorNgramsInterface )----------------------------------------- */164165166public function newNgrams() {167return array(168id(new PhabricatorPackagesVersionNameNgrams())169->setValue($this->getName()),170);171}172173174/* -( PhabricatorConduitResultInterface )---------------------------------- */175176177public function getFieldSpecificationsForConduit() {178return array(179id(new PhabricatorConduitSearchFieldSpecification())180->setKey('name')181->setType('string')182->setDescription(pht('The name of the version.')),183);184}185186public function getFieldValuesForConduit() {187return array(188'name' => $this->getName(),189);190}191192public function getConduitSearchAttachments() {193return array();194}195196197}198199200