#!/usr/bin/bash
pre_install() {
  set -e
  abort=false
  if [ -L /srv/http/zoneminder/events ]; then
    l=$(readlink /srv/http/zoneminder/events)
    if [ $l != /var/cache/zoneminder/events ]; then
        abort=true
    fi
  fi
  if [ -L /srv/http/zoneminder/images ]; then
    l=$(readlink /srv/http/zoneminder/images)
    if [ $l != /var/cache/zoneminder/images ]; then
        abort=true
    fi
  fi
  if [ $abort = true ]; then
    cat >&2 << EOF
Aborting installation of zoneminder due to non-default symlinks in
/srv/http/zoneminder for the images and/or events directory, which could
result in loss of data. Please move your data in each of these directories to
/var/cache/zoneminder before installing zoneminder from the package.
EOF
    exit 1
  fi
  exit 0
}

post_install() {
  if [[ -d /var/log/zoneminder ]]; then
    chmod -v 0755      /var/log/zoneminder
    chown -v http.http /var/log/zoneminder
  else
    mkdir -vm 0755      /var/log/zoneminder
    chown -v  http.http /var/log/zoneminder
  fi
  if [[ -d /tmp/zoneminder ]]; then
    chmod -v 0700      /tmp/zoneminder
    chown -v http.http /tmp/zoneminder
  else
    mkdir -vm 0700      /tmp/zoneminder
    chown -v  http.http /tmp/zoneminder
  fi
  sed -i '
    /^;extension=mysql.so/ s/^;//;
    /^#extension=mysql.so/ s/^#//;
    /^;extension=mysqli.so/ s/^;//;
    /^#extension=mysqli.so/ s/^#//;
    /^;extension=gd.so/ s/^;//;
    /^#extension=gd.so/ s/^#//;
    /^;extension=gettext.so/ s/^;//;
    /^#extension=gettext.so/ s/^#//;
    /^;extension=mcrypt.so/ s/^;//;
    /^#extension=mcrypt.so/ s/^#//;
    /^;extension=session.so/ s/^;//;
    /^#extension=session.so/ s/^#//;
    /^;extension=sockets.so/ s/^;//;
    /^#extension=sockets.so/ s/^#//;
    /^;extension=openssl.so/ s/^;//;
    /^#extension=openssl.so/ s/^#//;
    /^;extension=ftp.so/ s/^;//;
    /^#extension=ftp.so/ s/^#//;
    /^;extension=zip.so/ s/^;//;
    /^#extension=zip.so/ s/^#//;
    /^;open_basedir/ s/^;//;
    /^#open_basedir/ s/^#//;
    /^open_basedir/ s/:\/etc//;
    /^open_basedir/ s/:\/etc\///;
    /^open_basedir/ s/$/:\/etc/;
    /^open_basedir/ s/:\/srv\/http\/zoneminder//;
    /^open_basedir/ s/:\/srv\/http\/zoneminder\///;
    /^open_basedir/ s/$/:\/srv\/http\/zoneminder/;
    /^open_basedir/ s/:\/var\/cache\/zoneminder//;
    /^open_basedir/ s/:\/var\/cache\/zoneminder\///;
    /^open_basedir/ s/$/:\/var\/cache\/zoneminder/;
    ' /etc/php/php.ini
  sed -i '
    /^LoadModule php5_module modules\/libphp5.so/d;
    /^LoadModule rewrite_module modules\/mod_rewrite.so/ s/$/\nLoadModule php5_module modules\/libphp5.so/;
    /^# PHP 5/d;
    /^# ZoneMinder/d;
    /^Include \/etc\/httpd\/conf\/extra\/php5_module.conf/d;
    /^Include \/etc\/httpd\/conf\/extra\/httpd-zoneminder.conf/d;
    /^Include conf\/extra\/httpd-default.conf/ s/$/\n\n# PHP 5\n\Include \/etc\/httpd\/conf\/extra\/php5_module.conf\n\n# ZoneMinder\nInclude \/etc\/httpd\/conf\/extra\/httpd-zoneminder.conf/;
    ' /etc/httpd/conf/httpd.conf
  gpasswd -a http video
  cat << EOF
Note for mysql:
==> To run Zoneminder, you must install the database running mysql service (as root):
==> "systemctl start mysqld.service"
==> and add Zoneminder database typing (with passsword):
==> "mysqladmin --defaults-file=/etc/mysql/my.cnf -p -f reload"
==> "cat /usr/share/zoneminder/db/zm_create.sql | mysql --defaults-file=/etc/mysql/my.cnf -p"
==> "echo 'grant lock tables, alter,select,insert,update,delete on zm.* to 'zmuser'@localhost identified by "zmpass";' | mysql --defaults-file=/etc/mysql/my.cnf -p mysql"
==> (or without passsword):
==> "mysqladmin --defaults-file=/etc/mysql/my.cnf -f reload"
==> "cat /usr/share/zoneminder/db/zm_create.sql | mysql --defaults-file=/etc/mysql/my.cnf"
==> "echo 'grant lock tables, alter,select,insert,update,delete on zm.* to 'zmuser'@localhost identified by "zmpass";' | mysql --defaults-file=/etc/mysql/my.cnf mysql"

Note for sysctl:
==> You must uncomment that line in /etc/sysctl.d/sysctl-zoneminder.conf:
==> "kernel.shmall = 524288000"
==> "kernel.shmmax = 524288000"

Note for php:
==> You must uncomment that line in /etc/php/php.ini:
==> "extension=mysql.so"
==> check and make sure these are uncommented:
==> "extension=gd.so"
==> "extension=gettext.so"
==> "extension=mcrypt.so"
==> "extension=mysqli.so"
==> "extension=session.so"
==> "extension=sockets.so"
==> "extension=openssl.so"
==> "extension=ftp.so"
==> "extension=zip.so"
==> check and add to open_basedir "/etc", 
==> "/srv/http/zoneminder" and "/var/cache/zoneminder" like so
==> "open_basedir = /home:/tmp:/usr/share/pear:/etc:/srv/http/zoneminder:/var/cache/zoneminder"
==> and set your timezone in php.ini:
==> "date.timezone = <your_zone>/<your_city>"

Note for apache:
==> You must edit /etc/httpd/conf/httpd.conf and add the line:
==> "LoadModule php5_module modules/libphp5.so"
==> and:
==> "Include /etc/httpd/conf/extra/php5_module.conf"
==> "Include /etc/httpd/conf/extra/httpd-zoneminder.conf"
EOF
}

post_upgrade() {
  post_install
  _mysqld=$(systemctl status mysqld.service | grep -o 'inactive (dead)')
  [[ _mysqld == 'inactive (dead)' ]] && systemctl start mysqld.service
  /usr/bin/zmupdate.pl -f >/dev/null
  [[ _mysqld == 'inactive (dead)' ]] && systemctl stop mysqld.service
}

post_remove() {
  _zms=$(systemctl status zoneminder.service | grep -o 'active (running)')
  [[ _zms == 'active (running)' ]] && systemctl stop zoneminder.service
  [[ -d /tmp/zoneminder ]] && rm -vr /tmp/zoneminder
  sed -i '
    /^open_basedir/ s/:\/srv\/http\/zoneminder//;
    /^open_basedir/ s/:\/srv\/http\/zoneminder\///;
    /^open_basedir/ s/:\/var\/cache\/zoneminder\///
    ' /etc/php/php.ini
  sed -i '
    /^# ZoneMinder/d;
    /Include \/etc\/httpd\/conf\/extra\/httpd-zoneminder.conf/d;
    ' /etc/httpd/conf/httpd.conf
  cat << EOF
Note:
==> To clean Zoneminder mysql database, run as root (with password):
==> "echo 'delete from user where User="zmuser";' | mysql --defaults-file=/etc/mysql/my.cnf -p mysql"
==> "echo 'delete from db where User="zmuser";' | mysql --defaults-file=/etc/mysql/my.cnf -p mysql"
==> "mysqladmin --defaults-file=/etc/mysql/my.cnf -p -f drop zm"
==> (or without password):
==> "echo 'delete from user where User="zmuser";' | mysql --defaults-file=/etc/mysql/my.cnf mysql"
==> "echo 'delete from db where User="zmuser";' | mysql --defaults-file=/etc/mysql/my.cnf mysql"
==> "mysqladmin --defaults-file=/etc/mysql/my.cnf -f drop zm"

==> Disable http with php if it isn't needed with others servers, 
==> comment or remove that lines in /etc/httpd/conf/httpd.conf:
==> "LoadModule php5_module modules/libphp5.so"
==> "Include /etc/httpd/conf/extra/php5_module.conf"

==> Remove line in /etc/httpd/conf/httpd.conf:
==> "Include /etc/httpd/conf/extra/httpd-zoneminder.conf"

==> Disable php with mysql if it isn't needed with others servers, 
==> comment that lines in /etc/php/php.ini:
==> "extension=mysql.so"
==> "extension=gd.so"
==> "extension=gettext.so"
==> "extension=mcrypt.so"
==> "extension=mysqli.so"
==> "extension=session.so"
==> "extension=sockets.so"
==> "date.timezone = <my_zone>/<my_city>"

==> Drop http user on video group if it isn't needed with others servers:
==> gpasswd -d http video

==> Edit /etc/php/php.ini and remove "/etc", "/srv/http/zoneminder" and "/var/cache/zoneminder"
==> in the "open_basedir".

==> Remove log files and "zonemider" directory in "/var/log/zoneminder".

==> Backup and remove "events", "images" and "temp" dirs in "/var/cache/zoneminder".
EOF
}