dashboards-8.x-1.0-beta10/src/Plugin/Dashboard/ChartTrait.php

src/Plugin/Dashboard/ChartTrait.php
<?php

namespace Drupal\dashboards\Plugin\Dashboard;

use Drupal\Core\StringTranslation\StringTranslationTrait;

/**
 * Trait for build a chart.
 */
trait ChartTrait {
  use StringTranslationTrait;

  /**
   * Labels.
   *
   * @var array
   */
  protected $labels = [];

  /**
   * Rows.
   *
   * @var array
   */
  protected $rows = [];

  /**
   * Chart type.
   *
   * @var string
   */
  protected $type = 'pie';

  /**
   * Empty flag.
   *
   * @var bool
   */
  protected $empty = FALSE;

  /**
   * Add a label.
   *
   * @param string $chart
   *   Label to add.
   */
  public function setChartType($chart): void {
    if (!in_array($chart, array_keys($this->getAllowedStyles()))) {
      throw new \InvalidArgumentException('Chart type @chart not allowed');
    }
    $this->type = $chart;
  }

  /**
   * Add a label.
   *
   * @param string $label
   *   Label to add.
   */
  public function addLabel($label): void {
    $this->labels[] = $label;
  }

  /**
   * Get allowed styles.
   *
   * @return array
   *   Return array keyed by type.
   */
  public function getAllowedStyles(): array {
    return [
      'line' => $this->t('Lines'),
      'pie' => $this->t('Pies'),
      'bar' => $this->t('Bars'),
      'radar' => $this->t('Radar'),
      'polarArea' => $this->t('Polar area'),
      'doughnut' => $this->t('Doughnut'),
      'bubble' => $this->t('Bubbles'),
    ];
  }

  /**
   * Set all labels.
   *
   * @param array $labels
   *   Labels to set.
   */
  public function setLabels(array $labels): void {
    $this->labels = $labels;
  }

  /**
   * Add a row.
   *
   * @param array $row
   *   Row to add.
   */
  public function addRow(array $row): void {
    $this->rows[] = $row;
  }

  /**
   * Set all rows.
   *
   * @param array $rows
   *   Rows to set.
   */
  public function setRows(array $rows): void {
    $this->rows = $rows;
  }

  /**
   * Set this chart is empty.
   *
   * @param bool $empty
   *   Empty flag to set.
   */
  public function setEmpty(bool $empty): void {
    $this->empty = $empty;
  }

  /**
   * Set all rows.
   *
   * @param array $conf
   *   Plugin configuration.
   * @param bool $plain
   *   Show only table.
   *
   * @return array
   *   Return renderable array.
   */
  public function renderChart(array $conf = [], bool $plain = FALSE): array {
    if (count($this->rows) == 0) {
      return [
        '#markup' => $this->t('No data found'),
      ];
    }
    $table = [
      '#type' => 'table',
      '#header' => $this->labels,
      '#rows' => $this->rows,
      '#attributes' => [
        'class' => ['dashboard-table', 'table'],
      ],
      '#attached' => [
        'library' => ['dashboards/chart'],
      ],
    ];
    $attributes = [
      'data-app' => 'chart',
      'data-chart-type' => $this->type,
    ];

    if (isset($conf['legend']) && $conf['legend']) {
      $attributes['data-chart-display-legend'] = '1';
    }
    $build = [
      '#prefix' => '<div>',
      '#suffix' => '</div>',
      'chart' => [
        '#type' => 'container',
        '#attributes' => $attributes,
        [
          '#type' => 'container',
          [
            '#type' => 'details',
            '#title' => $this->t('Show data'),
            '#open' => FALSE,
            'content' => $table,
          ],
        ],
      ],
    ];
    if ($plain == TRUE) {
      unset($build['chart']['#attributes']);
    }
    return $build;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc