Path: blob/master/src/applications/dashboard/engine/PhabricatorDashboardRenderingEngine.php
12242 views
<?php12final class PhabricatorDashboardRenderingEngine extends Phobject {34private $dashboard;5private $viewer;6private $arrangeMode;78public function setViewer(PhabricatorUser $viewer) {9$this->viewer = $viewer;10return $this;11}1213public function getViewer() {14return $this->viewer;15}1617public function setDashboard(PhabricatorDashboard $dashboard) {18$this->dashboard = $dashboard;19return $this;20}2122public function getDashboard() {23return $this->dashboard;24}2526public function setArrangeMode($mode) {27$this->arrangeMode = $mode;28return $this;29}3031public function renderDashboard() {32require_celerity_resource('phabricator-dashboard-css');33$dashboard = $this->getDashboard();34$viewer = $this->getViewer();3536$is_editable = $this->arrangeMode;3738if ($is_editable) {39$h_mode = PhabricatorDashboardPanelRenderingEngine::HEADER_MODE_EDIT;40} else {41$h_mode = PhabricatorDashboardPanelRenderingEngine::HEADER_MODE_NORMAL;42}4344$panel_phids = $dashboard->getPanelPHIDs();45if ($panel_phids) {46$panels = id(new PhabricatorDashboardPanelQuery())47->setViewer($viewer)48->withPHIDs($panel_phids)49->execute();50$panels = mpull($panels, null, 'getPHID');5152$handles = $viewer->loadHandles($panel_phids);53} else {54$panels = array();55$handles = array();56}5758$ref_list = $dashboard->getPanelRefList();59$columns = $ref_list->getColumns();6061$dashboard_id = celerity_generate_unique_node_id();6263$result = id(new AphrontMultiColumnView())64->setID($dashboard_id)65->setFluidLayout(true)66->setGutter(AphrontMultiColumnView::GUTTER_LARGE);6768foreach ($columns as $column) {69$column_views = array();70foreach ($column->getPanelRefs() as $panel_ref) {71$panel_phid = $panel_ref->getPanelPHID();7273$panel_engine = id(new PhabricatorDashboardPanelRenderingEngine())74->setViewer($viewer)75->setEnableAsyncRendering(true)76->setContextObject($dashboard)77->setPanelKey($panel_ref->getPanelKey())78->setPanelPHID($panel_phid)79->setParentPanelPHIDs(array())80->setHeaderMode($h_mode)81->setEditMode($is_editable)82->setMovable(true)83->setPanelHandle($handles[$panel_phid]);8485$panel = idx($panels, $panel_phid);86if ($panel) {87$panel_engine->setPanel($panel);88}8990$column_views[] = $panel_engine->renderPanel();91}9293$column_classes = $column->getClasses();9495$column_tail = array();96if ($is_editable) {97$column_tail[] = $this->renderAddPanelPlaceHolder();98$column_tail[] = $this->renderAddPanelUI($column);99}100101$sigil = 'dashboard-column';102103$metadata = array(104'columnKey' => $column->getColumnKey(),105);106107$column_view = javelin_tag(108'div',109array(110'sigil' => $sigil,111'meta' => $metadata,112),113$column_views);114115$result->addColumn(116array(117$column_view,118$column_tail,119),120implode(' ', $column_classes));121}122123if ($is_editable) {124$params = array(125'contextPHID' => $dashboard->getPHID(),126);127$move_uri = new PhutilURI('/dashboard/adjust/move/', $params);128129Javelin::initBehavior(130'dashboard-move-panels',131array(132'dashboardNodeID' => $dashboard_id,133'moveURI' => (string)$move_uri,134));135}136137$view = id(new PHUIBoxView())138->addClass('dashboard-view')139->appendChild(140array(141$result,142));143144return $view;145}146147private function renderAddPanelPlaceHolder() {148return javelin_tag(149'span',150array(151'sigil' => 'workflow',152'class' => 'drag-ghost dashboard-panel-placeholder',153),154pht('This column does not have any panels yet.'));155}156157private function renderAddPanelUI(PhabricatorDashboardColumn $column) {158$dashboard = $this->getDashboard();159$column_key = $column->getColumnKey();160161$create_uri = id(new PhutilURI('/dashboard/panel/edit/'))162->replaceQueryParam('contextPHID', $dashboard->getPHID())163->replaceQueryParam('columnKey', $column_key);164165$add_uri = id(new PhutilURI('/dashboard/adjust/add/'))166->replaceQueryParam('contextPHID', $dashboard->getPHID())167->replaceQueryParam('columnKey', $column_key);168169$create_button = id(new PHUIButtonView())170->setTag('a')171->setHref($create_uri)172->setIcon('fa-plus')173->setColor(PHUIButtonView::GREY)174->setWorkflow(true)175->setText(pht('Create Panel'))176->addClass(PHUI::MARGIN_MEDIUM);177178$add_button = id(new PHUIButtonView())179->setTag('a')180->setHref($add_uri)181->setIcon('fa-window-maximize')182->setColor(PHUIButtonView::GREY)183->setWorkflow(true)184->setText(pht('Add Existing Panel'))185->addClass(PHUI::MARGIN_MEDIUM);186187return phutil_tag(188'div',189array(190'style' => 'text-align: center;',191),192array(193$create_button,194$add_button,195));196}197198}199200201