#! /bin/sh

### BEGIN INIT INFO
# Provides:          otrs2
# Required-Start:    $local_fs
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: switches otrs2 from maintainance into active mode and back
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
. /etc/default/rcS

# Read config file
[ -r /etc/default/otrs-ticket-server ] && . /etc/default/otrs-ticket-server

# Set defaults. Can be overwritten in default file.
true ${PERL:=/usr/bin/perl}
true ${LOG_CONFIG:=/etc/otrs/logging.conf}
true ${OTRS_HOME:=/usr/share/otrs}
true ${TICKET_SERVER_ENABLE:=false}
true ${TICKET_SERVER_USER:=otrs}
true ${TICKET_SERVER_GROUP:=otrs}
true ${TICKET_SERVER_PORT:=54444}
true ${TICKET_SERVER_PM:=$OTRS_HOME/Kernel/Noris/TicketServer.pm}
true ${TICKET_SERVER_PIDFILE:=/var/run/otrs-ticket-server.pid}
true ${TICKET_SERVER_SSL:=}

# Gracefully exit if the package has been removed.
test -d ${OTRS_HOME} || exit 0

set +e


d_ticket_server_status() {
    start-stop-daemon --stop --pidfile "$TICKET_SERVER_PIDFILE" \
        --exec "$PERL" --user "$TICKET_SERVER_USER" \
        -q --signal 0 >/dev/null
}

d_ticket_server_start() {
    touch "$TICKET_SERVER_PIDFILE" || return 1
    chown "$TICKET_SERVER_USER:$TICKET_SERVER_GROUP" "$TICKET_SERVER_PIDFILE"
    LC_ALL=C start-stop-daemon --quiet \
        -p "$TICKET_SERVER_PIDFILE" \
        --make-pidfile \
        --chuid "$TICKET_SERVER_USER" \
        --group "$TICKET_SERVER_GROUP" \
        --chdir "/" \
        --exec "$PERL" \
        --background \
        --start \
        --  -I $OTRS_HOME \
            $OTRS_HOME/Kernel/Noris/TicketServer.pm \
            -l $LOG_CONFIG \
            -p $TICKET_SERVER_PORT \
            $TICKET_SERVER_SSL
    sleep 1
    d_ticket_server_status
}

d_ticket_server_stop() {
    start-stop-daemon --stop --exec "$PERL" \
        --user "$TICKET_SERVER_USER" \
        --quiet --oknodo \
        --pidfile "$TICKET_SERVER_PIDFILE"
}

d_otrs_start() {
    echo -n "Enabling otrs (create cron links, rm maintenance file, start email processing)"
    if [ -L /var/lib/otrs/httpd/htdocs/maintainance.html ]
    then
        rm  /var/lib/otrs/httpd/htdocs/maintainance.html
    else
        if [ -e  /var/lib/otrs/httpd/htdocs/maintainance.html ]
        then
            echo -n " - maintenance file is not a link, otrs might be disfunctional"
        fi
    fi
    [ ! -e /etc/cron.d/otrs ] && ln -s /etc/otrs/cron /etc/cron.d/otrs
    echo .
}

d_otrs_stop() {
    echo -n "Disabling otrs (rm cron links, create maintenance file, block email processing)"
    [ ! -L /var/lib/otrs/httpd/htdocs/maintainance.html ] && ln -s /etc/otrs/maintainance.html /var/lib/otrs/httpd/htdocs/
    if [ -L /etc/cron.d/otrs ]; then
      rm /etc/cron.d/otrs
    fi
    echo .
}

end_msg() {
    [ -z "$1" ] && return 1
    if [ "$1" -eq 0 ]
    then
        echo .
    else
        echo " FAILED."
    fi
}

        
case "$1" in
    start)
        d_otrs_start
        if "$TICKET_SERVER_ENABLE"
        then
            echo -n "Starting OTRS Ticket Server"
            d_ticket_server_status && echo " FAILED: Already running." && exit 1
            d_ticket_server_start
            ES=$?
            end_msg $ES
            exit $ES
        else
            [ "$VERBOSE" != no ] && echo "Starting OTRS Ticket Server SKIPPED: not enabled"
        fi
        ;;
   
    stop)
        d_otrs_stop
        echo -n "Stopping OTRS Ticket Server"
        d_ticket_server_stop
        ES=$?
        rm -f "$TICKET_SERVER_PIDFILE"
        end_msg $ES
        ;;
    
    reload)
        "Reloading OTRS FAILED: reload not implemented. Use restart."
        exit 1
        ;;

    restart|force-reload)
        d_otrs_start
        if "$TICKET_SERVER_ENABLE"
        then
            echo -n "Restarting OTRS Ticket Server"
            d_ticket_server_stop
            sleep 1
            if d_ticket_server_status
            then
                echo " FAILED: Still running after stop."
                exit 1
            fi
            d_ticket_server_start
            end_msg $?
        else
            [ "$VERBOSE" != no ] && echo "Restarting OTRS Ticket Server SKIPPED: not enabled"
        fi
        ;;
                        
    status)
        echo -n "Checking otrs state: "
	    SOMETHING_WRONG=""
        if [ ! -e /etc/cron.d/otrs ]
        then
	        echo -n "cronjobs are disabled! "
	        SOMETHING_WRONG=1
    	fi
	    if [ -e /var/lib/otrs/httpd/htdocs/maintainance.html ]
	    then
	        echo -n "web frontend disabled! email processing blocked! "
	        SOMETHING_WRONG=1
	    fi
        if "$TICKET_SERVER_ENABLE" && ! d_ticket_server_status
        then
            echo -n "OTRS Ticker Server down! "
            SOMETHING_WRONG=1
        fi
	    if [ -z "$SOMETHING_WRONG" ]
	    then
	        echo "OK."
	    else
	        echo 
	        exit 1
	    fi
    ;;

    *)
	echo "Usage: $0 {start|stop|restart|force-reload|reload|status}" >&2
	exit 1
    ;;
esac

exit 0

