| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 | <?php/** * @file * Contains \DrupalProject\composer\ScriptHandler. */namespace DrupalProject\composer;use Composer\Script\Event;use Composer\Semver\Comparator;use DrupalFinder\DrupalFinder;use Symfony\Component\Filesystem\Filesystem;use Webmozart\PathUtil\Path;class ScriptHandler {  public static function createRequiredFiles(Event $event) {    $fs = new Filesystem();    $drupalFinder = new DrupalFinder();    $drupalFinder->locateRoot(getcwd());    $drupalRoot = $drupalFinder->getDrupalRoot();    $dirs = [      'modules',      'profiles',      'themes',    ];    // Required for unit testing    foreach ($dirs as $dir) {      if (!$fs->exists($drupalRoot . '/'. $dir)) {        $fs->mkdir($drupalRoot . '/'. $dir);        $fs->touch($drupalRoot . '/'. $dir . '/.gitkeep');      }    }    // Prepare the settings file for installation    if (!$fs->exists($drupalRoot . '/sites/default/settings.php') and $fs->exists($drupalRoot . '/sites/default/default.settings.php')) {      $fs->copy($drupalRoot . '/sites/default/default.settings.php', $drupalRoot . '/sites/default/settings.php');      require_once $drupalRoot . '/core/includes/bootstrap.inc';      require_once $drupalRoot . '/core/includes/install.inc';      $settings['config_directories'] = [        CONFIG_SYNC_DIRECTORY => (object) [          'value' => Path::makeRelative($drupalFinder->getComposerRoot() . '/config/sync', $drupalRoot),          'required' => TRUE,        ],      ];      drupal_rewrite_settings($settings, $drupalRoot . '/sites/default/settings.php');      $fs->chmod($drupalRoot . '/sites/default/settings.php', 0666);      $event->getIO()->write("Create a sites/default/settings.php file with chmod 0666");    }    // Create the files directory with chmod 0777    if (!$fs->exists($drupalRoot . '/sites/default/files')) {      $oldmask = umask(0);      $fs->mkdir($drupalRoot . '/sites/default/files', 0777);      umask($oldmask);      $event->getIO()->write("Create a sites/default/files directory with chmod 0777");    }  }  /**   * Checks if the installed version of Composer is compatible.   *   * Composer 1.0.0 and higher consider a `composer install` without having a   * lock file present as equal to `composer update`. We do not ship with a lock   * file to avoid merge conflicts downstream, meaning that if a project is   * installed with an older version of Composer the scaffolding of Drupal will   * not be triggered. We check this here instead of in drupal-scaffold to be   * able to give immediate feedback to the end user, rather than failing the   * installation after going through the lengthy process of compiling and   * downloading the Composer dependencies.   *   * @see https://github.com/composer/composer/pull/5035   */  public static function checkComposerVersion(Event $event) {    $composer = $event->getComposer();    $io = $event->getIO();    $version = $composer::VERSION;    // The dev-channel of composer uses the git revision as version number,    // try to the branch alias instead.    if (preg_match('/^[0-9a-f]{40}$/i', $version)) {      $version = $composer::BRANCH_ALIAS_VERSION;    }    // If Composer is installed through git we have no easy way to determine if    // it is new enough, just display a warning.    if ($version === '@package_version@' || $version === '@package_branch_alias_version@') {      $io->writeError('<warning>You are running a development version of Composer. If you experience problems, please update Composer to the latest stable version.</warning>');    }    elseif (Comparator::lessThan($version, '1.0.0')) {      $io->writeError('<error>Drupal-project requires Composer version 1.0.0 or higher. Please update your Composer before continuing</error>.');      exit(1);    }  }}
 |