[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/dashboard/engine/ -> PhabricatorDashboardRenderingEngine.php (source)

   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  }


Generated: Sun Nov 30 09:20:46 2014 Cross-referenced by PHPXref 0.7.1