#!/bin/bash

#--------------------------------------------------
# PARAMERTY

MYDIR=`pwd`

SOSDIR="/home/sos"
SOSUSER="sos"

VERSION="2.0.4"
VERSIONDATE="2005.02.12"

TMP="./tmpfile.tmp"
TMP2="./tmpfile2.tmp"

#--------------------------------------------------

#----------------------------------
RES_COL=60
MOVE_TO_COL="echo -en \\033[${RES_COL}G"
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;33m"
SETCOLOR_NORMAL="echo -en \\033[0;39m"
SETCOLOR_INFO="echo -en \\033[1;37m\\033[44m"

#----------------------------------
function echo_OK() 
{
  $MOVE_TO_COL
  echo -n "[  "
  $SETCOLOR_SUCCESS
  echo -n "OK"
  $SETCOLOR_NORMAL
  echo -n "  ]"
  echo -ne "\n"
#  sleep 1
}
#----------------------------------
function echo_ERROR()
{
  $MOVE_TO_COL
  echo -n "["
  $SETCOLOR_FAILURE
  echo -n " BLAD "
  $SETCOLOR_NORMAL
  echo -n "]"
  echo -ne "\n"
}
#----------------------------------
function echo_WARNING()
{
  $MOVE_TO_COL
  echo -n "["
  $SETCOLOR_WARNING
  echo -n "UWAGA!"
  $SETCOLOR_NORMAL
  echo -n "]"
  echo -ne "\n"
}

#----------------------------------
function Error()
{
 echo_ERROR
 echo -e "BLAD $1: $2"
 echo ""
 echo "Nacisnij [Enter]...."
 read
 echo "Instalacja przerwana."
 exit 1
}
#----------------------------------
function Warning()
{
 echo_WARNING
 echo -e "Ostrzezenie $1: $2"
 echo "Nacisnij [Enter]...."
 read
}
#----------------------------------


#----------------------------------
function Info()
{
 clear
 cat << EOF
                       (C) 2003-2005 SoftService
           http://sos.softservice.com.pl sos@softservice.com.pl
--------------------------------------------------------------------------------
                SOS - System Obslugi Sprzedazy dla systemow linux
                       wersja: $VERSION ($VERSIONDATE)

--------------------------------------------------------------------------------
                                               Witamy w programie instalacyjnym.
--------------------------------------------------------------------------------

EOF
}
#----------------------------------
function CheckTERM()
{
 echo -n "Sprawdzam terminal..."
 if [ "$TERM" != "linux" ]
 then
   Warning "1" "Skryp powinien byc uruchominy na konsoli"
 else
   echo_OK
 fi
}   
#----------------------------------
function CheckROOT()
{
 echo -n "Sprawdzam uzytkownika..."
 if [ "$USER" != "root" ]
 then
   Warning "1" "Skryp musi byc uruchominy przez uzytkownika: root\nPrzy braku uprawnien root-a instalacja zakonczy sie niepowodzeniem."
 else
   echo_OK
 fi
}   
#----------------------------------
function CheckMySQL()
{
 if [ "${MYSQLADM_HOST}" != "localhost" ]; then
   return
 fi  
 echo -n "Sprawdzam demona mysql..."
 c=`$PS ax|$GREP -c 'mysqld'`
 if [ "${c}" == "1" ]
 then
   Error "2" "Przed instalacja prosze uruchomic baze danych mySQL\n\tNajczesciej: /etc/rc.d/init.d/mysqld start"
 else
   echo_OK
 fi
}  
#----------------------------------
function CheckPrgs()
{
 PRG=$1
 echo -n "Sprawdzam dostep do programu $PRG"
 PRG1=`basename $PRG`
 if [ "${PRG}" == "${PRG1}" ]; then
   ret=`type -P $PRG`
   if [ "${ret}" == "" ]; then
     if [ "${2}" == "1" ]; then
        Error "1" "Nie odnaleziono programu $PRG"
     else
        Warning "1" "Nie odnaleziono programu $PRG"
     fi
   else
    echo_OK 
   fi
 else
   if [ -f $PRG ]; then
     ret="$PRG"
     echo_OK
   else          
     if [ "${2}" == "1" ]; then
       Error "1" "Nie odnaleziono programu $PRG"
     else  
        Warning "1" "Nie odnaleziono programu $PRG" 
     fi
   fi
 fi
 
 case "$1" in
    "$INSTALL")		INSTALL="$ret";;
    "$CP")		CP="$ret";;
    "$GREP")		GREP="$ret";;
    "$USERADD")		USERADD="$ret";;
    "$GROUPADD")	GROUPADD="$ret";;
    "$SETFONT")		SETFONT="$ret";;
    "$LOADKEYS")	LOADKEY="$ret";;
    "$PS")		PS="$ret";;
    "$MYSQL")		MYSQL="$ret";;
    "$RM")		RM="$ret";;
    "$MV")		MV="$ret";;
    "$DATE")		DATE="$ret";;
    "$MYSQLDUMP")	MYSQLDUMP="$ret";;
    "$GZIP")		GZIP="$ret";;
    "$TAR")		TAR="$ret";;
    "$USERDEL")		USERDEL="$ret";;
    "$CHMOD")		CHMOD="$ret";;
    "$CHOWN")		CHOWN="$ret";;
    "$PASSWD")		PASSWD="$ret";;
 esac
} 
#----------------------------------
function Set_PL_KEYS_MODE()
{
 if [ "${SETFONT}" == "" ]; then
  echo "BLAD 2:"
  echo -e "\tNie odnaleziono zadnego programu do obslugi"
  echo -e "\tznakow narodowych na konsoli."
  echo -e "\tProsze zainstalowac pakiet kbd"
  echo -e "\tInstalacja przerwana."
  echo -n "Nacisnij [Enter]...."
  read
  echo ""
  exit 1
 else
  PL_KEYS_MODE=2
  echo "Do obslugi polskich znakow bedzie uzywany pakiet KBD"
 fi
}
#----------------------------------
function SetDBServer()
{
 echo
 echo
 echo "---------------------------------------------------------------------"
 echo "Czy instalowac bazy danych na tym komputerze ?"
 echo "Bazy powinny znajdowac sie TYLKO na jednym wybranym serwerze."
 echo "Wybierz rodzaj instalacji dla tego stanowiska:"

 echo "1) Instalacja programu i baz danych"
 echo "2) Instalacja tylko programu do zdalnego polaczenia z baza danych"
 notset=true
 while [ $notset == true ]; do
  echo -n "(1/2) i [enter]..."
  read m
  case "$m" in
    "1")	MYSQLADM_HOST="localhost";
		notset=false;;
    "2")	MYSQLADM_HOST="";
		notset=false;;
  esac
 done
 
 if [ "${MYSQLADM_HOST}" == "localhost" ]; then
   echo "Wybrano tryb pelnej instalacji."
   return
 fi
 
 while [ true ]; do
  echo "Prosze podac adres serwera z serwerem bazy mySQL:"
  read MYSQLADM_HOST
  echo "Serwer mySQL: $MYSQLADM_HOST"
  echo -n "Dane poprawne ? [T/N] i [Enter]..."
  read a
  if [ "${a}" == "T" ]; then
     return
  fi
  if [ "${a}" == "t" ]; then
     return
  fi
 done
}  
#----------------------------------
function CheckMySQLAccess()
{
 echo -n "Sprawdzam demona mysql..."
 c=`$PS ax|$GREP -c 'mysqld'`
 if [ "${c}" == "1" ]
 then
   Error "2" "Przed instalacja prosze uruchomic baze danych mySQL\n\tNajczesciej: /etc/rc.d/init.d/mysqld start"
 else
   echo_OK
 fi
}  
#----------------------------------
function MySqlAdmin()
{
 while [ true ]; do
    if [ "${MYSQLADM_NAME}" == "" ]; then
	echo -n "Podaj nazwe administratora bazy danych mySQL..:"
	read MYSQLADM_NAME
    fi
    if [ "${MYSQLADM_PASS}" == "" ]; then
	echo -n "Podaj haslo dostepu administratora bazy danych:"
	read MYSQLADM_PASS
    fi  
    
    CheckMySQLAccess
    
    echo "exit" > $TMP
    $MYSQL --host="$MYSQLADM_HOST" --user="$MYSQLADM_NAME" --password="$MYSQLADM_PASS" mysql < $TMP > /dev/null
    ret=${?}
    $RM -f $TMP
    if [ "${ret}" == "0" ]; then
	return
    else
	echo "Nazwa administratora lub podane haslo jest nieprawidlowe."
	echo "Sprobuj ponownie."
	echo
	MYSQLADM_NAME=""
	MYSQLADM_PASS=""
    fi  
 done
}
#----------------------------------
function CheckMySQL()
{
 $MYDIR/scripts/mysql_chk_ver
 r=${?}
 if [ "${r}" != "0" ]; then
   Error "mysql" "Nie mozna uruchomic klienta mySQL"
 fi
   
 CheckPrgs $MYSQL	1
 MySqlAdmin
}  
#----------------------------------
function CheckSOSDB()
{
 echo -n "Sprawdzam wczesniejsza instalacje..."

 $RM -f $TMP
 $RM -f $TMP2
 echo "exit" > $TMP
 $MYSQL sos --host="$MYSQLADM_HOST" --user="$MYSQLADM_NAME" --password="$MYSQLADM_PASS" < $TMP > $TMP2 2>/dev/null
 r=${?}
 if [ "${r}" != "0" ]; then
   $RM -f $TMP
   $RM -f $TMP2
   echo_OK
   return
 fi

 $RM -f $TMP
 $RM -f $TMP2
 
 echo
 echo "Wykryto juz utworzona baze SOS"
 echo "Prosze wybrac UAKTUALNIENIE z glownego menu instalacji,"
 echo "lub DEINSTALACJE aby usunac zainstalowany wczesniej pakiet SOS"
 Error "x" "Wykryto wczesniejsza wersje"
}  
#----------------------------------
function MakeHOME()
{
 echo
 echo "-----------------------------------------------------------------"
 echo "Aby zainstalowac pakiet nalezy utworzyc w sytemie nowe konto"
 echo "dla uzytkownika, poprzez ktore bedzie uruchamiany SOS."

 czytaj=true
 while [ $czytaj == true ]; do     
    echo -n "Nazwa systemowa uzytkownika SOS (domyslnie: $SOSUSER):" 
    read SOSUSER_TMP
    if [ "${SOSUSER_TMP}" == "" ]; then 
	SOSUSER_TMP="$SOSUSER"
    fi  
    SOSDIR="/home/$SOSUSER_TMP"
    echo -n "Katalog domowy uzytkownika $SOSUSER_TMP (domyslnie: $SOSDIR):"
    read SOSDIR_TMP
    if [ "${SOSDIR_TMP}" == "" ]; then 
	SOSDIR_TMP="$SOSDIR"
    fi  
    echo
    echo "Wybrales:"
    echo "Uzytkownik: $SOSUSER_TMP"
    echo "Katalog...: $SOSDIR_TMP"
    echo -n "Dane poprawne ? [T/N] i [Enter]..."
    read a
    if [ "${a}" == "T" ]; then
	czytaj=false
    fi
    if [ "${a}" == "t" ]; then
	czytaj=false
    fi
 done  
  
 SOSUSER="$SOSUSER_TMP"
 SOSDIR="$SOSDIR"
   
 $GROUPADD "$SOSUSER"
 $USERADD -d "$SOSDIR" -g "$SOSUSER" -s "$SOSDIR/menu.sh" "$SOSUSER"
 ret=${?}
 if [ "${ret}" != "0" ]; then
    echo "BLAD:"
    echo "Nie mozna utworzyc konta dla uzytkownika SOS." 
    echo "Mozliwe, ze ten uzytkownik byl juz zarejestrowany w systemie"
    echo -n "Kontynuowac instalacje ? [T/N]"
    read a
    if [ "${a}" == "t" ]; then
	return
    fi
    if [ "${a}" == "T" ]; then
	return
    fi
    exit 1
 fi             
 
 echo
 echo
 echo "Ustalenie hasla do logowania dla uzytkownika $SOSUSER"
 $PASSWD $SOSUSER
 echo
 
 echo -n "Sprawdzam katalog $SOSDIR"
 if [ -d $SOSDIR ]; then
   echo_OK
 else
   mkdir $SOSDIR
 fi    
 chown $SOSUSER:$SOSUSER $SOSDIR
}
#----------------------------------
function ICopy()
{
 echo -n "Kopiowanie $1..."

 $INSTALL -D -o $SOSUSER -g $SOSUSER -m $2 $MYDIR/$1 $SOSDIR/$1
 r=${?}
 if [ "${r}" != "0" ]
 then
   Error "6" "instalacji pliku $1"
 else
   echo_OK
 fi
}
#----------------------------------
function ICopyD()
{
 echo -n "Zakladam katalog $1..."
 $INSTALL -d -D -o $SOSUSER -g $SOSUSER $SOSDIR/$1/
 r=${?}
 if [ "${r}" != "0" ]
 then
   Error "6" "tworzenia katalogu /home/sos/$1"
 else
   echo_OK
 fi
}
#----------------------------------
function CopyInstall()
{
 ICopyD "tmp"
 ICopyD "bin"
 ICopyD "cfg_def"
 ICopyD "res"
 ICopyD "log"
 ICopyD "lib"
 ICopyD "pl"
 
 ICopy "pl/lat2a-16.psfu.gz"	"644"
 ICopy "pl/latin2u.trans"	"644"
 ICopy "pl/pl.map.gz"		"644"
 ICopy "pl/sos.map.gz"		"644"
 ICopy "pl/sos.psf.gz"		"644"
 ICopy "pl/trivial"		"644"

 ICopy "bin/sos-mg"		"700"
 ICopy "bin/sos-ext02"		"700"
 
 if [ "${MYSQLADM_HOST}" == "localhost" ]; then
    ICopy "bin/sos-adm"		"700"
    ICopy "res/user_notes"	"664"
 fi
 
 ICopy "cfg_def/DeskJet"	"600"
 ICopy "cfg_def/DeskJet.ISO"	"600"
 ICopy "cfg_def/OkiMicroline"	"600"
 ICopy "cfg_def/OkiMicroline.ISO"	"600"
 ICopy "cfg_def/DeskJet610C"	"600"
 ICopy "cfg_def/DeskJet610C.ISO"	"600"

}
#----------------------------------
function CreateDBD()
{
 if [ "${MYSQLADM_NAME}" == "" ]; then
    Error "mySQL" "Nie podano nazwy administratora bazy danych"
 fi
 if [ "${MYSQLADM_PASS}" == "" ]; then
    Error "mySQL" "Nie podano hasla administratora bazy danych"
 fi

 $MYDIR/scripts/sos_db_check -h localhost -u "${MYSQLADM_NAME}" -p "${MYSQLADM_PASS}"
 r=${?}
 if [ "${r}" != "0" ]; then
    Error "mySQL" "Nie mozna utworzyc pliku definicji baz pakietu SOS" 
 fi

 $INSTALL -D -o $SOSUSER -g $SOSUSER -m 600 $MYDIR/mysql_sos_mg.txt $SOSDIR/res/mysql_sos_mg.txt
 $RM -f $MYDIR/mysql_sos_mg.txt

 $INSTALL -D -o $SOSUSER -g $SOSUSER -m 600 $MYDIR/mysql_sos_sos.txt $SOSDIR/res/mysql_sos_sos.txt
 
 echo "CREATE DATABASE sos" > $TMP
 $MYSQL mysql --host=localhost --user="${MYSQLADM_NAME}" --password="${MYSQLADM_PASS}" < $TMP
 r=${?}
 if [ "${r}" != "0" ]; then
   Error "mySQL" "Nie mozna utworzyc glownej baz pakietu SOS" 
 fi
 $RM $TMP

 $MYSQL sos --host=localhost --user="${MYSQLADM_NAME}" --password="${MYSQLADM_PASS}" < $MYDIR/mysql_sos_sos.txt
 r=${?}
 if [ "${r}" != "0" ]; then
   Error "mySQL" "Nie mozna utworzyc tabel w glownej bazie pakietu SOS" 
 fi
 $RM -f $MYDIR/mysql_sos_sos.txt

 $RM -f $MYDIR/sql_update.txt
}
#----------------------------------


#----------------------------------
function DeleteSOSUser()
{
 echo -n "Nazwa systemowa uzytkownika SOS (domyslnie: $SOSUSER):" 
 read SOSUSER_TMP
 
 if [ "${SOSUSER_TMP}" == "" ]; then
   SOSUSER="sos"
 else
   SOSUSER="$SOS_USER_TMP"
 fi
 
 echo -n "Usuwam konto sos"
 $USERDEL -r $SOSUSER
 if [ "${?}" != "0" ]
 then
    Error "userdel" "-"
 else
   echo_OK
 fi
}
#----------------------------------
function DeleteDB()
{
 echo "Usunac bazy pakietu SOS (o ile sa zalozone na tym komputerze)?"
 echo -n "[tak/nie]"
 read a
 if [ "${a}" != "tak" ]
 then
    exit 1
 fi

 MySqlAdmin

 echo "SELECT DB_Name FROM SOS_DB;" > $TMP 

 echo -n "Lista baz danych pakietu"
 $MYSQL sos -N --host=localhost --user="${MYSQLADM_NAME}" --password="${MYSQLADM_PASS}" < $TMP > $TMP2
 r=${?}
 echo "sos" >> $TMP2
 if [ "${r}" != "0" ] 
 then
    Error "mysql" "Nie mozna utworzyc listy baz SOS"
 fi
 echo_OK
 
 for i in `cat $TMP2`
 do
   echo -n "Usuwam baze $i  "
   echo "DROP DATABASE $i;" > $TMP
   $MYSQL $i --host=localhost --user="${MYSQLADM_NAME}" --password="${MYSQLADM_PASS}" < $TMP
   if [ "${?}" != "0" ]
   then
      Error "mysql" "Nie mozna usunac bazy"
   fi
   echo_OK
 done

 $RM -f $TMP2   
 $RM -f $TMP
}
