#!/bin/bash
#
# install-drupal
#
# Prepare a Drupal site to run the behat tests on.
#

SELF_DIRNAME="`dirname -- "$0"`"
PROJECT_BASE_DIR="`cd -P -- "$SELF_DIRNAME/.." && pwd -P`"
DRUPAL_ROOT="$PROJECT_BASE_DIR/drupal"
if [ ! -d "$DRUPAL_ROOT" ] && [ -d "$PROJECT_BASE_DIR/web" ]
then
  DRUPAL_ROOT="$PROJECT_BASE_DIR/web"
fi
if [ ! -d "$DRUPAL_ROOT" ] && [ -d "$PROJECT_BASE_DIR/htdocs" ]
then
  DRUPAL_ROOT="$PROJECT_BASE_DIR/htdocs"
fi
if [ ! -d "$DRUPAL_ROOT" ] && [ -d "$PROJECT_BASE_DIR/code" ]
then
  DRUPAL_ROOT="$PROJECT_BASE_DIR/code"
fi

# Set up our $PATH
export PATH="$PROJECT_BASE_DIR/bin:$HOME/bin:$PATH"

DEFAULT_ENVIRONMENT_SCRIPT="$PROJECT_BASE_DIR/scripts/default-environment"
if [ -f "$DEFAULT_ENVIRONMENT_SCRIPT" ]
then
  source "$DEFAULT_ENVIRONMENT_SCRIPT"
fi

# Fix bug in our custom installer
if [ -d $DRUPAL_ROOT/sites/sites/default ]
then
  mv $DRUPAL_ROOT/sites/sites/default $DRUPAL_ROOT/sites/default
fi

if [ ! -f $DRUPAL_ROOT/sites/default/default.settings.php ]
then
  echo "No default.settings.php file; did you run composer install?"
  exit 1
fi

# Do the settings.php shuffle for an empty settings.php
# This prevents permissions issues with the sites/default directory
chmod +w $DRUPAL_ROOT/sites/default
chmod +w $DRUPAL_ROOT/sites/default/settings.php
cp $DRUPAL_ROOT/sites/default/default.settings.php $DRUPAL_ROOT/sites/default/settings.php

# Set up some variables to match the environment
FALLBACK_DBURL=mysql://root@localhost/drupal
SITENAME_SUFFIX=" Local CI Test Site"
if [ -n "$TRAVIS" ]
then
  SITENAME_SUFFIX=" Travis CI Test Site"
fi
if [ -n "$CIRCLECI" ]
then
  FALLBACK_DBURL=mysql://ubuntu@127.0.0.1/circle_test
  SITENAME_SUFFIX=" Circle CI Test Site"
fi

# Use Drush to install Drupal
cd "$DRUPAL_ROOT"
echo drush site-install -y "${PROFILE:-${DEFAULT_PROFILE:-standard}}" --site-name="${SITE_NAME:-${DEFAULT_SITE_NAME}}$SITENAME_SUFFIX" --db-url="${DBURL:-${DEFAULT_DBURL:-${FALLBACK_DBURL}}}" --account-name=${ACCOUNT:-${DEFAULT_ACCOUNT:-admin}} --account-pass=${PASSWORD:-${DEFAULT_PASSWORD:-admin}}
drush site-install -y "${PROFILE:-${DEFAULT_PROFILE:-standard}}" --site-name="${SITE_NAME:-${DEFAULT_SITE_NAME}}$SITENAME_SUFFIX" --db-url="${DBURL:-${DEFAULT_DBURL:-${FALLBACK_DBURL}}}" --account-name=${ACCOUNT:-${DEFAULT_ACCOUNT:-admin}} --account-pass=${PASSWORD:-${DEFAULT_PASSWORD:-admin}}
if [ $? != 0 ]
then
  echo "Could not install Drupal" >&2
  exit 1
fi

# Add in include of settings.local.php to the settings.php file.
chmod +w $DRUPAL_ROOT/sites/default
chmod +w $DRUPAL_ROOT/sites/default/settings.php
grep -q 'settings.local.php' "$DRUPAL_ROOT/sites/default/settings.php"
if [ $? != 0 ]
then
  cat << __EOF__ >> "$DRUPAL_ROOT/sites/default/settings.php"
\$local_settings = __DIR__ . "/settings.local.php";
if (is_file(\$local_settings)) {
  include "\$local_settings";
}
__EOF__
fi

# Get the alias name to use
ALIAS_NAME_ONLY="${ALIAS:-${DEFAULT_ALIAS:-localtest}}"
ALIAS_NAME_ONLY="${ALIAS_NAME_ONLY/@/}"
DRUSH_ALIAS="@$ALIAS_NAME_ONLY"

# Create a local alias '@localtest' pointing at the local
# site to test.
cat << __EOF__ > "$HOME/.drush/$ALIAS_NAME_ONLY.alias.drushrc.php"
<?php

\$aliases['$ALIAS_NAME_ONLY'] = array(
  'root' => '$DRUPAL_ROOT',
  'uri' => '${URI:-${DEFAULT_URI:-default}}',
);
__EOF__

# If there is a local script 'install-configuration', then run it.
INSTALL_CONFIGURATION="$PROJECT_BASE_DIR/scripts/install-configuration"
if [ -f "$INSTALL_CONFIGURATION" ]
then
  echo "$INSTALL_CONFIGURATION" "$DRUSH_ALIAS"
  "$INSTALL_CONFIGURATION" "$DRUSH_ALIAS"
fi
