Skip to content
Snippets Groups Projects
BaseHandler.php 2.41 KiB
<?php

namespace LakeDrops\Component\Composer;

use Composer\Composer;
use Composer\IO\IOInterface;
use Composer\Script\Event;
use Symfony\Component\Console\Input\InputInterface;

/**
 * Class BaseHandler.
 *
 * @package LakeDrops\Component\Composer
 */
abstract class BaseHandler implements BaseHandlerInterface {

  /**
   * The composer object of this session.
   *
   * @var \Composer\Composer
   */
  protected $composer;

  /**
   * The input-output object of the composer session.
   *
   * @var \Composer\IO\IOInterface
   */
  protected $io;

  /**
   * @var \Symfony\Component\Console\Input\InputInterface
   */
  protected $input;

  /**
   * The event that triggered the action.
   *
   * @var \Composer\Script\Event
   */
  protected $event;

  /**
   * The Drupal core package.
   *
   * @var \Composer\Package\PackageInterface
   */
  protected $drupalCorePackage;

  /**
   * Handler constructor.
   *
   * @param \Composer\Composer $composer
   *   The composer object of this session.
   * @param \Composer\IO\IOInterface $io
   *   The input-output object of the composer session.
   */
  public function __construct(Composer $composer, IOInterface $io) {
    $this->composer = $composer;
    $this->io = $io;
  }

  /**
   * {@inheritdoc}
   */
  public function setEvent(Event $event) {
    $this->event = $event;
    return $this;
  }
  /**
   * {@inheritdoc}
   */
  public function setInput(InputInterface $input) {
    $this->input = $input;
    return $this;
  }

  /**
   * {@inheritdoc}
   */
  public function getDrupalCorePackage() {
    if (!isset($this->drupalCorePackage)) {
      $this->drupalCorePackage = $this->getPackage('drupal/core');
    }
    return $this->drupalCorePackage;
  }

  /**
   * {@inheritdoc}
   */
  public function getPackage($name) {
    return $this->composer->getRepositoryManager()->getLocalRepository()->findPackage($name, '*');
  }

  /**
   * {@inheritdoc}
   */
  public function isDevMode() {
    if ($this->event !== NULL) {
      return $this->event->isDevMode();
    }
    if ($this->input !== NULL) {
      return !$this->input->hasOption('no-dev');
    }
    return FALSE;
  }

  /**
   * {@inheritdoc}
   */
  public function isCiContext() {
    $ci_project_dir = getenv('CI_PROJECT_DIR');
    return !empty($ci_project_dir );
  }

  /**
   * {@inheritdoc}
   */
  public function git($command) {
    passthru(escapeshellcmd('git -c "user.email=composer@lakedrops.com" ' . $command));
  }

}