From f4a3887b6bdd4be57f94da6ebbed89c85a8d14cc Mon Sep 17 00:00:00 2001 From: epriestley Date: Tue, 25 Oct 2016 09:33:03 -0700 Subject: [PATCH] Add an explicit "Reload Import" action to imports Summary: Ref T10747. This makes development/debugging/testing easier and moves us closer to triggered imports (e.g., keep in sync with Google once per day). Test Plan: - Reloaded an event import. - Edited an event in Google Calendar, reloaded, got updated event. Reviewers: chad Reviewed By: chad Maniphest Tasks: T10747 Differential Revision: https://secure.phabricator.com/D16747 --- src/__phutil_library_map__.php | 4 ++ .../PhabricatorCalendarApplication.php | 2 + ...bricatorCalendarImportReloadController.php | 52 +++++++++++++++++++ ...habricatorCalendarImportViewController.php | 12 ++++- .../PhabricatorCalendarImportEditEngine.php | 20 +++++++ .../PhabricatorCalendarImportEditor.php | 16 +++++- ...PhabricatorCalendarICSFileImportEngine.php | 2 +- .../PhabricatorCalendarICSURIImportEngine.php | 2 +- .../PhabricatorCalendarImportEngine.php | 2 +- ...PhabricatorCalendarImportUpdateLogType.php | 2 +- ...ricatorCalendarImportReloadTransaction.php | 23 ++++++++ 11 files changed, 130 insertions(+), 7 deletions(-) create mode 100644 src/applications/calendar/controller/PhabricatorCalendarImportReloadController.php create mode 100644 src/applications/calendar/xaction/PhabricatorCalendarImportReloadTransaction.php diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index eafb0acdd5..043ed75b47 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -2137,6 +2137,8 @@ phutil_register_library_map(array( '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 @@ phutil_register_library_map(array( '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 index fa95f6951b..1e1a125cde 100644 --- a/src/applications/calendar/application/PhabricatorCalendarApplication.php +++ b/src/applications/calendar/application/PhabricatorCalendarApplication.php @@ -85,6 +85,8 @@ final class PhabricatorCalendarApplication extends PhabricatorApplication { => '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 index 0000000000..df9e63b0ad --- /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 index 59b0f86915..d8de0b3ea3 100644 --- a/src/applications/calendar/controller/PhabricatorCalendarImportViewController.php +++ b/src/applications/calendar/controller/PhabricatorCalendarImportViewController.php @@ -105,6 +105,17 @@ final class PhabricatorCalendarImportViewController ->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 @@ final class PhabricatorCalendarImportViewController ->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 index 031a890d59..44e3619514 100644 --- a/src/applications/calendar/editor/PhabricatorCalendarImportEditEngine.php +++ b/src/applications/calendar/editor/PhabricatorCalendarImportEditEngine.php @@ -101,6 +101,26 @@ final class PhabricatorCalendarImportEditEngine ->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 index fe22a9f8c9..6db68b9525 100644 --- a/src/applications/calendar/editor/PhabricatorCalendarImportEditor.php +++ b/src/applications/calendar/editor/PhabricatorCalendarImportEditor.php @@ -28,11 +28,23 @@ final class PhabricatorCalendarImportEditor 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 index 7284776da6..0b159b62c6 100644 --- a/src/applications/calendar/import/PhabricatorCalendarICSFileImportEngine.php +++ b/src/applications/calendar/import/PhabricatorCalendarICSFileImportEngine.php @@ -59,7 +59,7 @@ final class PhabricatorCalendarICSFileImportEngine } } - 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 index 7b1754a911..06693fd40d 100644 --- a/src/applications/calendar/import/PhabricatorCalendarICSURIImportEngine.php +++ b/src/applications/calendar/import/PhabricatorCalendarICSURIImportEngine.php @@ -71,7 +71,7 @@ final class PhabricatorCalendarICSURIImportEngine 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 index 2fc9399fe3..aaedf3e2fd 100644 --- a/src/applications/calendar/import/PhabricatorCalendarImportEngine.php +++ b/src/applications/calendar/import/PhabricatorCalendarImportEngine.php @@ -25,7 +25,7 @@ abstract class PhabricatorCalendarImportEngine 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 index 9b20c54615..a50dbce2c4 100644 --- a/src/applications/calendar/importlog/PhabricatorCalendarImportUpdateLogType.php +++ b/src/applications/calendar/importlog/PhabricatorCalendarImportUpdateLogType.php @@ -26,7 +26,7 @@ final class PhabricatorCalendarImportUpdateLogType 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 index 0000000000..ad9a5e1c29 --- /dev/null +++ b/src/applications/calendar/xaction/PhabricatorCalendarImportReloadTransaction.php @@ -0,0 +1,23 @@ +renderAuthor()); + } + +} -- 2.51.2