#! /bin/sh -efu

#
# Moodle install tools
#
# @package   mt-install
# @copyright 2012 Aleksey Avdeev <solo@altlinux.ru>
# @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v2 or later
#

PROG="${0##*/}"

PATH="/usr/sbin:$PATH"

moodledir='/var/www/webapps/moodle'
configfilename='config.php'
configfile="$moodledir/$configfilename"
distrolib="$moodledir/install/distrolib.php"
sysconfigfile='/etc/sysconfig/mt-install'

deflang='en'
defdataroot="/var/lib/moodle/default"
defperm=02770
defdbhost='localhost'
defbasedbname='moodle'
defdbname=$defbasedbname
defdbuser='moodleuser'
defprefix='mdl_'
defadminuser='admin'

lang=
dataroot=
perm=
dbtype=
dbhost=
dbsocket=
basedbname=
dbname=
dbuser=
dbpass=
prefix=
wwwroot=
wwwrootproto=
wwwrootsitename=
wwwrootport=
wwwrootpath=
adminuser=
adminpass=
adminpasshash=
passwordsaltmain=
fullname=
shortname=

. shell-error

TEMP=`getopt -n "$PROG" -o -c:,l: -l config:,distrolib: -- "$@"`
eval set -- "$TEMP"

while :; do
	case "$1" in
		--)
			shift
			break
			;;
		-c|--config)
			shift
			configfile="$1"
			;;
		-l|--distrolib)
			shift
			distrolib="$1"
			;;
		*) fatal "Unrecognized option: $1"
			;;
	esac
	shift
done

# Use $sysconfigfile
if [ -r "$sysconfigfile" ]; then
	. "$sysconfigfile"

	if [ -n "$WWWROOT" ]; then
		wwwroot="$WWWROOT"
		wwwrootproto=`mt-install-wwwroot-getproto --wwwroot=$wwwroot`
		wwwrootsitename=`mt-install-wwwroot-getsitename --wwwroot=$wwwroot`
		wwwrootport=`mt-install-wwwroot-getport --wwwroot=$wwwroot`
		wwwrootpath=`mt-install-wwwroot-getpath --wwwroot=$wwwroot`
	else
		if [ -n "$WWWROOTPROTO" ]; then
			wwwrootproto="$WWWROOTPROTO"
		fi
		if [ -n "$WWWROOTSITENAME" ]; then
			wwwrootsitename="$WWWROOTSITENAME"
		fi
		if [ -n "$WWWROOTPORT" ]; then
			wwwrootport="$WWWROOTPORT"
		fi
		if [ -n "$WWWROOTPATH" ]; then
			wwwrootpath="$WWWROOTPATH"
		fi
	fi

	if [ -n "$DBTYPE" ]; then
		dbtype="$DBTYPE"
	fi
	if [ -n "$BASEDBNAME" ]; then
		basedbname="$BASEDBNAME"
	fi
	if [ -n "$DBHOST" ]; then
		dbhost="$DBHOST"
	fi
	if [ -n "$DBUSER" ]; then
		dbuser="$DBUSER"
	fi
	if [ -n "$DBSOCKET" ]; then
		dbsocket="$DBSOCKET"
	fi

	if [ -n "$ADMINUSER" ]; then
		adminuser="$ADMINUSER"
	fi

	if [ -n "$FULLNAME" ]; then
		fullname="$FULLNAME"
	fi
	if [ -n "$SHORTNAME" ]; then
		shortname="$SHORTNAME"
	fi

	if [ -n "$DEFLANG" ]; then
		lang=`mt-install-lslangs | sed -rn "s/^[[:space:]]*($DEFLANG)[[:space:]].*\\$/\\1/p"`
	fi
fi

if [ -z "$adminuser" ]; then
	adminuser="$defadminuser"
fi

if [ -r "$configfile" ]; then

	if [ -n "$dbtype" ]; then
		dbtype=`mt-install-getdbtype ${configfile:+--config="$configfile"}`
	fi
	if [ -z "$dbhost" ]; then
		dbhost=`mt-getCFG ${configfile:+--file="$configfile"} dbhost 2>/dev/null ||:`
	fi

	dbsocket=`mt-getCFG ${configfile:+--file="$configfile"} --array --bool dboptions dbsocket 2>/dev/null ||:`
	dbname=`mt-getCFG ${configfile:+--file="$configfile"} dbname 2>/dev/null ||:`
	dbuser=`mt-getCFG ${configfile:+--file="$configfile"} dbuser 2>/dev/null ||:`
	dbpass=`mt-getCFG ${configfile:+--file="$configfile"} dbpass 2>/dev/null ||:`
	prefix=`mt-getCFG ${configfile:+--file="$configfile"} prefix 2>/dev/null ||:`

	if [ -z "$wwwroot" ]; then
		wwwroot=`mt-getCFG ${configfile:+--file="$configfile"} wwwroot 2>/dev/null ||:`
	fi

	dataroot=`mt-getCFG ${configfile:+--file="$configfile"} dataroot 2>/dev/null ||:`
	perm=`mt-getCFG ${configfile:+--file="$configfile"} --format='%05o' directorypermissions 2>/dev/null ||:`

	passwordsaltmain=`mt-getCFG ${configfile:+--file="$configfile"} passwordsaltmain 2>/dev/null ||:`

	if [ -n "$adminuser" ]; then
		adminpasshash=`mt-getuserpasswordhash ${configfile:+--file="$configfile"} --user="$adminuser" 2>/dev/null ||:`
	fi
fi

if [ -r "$distrolib" ]; then
	if [ -z "$dbtype" ]; then
		dbtype=`mt-getdef ${distrolib:+--file="$distrolib"} dbtype 2>/dev/null ||:`
	fi
	if [ -z "$dbhost" ]; then
		dbhost=`mt-getdef ${distrolib:+--file="$distrolib"} dbhost 2>/dev/null ||:`
	fi
	if [ -z "$dbsocket" ]; then
		dbsocket=`mt-getdef ${distrolib:+--file="$distrolib"} --array --bool dboptions dbsocket 2>/dev/null ||:`
	fi
	if [ -z "$dbname" ]; then
		dbname=`mt-getdef ${distrolib:+--file="$distrolib"} dbname 2>/dev/null ||:`
	fi
	if [ -z "$dbuser" ]; then
		dbuser=`mt-getdef ${distrolib:+--file="$distrolib"} dbuser 2>/dev/null ||:`
	fi
	if [ -z "$dbpass" ]; then
		dbpass=`mt-getdef ${distrolib:+--file="$distrolib"} dbpass 2>/dev/null ||:`
	fi
	if [ -z "$prefix" ]; then
		prefix=`mt-getdef ${distrolib:+--file="$distrolib"} prefix 2>/dev/null ||:`
	fi

	if [ -z "$wwwroot" ]; then
		wwwroot=`mt-getdef ${distrolib:+--file="$distrolib"} wwwroot 2>/dev/null ||:`
	fi

	if [ -z "$dataroot" ]; then
		dataroot=`mt-getdef ${distrolib:+--file="$distrolib"} dataroot 2>/dev/null ||:`
	fi
	if [ -z "$perm" ]; then
		perm=`mt-getdef ${distrolib:+--file="$distrolib"} --format='%05o' directorypermissions 2>/dev/null ||:`
	fi
fi

# Set $dbsocket
if [ -n "$dbsocket" ]; then
	case "$dbsocket" in
		true)
			dbsocket='yes'
			;;
		false)
			dbsocket='no'
			;;
		*)
			;;
	esac
fi

if [ -z "$basedbname" ] && [ -n "$dbname" ]; then
	basedbname=`echo "$dbname" | sed -r 's/$[[:space:]]*([^[:space:]]*[^[:space:]0-9])[0-9]*[[:space:]]*$/\1/'`
fi

if [ -n "$wwwroot" ]; then
	if [ -z "$wwwrootproto" ]; then
		wwwrootproto=`mt-install-wwwroot-getproto --wwwroot=$wwwroot`
	fi
	if [ -z "$wwwrootsitename" ]; then
		wwwrootsitename=`mt-install-wwwroot-getsitename --wwwroot=$wwwroot`
	fi
	if [ -z "$wwwrootport" ]; then
		wwwrootport=`mt-install-wwwroot-getport --wwwroot=$wwwroot`
	fi
	if [ -z "$wwwrootpath" ]; then
		wwwrootpath=`mt-install-wwwroot-getpath --wwwroot=$wwwroot`
	fi
fi

wwwroot=`mt-install-wwwroot \
	${wwwrootproto:+--wwwrootproto=$wwwrootproto} \
	--wwwrootsitename=$wwwrootsitename \
	${wwwrootport:+--wwwrootport=$wwwrootport} \
	${wwwrootpath:+--wwwrootpath=$wwwrootpath}`

if [ -z "$lang" ]; then
	lang="$deflang"
fi

if [ -z "$dbtype" ]; then
	dbtype=`mt-install-defaultdbtype ||:`
fi
if [ -z "$dbhost" ]; then
	dbhost="$defdbhost"
fi
if [ -z "$basedbname" ]; then
	basedbname="$basedefdbname"
fi
if [ -z "$dbname" ]; then
	dbname="$defdbname"
fi
if [ -z "$dbuser" ]; then
	dbuser="$defdbuser"
fi
if [ -z "$dbpass" ]; then
	dbpass=`pwgen 16 1`
fi
if [ -z "$prefix" ]; then
	prefix="$defprefix"
fi

if [ -z "$dataroot" ]; then
	dataroot="$defdataroot"
fi
if [ -z "$perm" ]; then
	perm="$defperm"
fi

# Print defaults
if [ -n "$lang" ]; then
	printf "%s\t%s\n" 'lang' "$lang"
fi

if [ -n "$dbtype" ]; then
	printf "%s\t%s\n" 'dbtype' "$dbtype"
fi
if [ -n "$dbhost" ]; then
	printf "%s\t%s\n" 'dbhost' "$dbhost"
fi
if [ -n "$dbsocket" ]; then
	printf "%s\t%s\n" 'dbsocket' "$dbsocket"
fi
if [ -n "$basedbname" ]; then
	printf "%s\t%s\n" 'basedbname' "$basedbname"
fi
if [ -n "$dbname" ]; then
	printf "%s\t%s\n" 'dbname' "$dbname"
fi
if [ -n "$dbuser" ]; then
	printf "%s\t%s\n" 'dbuser' "$dbuser"
fi
if [ -n "$dbpass" ]; then
	printf "%s\t%s\n" 'dbpass' "$dbpass"
fi
if [ -n "$prefix" ]; then
	printf "%s\t%s\n" 'prefix' "$prefix"
fi

if [ -n "$wwwroot" ]; then
	printf "%s\t%s\n" 'wwwroot' "$wwwroot"
fi
if [ -n "$wwwrootproto" ]; then
	printf "%s\t%s\n" 'wwwrootproto' "$wwwrootproto"
fi
if [ -n "$wwwrootsitename" ]; then
	printf "%s\t%s\n" 'wwwrootsitename' "$wwwrootsitename"
fi
if [ -n "$wwwrootport" ]; then
	printf "%s\t%s\n" 'wwwrootport' "$wwwrootport"
fi
if [ -n "$wwwrootpath" ]; then
	printf "%s\t%s\n" 'wwwrootpath' "$wwwrootpath"
fi

if [ -n "$dataroot" ]; then
	printf "%s\t%s\n" 'dataroot' "$dataroot"
fi
if [ -n "$perm" ]; then
	printf "%s\t%s\n" 'chmod' "$perm"
fi
if [ -n "$adminuser" ]; then
	printf "%s\t%s\n" 'adminuser' "$adminuser"
fi
if [ -n "$passwordsaltmain" ]; then
	printf "%s\t%s\n" 'passwordsaltmain' "$passwordsaltmain"
fi
if [ -n "$adminpasshash" ]; then
	printf "%s\t%s\n" 'adminpasshash' "$adminpasshash"
fi

if [ -n "$fullname" ]; then
	printf "%s\t%s\n" 'fullname' "$fullname"
fi
if [ -n "$shortname" ]; then
	printf "%s\t%s\n" 'shortname' "$shortname"
fi
