@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 PhortuneExternalOrderController
4 extends PhortuneExternalController {
5
6 protected function handleExternalRequest(AphrontRequest $request) {
7 $xviewer = $this->getExternalViewer();
8 $email = $this->getAccountEmail();
9 $account = $email->getAccount();
10
11 $order = id(new PhortuneCartQuery())
12 ->setViewer($xviewer)
13 ->withAccountPHIDs(array($account->getPHID()))
14 ->withIDs(array($request->getURIData('orderID')))
15 ->executeOne();
16 if (!$order) {
17 return new Aphront404Response();
18 }
19
20 $is_printable = ($request->getURIData('action') === 'print');
21
22 $order_view = id(new PhortuneOrderSummaryView())
23 ->setViewer($xviewer)
24 ->setOrder($order)
25 ->setPrintable($is_printable);
26
27 $crumbs = null;
28 $curtain = null;
29
30 $main = array();
31 $tail = array();
32
33 require_celerity_resource('phortune-invoice-css');
34
35 if ($is_printable) {
36 $body_class = 'phortune-invoice-view';
37
38 $tail[] = $order_view;
39 } else {
40 $body_class = 'phortune-cart-page';
41
42 $curtain = $this->newCurtain($order);
43
44 $crumbs = $this->newExternalCrumbs()
45 ->addTextCrumb($order->getObjectName())
46 ->setBorder(true);
47
48 $timeline = $this->buildTransactionTimeline($order)
49 ->setShouldTerminate(true);
50
51 $main[] = $order_view;
52 $main[] = $timeline;
53 }
54
55 $column_view = id(new PHUITwoColumnView())
56 ->setMainColumn($main)
57 ->setFooter($tail);
58
59 if ($curtain) {
60 $column_view->setCurtain($curtain);
61 }
62
63 $page = $this->newPage()
64 ->addClass($body_class)
65 ->setTitle(
66 array(
67 $order->getObjectName(),
68 $order->getName(),
69 ))
70 ->appendChild($column_view);
71
72 if ($crumbs) {
73 $page->setCrumbs($crumbs);
74 }
75
76 return $page;
77 }
78
79
80 private function newCurtain(PhortuneCart $order) {
81 $xviewer = $this->getExternalViewer();
82 $email = $this->getAccountEmail();
83
84 $curtain = $this->newCurtainView($order);
85
86 $print_uri = $email->getExternalOrderPrintURI($order);
87
88 $curtain->addAction(
89 id(new PhabricatorActionView())
90 ->setName(pht('Printable Version'))
91 ->setHref($print_uri)
92 ->setOpenInNewWindow(true)
93 ->setIcon('fa-print'));
94
95 return $curtain;
96 }
97
98}