@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 PhabricatorFileTransformListController
4 extends PhabricatorFileController {
5
6 public function shouldAllowPublic() {
7 return true;
8 }
9
10 public function handleRequest(AphrontRequest $request) {
11 $viewer = $this->getViewer();
12
13 $file = id(new PhabricatorFileQuery())
14 ->setViewer($viewer)
15 ->withIDs(array($request->getURIData('id')))
16 ->executeOne();
17 if (!$file) {
18 return new Aphront404Response();
19 }
20
21 $monogram = $file->getMonogram();
22
23 $xdst = id(new PhabricatorTransformedFile())->loadAllWhere(
24 'transformedPHID = %s',
25 $file->getPHID());
26
27 $dst_rows = array();
28 foreach ($xdst as $source) {
29 $dst_rows[] = array(
30 $source->getTransform(),
31 $viewer->renderHandle($source->getOriginalPHID()),
32 );
33 }
34 $dst_table = id(new AphrontTableView($dst_rows))
35 ->setHeaders(
36 array(
37 pht('Key'),
38 pht('Source'),
39 ))
40 ->setColumnClasses(
41 array(
42 '',
43 'wide',
44 ))
45 ->setNoDataString(
46 pht(
47 'This file was not created by transforming another file.'));
48
49 $xsrc = id(new PhabricatorTransformedFile())->loadAllWhere(
50 'originalPHID = %s',
51 $file->getPHID());
52 $xsrc = mpull($xsrc, 'getTransformedPHID', 'getTransform');
53
54 $src_rows = array();
55 $xforms = PhabricatorFileTransform::getAllTransforms();
56 foreach ($xforms as $xform) {
57 $dst_phid = idx($xsrc, $xform->getTransformKey());
58
59 if ($xform->canApplyTransform($file)) {
60
61 $view_href = $file->getURIForTransform($xform);
62 $view_href = new PhutilURI($view_href);
63 $view_href->replaceQueryParam('regenerate', 'true');
64
65 $view_text = pht('Regenerate');
66
67 $view_link = phutil_tag(
68 'a',
69 array(
70 'class' => 'small button button-grey',
71 'href' => $view_href,
72 ),
73 $view_text);
74
75 if ($dst_phid) {
76 $dst_link = $viewer->renderHandle($dst_phid);
77 } else {
78 $dst_link = phutil_tag('em', array(), pht('None'));
79 }
80
81 $src_rows[] = array(
82 $xform->getTransformName(),
83 $xform->getTransformKey(),
84 $dst_link,
85 $view_link,
86 );
87 }
88 }
89
90 $src_table = id(new AphrontTableView($src_rows))
91 ->setNoDataString(
92 pht('No supported transforms are available for this file format.'))
93 ->setHeaders(
94 array(
95 pht('Name'),
96 pht('Key'),
97 pht('Transform'),
98 pht('View'),
99 ))
100 ->setColumnClasses(
101 array(
102 'wide',
103 '',
104 '',
105 'action',
106 ));
107
108 $crumbs = $this->buildApplicationCrumbs();
109 $crumbs->addTextCrumb($monogram, '/'.$monogram);
110 $crumbs->addTextCrumb(pht('Transforms'));
111 $crumbs->setBorder(true);
112
113 $dst_box = id(new PHUIObjectBoxView())
114 ->setHeaderText(pht('File Sources'))
115 ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
116 ->setTable($dst_table);
117
118 $src_box = id(new PHUIObjectBoxView())
119 ->setHeaderText(pht('Available Transforms'))
120 ->setBackground(PHUIObjectBoxView::BLUE_PROPERTY)
121 ->setTable($src_table);
122
123 $title = pht('%s Transforms', $file->getName());
124
125 $header = id(new PHUIHeaderView())
126 ->setHeader($title)
127 ->setHeaderIcon('fa-arrows-alt');
128
129 $view = id(new PHUITwoColumnView())
130 ->setHeader($header)
131 ->setFooter(array(
132 $dst_box,
133 $src_box,
134 ));
135
136 return $this->newPage()
137 ->setTitle($title)
138 ->setCrumbs($crumbs)
139 ->appendChild($view);
140
141 }
142}