3 final class PhabricatorFileAttachment
4 extends PhabricatorFileDAO
6 PhabricatorPolicyInterface
,
7 PhabricatorExtendedPolicyInterface
{
11 protected $attacherPHID;
12 protected $attachmentMode;
14 private $object = self
::ATTACHABLE
;
15 private $file = self
::ATTACHABLE
;
17 const MODE_ATTACH
= 'attach';
18 const MODE_REFERENCE
= 'reference';
19 const MODE_DETACH
= 'detach';
21 protected function getConfiguration() {
23 self
::CONFIG_COLUMN_SCHEMA
=> array(
24 'objectPHID' => 'phid',
26 'attacherPHID' => 'phid?',
27 'attachmentMode' => 'text32',
29 self
::CONFIG_KEY_SCHEMA
=> array(
30 'key_object' => array(
31 'columns' => array('objectPHID', 'filePHID'),
35 'columns' => array('filePHID'),
38 ) + parent
::getConfiguration();
41 public static function getModeList() {
49 public static function getModeNameMap() {
51 self
::MODE_ATTACH
=> pht('Attached'),
52 self
::MODE_REFERENCE
=> pht('Referenced'),
56 public function isPolicyAttachment() {
57 switch ($this->getAttachmentMode()) {
58 case self
::MODE_ATTACH
:
65 public function attachObject($object) {
66 $this->object = $object;
70 public function getObject() {
71 return $this->assertAttached($this->object);
74 public function attachFile(PhabricatorFile
$file = null) {
79 public function getFile() {
80 return $this->assertAttached($this->file
);
83 public function canDetach() {
84 switch ($this->getAttachmentMode()) {
85 case self
::MODE_ATTACH
:
93 /* -( PhabricatorPolicyInterface )----------------------------------------- */
96 public function getCapabilities() {
98 PhabricatorPolicyCapability
::CAN_VIEW
,
102 public function getPolicy($capability) {
103 switch ($capability) {
104 case PhabricatorPolicyCapability
::CAN_VIEW
:
105 return PhabricatorPolicies
::getMostOpenPolicy();
109 public function hasAutomaticCapability($capability, PhabricatorUser
$viewer) {
114 /* -( PhabricatorExtendedPolicyInterface )--------------------------------- */
117 public function getExtendedPolicy($capability, PhabricatorUser
$viewer) {
119 array($this->getObject(), $capability),