mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-18 11:30:55 +01:00
Support disabling calendar imports
Summary: Ref T10747. This doesn't do much for ICS file imports (you can't disable them since it doesn't do anything meaningful) but will matter more for ICS-subscription imports later. Test Plan: Clicked "Disable" on an ICS file import, got explanatory dialog. Reviewers: chad Reviewed By: chad Maniphest Tasks: T10747 Differential Revision: https://secure.phabricator.com/D16702
This commit is contained in:
parent
ced151e6f2
commit
6e2a86470b
5 changed files with 102 additions and 1 deletions
|
@ -2102,6 +2102,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorCalendarICSWriter' => 'applications/calendar/util/PhabricatorCalendarICSWriter.php',
|
||||
'PhabricatorCalendarIconSet' => 'applications/calendar/icon/PhabricatorCalendarIconSet.php',
|
||||
'PhabricatorCalendarImport' => 'applications/calendar/storage/PhabricatorCalendarImport.php',
|
||||
'PhabricatorCalendarImportDisableController' => 'applications/calendar/controller/PhabricatorCalendarImportDisableController.php',
|
||||
'PhabricatorCalendarImportDisableTransaction' => 'applications/calendar/xaction/PhabricatorCalendarImportDisableTransaction.php',
|
||||
'PhabricatorCalendarImportEditController' => 'applications/calendar/controller/PhabricatorCalendarImportEditController.php',
|
||||
'PhabricatorCalendarImportEditEngine' => 'applications/calendar/editor/PhabricatorCalendarImportEditEngine.php',
|
||||
|
@ -6905,6 +6906,7 @@ phutil_register_library_map(array(
|
|||
'PhabricatorApplicationTransactionInterface',
|
||||
'PhabricatorDestructibleInterface',
|
||||
),
|
||||
'PhabricatorCalendarImportDisableController' => 'PhabricatorCalendarController',
|
||||
'PhabricatorCalendarImportDisableTransaction' => 'PhabricatorCalendarImportTransactionType',
|
||||
'PhabricatorCalendarImportEditController' => 'PhabricatorCalendarController',
|
||||
'PhabricatorCalendarImportEditEngine' => 'PhabricatorEditEngine',
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
<?php
|
||||
|
||||
final class PhabricatorCalendarImportDisableController
|
||||
extends PhabricatorCalendarController {
|
||||
|
||||
public function handleRequest(AphrontRequest $request) {
|
||||
$viewer = $request->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();
|
||||
$is_disable = !$import->getIsDisabled();
|
||||
|
||||
if (!$import->getEngine()->canDisable($viewer, $import)) {
|
||||
$reason = $import->getEngine()->explainCanDisable($viewer, $import);
|
||||
return $this->newDialog()
|
||||
->setTitle(pht('Unable to Disable'))
|
||||
->appendParagraph($reason)
|
||||
->addCancelButton($import_uri);
|
||||
}
|
||||
|
||||
if ($request->isFormPost()) {
|
||||
$xactions = array();
|
||||
$xactions[] = id(new PhabricatorCalendarImportTransaction())
|
||||
->setTransactionType(
|
||||
PhabricatorCalendarImportDisableTransaction::TRANSACTIONTYPE)
|
||||
->setNewValue($is_disable ? 1 : 0);
|
||||
|
||||
$editor = id(new PhabricatorCalendarImportEditor())
|
||||
->setActor($viewer)
|
||||
->setContinueOnNoEffect(true)
|
||||
->setContinueOnMissingFields(true)
|
||||
->setContentSourceFromRequest($request);
|
||||
|
||||
$editor->applyTransactions($import, $xactions);
|
||||
|
||||
return id(new AphrontRedirectResponse())->setURI($import_uri);
|
||||
}
|
||||
|
||||
if ($is_disable) {
|
||||
$title = pht('Disable Import');
|
||||
$body = pht(
|
||||
'Disable this import? Events from this source will no longer be '.
|
||||
'updated.');
|
||||
$button = pht('Disable Import');
|
||||
} else {
|
||||
$title = pht('Enable Import');
|
||||
$body = pht(
|
||||
'Enable this import? Events from this source will be updated again.');
|
||||
$button = pht('Enable Import');
|
||||
}
|
||||
|
||||
return $this->newDialog()
|
||||
->setTitle($title)
|
||||
->appendParagraph($body)
|
||||
->addCancelButton($import_uri)
|
||||
->addSubmitButton($button);
|
||||
}
|
||||
|
||||
}
|
|
@ -80,6 +80,7 @@ final class PhabricatorCalendarImportViewController
|
|||
$id = $import->getID();
|
||||
|
||||
$curtain = $this->newCurtainView($import);
|
||||
$engine = $import->getEngine();
|
||||
|
||||
$can_edit = PhabricatorPolicyFilter::hasCapability(
|
||||
$viewer,
|
||||
|
@ -89,6 +90,8 @@ final class PhabricatorCalendarImportViewController
|
|||
$edit_uri = "import/edit/{$id}/";
|
||||
$edit_uri = $this->getApplicationURI($edit_uri);
|
||||
|
||||
$can_disable = ($can_edit && $engine->canDisable($viewer, $import));
|
||||
|
||||
$curtain->addAction(
|
||||
id(new PhabricatorActionView())
|
||||
->setName(pht('Edit Import'))
|
||||
|
@ -111,7 +114,7 @@ final class PhabricatorCalendarImportViewController
|
|||
id(new PhabricatorActionView())
|
||||
->setName($disable_name)
|
||||
->setIcon($disable_icon)
|
||||
->setDisabled(!$can_edit)
|
||||
->setDisabled(!$can_disable)
|
||||
->setWorkflow(true)
|
||||
->setHref($disable_uri));
|
||||
|
||||
|
|
|
@ -70,5 +70,20 @@ final class PhabricatorCalendarICSImportEngine
|
|||
}
|
||||
|
||||
|
||||
public function canDisable(
|
||||
PhabricatorUser $viewer,
|
||||
PhabricatorCalendarImport $import) {
|
||||
return false;
|
||||
}
|
||||
|
||||
public function explainCanDisable(
|
||||
PhabricatorUser $viewer,
|
||||
PhabricatorCalendarImport $import) {
|
||||
return pht(
|
||||
'You can not disable import of an ICS file because the entire import '.
|
||||
'occurs immediately when you upload the file. There is no further '.
|
||||
'activity to disable.');
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -21,6 +21,16 @@ abstract class PhabricatorCalendarImportEngine
|
|||
PhabricatorUser $viewer,
|
||||
PhabricatorCalendarImport $import);
|
||||
|
||||
abstract public function canDisable(
|
||||
PhabricatorUser $viewer,
|
||||
PhabricatorCalendarImport $import);
|
||||
|
||||
public function explainCanDisable(
|
||||
PhabricatorUser $viewer,
|
||||
PhabricatorCalendarImport $import) {
|
||||
throw new PhutilMethodNotImplementedException();
|
||||
}
|
||||
|
||||
final public static function getAllImportEngines() {
|
||||
return id(new PhutilClassMapQuery())
|
||||
->setAncestorClass(__CLASS__)
|
||||
|
|
Loading…
Reference in a new issue