flurin-d
9/26/2017 - 6:02 PM

wpdistillery.sh

#!/usr/bin/env bash
#
# WPDistillery setup file
#
# Author: Flurin Dürst
# URL: https://wpdistillery.org
#
# File version 1.7.1.HF
# WP-CLI/PHP-distro Hotfix related to https://github.com/flurinduerst/WPDistillery/issues/56

# ERROR Handler
# ask user to continue on error
function continue_error {
  read -p "$(echo -e "${RED}Do you want to continue anyway? (y/n) ${NC}")" -n 1 -r
  if [[ ! $REPLY =~ ^[Yy]$ ]]; then
    printf "\n${RED}»»» aborting WPDistillery setup! ${NC}\n"
    exit 1
  else
    printf "\n${GRN}»»» continuing WPDistillery setup... ${NC}\n"
  fi
}
trap 'continue_error' ERR

# REQUIREMENTS
####################################################################################################

# YAML PARSER FUNCTION
function parse_yaml() {
    local prefix=$2
    local s
    local w
    local fs
    s='[[:space:]]*'
    w='[a-zA-Z0-9_]*'
    fs="$(echo @|tr @ '\034')"
    sed -ne "s|^\($s\)\($w\)$s:$s\"\(.*\)\"$s\$|\1$fs\2$fs\3|p" \
        -e "s|^\($s\)\($w\)$s[:-]$s\(.*\)$s\$|\1$fs\2$fs\3|p" "$1" |
    awk -F"$fs" '{
    indent = length($1)/2;
    vname[indent] = $2;
    for (i in vname) {if (i > indent) {delete vname[i]}}
        if (length($3) > 0) {
            vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
            printf("%s%s%s=(\"%s\")\n", "'"$prefix"'",vn, $2, $3);
        }
    }' | sed 's/_=/+=/g'
}

# DEFINE COLORS
RED='\033[0;31m' # error
GRN='\033[0;32m' # success
BLU='\033[0;34m' # task
BRN='\033[0;33m' # headline
NC='\033[0m' # no color

# EXECUTIVE SETUP
####################################################################################################

printf "${BRN}========== WPDISTILLERY START ==========${NC}\n\n"

# MOVE TO SYNCED DIRECTORY
cd ..

# READ CONFIG
eval $(parse_yaml wpdistillery/config.yml "CONF_")

# CHECK WP FOLDER
if [ ! -d "$CONF_wpfolder" ]; then
  mkdir $CONF_wpfolder
  printf "${BLU}»»» creating WP Folder $CONF_wpfolder...${NC}\n"
fi

cd $CONF_wpfolder

# INSTALL WORDPRESS
if $CONF_setup_wp ; then
  printf "${BRN}[=== INSTALL WORDPRESS ===]${NC}\n"
  printf "${BLU}»»» downloading WordPress...${NC}\n"
  wp --allow-root core download --locale=$CONF_wplocale --version=$CONF_wpversion
  printf "${BLU}»»» creating wp-config...${NC}\n"
  wp core config --dbname=$CONF_db_name --dbuser=$CONF_db_user --dbpass=$CONF_db_pass --dbprefix=$CONF_db_prefix --locale=$CONF_wplocale
  printf "${BLU}»»» installing wordpress...${NC}\n"
  wp core install --url=$CONF_wpsettings_url --title="$CONF_wpsettings_title" --admin_user=$CONF_admin_user --admin_password=$CONF_admin_password --admin_email=$CONF_admin_email --skip-email
  wp user update 1 --first_name=$CONF_admin_first_name --last_name=$CONF_admin_last_name
else
  printf "${BLU}>>> skipping WordPress installation...${NC}\n"
fi

if $CONF_setup_settings ; then
  printf "${BLU}»»» configure settings...${NC}\n"
  printf "» timezone:\n"
  wp option update timezone $CONF_timezone
  wp option update timezone_string $CONF_timezone
  printf "» permalink structure:\n"
  wp rewrite structure "$CONF_wpsettings_permalink_structure"
  wp rewrite flush --hard
  printf "» description:\n"
  wp option update blogdescription "$CONF_wpsettings_description"
  printf "» image sizes:\n"
  wp option update thumbnail_size_w $CONF_wpsettings_thumbnail_width
  wp option update thumbnail_size_h $CONF_wpsettings_thumbnail_height
  wp option update medium_size_w $CONF_wpsettings_medium_width
  wp option update medium_size_h $CONF_wpsettings_medium_height
  wp option update large_size_w $CONF_wpsettings_large_width
  wp option update large_size_h $CONF_wpsettings_large_height
  if ! $CONF_wpsettings_convert_smilies ; then
    wp option update convert_smilies 0
  fi
  if $CONF_wpsettings_page_on_front ; then
    printf "» front page:\n"
    # create and set frontpage
    wp post create --post_type=page --post_title="$CONF_wpsettings_frontpage_name" --post_content='Front Page created by WPDistillery' --post_status=publish
    wp option update page_on_front $(wp post list --post_type=page --post_status=publish --posts_per_page=1 --pagename="$CONF_wpsettings_frontpage_name" --field=ID --format=ids)
    wp option update show_on_front 'page'
  fi
else
  printf "${BLU}>>> skipping settings...${NC}\n"
fi

# INSTALL THEME
if $CONF_setup_theme ; then
  printf "${BRN}[=== INSTALL $CONF_theme_name ===]${NC}\n"
  printf "${BLU}»»» downloading $CONF_theme_name...${NC}\n"
  wp theme install $CONF_theme_url
  printf "${BLU}»»» installing/activating $CONF_theme_name...${NC}\n"
  if [ ! -z "$CONF_theme_rename" ]; then
    # rename theme
    printf "${BLU}»»» renaming $CONF_theme_name to $CONF_theme_rename...${NC}\n"
    mv wp-content/themes/$CONF_theme_name wp-content/themes/$CONF_theme_rename
    wp theme activate $CONF_theme_rename
  else
    wp theme activate $CONF_theme_name
  fi
else
  printf "${BLU}>>> skipping theme installation...${NC}\n"
fi

# CLEANUP
if $CONF_setup_cleanup ; then
  printf "${BRN}[=== CLEANUP ===]${NC}\n"
  if $CONF_setup_cleanup_comment ; then
    printf "${BLU}»»» removing default comment...${NC}\n"
    wp comment delete 1 --force
  fi
  if $CONF_setup_cleanup_posts ; then
    printf "${BLU}»»» removing default posts...${NC}\n"
    wp post delete 1 2 --force
  fi
  if $CONF_setup_cleanup_files ; then
    printf "${BLU}»»» removing WP readme/license files...${NC}\n"
    # delete default files
    if [ -f readme.html ];    then rm readme.html;    fi
    if [ -f license.txt ];    then rm license.txt;    fi
    # delete german files
    if [ -f liesmich.html ];  then rm liesmich.html;  fi
  fi
  if $CONF_setup_cleanup_themes ; then
    printf "${BLU}»»» removing default themes...${NC}\n"
    wp theme delete twentyfifteen
    wp theme delete twentysixteen
    wp theme delete twentyseventeen
  fi
else
  printf "${BLU}>>> skipping Cleanup...${NC}\n"
fi

# PLUGINS
if $CONF_setup_plugins ; then
  printf "${BRN}[=== PLUGINS ===]${NC}\n"
  printf "${BLU}»»» removing WP default plugins${NC}\n"
  wp plugin delete akismet
  wp plugin delete hello
  printf "${BLU}»»» adding active plugins${NC}\n"
  for entry in "${CONF_plugins_active[@]}"
  do
  	wp plugin install $entry --activate
  done

  printf "${BLU}»»» adding inactive plugins${NC}\n"
  for entry in "${CONF_plugins_inactive[@]}"
  do
    wp plugin install $entry
  done
else
  printf "${BLU}>>> skipping Plugin installation...${NC}\n"
fi

# MISC
printf "${BLU}»»» checking wp cli version${NC}\n"
wp cli check-update

printf "${BRN}========== WPDISTILLERY FINISHED ==========${NC}\n"