Path: blob/master/src/applications/calendar/import/PhabricatorCalendarICSURIImportEngine.php
12256 views
<?php12final class PhabricatorCalendarICSURIImportEngine3extends PhabricatorCalendarICSImportEngine {45const ENGINETYPE = 'icsuri';67public function getImportEngineName() {8return pht('Import .ics URI');9}1011public function getImportEngineTypeName() {12return pht('.ics URI');13}1415public function getImportEngineHint() {16return pht('Import or subscribe to a calendar in .ics format by URI.');17}1819public function supportsTriggers(PhabricatorCalendarImport $import) {20return true;21}2223public function appendImportProperties(24PhabricatorUser $viewer,25PhabricatorCalendarImport $import,26PHUIPropertyListView $properties) {2728$uri_key = PhabricatorCalendarImportICSURITransaction::PARAMKEY_URI;29$uri = $import->getParameter($uri_key);3031// Since the URI may contain a secret hash, don't show it to users who32// can not edit the import.33$can_edit = PhabricatorPolicyFilter::hasCapability(34$viewer,35$import,36PhabricatorPolicyCapability::CAN_EDIT);37if (!$can_edit) {38$uri_display = phutil_tag('em', array(), pht('Restricted'));39} else if (!PhabricatorEnv::isValidRemoteURIForLink($uri)) {40$uri_display = $uri;41} else {42$uri_display = phutil_tag(43'a',44array(45'href' => $uri,46'target' => '_blank',47'rel' => 'noreferrer',48),49$uri);50}5152$properties->addProperty(pht('Source URI'), $uri_display);53}5455public function newEditEngineFields(56PhabricatorEditEngine $engine,57PhabricatorCalendarImport $import) {58$fields = array();5960if ($engine->getIsCreate()) {61$fields[] = id(new PhabricatorTextEditField())62->setKey('uri')63->setLabel(pht('URI'))64->setDescription(pht('URI to import.'))65->setTransactionType(66PhabricatorCalendarImportICSURITransaction::TRANSACTIONTYPE)67->setConduitDescription(pht('URI to import.'))68->setConduitTypeDescription(pht('New URI.'));69}7071return $fields;72}7374public function getDisplayName(PhabricatorCalendarImport $import) {75return pht('ICS URI');76}7778public function importEventsFromSource(79PhabricatorUser $viewer,80PhabricatorCalendarImport $import,81$should_queue) {8283$uri_key = PhabricatorCalendarImportICSURITransaction::PARAMKEY_URI;84$uri = $import->getParameter($uri_key);8586PhabricatorSystemActionEngine::willTakeAction(87array($viewer->getPHID()),88new PhabricatorFilesOutboundRequestAction(),891);9091$file = PhabricatorFile::newFromFileDownload(92$uri,93array(94'viewPolicy' => PhabricatorPolicies::POLICY_NOONE,95'authorPHID' => $import->getAuthorPHID(),96'canCDN' => true,97));9899$import->newLogMessage(100PhabricatorCalendarImportFetchLogType::LOGTYPE,101array(102'file.phid' => $file->getPHID(),103));104105$data = $file->loadFileData();106107if ($should_queue && $this->shouldQueueDataImport($data)) {108return $this->queueDataImport($import, $data);109}110111return $this->importICSData($viewer, $import, $data);112}113114public function canDisable(115PhabricatorUser $viewer,116PhabricatorCalendarImport $import) {117return true;118}119120}121122123