#! /bin/bash

# the rpm package assumes following parameter values --------------------
if   [ "$LANG" == "ja_JP.eucJP" ] ; then    # Vine Linux etc.
	documentroot=/home/httpd/html
	cfg_lang=ja
	nkfopt=""
elif [ "$LANG" == "ja_JP.UTF-8" ] ; then    # Fedora Core etc.
	documentroot=/var/www/html
	cfg_lang=ja_utf8
	nkfopt="-w"
	echo "check PHP setting if mbstring.http_output = pass"
else
	documentroot=/var/www/html
	unset cfg_lang
fi

# if nkf not exists or too old, use default lang (en)
chknkf=`nkf --version 2>&1 | grep 'Version 2'`
if [ "$chknkf" == "" ] ; then
	unset cfg_lang
fi

wwwroot=http://$HOSTNAME/moodle
dirroot=$documentroot/moodle
dataroot=/var/lib/moodle

dbname=moodlerpm
dbuser=mdluser
# ---------------------------------------------------------------

rerun_msg(){
	echo ""
	if [ "$cfg_lang" == "" ] ; then
		echo "Setup failed. Rerun $0."
	else
		echo "セットアップは失敗です。再度 $0 を実行してください。" | nkf $nkfopt
	fi
}
input_timeout_msg(){
	echo ""
	echo "Input timed out."
}


if [ $UID -ne 0 ]; then
	if [ "$cfg_lang" == "" ] ; then
		echo "This script must be run as root."
	else
		echo "このスクリプトは root 権限で実行してください。" | nkf $nkfopt
	fi
	exit 1
fi

# if MySQL is not running, exit.
mysqladmin -u dummy ping > /dev/null 2>&1
RETVAL=$?
if [ $RETVAL -ne 0 ] ; then
	if [ "$cfg_lang" == "" ] ; then
		echo "MySQL is not running.  You need to run MySQL to use moodle."
	else
		echo "MySQLが動いていません。MySQLを動かしてください。" | nkf $nkfopt
	fi
	rerun_msg
	exit 1
fi

# remember MySQL password if any
mysql -u root --exec="" > /dev/null 2>&1
RETVAL=$?
if [ $RETVAL -ne 0 ] ; then
	if [ "$cfg_lang" == "" ] ; then
		echo -n "Input MySQL root password : "
	else
		echo -n "MySQL の root のパスワードを入力してください : " | nkf $nkfopt
	fi
	read -t 300 -s pas < /dev/tty
	RETVAL=$?
	if [ $RETVAL -ne 0 ] ; then input_timeout_msg; rerun_msg; exit 1;  fi
	echo ""
fi
# check if the password is right
mysql -u root --exec="" --password="$pas" > /dev/null 2>&1
RETVAL=$?
if [ $RETVAL -ne 0 ] ; then
	if [ "$cfg_lang" == "" ] ; then
		echo "MySQL root password is wrong."
	else
		echo "MySQL root パスワードが違います。" | nkf $nkfopt
	fi
	rerun_msg
	exit 3
fi

# if database named $dbname exists, do not overwrite.
mysqlshow -u root --password="$pas" $dbname > /dev/null 2>&1
RETVAL=$?
if [ $RETVAL -eq 0 ] ; then
	echo "It seems DB '$dbname' already exists. will do nothing."
	exit 0
fi

# generate dbpass randomly
dbpass=`awk 'BEGIN{srand(); s="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; for(i=0;i<12;i++){ printf("%s",substr(s,rand()*61.9+1,1)); }}'`

# DB setup SQL command
SQL_POST="CREATE DATABASE $dbname; GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,ALTER ON $dbname.* TO $dbuser@localhost IDENTIFIED BY '$dbpass';"
echo $SQL_POST

mysql -u root --exec="$SQL_POST" --password="$pas" > /dev/null 2>&1
RETVAL=$?
mysqladmin -u root  --password="$pas" reload 
if [ $RETVAL -eq 0 ] ; then
	echo "DB setup for moodle is done."
else
	echo "DB setup error!"
fi

# patching config.php by perl
echo -n "patching config.php "
if [ "$cfg_lang" == "" ] ; then
	echo ".."
else
	echo "(\$CFG->lang is set to '$cfg_lang') .."
fi
perl -pe " \
  s|^\s*\\\$CFG->dbname\s*=[^=][^;]*;|\\\$CFG->dbname = '$dbname';|; \
  s|^\s*\\\$CFG->dbuser\s*=[^=][^;]*;|\\\$CFG->dbuser = '$dbuser';|; \
  s|^\s*\\\$CFG->dbpass\s*=[^=][^;]*;|\\\$CFG->dbpass = '$dbpass';|; \
  s|^\s*\\\$CFG->wwwroot\s*=[^=][^;]*;|\\\$CFG->wwwroot = '$wwwroot';|; \
  s|^\s*\\\$CFG->dirroot\s*=[^=][^;]*;|\\\$CFG->dirroot = '$dirroot';|; \
  s|^\s*\\\$CFG->dataroot\s*=[^=][^;]*;|\\\$CFG->dataroot = '$dataroot';|; \
  s|^\s*\\\$CFG->directorypermissions\s*=[^=][^;]*;|\\\$CFG->directorypermissions = 02750;|; \
  if( '$cfg_lang' ne '' ){ \
    s|(^\s*unset\(\\\$CFG\)[^;]*;.*$)|\$1\n\n\\\$CFG->lang = '$cfg_lang'; // remove this after installation\n|; \
  } \
" $dirroot/config-dist.php > $dirroot/config.php

# patching lib/defaults.php by perl
echo "patching lib/defaults.php .."
cp -a $dirroot/lib/defaults.php  $dirroot/lib/defaults.php.orig
perl -pe " \
  if( '$cfg_lang' ne '' ){ \
    s|(^\s*'lang'\s*=>\s*)'[^']*'|\$1'ja'|; \
    s|(^\s*'country'\s*=>\s*)'[^']*'|\$1'JP'|; \
  } \
 s|(^\s*'sessioncookie'\s*=>\s*)'[^']*'|\$1'$dbname'|; \
 s|(^\s*'fullnamedisplay'\s*=>\s*)'[^']*'|\$1'language'|; \
" $dirroot/lib/defaults.php.orig > $dirroot/lib/defaults.php

echo ""
if [ "$cfg_lang" == "" ] ; then
	echo "Edit $dirroot/config.php if you wish, and"
	echo "access $wwwroot and follow the instructions to finalize the setting."
else
	echo "必要に応じて $dirroot/config.php を変更し，" | nkf $nkfopt
	echo "$wwwroot にアクセスして最終設定を行ってください。" | nkf $nkfopt
fi

# su postgres -c "psql -c \
#	\"create user moodleuser;\" template1 || :"
#su postgres -c "psql -c \
#	\"alter user moodleuser password '${PASSWORD}' createdb;\" template1"
#su moodleuser -s /bin/sh -c "psql -c \
#	\"create database moodle;\" template1 || :"
#su postgres -c "psql -c \
#	\"alter user moodleuser nocreatedb;\" template1"
#/usr/bin/perl -p -e "s/_HOSTNAME_/${HOSTNAME}/;" \
#	-e "s/_PASSWORD_/${PASSWORD}/;" %{htmldir}/moodle/config.php.pkg \
#	> %{htmldir}/moodle/config.php

