Path: blob/master/src/applications/calendar/storage/PhabricatorCalendarExport.php
12253 views
<?php12final class PhabricatorCalendarExport extends PhabricatorCalendarDAO3implements4PhabricatorPolicyInterface,5PhabricatorApplicationTransactionInterface,6PhabricatorDestructibleInterface {78protected $name;9protected $authorPHID;10protected $policyMode;11protected $queryKey;12protected $secretKey;13protected $isDisabled = 0;1415const MODE_PUBLIC = 'public';16const MODE_PRIVILEGED = 'privileged';1718public static function initializeNewCalendarExport(PhabricatorUser $actor) {19return id(new self())20->setAuthorPHID($actor->getPHID())21->setPolicyMode(self::MODE_PRIVILEGED)22->setIsDisabled(0);23}2425protected function getConfiguration() {26return array(27self::CONFIG_AUX_PHID => true,28self::CONFIG_COLUMN_SCHEMA => array(29'name' => 'text',30'policyMode' => 'text64',31'queryKey' => 'text64',32'secretKey' => 'bytes20',33'isDisabled' => 'bool',34),35self::CONFIG_KEY_SCHEMA => array(36'key_author' => array(37'columns' => array('authorPHID'),38),39'key_secret' => array(40'columns' => array('secretKey'),41'unique' => true,42),43),44) + parent::getConfiguration();45}4647public function getPHIDType() {48return PhabricatorCalendarExportPHIDType::TYPECONST;49}5051public function save() {52if (!$this->getSecretKey()) {53$this->setSecretKey(Filesystem::readRandomCharacters(20));54}5556return parent::save();57}5859public function getURI() {60$id = $this->getID();61return "/calendar/export/{$id}/";62}6364private static function getPolicyModeMap() {65return array(66self::MODE_PUBLIC => array(67'icon' => 'fa-globe',68'name' => pht('Public'),69'color' => 'bluegrey',70'summary' => pht(71'Export only public data.'),72'description' => pht(73'Only publicly available data is exported.'),74),75self::MODE_PRIVILEGED => array(76'icon' => 'fa-unlock-alt',77'name' => pht('Privileged'),78'color' => 'red',79'summary' => pht(80'Export private data.'),81'description' => pht(82'Anyone who knows the URI for this export can view all event '.83'details as though they were logged in with your account.'),84),85);86}8788private static function getPolicyModeSpec($const) {89return idx(self::getPolicyModeMap(), $const, array());90}9192public static function getPolicyModeName($const) {93$spec = self::getPolicyModeSpec($const);94return idx($spec, 'name', $const);95}9697public static function getPolicyModeIcon($const) {98$spec = self::getPolicyModeSpec($const);99return idx($spec, 'icon', $const);100}101102public static function getPolicyModeColor($const) {103$spec = self::getPolicyModeSpec($const);104return idx($spec, 'color', $const);105}106107public static function getPolicyModeSummary($const) {108$spec = self::getPolicyModeSpec($const);109return idx($spec, 'summary', $const);110}111112public static function getPolicyModeDescription($const) {113$spec = self::getPolicyModeSpec($const);114return idx($spec, 'description', $const);115}116117public static function getPolicyModes() {118return array_keys(self::getPolicyModeMap());119}120121public static function getAvailablePolicyModes() {122$modes = array();123124if (PhabricatorEnv::getEnvConfig('policy.allow-public')) {125$modes[] = self::MODE_PUBLIC;126}127128$modes[] = self::MODE_PRIVILEGED;129130return $modes;131}132133public function getICSFilename() {134return PhabricatorSlug::normalizeProjectSlug($this->getName()).'.ics';135}136137public function getICSURI() {138$secret_key = $this->getSecretKey();139$ics_name = $this->getICSFilename();140return "/calendar/export/ics/{$secret_key}/{$ics_name}";141}142143/* -( PhabricatorPolicyInterface )----------------------------------------- */144145146public function getCapabilities() {147return array(148PhabricatorPolicyCapability::CAN_VIEW,149PhabricatorPolicyCapability::CAN_EDIT,150);151}152153public function getPolicy($capability) {154return $this->getAuthorPHID();155}156157public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {158return false;159}160161/* -( PhabricatorApplicationTransactionInterface )------------------------- */162163164public function getApplicationTransactionEditor() {165return new PhabricatorCalendarExportEditor();166}167168public function getApplicationTransactionTemplate() {169return new PhabricatorCalendarExportTransaction();170}171172173/* -( PhabricatorDestructibleInterface )----------------------------------- */174175176public function destroyObjectPermanently(177PhabricatorDestructionEngine $engine) {178$this->delete();179}180181}182183184