Path: blob/master/src/applications/nuance/storage/NuanceItem.php
12256 views
<?php12final class NuanceItem3extends NuanceDAO4implements5PhabricatorPolicyInterface,6PhabricatorApplicationTransactionInterface {78const STATUS_IMPORTING = 'importing';9const STATUS_ROUTING = 'routing';10const STATUS_OPEN = 'open';11const STATUS_CLOSED = 'closed';1213protected $status;14protected $ownerPHID;15protected $requestorPHID;16protected $sourcePHID;17protected $queuePHID;18protected $itemType;19protected $itemKey;20protected $itemContainerKey;21protected $data = array();22protected $mailKey;2324private $queue = self::ATTACHABLE;25private $source = self::ATTACHABLE;26private $implementation = self::ATTACHABLE;2728public static function initializeNewItem($item_type) {2930// TODO: Validate that the type is valid, and construct and attach it.3132return id(new NuanceItem())33->setItemType($item_type)34->setStatus(self::STATUS_OPEN);35}3637protected function getConfiguration() {38return array(39self::CONFIG_AUX_PHID => true,40self::CONFIG_SERIALIZATION => array(41'data' => self::SERIALIZATION_JSON,42),43self::CONFIG_COLUMN_SCHEMA => array(44'ownerPHID' => 'phid?',45'requestorPHID' => 'phid?',46'queuePHID' => 'phid?',47'itemType' => 'text64',48'itemKey' => 'text64?',49'itemContainerKey' => 'text64?',50'status' => 'text32',51'mailKey' => 'bytes20',52),53self::CONFIG_KEY_SCHEMA => array(54'key_source' => array(55'columns' => array('sourcePHID', 'status'),56),57'key_owner' => array(58'columns' => array('ownerPHID', 'status'),59),60'key_requestor' => array(61'columns' => array('requestorPHID', 'status'),62),63'key_queue' => array(64'columns' => array('queuePHID', 'status'),65),66'key_container' => array(67'columns' => array('sourcePHID', 'itemContainerKey'),68),69'key_item' => array(70'columns' => array('sourcePHID', 'itemKey'),71'unique' => true,72),73),74) + parent::getConfiguration();75}7677public function generatePHID() {78return PhabricatorPHID::generateNewPHID(79NuanceItemPHIDType::TYPECONST);80}8182public function save() {83if (!$this->getMailKey()) {84$this->setMailKey(Filesystem::readRandomCharacters(20));85}86return parent::save();87}8889public function getURI() {90return '/nuance/item/view/'.$this->getID().'/';91}9293public function getSource() {94return $this->assertAttached($this->source);95}9697public function attachSource(NuanceSource $source) {98$this->source = $source;99}100101public function getItemProperty($key, $default = null) {102return idx($this->data, $key, $default);103}104105public function setItemProperty($key, $value) {106$this->data[$key] = $value;107return $this;108}109110public function getCapabilities() {111return array(112PhabricatorPolicyCapability::CAN_VIEW,113PhabricatorPolicyCapability::CAN_EDIT,114);115}116117public function getPolicy($capability) {118// TODO - this should be based on the queues the item currently resides in119return PhabricatorPolicies::POLICY_USER;120}121122public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {123// TODO - requestors should get auto access too!124return $viewer->getPHID() == $this->ownerPHID;125}126127public function describeAutomaticCapability($capability) {128switch ($capability) {129case PhabricatorPolicyCapability::CAN_VIEW:130return pht('Owners of an item can always view it.');131case PhabricatorPolicyCapability::CAN_EDIT:132return pht('Owners of an item can always edit it.');133}134return null;135}136137public function getDisplayName() {138return $this->getImplementation()->getItemDisplayName($this);139}140141public function scheduleUpdate() {142PhabricatorWorker::scheduleTask(143'NuanceItemUpdateWorker',144array(145'itemPHID' => $this->getPHID(),146),147array(148'objectPHID' => $this->getPHID(),149));150}151152public function issueCommand(153$author_phid,154$command,155array $parameters = array()) {156157$command = id(NuanceItemCommand::initializeNewCommand())158->setItemPHID($this->getPHID())159->setAuthorPHID($author_phid)160->setCommand($command)161->setParameters($parameters)162->save();163164$this->scheduleUpdate();165166return $this;167}168169public function getImplementation() {170return $this->assertAttached($this->implementation);171}172173public function attachImplementation(NuanceItemType $type) {174$this->implementation = $type;175return $this;176}177178public function getQueue() {179return $this->assertAttached($this->queue);180}181182public function attachQueue(NuanceQueue $queue = null) {183$this->queue = $queue;184return $this;185}186187188/* -( PhabricatorApplicationTransactionInterface )------------------------- */189190191public function getApplicationTransactionEditor() {192return new NuanceItemEditor();193}194195public function getApplicationTransactionTemplate() {196return new NuanceItemTransaction();197}198199}200201202