@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
at recaptime-dev/main 142 lines 3.7 kB view raw
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}