diff --git a/src/applications/calendar/editor/PhabricatorCalendarImportEditEngine.php b/src/applications/calendar/editor/PhabricatorCalendarImportEditEngine.php index 9a4a7c0107..7be3969671 100644 --- a/src/applications/calendar/editor/PhabricatorCalendarImportEditEngine.php +++ b/src/applications/calendar/editor/PhabricatorCalendarImportEditEngine.php @@ -1,170 +1,155 @@ importEngine = $engine; return $this; } public function getImportEngine() { return $this->importEngine; } public function getEngineName() { return pht('Calendar Imports'); } public function isEngineConfigurable() { return false; } public function getSummaryHeader() { return pht('Configure Calendar Import Forms'); } public function getSummaryText() { return pht('Configure how users create and edit imports.'); } public function getEngineApplicationClass() { return 'PhabricatorCalendarApplication'; } protected function newEditableObject() { $viewer = $this->getViewer(); $engine = $this->getImportEngine(); return PhabricatorCalendarImport::initializeNewCalendarImport( $viewer, $engine); } protected function newObjectQuery() { return new PhabricatorCalendarImportQuery(); } protected function getObjectCreateTitleText($object) { return pht('Create New Import'); } protected function getObjectEditTitleText($object) { return pht('Edit Import: %s', $object->getDisplayName()); } protected function getObjectEditShortText($object) { return pht('Import %d', $object->getID()); } protected function getObjectCreateShortText() { return pht('Create Import'); } protected function getObjectName() { return pht('Import'); } protected function getObjectViewURI($object) { return $object->getURI(); } protected function getEditorURI() { return $this->getApplication()->getApplicationURI('import/edit/'); } protected function buildCustomEditFields($object) { $viewer = $this->getViewer(); $engine = $object->getEngine(); $can_trigger = $engine->supportsTriggers($object); - // calendar URI import - // note that it can contains a secret token - // if we are here you have enough privileges to edit and see the value - $uri_key = PhabricatorCalendarImportICSURITransaction::PARAMKEY_URI; - $uri = $object->getParameter($uri_key); - $fields = array( id(new PhabricatorTextEditField()) ->setKey('name') ->setLabel(pht('Name')) ->setDescription(pht('Name of the import.')) ->setTransactionType( PhabricatorCalendarImportNameTransaction::TRANSACTIONTYPE) ->setConduitDescription(pht('Rename the import.')) ->setConduitTypeDescription(pht('New import name.')) ->setPlaceholder($object->getDisplayName()) ->setValue($object->getName()), - id(new PhabricatorTextEditField()) - ->setKey('uri') - ->setLabel(pht('URI')) - ->setDescription(pht('URI to import.')) - ->setTransactionType( - PhabricatorCalendarImportICSURITransaction::TRANSACTIONTYPE) - ->setConduitDescription(pht('URI to import.')) - ->setConduitTypeDescription(pht('New URI.')) - ->setValue($uri), id(new PhabricatorBoolEditField()) ->setKey('disabled') ->setOptions(pht('Active'), pht('Disabled')) ->setLabel(pht('Disabled')) ->setDescription(pht('Disable the import.')) ->setTransactionType( PhabricatorCalendarImportDisableTransaction::TRANSACTIONTYPE) ->setIsFormField(false) ->setConduitDescription(pht('Disable or restore the import.')) ->setConduitTypeDescription(pht('True to cancel the import.')) ->setValue($object->getIsDisabled()), id(new PhabricatorBoolEditField()) ->setKey('delete') ->setLabel(pht('Delete Imported Events')) ->setDescription(pht('Delete all events from this source.')) ->setTransactionType( PhabricatorCalendarImportDisableTransaction::TRANSACTIONTYPE) ->setIsFormField(false) ->setConduitDescription(pht('Disable or restore the import.')) ->setConduitTypeDescription(pht('True to delete imported events.')) ->setValue(false), id(new PhabricatorBoolEditField()) ->setKey('reload') ->setLabel(pht('Reload Import')) ->setDescription(pht('Reload events imported from this source.')) ->setTransactionType( PhabricatorCalendarImportDisableTransaction::TRANSACTIONTYPE) ->setIsFormField(false) ->setConduitDescription(pht('Disable or restore the import.')) ->setConduitTypeDescription(pht('True to reload the import.')) ->setValue(false), ); if ($can_trigger) { $frequency_map = PhabricatorCalendarImport::getTriggerFrequencyMap(); $frequency_options = ipull($frequency_map, 'name'); $fields[] = id(new PhabricatorSelectEditField()) ->setKey('frequency') ->setLabel(pht('Update Automatically')) ->setDescription(pht('Configure an automatic update frequency.')) ->setTransactionType( PhabricatorCalendarImportFrequencyTransaction::TRANSACTIONTYPE) ->setConduitDescription(pht('Set the automatic update frequency.')) ->setConduitTypeDescription(pht('Update frequency constant.')) ->setValue($object->getTriggerFrequency()) ->setOptions($frequency_options); } $import_engine = $object->getEngine(); foreach ($import_engine->newEditEngineFields($this, $object) as $field) { $fields[] = $field; } return $fields; } } diff --git a/src/applications/calendar/import/PhabricatorCalendarICSURIImportEngine.php b/src/applications/calendar/import/PhabricatorCalendarICSURIImportEngine.php index bd52ec5bc2..6c992e0836 100644 --- a/src/applications/calendar/import/PhabricatorCalendarICSURIImportEngine.php +++ b/src/applications/calendar/import/PhabricatorCalendarICSURIImportEngine.php @@ -1,121 +1,124 @@ getParameter($uri_key); // Since the URI may contain a secret hash, don't show it to users who // can not edit the import. $can_edit = PhabricatorPolicyFilter::hasCapability( $viewer, $import, PhabricatorPolicyCapability::CAN_EDIT); if (!$can_edit) { $uri_display = phutil_tag('em', array(), pht('Restricted')); } else if (!PhabricatorEnv::isValidRemoteURIForLink($uri)) { $uri_display = $uri; } else { $uri_display = phutil_tag( 'a', array( 'href' => $uri, 'target' => '_blank', 'rel' => 'noreferrer', ), $uri); } $properties->addProperty(pht('Source URI'), $uri_display); } public function newEditEngineFields( PhabricatorEditEngine $engine, PhabricatorCalendarImport $import) { $fields = array(); - if ($engine->getIsCreate()) { - $fields[] = id(new PhabricatorTextEditField()) - ->setKey('uri') - ->setLabel(pht('URI')) - ->setDescription(pht('URI to import.')) - ->setTransactionType( - PhabricatorCalendarImportICSURITransaction::TRANSACTIONTYPE) - ->setConduitDescription(pht('URI to import.')) - ->setConduitTypeDescription(pht('New URI.')); - } + // If you are here, you already have the "can edit" capability. + // So you are supposed to be able to edit again your Calendar import URI. + $uri_key = PhabricatorCalendarImportICSURITransaction::PARAMKEY_URI; + $uri = $import->getParameter($uri_key); + $fields[] = id(new PhabricatorTextEditField()) + ->setKey('uri') + ->setLabel(pht('URI')) + ->setDescription(pht('URI to import.')) + ->setTransactionType( + PhabricatorCalendarImportICSURITransaction::TRANSACTIONTYPE) + ->setConduitDescription(pht('URI to import.')) + ->setConduitTypeDescription(pht('New URI.')) + ->setValue($uri); return $fields; } public function getDisplayName(PhabricatorCalendarImport $import) { return pht('ICS URI'); } public function importEventsFromSource( PhabricatorUser $viewer, PhabricatorCalendarImport $import, $should_queue) { $uri_key = PhabricatorCalendarImportICSURITransaction::PARAMKEY_URI; $uri = $import->getParameter($uri_key); PhabricatorSystemActionEngine::willTakeAction( array($viewer->getPHID()), new PhabricatorFilesOutboundRequestAction(), 1); $file = PhabricatorFile::newFromFileDownload( $uri, array( 'viewPolicy' => PhabricatorPolicies::POLICY_NOONE, 'authorPHID' => $import->getAuthorPHID(), 'canCDN' => true, )); $import->newLogMessage( PhabricatorCalendarImportFetchLogType::LOGTYPE, array( 'file.phid' => $file->getPHID(), )); $data = $file->loadFileData(); if ($should_queue && $this->shouldQueueDataImport($data)) { return $this->queueDataImport($import, $data); } return $this->importICSData($viewer, $import, $data); } public function canDisable( PhabricatorUser $viewer, PhabricatorCalendarImport $import) { return true; } }