You are here

public function FontawesomeCommands::download in Font Awesome Icons 8.2

Downloads the required Fontawesome library.

@command fa:download @aliases fadl,fa-download

Parameters

string $path: Optional path to module. If omitted Drush will use the default location.

File

src/Commands/FontawesomeCommands.php, line 56

Class

FontawesomeCommands
A Drush commandfile for Font Awesome module.

Namespace

Drupal\fontawesome\Commands

Code

public function download($path = '') {
  if (empty($path)) {

    // We have dependencies on libraries module so no need to check for that
    // TODO: any way to get path for libraries directory?
    // Just in case if it is site specific? e.g. sites/domain.com/libraries ?
    $path = DRUPAL_ROOT . '/libraries/fontawesome';
  }

  // Create the path if it does not exist yet. Added substr check for
  // preventing any wrong attempts or hacks !
  if (substr($path, -11) == 'fontawesome' && !is_dir($path)) {
    $this->fileSystem
      ->mkdir($path);
  }
  if (is_dir($path . '/css')) {
    $this
      ->logger()
      ->notice(dt('Font Awesome already present at @path. No download required.', [
      '@path' => $path,
    ]));
    return;
  }

  // Load the Font Awesome defined library.
  if ($fontawesome_library = $this->libraryDiscovery
    ->getLibraryByName('fontawesome', 'fontawesome.svg')) {

    // Download the file.
    $destination = tempnam(sys_get_temp_dir(), 'file.') . "tar.gz";
    system_retrieve_file($fontawesome_library['remote'], $destination);
    if (!file_exists($destination)) {

      // Remove the directory.
      $this->fileSystem
        ->rmdir($path);
      $this
        ->logger()
        ->error(dt('Drush was unable to download the Font Awesome library from @remote.', [
        '@remote' => $fontawesome_library['remote'],
      ]));
      return;
    }
    $this->fileSystem
      ->move($destination, $path . '/fontawesome.zip');
    if (!file_exists($path . '/fontawesome.zip')) {

      // Remove the directory where we tried to install.
      $this->fileSystem
        ->rmdir($path);
      $this
        ->logger()
        ->error(dt('Error: unable to download Fontawesome library from @remote', [
        '@remote' => $fontawesome_library['remote'],
      ]));
      return;
    }

    // Unzip the file.

    /** @var \Drupal\Core\Archiver\ArchiverInterface $zipFile */
    $zipFile = $this->archiverManager
      ->getInstance([
      'filepath' => $path . '/fontawesome.zip',
    ]);
    $zipFile
      ->extract($path);

    // Remove the downloaded zip file.
    $this->fileSystem
      ->unlink($path . '/fontawesome.zip');

    // Move the file.
    $this->fileSystem
      ->move($path . '/fontawesome-free-' . $fontawesome_library['version'] . '-web', $this->fileSystem
      ->getTempDirectory() . '/temp_fontawesome', FileSystemInterface::EXISTS_REPLACE);
    $this->fileSystem
      ->rmdir($path);
    $this->fileSystem
      ->move($this->fileSystem
      ->getTempDirectory() . '/temp_fontawesome', $path, FileSystemInterface::EXISTS_REPLACE);

    // Success.
    $this
      ->logger()
      ->notice(dt('Fontawesome library has been successfully downloaded to @path.', [
      '@path' => $path,
    ]));
  }
  else {
    $this
      ->logger()
      ->error(dt('Drush was unable to load the Font Awesome library'));
  }
}