easychart-8.x-3.5/src/Commands/EasychartCommands.php

src/Commands/EasychartCommands.php
<?php

namespace Drupal\easychart\Commands;

use Drupal\Core\Archiver\Zip;
use Drupal\Core\Asset\LibraryDiscoveryInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\File\FileSystemInterface;
use Drupal\Core\Messenger\MessengerInterface;
use Drush\Commands\DrushCommands;

/**
 * A Drush commandfile.
 *
 * In addition to this file, you need a drush.services.yml
 * in root of your module, and a composer.json file that provides the name
 * of the services file to use.
 *
 * See these files for an example of injecting Drupal services:
 *   - http://cgit.drupalcode.org/devel/tree/src/Commands/DevelCommands.php
 *   - http://cgit.drupalcode.org/devel/tree/drush.services.yml
 */
class EasychartCommands extends DrushCommands {

  /**
   * File system.
   *
   * @var \Drupal\Core\File\FileSystemInterface
   */
  protected $fileSystem;

  /**
   * Module handler.
   *
   * @var \Drupal\Core\Extension\ModuleHandlerInterface
   */
  protected $moduleHandler;

  /**
   * Logger.
   *
   * @var \Drupal\Core\Messenger\MessengerInterface
   */
  protected $messenger;

  /**
   * Library discovery.
   *
   * @var \Drupal\Core\Asset\LibraryDiscoveryInterface
   */
  protected $libraryDiscovery;

  /**
   * Constructs new EasychartCommands.
   *
   * @param \Drupal\Core\File\FileSystemInterface $fileSystem
   *   File system.
   * @param \Drupal\Core\Extension\ModuleHandlerInterface $moduleHandler
   *   Module handler.
   * @param \Drupal\Core\Messenger\MessengerInterface $messenger
   *   Messenger.
   * @param \Drupal\Core\Asset\LibraryDiscoveryInterface $libraryDiscovery
   *   Library discovery.
   */
  public function __construct(FileSystemInterface $fileSystem, ModuleHandlerInterface $moduleHandler, MessengerInterface $messenger, LibraryDiscoveryInterface $libraryDiscovery) {
    $this->fileSystem = $fileSystem;
    $this->moduleHandler = $moduleHandler;
    $this->messenger = $messenger;
    $this->libraryDiscovery = $libraryDiscovery;
  }

  /**
   * Install dependencies.
   *
   * @usage drush easychart:install
   *   Install JavaScript libraries for Easychart.
   *
   * @command easychart:install
   * @aliases eci
   */
  public function install() {
    // Make sure the Easychart module is enabled.
    if (!$this->moduleHandler->moduleExists('easychart')) {
      $this->messenger->addError(dt('Please enable the Easychart module first.'));
      return;
    }

    // Path variables.
    $libraries_path = 'libraries';

    // Store the old directory.
    $old_dir = getcwd();

    // Create the libraries folder if it does not exist.
    if (!is_dir($libraries_path)) {
      drush_op('mkdir', $libraries_path);
      $this->messenger->addMessage(dt('Directory @path was created', ['@path' => $libraries_path]));
    }

    // Go to libraries path.
    chdir($libraries_path);

    // Install Easychart library.
    $easychart_dir_name = 'easychart';
    $easychart_library = $this->libraryDiscovery->getLibraryByName('easychart', 'lib.easycharts.full');

    $data = file_get_contents($easychart_library['remote']);
    $local = $this->fileSystem->saveData($data, 'easychart.zip', FileSystemInterface::EXISTS_REPLACE);

    if (!empty($easychart_library) && $local) {
      // Remove Easychart library directory.
      if (is_dir($easychart_dir_name)) {
        $this->fileSystem->deleteRecursive($easychart_dir_name);
        $this->messenger->addMessage(dt('An existing Easychart plugin was deleted from @libraries_path.', ['@libraries_path' => $libraries_path]));
      }

      $zipFile = new Zip($local);
      $zipFile->extract('.');
      $this->fileSystem->move('easychart-master', $easychart_dir_name);
      $this->fileSystem->delete($local);
    }

    if (is_dir($easychart_dir_name)) {
      $this->messenger->addMessage(dt('Easychart library has been installed in /@libraries_path.', ['@libraries_path' => $libraries_path]));
    }
    else {
      $this->messenger->addError(dt('Drush was unable to install the Easychart library in /@libraries_path.', ['@libraries_path' => $libraries_path]));
    }

    // Install Highcharts library.
    $highcharts_dir_name = 'highcharts';
    $highcharts_library = $this->libraryDiscovery->getLibraryByName('easychart', 'lib.highcharts');
    $data = file_get_contents($highcharts_library['remote']);
    $local = $this->fileSystem->saveData($data, 'highcharts.zip', FileSystemInterface::EXISTS_REPLACE);
    if (!empty($highcharts_library) && $local) {
      // Remove any existing Highcharts library directory.
      if (is_dir($highcharts_dir_name)) {
        $this->fileSystem->deleteRecursive($highcharts_dir_name);
        $this->messenger->addMessage(dt('An existing Highcharts plugin was deleted from @libraries_path.', ['@libraries_path' => $libraries_path]));
      }

      $zipFile = new Zip($local);
      $zipFile->extract($highcharts_dir_name);
      $this->fileSystem->delete($local);
    }

    if (is_dir($highcharts_dir_name)) {
      $this->messenger->addMessage(dt('Highcharts library has been installed in /@libraries_path.', ['@libraries_path' => $libraries_path]));
    }
    else {
      $this->messenger->addError(dt('Drush was unable to install the Highcharts library in /@libraries_path.', ['@libraries_path' => $libraries_path]));
    }

    // Install Highcharts Editor.
    $highed_dir_name = 'highcharts-editor';
    $highed_library = $this->libraryDiscovery->getLibraryByName('easychart', 'lib.highcharts-editor');

    $first = TRUE;
    foreach ($highed_library['remote'] as $remote) {
      $data = file_get_contents($remote);
      $local = $this->fileSystem->saveData($data, 'highed.zip', FileSystemInterface::EXISTS_REPLACE);
      if (!empty($highed_library) && $local) {
        // Remove any existing Highcharts library directory.
        if (is_dir($highed_dir_name) && $first) {
          $this->fileSystem->deleteRecursive($highed_dir_name);
          $this->messenger->addMessage(dt('An existing Highcharts Editor plugin was deleted from @libraries_path.', ['@libraries_path' => $libraries_path]));
        }
        $first = FALSE;

        $zipFile = new Zip($local);
        $zipFile->extract($highed_dir_name);
        $this->fileSystem->delete($local);
      }
    }

    // Set working directory back to the previous working directory.
    chdir($old_dir);
  }

}

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

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