[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class PhabricatorDashboardRenderingEngine extends Phobject { 4 5 private $dashboard; 6 private $viewer; 7 private $arrangeMode; 8 9 public function setViewer(PhabricatorUser $viewer) { 10 $this->viewer = $viewer; 11 return $this; 12 } 13 14 public function setDashboard(PhabricatorDashboard $dashboard) { 15 $this->dashboard = $dashboard; 16 return $this; 17 } 18 19 public function setArrangeMode($mode) { 20 $this->arrangeMode = $mode; 21 return $this; 22 } 23 24 public function renderDashboard() { 25 require_celerity_resource('phabricator-dashboard-css'); 26 $dashboard = $this->dashboard; 27 $viewer = $this->viewer; 28 29 $layout_config = $dashboard->getLayoutConfigObject(); 30 $panel_grid_locations = $layout_config->getPanelLocations(); 31 $panels = mpull($dashboard->getPanels(), null, 'getPHID'); 32 $dashboard_id = celerity_generate_unique_node_id(); 33 $result = id(new AphrontMultiColumnView()) 34 ->setID($dashboard_id) 35 ->setFluidlayout(true) 36 ->setGutter(AphrontMultiColumnView::GUTTER_LARGE); 37 38 if ($this->arrangeMode) { 39 $h_mode = PhabricatorDashboardPanelRenderingEngine::HEADER_MODE_EDIT; 40 } else { 41 $h_mode = PhabricatorDashboardPanelRenderingEngine::HEADER_MODE_NORMAL; 42 } 43 44 foreach ($panel_grid_locations as $column => $panel_column_locations) { 45 $panel_phids = $panel_column_locations; 46 $column_panels = array_select_keys($panels, $panel_phids); 47 $column_result = array(); 48 foreach ($column_panels as $panel) { 49 $column_result[] = id(new PhabricatorDashboardPanelRenderingEngine()) 50 ->setViewer($viewer) 51 ->setPanel($panel) 52 ->setDashboardID($dashboard->getID()) 53 ->setEnableAsyncRendering(true) 54 ->setParentPanelPHIDs(array()) 55 ->setHeaderMode($h_mode) 56 ->renderPanel(); 57 } 58 $column_class = $layout_config->getColumnClass( 59 $column, 60 $this->arrangeMode); 61 if ($this->arrangeMode) { 62 $column_result[] = $this->renderAddPanelPlaceHolder($column); 63 $column_result[] = $this->renderAddPanelUI($column); 64 } 65 $result->addColumn( 66 $column_result, 67 $column_class, 68 $sigil = 'dashboard-column', 69 $metadata = array('columnID' => $column)); 70 } 71 72 if ($this->arrangeMode) { 73 Javelin::initBehavior( 74 'dashboard-move-panels', 75 array( 76 'dashboardID' => $dashboard_id, 77 'moveURI' => '/dashboard/movepanel/'.$dashboard->getID().'/', 78 )); 79 } 80 81 $view = id(new PHUIBoxView()) 82 ->addClass('dashboard-view') 83 ->appendChild($result); 84 85 return $view; 86 } 87 88 private function renderAddPanelPlaceHolder($column) { 89 $dashboard = $this->dashboard; 90 $panels = $dashboard->getPanels(); 91 92 return javelin_tag( 93 'span', 94 array( 95 'sigil' => 'workflow', 96 'class' => 'drag-ghost dashboard-panel-placeholder', 97 ), 98 pht('This column does not have any panels yet.')); 99 } 100 101 private function renderAddPanelUI($column) { 102 $dashboard_id = $this->dashboard->getID(); 103 104 $create_uri = id(new PhutilURI('/dashboard/panel/create/')) 105 ->setQueryParam('dashboardID', $dashboard_id) 106 ->setQueryParam('column', $column); 107 108 $add_uri = id(new PhutilURI('/dashboard/addpanel/'.$dashboard_id.'/')) 109 ->setQueryParam('column', $column); 110 111 $create_button = id(new PHUIButtonView()) 112 ->setTag('a') 113 ->setHref($create_uri) 114 ->setWorkflow(true) 115 ->setColor(PHUIButtonView::GREY) 116 ->setText(pht('Create Panel')) 117 ->addClass(PHUI::MARGIN_MEDIUM); 118 119 $add_button = id(new PHUIButtonView()) 120 ->setTag('a') 121 ->setHref($add_uri) 122 ->setWorkflow(true) 123 ->setColor(PHUIButtonView::GREY) 124 ->setText(pht('Add Existing Panel')) 125 ->addClass(PHUI::MARGIN_MEDIUM); 126 127 return phutil_tag( 128 'div', 129 array( 130 'style' => 'text-align: center;', 131 ), 132 array( 133 $create_button, 134 $add_button, 135 )); 136 } 137 138 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Nov 30 09:20:46 2014 | Cross-referenced by PHPXref 0.7.1 |