@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.)
hq.recaptime.dev/wiki/Phorge
phorge
phabricator
1<?php
2
3final class PhabricatorCalendarImportDisableController
4 extends PhabricatorCalendarController {
5
6 public function handleRequest(AphrontRequest $request) {
7 $viewer = $request->getViewer();
8
9 $import = id(new PhabricatorCalendarImportQuery())
10 ->setViewer($viewer)
11 ->withIDs(array($request->getURIData('id')))
12 ->requireCapabilities(
13 array(
14 PhabricatorPolicyCapability::CAN_VIEW,
15 PhabricatorPolicyCapability::CAN_EDIT,
16 ))
17 ->executeOne();
18 if (!$import) {
19 return new Aphront404Response();
20 }
21
22 $import_uri = $import->getURI();
23 $is_disable = !$import->getIsDisabled();
24
25 if (!$import->getEngine()->canDisable($viewer, $import)) {
26 $reason = $import->getEngine()->explainCanDisable($viewer, $import);
27 return $this->newDialog()
28 ->setTitle(pht('Unable to Disable'))
29 ->appendParagraph($reason)
30 ->addCancelButton($import_uri);
31 }
32
33 if ($request->isFormPost()) {
34 $xactions = array();
35 $xactions[] = id(new PhabricatorCalendarImportTransaction())
36 ->setTransactionType(
37 PhabricatorCalendarImportDisableTransaction::TRANSACTIONTYPE)
38 ->setNewValue($is_disable ? 1 : 0);
39
40 $editor = id(new PhabricatorCalendarImportEditor())
41 ->setActor($viewer)
42 ->setContinueOnNoEffect(true)
43 ->setContinueOnMissingFields(true)
44 ->setContentSourceFromRequest($request);
45
46 $editor->applyTransactions($import, $xactions);
47
48 return id(new AphrontRedirectResponse())->setURI($import_uri);
49 }
50
51 if ($is_disable) {
52 $title = pht('Disable Import');
53 $body = pht(
54 'Disable this import? Events from this source will no longer be '.
55 'updated.');
56 $button = pht('Disable Import');
57 } else {
58 $title = pht('Enable Import');
59 $body = pht(
60 'Enable this import? Events from this source will be updated again.');
61 $button = pht('Enable Import');
62 }
63
64 return $this->newDialog()
65 ->setTitle($title)
66 ->appendParagraph($body)
67 ->addCancelButton($import_uri)
68 ->addSubmitButton($button);
69 }
70
71}