#!/bin/sh
# Copyright (c) 2000-2013 Synology Inc. All rights reserved.

source `dirname "$0"`/lib

PACKAGE_NAME="PEAR"
PACKAGE_DIR="/var/packages/$PACKAGE_NAME"
PKG_TARGET_PATH="${PACKAGE_DIR}/target"
PKG_APP_PATH="${PACKAGE_DIR}/target/ui"
PEAR_ROOT="$PKG_TARGET_PATH"
PHP_INI="/etc/php/conf.d/user-settings.ini"
PEAR_CONF="/etc/php/pear.conf"
PEAR_SEC_START="PEAR Package start"
PEAR_SEC_END="PEAR Package end"
BACKUP_PATH="/$(readlink /var/services/web | cut -d/ -f2)/@appstore/.pear"
REMOVE_FILE_LIST="indexdb ui bin doc cfg data download tmp test htdocs Archive Console PEAR Structures XML .channels OS .depdb .depdblock .filemap .lock PEAR.php PEAR5.php System.php pear.conf pearcmd.php peclcmd.php
.registry/archive_tar.reg
.registry/console_getopt.reg
.registry/structures_graph.reg
.registry/xml_util.reg
.registry/pear.reg
"
[ -f "/etc.defaults/VERSION" ] || exit 1
DSM_VERSION=`grep ^majorversion= /etc.defaults/VERSION | cut -d'"' -f2`

restartApache() {
	/usr/syno/etc/rc.d/S97apache-user.sh restart > /dev/null 2>&1
}

restartPHP() {
	initctl restart php-fpm > /dev/null 2>&1
}

backupPackages() {
	local found=

	rm -rf $BACKUP_PATH
	mkdir $BACKUP_PATH

	for x in $REMOVE_FILE_LIST; do
		rm -rf $PEAR_ROOT/$x
	done
	cp -r $PEAR_ROOT/* $BACKUP_PATH
	cp -r $PEAR_ROOT/.registry $BACKUP_PATH
}

restorePackages() {
	cp -a $BACKUP_PATH/* $PEAR_ROOT
	cp -a $BACKUP_PATH/.registry $PEAR_ROOT
}

CheckPHPINI() {
	if [ -z "$1" ]; then
		echo "Error argument"
		return 1
	fi
	if ! grep "$PEAR_ROOT" $1 > /dev/null; then
		return 1
	fi
	return 0
}

AddArgumentToSetting() { # $1: filename, $2: setting name, $3:argument
	sed -i "s#\\($2.*\\):$3\\(.*\\)#\1\2#" $1
	sed -i "s#\\($2.*\\)#\1:$3#" $1
}

ModifyPHPINI() {
	if [ -z "$1" ]; then
		echo "Error argument"
		return 1
	fi

	# rewrite open_basedir
	AddArgumentToSetting $1 open_basedir $PEAR_ROOT

	# remove previous section
	sed -i "/$PEAR_SEC_START/,/$PEAR_SEC_END/d" $1

	if grep include_path $1 > /dev/null; then
		AddArgumentToSetting $1 include_path $PEAR_ROOT
	else
		echo ";$PEAR_SEC_START (don't remove this line)" >> $1
		echo "include_path = .:$PEAR_ROOT" >> $1
		echo ";$PEAR_SEC_END (don't remove this line)" >> $1
	fi
	return 0
}

ClearPHPINI() {
	sed -i "s#\\(open_basedir.*\\):$PEAR_ROOT\\(.*\\)#\1\2#" $1
	sed -i "s#\\(include_path.*\\):$PEAR_ROOT\\(.*\\)#\1\2#" $1
	sed -i "/$PEAR_SEC_START/,/$PEAR_SEC_END/d" $1
}

linkFiles() {
	if [ ! -f /usr/bin/pear ]; then
		ln -s $PEAR_ROOT/bin/pear /usr/bin/pear
	fi
	if [ ! -f $PEAR_CONF ]; then
		mkdir -p /usr/syno/php/etc
		ln -s $PEAR_ROOT/pear.conf $PEAR_CONF
	fi
}

unlinkFiles() {
	rm -f /usr/bin/pear
	rm -f $PEAR_CONF
}

removePECL() {
	rm $PEAR_ROOT/bin/pecl
	sed -i "/<pickle>/,/<\/pickle>/d" $PEAR_ROOT/PEAR/Command/Pickle.xml
	sed -i "/<bundle>/,/<\/bundle>/d" $PEAR_ROOT/PEAR/Command/Install.xml
}

ChecklinkFiles(){
	[ -e "/usr/bin/pear" -a -e "/etc/php/pear.conf" ] || return 150
	return 0
}

EnablePEAR(){
	linkFiles
	if ! CheckPHPINI $PHP_INI; then
		ModifyPHPINI $PHP_INI
		if [ "$DSM_VERSION" -eq "4" ]; then
			restartApache
		else
			restartPHP
		fi
	fi
}

RemovePEAR(){
	unlinkFiles
	ClearPHPINI $PHP_INI
	if [ "$DSM_VERSION" -eq "4" ]; then
		restartApache
	else
		restartPHP
	fi
}

postinst() {
	env -i /usr/bin/php -n -dshort_open_tag=0 -dopen_basedir= -derror_reporting=1803 -dmemory_limit=-1 -ddetect_unicode=0 \
		$PKG_APP_PATH/install-pear-nozlib.phar \
		-a $PEAR_ROOT/cache \
		-d $PEAR_ROOT \
		-b $PEAR_ROOT/bin \
		-o $PEAR_ROOT/download \
		-t $PEAR_ROOT/tmp \
		-p /usr/bin/php
		--force \

	if cp $PEAR_CONF $PEAR_ROOT; then
		rm $PEAR_CONF
	fi
	removePECL
	EnablePEAR
	pear update-channels
	exit 0
}

preinst() {
	exit 0
}

preuninst() {
	exit 0
}

preupgrade() {
	backupPackages
	exit 0
}

postupgrade() {
	restorePackages
	exit 0
}

postuninst() {
	RemovePEAR
	exit 0
}
