diff --git a/src/applications/calendar/controller/PhabricatorCalendarImportEditController.php b/src/applications/calendar/controller/PhabricatorCalendarImportEditController.php --- a/src/applications/calendar/controller/PhabricatorCalendarImportEditController.php +++ b/src/applications/calendar/controller/PhabricatorCalendarImportEditController.php @@ -8,7 +8,22 @@ ->setController($this); $id = $request->getURIData('id'); - if (!$id) { + if ($id) { + + // edit a specific entry + + $calendar_import = self::queryImportByID($request, $id); + if (!$calendar_import) { + return new Aphront404Response(); + } + + // pass the correct import engine to build the response + $engine->setImportEngine($calendar_import->getEngine()); + + } else { + + // create an entry + $list_uri = $this->getApplicationURI('import/'); $import_type = $request->getStr('importType'); @@ -27,6 +42,18 @@ return $engine->buildResponse(); } + private static function queryImportByID(AphrontRequest $request, int $id) { + return id(new PhabricatorCalendarImportQuery()) + ->setViewer($request->getViewer()) + ->withIDs(array($id)) + ->requireCapabilities( + array( + PhabricatorPolicyCapability::CAN_VIEW, + PhabricatorPolicyCapability::CAN_EDIT, + )) + ->executeOne(); + } + private function buildEngineTypeResponse($cancel_uri) { $import_engines = PhabricatorCalendarImportEngine::getAllImportEngines(); diff --git a/src/applications/calendar/editor/PhabricatorCalendarImportEditEngine.php b/src/applications/calendar/editor/PhabricatorCalendarImportEditEngine.php --- a/src/applications/calendar/editor/PhabricatorCalendarImportEditEngine.php +++ b/src/applications/calendar/editor/PhabricatorCalendarImportEditEngine.php @@ -83,6 +83,12 @@ $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') @@ -94,6 +100,15 @@ ->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'))