diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -2137,6 +2137,8 @@ 'PhabricatorCalendarImportOrphanLogType' => 'applications/calendar/importlog/PhabricatorCalendarImportOrphanLogType.php', 'PhabricatorCalendarImportPHIDType' => 'applications/calendar/phid/PhabricatorCalendarImportPHIDType.php', 'PhabricatorCalendarImportQuery' => 'applications/calendar/query/PhabricatorCalendarImportQuery.php', + 'PhabricatorCalendarImportReloadController' => 'applications/calendar/controller/PhabricatorCalendarImportReloadController.php', + 'PhabricatorCalendarImportReloadTransaction' => 'applications/calendar/xaction/PhabricatorCalendarImportReloadTransaction.php', 'PhabricatorCalendarImportSearchEngine' => 'applications/calendar/query/PhabricatorCalendarImportSearchEngine.php', 'PhabricatorCalendarImportTransaction' => 'applications/calendar/storage/PhabricatorCalendarImportTransaction.php', 'PhabricatorCalendarImportTransactionQuery' => 'applications/calendar/query/PhabricatorCalendarImportTransactionQuery.php', @@ -6982,6 +6984,8 @@ 'PhabricatorCalendarImportOrphanLogType' => 'PhabricatorCalendarImportLogType', 'PhabricatorCalendarImportPHIDType' => 'PhabricatorPHIDType', 'PhabricatorCalendarImportQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorCalendarImportReloadController' => 'PhabricatorCalendarController', + 'PhabricatorCalendarImportReloadTransaction' => 'PhabricatorCalendarImportTransactionType', 'PhabricatorCalendarImportSearchEngine' => 'PhabricatorApplicationSearchEngine', 'PhabricatorCalendarImportTransaction' => 'PhabricatorModularTransaction', 'PhabricatorCalendarImportTransactionQuery' => 'PhabricatorApplicationTransactionQuery', diff --git a/src/applications/calendar/application/PhabricatorCalendarApplication.php b/src/applications/calendar/application/PhabricatorCalendarApplication.php --- a/src/applications/calendar/application/PhabricatorCalendarApplication.php +++ b/src/applications/calendar/application/PhabricatorCalendarApplication.php @@ -85,6 +85,8 @@ => 'PhabricatorCalendarImportDisableController', 'delete/(?P[1-9]\d*)/' => 'PhabricatorCalendarImportDeleteController', + 'reload/(?P[1-9]\d*)/' + => 'PhabricatorCalendarImportReloadController', 'drop/' => 'PhabricatorCalendarImportDropController', 'log/' => array( diff --git a/src/applications/calendar/controller/PhabricatorCalendarImportReloadController.php b/src/applications/calendar/controller/PhabricatorCalendarImportReloadController.php new file mode 100644 --- /dev/null +++ b/src/applications/calendar/controller/PhabricatorCalendarImportReloadController.php @@ -0,0 +1,52 @@ +getViewer(); + + $import = id(new PhabricatorCalendarImportQuery()) + ->setViewer($viewer) + ->withIDs(array($request->getURIData('id'))) + ->requireCapabilities( + array( + PhabricatorPolicyCapability::CAN_VIEW, + PhabricatorPolicyCapability::CAN_EDIT, + )) + ->executeOne(); + if (!$import) { + return new Aphront404Response(); + } + + $import_uri = $import->getURI(); + + if ($request->isFormPost()) { + $xactions = array(); + $xactions[] = id(new PhabricatorCalendarImportTransaction()) + ->setTransactionType( + PhabricatorCalendarImportReloadTransaction::TRANSACTIONTYPE) + ->setNewValue(true); + + $editor = id(new PhabricatorCalendarImportEditor()) + ->setActor($viewer) + ->setContinueOnNoEffect(true) + ->setContinueOnMissingFields(true) + ->setContentSourceFromRequest($request); + + $editor->applyTransactions($import, $xactions); + + return id(new AphrontRedirectResponse())->setURI($import_uri); + } + + return $this->newDialog() + ->setTitle(pht('Reload Events')) + ->appendParagraph( + pht( + 'Reload this source? Events imported from this source will '. + 'be updated.')) + ->addCancelButton($import_uri) + ->addSubmitButton(pht('Reload Events')); + } + +} diff --git a/src/applications/calendar/controller/PhabricatorCalendarImportViewController.php b/src/applications/calendar/controller/PhabricatorCalendarImportViewController.php --- a/src/applications/calendar/controller/PhabricatorCalendarImportViewController.php +++ b/src/applications/calendar/controller/PhabricatorCalendarImportViewController.php @@ -105,6 +105,17 @@ ->setWorkflow(!$can_edit) ->setHref($edit_uri)); + $reload_uri = "import/reload/{$id}/"; + $reload_uri = $this->getApplicationURI($reload_uri); + + $curtain->addAction( + id(new PhabricatorActionView()) + ->setName(pht('Reload Import')) + ->setIcon('fa-refresh') + ->setDisabled(!$can_edit) + ->setWorkflow(true) + ->setHref($reload_uri)); + $disable_uri = "import/disable/{$id}/"; $disable_uri = $this->getApplicationURI($disable_uri); if ($import->getIsDisabled()) { @@ -123,7 +134,6 @@ ->setWorkflow(true) ->setHref($disable_uri)); - if ($can_edit) { $can_delete = $engine->canDeleteAnyEvents($viewer, $import); } else { 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 @@ -101,6 +101,26 @@ ->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) + ->setIsConduitOnly(true) + ->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) + ->setIsConduitOnly(true) + ->setConduitDescription(pht('Disable or restore the import.')) + ->setConduitTypeDescription(pht('True to reload the import.')) + ->setValue(false), ); $import_engine = $object->getEngine(); diff --git a/src/applications/calendar/editor/PhabricatorCalendarImportEditor.php b/src/applications/calendar/editor/PhabricatorCalendarImportEditor.php --- a/src/applications/calendar/editor/PhabricatorCalendarImportEditor.php +++ b/src/applications/calendar/editor/PhabricatorCalendarImportEditor.php @@ -28,11 +28,23 @@ PhabricatorLiskDAO $object, array $xactions) { - if ($this->getIsNewObject()) { + $type_reload = PhabricatorCalendarImportReloadTransaction::TRANSACTIONTYPE; + + // We import events when you create a source, or if you later reload it + // explicitly. + $should_reload = $this->getIsNewObject(); + foreach ($xactions as $xaction) { + if ($xaction->getTransactionType() == $type_reload) { + $should_reload = true; + break; + } + } + + if ($should_reload) { $actor = $this->getActor(); $import_engine = $object->getEngine(); - $import_engine->didCreateImport($actor, $object); + $import_engine->importEventsFromSource($actor, $object); } return $xactions; diff --git a/src/applications/calendar/import/PhabricatorCalendarICSFileImportEngine.php b/src/applications/calendar/import/PhabricatorCalendarICSFileImportEngine.php --- a/src/applications/calendar/import/PhabricatorCalendarICSFileImportEngine.php +++ b/src/applications/calendar/import/PhabricatorCalendarICSFileImportEngine.php @@ -59,7 +59,7 @@ } } - public function didCreateImport( + public function importEventsFromSource( PhabricatorUser $viewer, PhabricatorCalendarImport $import) { diff --git a/src/applications/calendar/import/PhabricatorCalendarICSURIImportEngine.php b/src/applications/calendar/import/PhabricatorCalendarICSURIImportEngine.php --- a/src/applications/calendar/import/PhabricatorCalendarICSURIImportEngine.php +++ b/src/applications/calendar/import/PhabricatorCalendarICSURIImportEngine.php @@ -71,7 +71,7 @@ return pht('ICS URI'); } - public function didCreateImport( + public function importEventsFromSource( PhabricatorUser $viewer, PhabricatorCalendarImport $import) { diff --git a/src/applications/calendar/import/PhabricatorCalendarImportEngine.php b/src/applications/calendar/import/PhabricatorCalendarImportEngine.php --- a/src/applications/calendar/import/PhabricatorCalendarImportEngine.php +++ b/src/applications/calendar/import/PhabricatorCalendarImportEngine.php @@ -25,7 +25,7 @@ abstract public function getDisplayName(PhabricatorCalendarImport $import); - abstract public function didCreateImport( + abstract public function importEventsFromSource( PhabricatorUser $viewer, PhabricatorCalendarImport $import); diff --git a/src/applications/calendar/importlog/PhabricatorCalendarImportUpdateLogType.php b/src/applications/calendar/importlog/PhabricatorCalendarImportUpdateLogType.php --- a/src/applications/calendar/importlog/PhabricatorCalendarImportUpdateLogType.php +++ b/src/applications/calendar/importlog/PhabricatorCalendarImportUpdateLogType.php @@ -26,7 +26,7 @@ public function getDisplayIcon( PhabricatorUser $viewer, PhabricatorCalendarImportLog $log) { - return 'fa-upload'; + return 'fa-calendar'; } public function getDisplayColor( diff --git a/src/applications/calendar/xaction/PhabricatorCalendarImportReloadTransaction.php b/src/applications/calendar/xaction/PhabricatorCalendarImportReloadTransaction.php new file mode 100644 --- /dev/null +++ b/src/applications/calendar/xaction/PhabricatorCalendarImportReloadTransaction.php @@ -0,0 +1,23 @@ +renderAuthor()); + } + +}