#! /bin/bash
# Copyright (c) 2008-2015 Alexander Chernov <cher@ejudge.ru>

# This script upgrades the web installation of the ejudge system

prefix="/usr"
exec_prefix="/usr"
bindir="/usr/bin"
datarootdir="${prefix}/share"
datadir="/usr/share"
includedir="/usr/include"
libdir="/usr/lib"
libexecdir="/usr/lib"

dflt_httpd_cgi_bin_dir="/var/www/cgi-bin"
dflt_httpd_htdocs_dir="/var/www/html"
style_prefix="/ejudge/"
ejudge_cgibindir="/usr/lib/ejudge/cgi-bin"
cgi_suffix=""

write_help() {
    echo "ejudge-upgrade-web: ejudge web upgrade utility"
    echo "Copyright (c) 2008-2015 Alexander Chernov <cher@ejudge.ru>"
    echo "usage: ejudge-upgrade-web [HTDOCROOT] [CGIBINDIR]"
    exit 0
}

die() {
    echo "ejudge-upgrade-web:" "$@" 2>&1
    exit 1
}

checked_sln() {
if [ "${copy_mode}" = 1 ]
then
    if ! cp -rp "$1" "$2"
    then
        die "cannot copy $1 to $2"
    fi
else
    if ! ln -sf "$1" "$2"
    then
        die "cannot symlink $1 to $2"
    fi
fi
}

if [ "$1" = "--version" ]; then exec "${bindir}/ejudge-config" --version; fi
if [ "$1" = "--help" ]; then write_help; fi

copy_mode=0
if [ "$1" = "--copy" ]; then copy_mode=1; shift; fi
sandbox_mode=0
if [ "$1" = "--sandbox" ]; then sandbox_mode=1; shift; fi
destdir=
if [ "$1" = "--destdir" ]
then
    shift
    destdir="$1"
    shift
fi
htdocsroot="$1"
cgibindir="$2"

current_dir=`pwd`

[ "${htdocsroot}" != "" ] || htdocsroot="${dflt_httpd_htdocs_dir}"
[ "${cgibindir}" != "" ] || cgibindir="${dflt_httpd_cgi_bin_dir}"

if [ "${sandbox_mode}" = 1 ]
then
    if ! mkdir -p "${destdir}${htdocsroot}"
    then
        die "cannot create ${destdir}${htdocsroot}"
    fi
    if ! mkdir -p "${destdir}${cgibindir}"
    then
        die "cannot create ${destdir}${cgibindir}"
    fi
fi

[ -d "${destdir}${htdocsroot}" ] || die "${destdir}${htdocsroot} is not a directory"
[ -d "${destdir}${cgibindir}" ] || die "${destdir}${cgibindir} is not a directory"


target="${htdocsroot}${style_prefix}"

if [ ! -e "${destdir}${target}" ]
then
    if ! mkdir "${destdir}${target}"
    then
        die "cannot create ${destdir}${target} directory"
    fi
fi

# remove old stuff
# actions.js dojo.js* Storage_* flash6_* storage_* src
cd "${destdir}${target}"
if ! rm -fr actions.js dojo.js* storage_* flash6_* storage_* src dojo dojox dijit icons jqgrid jquery-ui
then
    die "cannot remove old files from ${destdir}${target}"
fi

# symlink the necessary style files
for i in back_sh.png capabilities_sh.png ejudge3.css ejudge3_ss.css ejudge_mobile.css filter_expr.html g_bl_light1.jpg grad2.jpg grad_gr_darker.jpg grad_green_long.jpg grad_grey_d.jpg grad.jpg grad_green_tab.jpg grad_red.jpg group_sh.png icons logo3.png logo.gif logout_sh.png mapping_sh.png new_cont_sh.png priv.css priv.js refresh_sh.png settings_sh.png sprintf.js unpriv3.css unpriv.css unpriv.js user_sh.png jqgrid jquery-ui jquery.min.js jquery.timepicker.css jquery.timepicker.min.js grad_grey_d.jpg grad_green_long.jpg prism.js prism.css
do
    if [ "${copy_mode}" = 1 ]
    then
        rm -f "${i}"
        if ! cp -rp "${destdir}${datadir}/ejudge/style/${i}" "${i}"
        then
            die "cannot copy ${destdir}${datadir}/ejudge/style/${i} to ${i}"
        fi
    else
        if ! ln -sf "${destdir}${datadir}/ejudge/style/${i}" "${i}"
        then
            die "cannot symlink ${destdir}${datadir}/ejudge/style/${i} to ${i}"
        fi
    fi
done

# symlink the CGI programs
cd "${destdir}${cgibindir}"
rm -f "client${cgi_suffix}" "master${cgi_suffix}" "new-judge${cgi_suffix}" "new-register${cgi_suffix}" "serve-control${cgi_suffix}" "users${cgi_suffix}" "judge${cgi_suffix}" "new-client${cgi_suffix}" "new-master${cgi_suffix}" "register${cgi_suffix}" "team${cgi_suffix}"

checked_sln "${destdir}${ejudge_cgibindir}/serve-control${cgi_suffix}" "serve-control${cgi_suffix}"
checked_sln "${destdir}${ejudge_cgibindir}/users${cgi_suffix}" "users${cgi_suffix}"
checked_sln "${destdir}${ejudge_cgibindir}/new-client${cgi_suffix}" "new-client${cgi_suffix}"
checked_sln "${destdir}${ejudge_cgibindir}/new-client${cgi_suffix}" "client${cgi_suffix}"
checked_sln "${destdir}${ejudge_cgibindir}/new-client${cgi_suffix}" "team${cgi_suffix}"
checked_sln "${destdir}${ejudge_cgibindir}/new-client${cgi_suffix}" "new-register${cgi_suffix}"
checked_sln "${destdir}${ejudge_cgibindir}/new-client${cgi_suffix}" "register${cgi_suffix}"
checked_sln "${destdir}${ejudge_cgibindir}/new-client${cgi_suffix}" "new-master${cgi_suffix}"
checked_sln "${destdir}${ejudge_cgibindir}/new-client${cgi_suffix}" "master${cgi_suffix}"
checked_sln "${destdir}${ejudge_cgibindir}/new-client${cgi_suffix}" "new-judge${cgi_suffix}"
checked_sln "${destdir}${ejudge_cgibindir}/new-client${cgi_suffix}" "judge${cgi_suffix}"

#echo "upgrade complete"
