@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 AlmanacPropertyDeleteController
4 extends AlmanacPropertyController {
5
6 public function handleRequest(AphrontRequest $request) {
7 $viewer = $request->getViewer();
8
9 $response = $this->loadPropertyObject();
10 if ($response) {
11 return $response;
12 }
13
14 $object = $this->getPropertyObject();
15
16 $key = $request->getStr('key');
17 if (!strlen($key)) {
18 return new Aphront404Response();
19 }
20
21 $cancel_uri = $object->getURI();
22
23 $builtins = $object->getAlmanacPropertyFieldSpecifications();
24 $is_builtin = isset($builtins[$key]);
25
26 if ($is_builtin) {
27 $title = pht('Reset Property');
28 $body = pht(
29 'Reset property "%s" to its default value?',
30 $key);
31 $submit_text = pht('Reset Property');
32 } else {
33 $title = pht('Delete Property');
34 $body = pht(
35 'Delete property "%s"?',
36 $key);
37 $submit_text = pht('Delete Property');
38 }
39
40 $validation_exception = null;
41 if ($request->isFormPost()) {
42 $xaction_type = $object->getAlmanacPropertyDeleteTransactionType();
43
44 $xaction = $object->getApplicationTransactionTemplate()
45 ->setTransactionType($xaction_type)
46 ->setMetadataValue('almanac.property', $key);
47
48 $editor = $object->getApplicationTransactionEditor()
49 ->setActor($viewer)
50 ->setContentSourceFromRequest($request)
51 ->setContinueOnNoEffect(true)
52 ->setContinueOnMissingFields(true);
53
54 try {
55 $editor->applyTransactions($object, array($xaction));
56 return id(new AphrontRedirectResponse())->setURI($cancel_uri);
57 } catch (PhabricatorApplicationTransactionValidationException $ex) {
58 $validation_exception = $ex;
59 }
60 }
61
62 return $this->newDialog()
63 ->setTitle($title)
64 ->setValidationException($validation_exception)
65 ->addHiddenInput('objectPHID', $object->getPHID())
66 ->addHiddenInput('key', $key)
67 ->appendParagraph($body)
68 ->addCancelButton($cancel_uri)
69 ->addSubmitButton($submit_text);
70 }
71
72}