File: //var/packages/WordPress/WIZARD_UIFILES/install_uifile_csy.sh
#!/bin/bash
# define main function
MAIN_INSTALL="main_install"
MAIN_UPGRADE="main_upgrade"
MAIN_UNINST="main_uninst"
# define each page's name
PAGE_MARIADB5="page_mariadb5"
PAGE_MARIADB10="page_mariadb10"
PAGE_RESTORE="page_restore"
PAGE_UPGRADE_RESTRICTED="page_upgrade_restricted"
PAGE_DB="page_db"
PAGE_UNINST_DB="page_uninst_db"
PAGE_CONFIRM="page_confirm"
PAGE_CONFIRM_UNINST="page_confirm_uninst"
REQUIRE_DB_SETUP=true
DEFAULT="enu"
# set out file name
OUTPUT_INSTALL="install_uifile"
OUTPUT_UPGRADE="upgrade_uifile"
OUTPUT_UNINST="uninstall_uifile"
INIT_DB_NAME="" # need to be overwritten
INIT_DB_USER="" # need to be overwritten
INFO_FILE="" # need to be overwritten
BACKUP_PATH="" # need to be overwritten
BACKUP_WEB_PATH="" # need to be overwritten
# here to define what page is necessary for each stage: install, upgrade, and uninstall
PAGES_INST="$PAGE_MARIADB5 $PAGE_RESTORE $PAGE_MARIADB10 $PAGE_DB"
PAGES_UPGRADE="$PAGE_UPGRADE_RESTRICTED $PAGE_MARIADB5 $PAGE_MARIADB10 $PAGE_DB $PAGE_CONFIRM"
PAGES_UNINST="$PAGE_UNINST_DB $PAGE_CONFIRM_UNINST"
MainCreate()
{
local output="$1"
local pages="$2"
local main_function="$3"
if IsWizardEmpty; then
return
fi
for dir in lang/*; do
local lan=$(basename "$dir")
local wizard_script="${output}_${lan}.sh"
cat "wizard_common" > "${wizard_script}"
cat "lang/$lan" "wizard_customized" $pages "$main_function" >> "${wizard_script}"
CustomWizCreate "${wizard_script}"
done
chmod +x "${output}"*.sh
cp -a "${output}_${DEFAULT}.sh" "${output}.sh"
}
IsUpgradable()
{
true
}
IsWizardEmpty()
{
if $REQUIRE_DB_SETUP; then
false; return
fi
true; return
}
NeedConfirmVirtualHost()
{
local version="$1"
if [ ! -z "$version" ] && [ "$version" -lt "1000" ]; then
local websetted=$(/var/packages/WebStation/target/tools/synowebservice vhost is-web-share-as-vhost-root; echo $?)
return $websetted
fi
return 1
}
CustomHasRunWebsiteSetup()
{
local path="$1"
[ -s "$path/$CONF_FILE" ]
}
CustomWizCreate()
{
:
}
CustomMainInstall()
{
:
}
CustomGetValueFromMetaFile()
{
local key="$1"
local backup_info="/var/packages/.$PKG_DIR.conf"
local syno_conf="/var/packages/$PKG_NAME/synology.conf"
local record_file=""
if [ -s "$INFO_FILE" ]; then
record_file="$INFO_FILE"
elif [ -s "$backup_info" ]; then
record_file="$backup_info"
elif [ -s "$syno_conf" ]; then
record_file="$syno_conf"
else
return
fi
get_key_value "$record_file" "$key"
}
GetPreviousPkgBuildNumber()
{
local old_pkg_ver="$SYNOPKG_OLD_PKGVER"
if [ -z "${old_pkg_ver}" ]; then
# SYNOPKG_OLD_PKGVER does not exist in un-install stage of upgrade
old_pkg_ver="$SYNOPKG_PKGVER"
fi
local old_build_number=$(echo "$old_pkg_ver" | cut -d- -f2)
echo "$old_build_number"
}
IsPreviousVersionBelowDSM7()
{
[ "$(GetPreviousPkgBuildNumber)" -lt "1000" ]
}
GetWebsiteRootOfPreviousVersion()
{
local prev_website_root="$WEBSITE_ROOT"
if IsPreviousVersionBelowDSM7; then
prev_website_root=$(echo $WEBSITE_ROOT | sed "s/web_packages/web/g")
fi
echo "${prev_website_root}";
}
GetBackupPath()
{
local backup_prefix="${SYNOPKG_PKGDEST_VOL}/@appdata/$PKG_NAME/.backup"
echo "$backup_prefix"
}
GetBackupWebDir()
{
local backup_web_dir="$(GetBackupPath)/backup_web_dir"
echo "$backup_web_dir"
}
ClearBackupDir()
{
local backup_path="$(GetBackupPath)"
local backup_web_dir="$(GetBackupWebDir)"
rm -rf "$backup_path"
mkdir -p "$backup_web_dir"
}
InitBackupPath()
{
BACKUP_PATH="$(GetBackupPath)"
BACKUP_WEB_PATH="$(GetBackupWebDir)"
}
GetDefaultDSM7LegacyDotPackagePrefix()
{
local dsm7_legacy_backup_path="/$(readlink /var/services/web_packages | cut -d/ -f2)/@appdata/$PKG_NAME/.$PKG_DIR"
echo "${dsm7_legacy_backup_path}"
}
GetCustomDSM7LegacyBackupPrefix()
{
GetDefaultDSM7LegacyDotPackagePrefix
}
GetDefaultDSM6LegacyBackupPrefix()
{
local dsm6_legacy_backup_path="/$(readlink /var/services/web_packages | cut -d/ -f2)/@appstore/.$PKG_DIR"
echo "${dsm6_legacy_backup_path}"
}
GetCustomDSM6LegacyBackupPrefix()
{
GetDefaultDSM6LegacyBackupPrefix
}
GetLegacyBackupDataPrefix()
{
local dsm6_legacy_backup_path="$(GetCustomDSM6LegacyBackupPrefix)"
local dsm7_legacy_backup_path="$(GetCustomDSM7LegacyBackupPrefix)"
local legacy_path=""
if [ -e "$dsm6_legacy_backup_path" ]; then
legacy_path="$dsm6_legacy_backup_path"
fi
if [ -e "$dsm7_legacy_backup_path" ]; then
legacy_path="$dsm7_legacy_backup_path"
fi
echo "$legacy_path"
}
# we define pages in fuction not in global variables,
# because functions in wizard steps will be merged after calling MainCreate.
CustomSetPages()
{
if $REQUIRE_DB_SETUP; then
NEW_INSTALL_PAGES="$(PageM10),$(PageDB)"
RESTORE_PAGES="$(PageRestore),$(PageM10),$(PageDB)"
MIGRATE_PAGES="$(PageM5),$(PageRestore),$(PageM10),$(PageDB)"
UNINSTALL_PAGES="$(PageUninstDB),$(PageConfirmUninstDataLoss)"
else
NEW_INSTALL_PAGES=""
RESTORE_PAGES="$(PageRestore)"
MIGRATE_PAGES="$(PageRestore)"
UNINSTALL_PAGES=""
fi
}
CustomParseDBConf()
{
:
}
CustomGetDBName()
{
:
}
CustomGetDBUser()
{
:
}
CustomGetDBPass()
{
:
}
quote_json() {
sed -e 's|\\|\\\\|g' -e 's|\"|\\\"|g'
}
wizard_db_settings="Nastavit databázi WordPress"
wizard_db_name_desc="Zadejte název databáze WordPress. "
wizard_db_name_label="Název databáze"
wizard_m10_desc="Chcete-li pokračovat v nastavení databáze WordPress, zadejte přihlašovací údaje správce pro databázi MariaDB 10."
wizard_admin_acc="Účet"
wizard_admin_pass="Heslo"
wizard_set_db_desc="Chcete-li použít stávající nebo nová data, vytvořte nový vyhrazený účet databáze pro aplikaci WordPress."
wizard_set_data_title="Nastavit WordPress"
wizard_found_backup="Nekompatibilní vyhrazená data balíčku"
wizard_warn_data_backup_deprecated="Vyhrazená data tohoto balíčku ve vašem systému nejsou kompatibilní s touto verzí.<br>Pokud tuto verzi nainstalujete, vyhrazená data se odstraní.<br>Pokud chcete vyhrazená data zachovat, nainstalujte stejnou verzi balíčku jako v předchozí instalaci. (Předchozí verze: {prev_version})"
wizard_db_user_account_desc="Účet uživatele databáze"
wizard_db_user_password_desc="Heslo uživatele databáze"
wizard_migrate_note="Nejnovější verze aplikace WordPress podporuje pouze databázi MariaDB 10.<br>Systém nalezl stávající databázi MariaDB 5.<br>V následujícím kroku bude vaše databáze migrována z verze MariaDB 5 do verze MariaDB 10.<br><br>Chcete-li pokračovat v instalaci, zadejte přihlašovací údaje správce pro databázi MariaDB 5."
wizard_migrate_title="Migrace databáze WordPress"
wizard_remove_msql_title="Odebrat databázi WordPress"
wizard_remove_msql_desc="Pokud odeberete databázi WordPress, odstraní se veškerá data."
wizard_msql_password_desc_remove="Databázi WordPress bude možné odebrat po zadání přihlašovacích údajů správce databáze."
wizard_admin_acc="Účet"
wizard_admin_pass="Heslo"
wizard_confirm_page_title="Důležité"
wizard_confirm_check="Přečetl(a) jsem si a chápu výše uvedené upozornění."
wizard_database="WordPress databáze"
wizard_upload_data="Data odeslána do WordPress"
wizard_config_data="Konfigurace v WordPress"
wizard_msql_password_desc="Zadejte heslo správce databáze."
wizard_unable_to_upgrade_title="Na tuto verzi nelze aktualizovat"
wizard_upgrade_from_prev_release_required_desc="Před aktualizací balíčku na tuto verzi ho aktualizujte na <a href=\"{1}\" target=\"_blank\">předchozí verzi</a>."
wizard_data_will_be_lost_after_uninstallation_warning="Odinstalováním balíčku budou všechna relevantní data smazána."
wizard_i_know_the_data_will_be_removed="Beru na vědomí, že všechna relevantní data budou smazána."
wizard_vhost_setting_warning="Systém zjistil ve službě Web Station alespoň jednoho virtuálního hostitele, jehož kořenový adresář je nastaven na složku „web“. Po aktualizaci systému bude složka virtuálního hostitele WordPress přesunuta ze složky „web“ do složky „web_packages“; z tohoto důvodu již nebude možné přistupovat do služby WordPress prostřednictvím tohoto virtuálního hostitele.<br><br>Chcete-li po aktualizaci používat stejný název domény, přejděte do části Web Station > Portál webových služeb a virtuálního hostitele odstraňte.<br><br>Virtuální hostitel WordPress si zachová oprávnění pro přístup do skupiny HTTP i po přesunutí své složky. Pokud uživatel potřebuje přístup do složky virtuálního hostitele WordPress, musíte přidat jeho uživatelský účet do skupiny HTTP."
#!/bin/bash
PKG_NAME="WordPress"
PKG_DIR="wordpress"
WEBSITE_ROOT="/var/services/web_packages/$PKG_DIR"
INFO_FILE="/usr/syno/etc/packages/$PKG_NAME/$PKG_DIR.conf"
CONF_FILE="wp-config.php"
MIGRATE_DB_VERSION="0134"
INIT_DB_NAME="wordpress"
INIT_DB_USER="wordpress_user"
CustomMainInstall()
{
if [ -d "$BACKUP_PATH" ]; then
GEN_WP_CONF "$BACKUP_PATH"
fi
}
GEN_WP_CONF()
{
local path="$1"
# before 0122, no version value record
local version=$(get_key_value "$INFO_FILE" "version")
if [ ! -s "$path/$CONF_FILE" ] && [ -z "$version" ]; then
# We need to add back the wp-config.php
echo "$WP_CONF_FILE" | openssl enc -base64 -d > "$path/$CONF_FILE"
sed -i "s|'DB_NAME',.*|'DB_NAME','wordpressblog');|g" "$path/$CONF_FILE"
sed -i "s|'DB_USER',.*|'DB_USER','wordpress');|g" "$path/$CONF_FILE"
sed -i "s|'DB_PASSWORD',.*|'DB_PASSWORD','');|g" "$path/$CONF_FILE"
fi
}
CustomParseDBConf()
{
local path="$1"
local db_info="$2"
local grep_info="$3"
local info_output=""
if [ -s "$path/$CONF_FILE" ]; then
info_output=$(grep "$grep_info" "$path/$CONF_FILE" | cut -d\' -f4 | UnQuotePHP)
fi
if [ -z "$info_output" ];then
info_output="$(CustomGetValueFromMetaFile "$db_info")"
fi
echo "$info_output"
}
CustomGetDBName()
{
local db_name=$(CustomParseDBConf "$1" "db_name" "DB_NAME")
if [ -z "$db_name" ]; then
db_name="$pkgwizard_db_name"
fi
echo "$db_name"
}
CustomGetDBUser()
{
local db_user=$(CustomParseDBConf "$1" "db_user" "DB_USER")
if [ -z "$db_user" ]; then
db_user="$pkgwizard_db_user_account"
fi
echo "$db_user"
}
CustomGetDBPass()
{
CustomParseDBConf "$1" "db_pass" "DB_PASSWORD"
}
UnQuotePHP()
{
sed -e "s|\\\\'|'|g" -e 's|\\\\|\\|g'
}
PageM5()
{
cat << EOF
{
"step_title": "$wizard_migrate_title",
"items": [{
"type": "textfield",
"desc": "$wizard_migrate_note",
"subitems": [{
"key": "wizard_m5_acc",
"desc": "$wizard_admin_acc",
"defaultValue": "root",
"validator": {
"allowBlank": false
}
}]
}, {
"type": "password",
"subitems": [{
"indent": 1,
"key": "wizard_m5_pass",
"desc": "$wizard_admin_pass"
}]
}]
}
EOF
}
PageRestore()
{
local prev_version="unknown"
if [ -n "${RESERVED_DATA_PKG_VER}" ]; then
prev_version="${RESERVED_DATA_PKG_VER}"
fi
local reserved_data_deprecate_msg=$(echo $wizard_warn_data_backup_deprecated | sed "s/{prev_version}/$prev_version/g")
cat << EOF
{
"step_title": "$wizard_found_backup",
"items": [{
"desc": "$reserved_data_deprecate_msg"
}]
}
EOF
}
PageM10()
{
cat << EOF
{
"step_title": "$wizard_set_data_title",
"items": [{
"type": "textfield",
"desc": "$wizard_m10_desc",
"subitems": [{
"key": "wizard_m10_acc",
"desc": "$wizard_admin_acc",
"defaultValue": "root",
"validator": {
"allowBlank": false
}
}]
}, {
"type": "password",
"subitems": [{
"indent": 1,
"key": "wizard_m10_pass",
"desc": "$wizard_admin_pass"
}]
}]
}
EOF
}
FindObj()
{
cat << EOF
for (i = 0; i < arguments[0].items.length; i++) {
item = arguments[0].items.items[i]
if (\"${1}\" == item.itemId){
$2 = arguments[0].items.items[i];
break;
}
}
EOF
}
Activate()
{
cat << EOF
"activeate": "{
new_db_textfield = null;
db_user_textfield = null;
$(FindObj "pkgwizard_db_name" "new_db_textfield")
$(FindObj "pkgwizard_db_user_account" "db_user_textfield")
if (new_db_textfield !== null) {
new_db_textfield.setValue(\"$INIT_DB_NAME\");
}
if (db_user_textfield !== null) {
db_user_textfield.setValue(\"$INIT_DB_USER\");
}
}",
EOF
}
Deactivate()
{
cat << EOF
"deactivate": "{
page = arguments[0];
if (page.headline == \"$wizard_db_settings\" && arguments[2] == 'next') {
m10username = null;
m10password = null;
$(FindObj "pkgwizard_db_user_account" "m10username")
$(FindObj "pkgwizard_db_user_password" "m10password")
wizard = page.ownerCt.ownerCt;
if (wizard.is_valid_password) { // a field to check if password is correct and act as end condition of recursion
return true;
}
wizard.setStatusBusy();
page.sendWebAPI({
api: 'SYNO.MariaDB10.lib',
method: 'validate_password',
version: 1,
params: {
username: m10username.getValue(),
password: m10password.getValue()
},
timeout: 1000*30,
callback: function(success, res) {
wizard.clearStatusBusy();
if (success && res['is_valid_password']) {
wizard.is_valid_password = true;
wizard.goNext(wizard.getActiveStep().getNext()); // this function call would cause recursion so we need to set end condition
wizard.is_valid_password = false;
} else {
wizard.is_valid_password = false;
wizard.getMsgBox().alert('MariaDB', _T('common', 'err_pass'));
}
}
});
return false;
}
}",
EOF
}
ApplyDBInfo()
{
local page_db="$1"
sed "s/@OLD_DB@/$DB_NAME/g;s/@OLD_USER@/$DB_USER/g" <<< "$page_db"
}
PageDB()
{
local page_db=$(cat << EOF
{
"step_title": "$wizard_db_settings",
$(Activate)
$(Deactivate)
"items": [{
"type": "textfield",
"desc": "$wizard_set_db_desc",
"subitems": [{
"key": "pkgwizard_db_name",
"desc": "$wizard_db_name_label",
"validator": {
"allowBlank": false
}
}]
}, {
"type": "textfield",
"subitems": [{
"indent": 1,
"key": "pkgwizard_db_user_account",
"desc": "$wizard_db_user_account_desc",
"validator": {
"allowBlank": false
}
}]
}, {
"type": "password",
"subitems": [{
"indent": 1,
"key": "pkgwizard_db_user_password",
"desc": "$wizard_db_user_password_desc"
}]
}, {
"type": "textfield",
"subitems": [{
"key": "create_db_collision",
"desc": "drop or skip",
"defaultValue": "replace",
"hidden": true
}]
}, {
"type": "multiselect",
"subitems": [{
"key": "create_db_flag",
"desc": "create db or not",
"defaultValue": true,
"hidden": true
}]
}, {
"type": "textfield",
"subitems": [{
"key": "old_db_name",
"desc": "old db name",
"defaultValue": "@OLD_DB@",
"hidden": true
}]
}, {
"type": "multiselect",
"subitems": [{
"key": "drop_db_flag",
"desc": "drop old db or not",
"defaultValue": false,
"hidden": true
}]
}, {
"type": "multiselect",
"subitems": [{
"key": "grant_user_flag",
"desc": "must grant user if exist wizard",
"defaultValue": true,
"hidden": true
}]
}, {
"type": "textfield",
"subitems": [{
"key": "mariadb_ver",
"desc": "mariadb version",
"defaultValue": "$MARIADB_VER",
"hidden": true
}]
}]
}
EOF
)
ApplyDBInfo "$page_db"
}
SetupInstallVariables()
{
DEFAULT_RESTORE=false
MARIADB_VER="m10"
InitBackupPath
CustomMainInstall
DB_NAME=$(CustomGetDBName "$BACKUP_WEB_PATH")
DB_USER=$(CustomGetDBUser "$BACKUP_WEB_PATH")
RESERVED_DATA_PKG_VER="$(CustomGetValueFromMetaFile "version" | cut -s -d- -f2)"
WebsiteSetupDone=false
if CustomHasRunWebsiteSetup "$(GetLegacyBackupDataPrefix)"; then
WebsiteSetupDone=true
fi
}
SetupInstallWizardPages()
{
CustomSetPages
local install_page=""
if $WebsiteSetupDone; then
install_page="$RESTORE_PAGES"
else
install_page="$NEW_INSTALL_PAGES"
fi
echo "[$install_page]" > "${SYNOPKG_TEMP_LOGFILE}"
}
main()
{
SetupInstallVariables
SetupInstallWizardPages
return 0
}
main "$@"