Path: blob/master/src/applications/calendar/storage/PhabricatorCalendarImport.php
12253 views
<?php12final class PhabricatorCalendarImport3extends PhabricatorCalendarDAO4implements5PhabricatorPolicyInterface,6PhabricatorApplicationTransactionInterface,7PhabricatorDestructibleInterface {89protected $name;10protected $authorPHID;11protected $viewPolicy;12protected $editPolicy;13protected $engineType;14protected $parameters = array();15protected $isDisabled = 0;16protected $triggerPHID;17protected $triggerFrequency;1819const FREQUENCY_ONCE = 'once';20const FREQUENCY_HOURLY = 'hourly';21const FREQUENCY_DAILY = 'daily';2223private $engine = self::ATTACHABLE;2425public static function initializeNewCalendarImport(26PhabricatorUser $actor,27PhabricatorCalendarImportEngine $engine) {28return id(new self())29->setName('')30->setAuthorPHID($actor->getPHID())31->setViewPolicy($actor->getPHID())32->setEditPolicy($actor->getPHID())33->setIsDisabled(0)34->setEngineType($engine->getImportEngineType())35->attachEngine($engine)36->setTriggerFrequency(self::FREQUENCY_ONCE);37}3839protected function getConfiguration() {40return array(41self::CONFIG_AUX_PHID => true,42self::CONFIG_SERIALIZATION => array(43'parameters' => self::SERIALIZATION_JSON,44),45self::CONFIG_COLUMN_SCHEMA => array(46'name' => 'text',47'engineType' => 'text64',48'isDisabled' => 'bool',49'triggerPHID' => 'phid?',50'triggerFrequency' => 'text64',51),52self::CONFIG_KEY_SCHEMA => array(53'key_author' => array(54'columns' => array('authorPHID'),55),56),57) + parent::getConfiguration();58}5960public function getPHIDType() {61return PhabricatorCalendarImportPHIDType::TYPECONST;62}6364public function getURI() {65$id = $this->getID();66return "/calendar/import/{$id}/";67}6869public function attachEngine(PhabricatorCalendarImportEngine $engine) {70$this->engine = $engine;71return $this;72}7374public function getEngine() {75return $this->assertAttached($this->engine);76}7778public function getParameter($key, $default = null) {79return idx($this->parameters, $key, $default);80}8182public function setParameter($key, $value) {83$this->parameters[$key] = $value;84return $this;85}8687public function getDisplayName() {88$name = $this->getName();89if (strlen($name)) {90return $name;91}9293return $this->getEngine()->getDisplayName($this);94}9596public static function getTriggerFrequencyMap() {97return array(98self::FREQUENCY_ONCE => array(99'name' => pht('No Automatic Updates'),100),101self::FREQUENCY_HOURLY => array(102'name' => pht('Update Hourly'),103),104self::FREQUENCY_DAILY => array(105'name' => pht('Update Daily'),106),107);108}109110111/* -( PhabricatorPolicyInterface )----------------------------------------- */112113114public function getCapabilities() {115return array(116PhabricatorPolicyCapability::CAN_VIEW,117PhabricatorPolicyCapability::CAN_EDIT,118);119}120121public function getPolicy($capability) {122switch ($capability) {123case PhabricatorPolicyCapability::CAN_VIEW:124return $this->getViewPolicy();125case PhabricatorPolicyCapability::CAN_EDIT:126return $this->getEditPolicy();127}128}129130public function hasAutomaticCapability($capability, PhabricatorUser $viewer) {131return false;132}133134135/* -( PhabricatorApplicationTransactionInterface )------------------------- */136137138public function getApplicationTransactionEditor() {139return new PhabricatorCalendarImportEditor();140}141142public function getApplicationTransactionTemplate() {143return new PhabricatorCalendarImportTransaction();144}145146public function newLogMessage($type, array $parameters) {147$parameters = array(148'type' => $type,149) + $parameters;150151return id(new PhabricatorCalendarImportLog())152->setImportPHID($this->getPHID())153->setParameters($parameters)154->save();155}156157158/* -( PhabricatorDestructibleInterface )----------------------------------- */159160161public function destroyObjectPermanently(162PhabricatorDestructionEngine $engine) {163$viewer = $engine->getViewer();164165$this->openTransaction();166167$trigger_phid = $this->getTriggerPHID();168if ($trigger_phid) {169$trigger = id(new PhabricatorWorkerTriggerQuery())170->setViewer($viewer)171->withPHIDs(array($trigger_phid))172->executeOne();173if ($trigger) {174$engine->destroyObject($trigger);175}176}177178$events = id(new PhabricatorCalendarEventQuery())179->setViewer($viewer)180->withImportSourcePHIDs(array($this->getPHID()))181->execute();182foreach ($events as $event) {183$engine->destroyObject($event);184}185186$logs = id(new PhabricatorCalendarImportLogQuery())187->setViewer($viewer)188->withImportPHIDs(array($this->getPHID()))189->execute();190foreach ($logs as $log) {191$engine->destroyObject($log);192}193194$this->delete();195$this->saveTransaction();196}197198}199200201