#!/bin/bash
# info: add php fpm version
# options: VERSION
#
# The function checks and delete a fpm php version if not used by any domain.


#----------------------------------------------------------#
#                    Variable&Function                     #
#----------------------------------------------------------#

# Argument definition
version=$1

# Includes
source $HESTIA/func/main.sh
source $HESTIA/conf/hestia.conf


#----------------------------------------------------------#
#                    Verifications                         #
#----------------------------------------------------------#

check_args '1' "$#" 'VERSION'

# Set file locations
php_fpm="/etc/init.d/php$version-fpm"

# Verify php version format
if [[ ! $version =~ ^[0-9]\.[0-9]+ ]]; then
    echo "The specified PHP version format is invalid, it should look like [0-9].[0-9]."
    echo "Example:  7.0, 7.4"
    exit
fi

# Check if php version already exists
if [ -f "$php_fpm" ] && [ -f "$HESTIA/data/templates/web/php-fpm/PHP-${version/\./_}.tpl" ]; then
    echo "ERROR: Specified PHP version is already installed."
    exit
fi

# Check if php version is supported
if [ ! -f "$HESTIA_INSTALL_DIR/multiphp/$WEB_SYSTEM/PHP-${version//.}.sh" ]; then
    echo "ERROR: Specified PHP version is not supported or does not exist."
    exit
fi

# Perform verification if read-only mode is enabled
check_hestia_demo_mode


#----------------------------------------------------------#
#                       Action                             #
#----------------------------------------------------------#

mph="php$version-mbstring php$version-bcmath php$version-cli php$version-curl
     php$version-fpm php$version-gd php$version-intl php$version-mysql
     php$version-soap php$version-xml php$version-zip php$version-mbstring
     php$version-json php$version-bz2 php$version-pspell php$version-imagick php$version-pgsql
     php$version-imap php$version-ldap"

# Check is version is 7.1 or below to add mcrypt
if [[ `echo "$version 7.2" | awk '{print ($1 < $2)}'` == 1 ]]; then
    mph="$mph php$version-mcrypt"
fi

if ! echo "$DB_SYSTEM" | grep -w 'mysql' >/dev/null; then
    mph=$(echo "$mph" | sed -e "s/php$version-mysql//")
fi

if ! echo "$DB_SYSTEM" | grep -w 'pgsql' >/dev/null; then
    mph=$(echo "$mph" | sed -e "s/php$version-pgsql//")
fi

# Install php packages
apt-get -qq update
apt-get -y -qq -o Dpkg::Options::="--force-confold" install $mph > /dev/null 2>&1 &
BACK_PID=$!

# Check if package installation is done, print a spinner
echo "Installing PHP-$version, please wait..."
spinner="/-\|"
spin_i=1
while kill -0 $BACK_PID > /dev/null 2>&1 ; do
    printf "\b${spinner:spin_i++%${#spinner}:1}"
    sleep 0.5
done

# Do a blank echo to get the \n back
echo

# Check if installation was sucessfully
if [ ! -f "$php_fpm" ]; then
    echo "ERROR: Installation failed, please run the following command manually for debugging:"
    echo "apt-get install $mph"
fi

# Check if required modules for apache2 are enabled
if [ "$WEB_SYSTEM" = "apache2" ]; then
    if ! a2query -q -m proxy_fcgi; then
        a2enmod -q proxy_fcgi
    fi
    if ! a2query -q -m setenvif; then
        a2enmod -q setenvif
    fi
    $BIN/v-restart-web
fi

# Configure fpm
update-rc.d php$version-fpm defaults > /dev/null 2>&1
v_tpl=${version//.}
rm -f /etc/php/$version/fpm/pool.d/*
cp -f $HESTIA_INSTALL_DIR/php-fpm/dummy.conf /etc/php/$version/fpm/pool.d/
sed -i "s/9999/99$v_tpl/g" /etc/php/$version/fpm/pool.d/dummy.conf

# Install backend template
cp -f $HESTIA_INSTALL_DIR/php-fpm/multiphp.tpl \
    $HESTIA/data/templates/web/php-fpm/PHP-${version/\./_}.tpl

#----------------------------------------------------------#
#                       Hestia                             #
#----------------------------------------------------------#

# Logging
log_history "installed php $version" '' 'admin'
log_event "$OK" "$ARGUMENTS"

exit
