#! /bin/sh

# This script is an example for copying Moodle installed by rpm to another
# directory and run it.

# このスクリプトは，
# rpm でインストールした Moodle のファイルを別のディレクトリにコピーし，
# 別の URI で独立して動作するように設定します。
# サンプルですので，使う場合は適当に変更して使ってください。

# アップグレードする時も，
# rpm -U でアップグレードしてからこのスクリプトを実行すれば
# moodle のファイルをコピーして更新するように一応してあります。

# --------- config.php parameters ; 各自，適当に変更すべし ----------
wwwroot=http://alt.cc.kumamoto-u.ac.jp/tmp/moodle
dirroot=/home/t-kita/public_html/tmp/moodle
dataroot=/home/t-kita/lib/moodledatatmp

# dbname は，他の Moodle のページとは重ならないように注意。
# dbname must be unique.
# '_' (underscore) 等の記号も避けた方がよい。
dbname=moodletmp
dbuser=moodletmp

cfg_lang=ja
# ----------------------------------------------------------------------

if   [ "$LANG" == "ja_JP.eucJP" ] ; then    # Vine Linux etc.
	documentroot=/home/httpd/html
	langja=yes
elif [ "$LANG" == "ja_JP.UTF-8" ] ; then    # Fedora Core etc.
	documentroot=/var/www/html
	langja=yes
else
	documentroot=/var/www/html
	unset langja
fi
rpmdirroot=$documentroot/moodle  # 元の Moodle のファイルがあるところ

rerun_msg(){
	echo ""
	if [ "$langja" == "" ] ; then
		echo "Setup failed. Rerun $0."
	else
		echo "コピーは失敗です。再度 $0 を実行してください。"
	fi
}
input_timeout_msg(){
	echo ""
	echo "Input timed out."
}

copy_all_files(){
	set -x
	cp -a  $rpmdirroot/[!l]*   $dirroot/
	cp -a  $rpmdirroot/l[!a]*  $dirroot/
	mkdir $dirroot/lang
	# 言語パックは最小限。
	for langpack in  en ja ja_utf8 en_ja; do
		cp -a  $rpmdirroot/lang/$langpack  $dirroot/lang/
	done
	set +x
}


# アンインストールの場合   uninstall
if [ "$1" == "--uninstall" ]; then
	read -p "ファイル，DB，消していい? [yes/no] : " ans
	if [ "$ans" == "yes" ] ; then
		set -x
		rm -rf $dirroot $dataroot
		set +x
		SQL_uninst="revoke ALL ON $dbname.* FROM $dbuser@localhost; drop database $dbname;"
		echo $SQL_uninst
		echo -n "MySQL "; mysql -u root --exec="$SQL_uninst" -p
		echo -n "MySQL "; mysqladmin -u root -p reload 
	fi
	exit 0
fi

# アップグレードの場合   upgrade
if [ -e $dirroot/config.php ]; then
	tmpdir=/tmp/`date --iso-8601=seconds`
	read -p "アップグレードします。いいですか? [Y/n] : " ans
	if [ \( "$ans" != "" \) -a \( "$ans" != "Y" \) -a \( "$ans" != "y" \) ] ; then echo "nothing done."; exit 0; fi
	set -x
	mkdir $tmpdir
	cp -a $dirroot/config.php $tmpdir/
	# diff in case
	diff -Naru $rpmdirroot.orig $dirroot > $tmpdir/diff
	rm -rf $dirroot/*
	set +x
	copy_all_files # ファイルをコピー
	cp -a  $tmpdir/config.php  $dirroot/  # config.php を戻す
	echo "$wwwroot に admin でログインして更新作業を行ってください。"
	exit 0
fi


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

# remember MySQL password if any
mysql -u root --exec="" > /dev/null 2>&1
RETVAL=$?
if [ $RETVAL -ne 0 ] ; then
#	echo -n "Input MySQL root password : "
	echo -n "MySQL の root のパスワードを入力してください : "
	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
#	echo "MySQL root password is wrong."
	echo "MySQL root パスワードが違います。"
	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

# 新規にコピーする場合 make a new copy
mkdir -p $dirroot $dataroot
chown apache:apache $dataroot || chmod 777 $dataroot
copy_all_files # ファイルをコピー

# 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 [ "$langja" == "" ] ; 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( '$langja' ne ''){ \
    s|(^\s*unset\(\\\$CFG\)[^;]*;.*$)|\$1\n\n \
\\\$CFG->lang = '$cfg_lang'; // remove this after installation\n \
\\\$CFG->sessioncookie = '$dbname'; // remove this after installation\n |; \
  } \
" $rpmdirroot/config-dist.php > $dirroot/config.php
# chgrp apache $dirroot/config.php  &&  chmod 640 $dirroot/config.php

# patching lib/defaults.php by perl
echo "patching lib/defaults.php .."
perl -pe " \
  if( '$langja' 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'|; \
" $rpmdirroot/lib/defaults.php > $dirroot/lib/defaults.php

echo ""
# echo "Edit $dirroot/config.php if you wish, and"
# echo "access $wwwroot and follow the instructions to finalize the setting."
# echo "And edit /etc/cron.hourly/moodle-chk.sh to execute"
# echo "  wget -q -O /dev/null $wwwroot/admin/cron.php"
# echo "every 5 minutes."
echo "必要に応じて $dirroot/config.php を変更し，"
echo "$wwwroot にアクセスして最終設定を行ってください。"
echo "";
echo "また, /etc/cron.hourly/moodle-chk.sh を編集するなどして，"
echo "  wget -q -O /dev/null $wwwroot/admin/cron.php"
echo "が5分毎に実行されるようにしてください。"
