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

CustomChangeDBUserInfo()
{
	local path="$1"
	local db_user="$2"
	local db_pass="$(echo "$3" | QuotePHP | QuoteSed)"

	if [ -f "$path/$CONF_FILE" ]; then
		sed -i "s/define('DB_USER'.*/define('DB_USER','$db_user');/g" "$path/$CONF_FILE"
		sed -i "s/define('DB_PASSWORD'.*/define('DB_PASSWORD','$db_pass');/g" "$path/$CONF_FILE"
	fi
}

CustomRemove()
{
	rm -rf "/var/packages/.has_run_wp.conf"
}

BackupWPConf()
{
	local backup_prefix=$(CustomGetBackupPrefix)
	[ -d "$backup_prefix" ] || mkdir -p "$backup_prefix"
	if [ -s "$WEBSITE_ROOT/$CONF_FILE" ]; then
		cp -a "$WEBSITE_ROOT/$CONF_FILE" "$backup_prefix/"
	fi
}


WriteBackupInfo() {
	echo "path=$(CustomGetBackupPrefix)" > "$INFO_FILE"
	echo "version=$SYNOPKG_OLD_PKGVER" >> "$INFO_FILE"
}

EscapeOldBackup()
{
	# Remove nginx config
	rm -f "$NGINX_CONF_PATH/$PKG_NGINX_CONFIG"

	# Escape old backup steps
	echo "#!/bin/bash" > "/var/packages/WordPress/scripts/preuninst"
	echo "exit 0" >> "/var/packages/WordPress/scripts/preuninst"
}

CustomPreupgrade()
{
	# Remove obsolete plugin
	local old_build_number=$(echo "$SYNOPKG_OLD_PKGVER" | cut -d- -f2)
	rm -rf "$WEBSITE_ROOT/wp-content/plugins/insert-from-photostation"
	if [ $? -ne "0" ]; then
		logger -p 0 "[WordPress] Fail to delete plugin (insert-from-photostation)"
	fi

	if [ "$old_build_number" -le "0140" ]; then
		CustomBackupData
		EscapeOldBackup
		WriteBackupInfo
	fi
}

CustomBackupData()
{
	local backup_prefix=$(CustomGetBackupPrefix)
	[ -d "$backup_prefix" ] || mkdir -p "$backup_prefix"

	local need_backup="$CONF_FILE wp-content wp-images .htaccess.syno robots.txt index.php wp-includes/languages"
	for item in $need_backup; do
		if [ -e "$WEBSITE_ROOT/$item" ]; then
			mkdir -p "$backup_prefix/$(dirname "$item")"
			cp -a "$WEBSITE_ROOT/$item" "$backup_prefix/$(dirname "$item")"
	   fi
	done
	rm -rf "$backup_prefix/wp-content/cache" "$backup_prefix/wp-content/plugins/widgets"

	cp -a "$WEBSITE_ROOT" "$backup_prefix"
	cd "$backup_prefix/$PKG_DIR"
	rm -rf "wp-"* "readme.html" "wp.php" "xmlrpc.php" "license.txt"
	cd -
}

CustomSetWebsiteRoot()
{
	mv "$SYNOPKG_PKGDEST/src" "$WEBSITE_ROOT"
}

HideCoreUpgrade()
{
	if [ ! -s "$WEBSITE_ROOT/$CONF_FILE" ]; then
		exit 1
	fi
	if ! grep -q "AUTOMATIC_UPDATER_DISABLED" "$WEBSITE_ROOT/$CONF_FILE"; then
		echo "define( 'AUTOMATIC_UPDATER_DISABLED', true );" >> "$WEBSITE_ROOT/$CONF_FILE"
	fi
	if ! grep -q "pre_site_transient_update_core" "$WEBSITE_ROOT/$CONF_FILE"; then
		echo "add_filter('pre_site_transient_update_core','__return_null');" >> "$WEBSITE_ROOT/$CONF_FILE"
	fi
}

SetSecurityKeys()
{
	local security_key="AUTH_KEY SECURE_AUTH_KEY LOGGED_IN_KEY NONCE_KEY AUTH_SALT SECURE_AUTH_SALT LOGGED_IN_SALT NONCE_SALT"
	local rand_key
	for key_name in $security_key; do
		rand_key=$(env RANDFILE=/tmp/.rnd openssl rand -base64 48)
		sed -i "/'$key_name'/c\\define('$key_name','$rand_key');" "$WEBSITE_ROOT/$CONF_FILE"
	done
}

CustomRestoreUpgrade()
{
	if [ -d "$BACKUP_PATH/$PKG_DIR" ]; then
		cp -a "$BACKUP_PATH/$PKG_DIR" "$(dirname "$WEBSITE_ROOT")"
		rm -rf "$BACKUP_PATH/$PKG_DIR"
	fi
	# Offical upgrade would not upgrade plugin, but we can only upgrade our plugin when upgrading pkg
	rm -rf "$BACKUP_PATH/wp-content/plugins/photostation" "$BACKUP_PATH/wp-content/plugins/syno_ps_tinymce"
	rm -rf "$WEBSITE_ROOT/wp-content/plugins/akismet"

	cp -a "$BACKUP_PATH"/* "$WEBSITE_ROOT"
	cp -a "$BACKUP_PATH/.htaccess.syno" "$WEBSITE_ROOT"

	# Remove html files which cause DOM XSS if existed
	rm -f "$WEBSITE_ROOT/wp-content/themes/twenty*/genericons/example.html"

	rm -f "$WEBSITE_ROOT/wp-config-sample.php"
	HideCoreUpgrade
	# Bug 148 after upgrading, able to install from https
	sed -i "s#if (\$_SERVER\[\"SERVER_PORT\"\] != \"80\")#if (\$_SERVER\[\"SERVER_PORT\"\] != \"80\" and \$_SERVER\[\"SERVER_PORT\"\] != \"443\")#g" "$WEBSITE_ROOT/$CONF_FILE"
}

CustomUseUnixSocket()
{
	sed -i "s|'DB_HOST',.*|'DB_HOST','localhost:$UNIX_SOCKET');|g" "$WEBSITE_ROOT/$CONF_FILE"
}

CustomSetInit()
{
	if ! CustomHasRunWebsiteSetup "$WEBSITE_ROOT"; then
		mv "$WEBSITE_ROOT/wp-config-sample.php" "$WEBSITE_ROOT/$CONF_FILE"
		local pass_modify=$(echo "$DB_USER_PASS" | QuotePHP | QuoteSed)

		sed -i "s|'DB_NAME',.*|'DB_NAME','$DB_NAME');|g" "$WEBSITE_ROOT/$CONF_FILE"
		sed -i "s|'DB_USER',.*|'DB_USER','$DB_USER');|g" "$WEBSITE_ROOT/$CONF_FILE"
		sed -i "s|'DB_PASSWORD',.*|'DB_PASSWORD','$pass_modify');|g" "$WEBSITE_ROOT/$CONF_FILE"

		SetSecurityKeys
	fi
}

QuoteSQLString()
{
	sed -e 's|\\|\\\\|g' -e 's|`|\\`|g'
}

QuotePHP()
{
	sed -e 's|\\|\\\\|g' -e "s|'|\\\\'|g"
}

QuoteSed()
{
	sed -e 's|\\|\\\\|g' -e 's|&|\\\&|g'
}

. "$(dirname "$0")"/../WIZARD_UIFILES/wizard_customized
