aboutsummaryrefslogtreecommitdiffstats
path: root/mayor-mod
diff options
context:
space:
mode:
authorM.Gergo2018-07-06 11:13:06 +0200
committerM.Gergo2018-07-06 11:13:06 +0200
commit50310b0e4513ee3fcce67351ae61e8fff851130e (patch)
treefd2e4a73f94a61cd5040f863579149ed97c701a3 /mayor-mod
parent630f5353ed7a264b0fa17badd62f71a02265a4f7 (diff)
downloadmayor-50310b0e4513ee3fcce67351ae61e8fff851130e.tar.gz
mayor-50310b0e4513ee3fcce67351ae61e8fff851130e.zip
Mappák átnevezve: mayor --> mayor-mod; mayor-installer --> mayor-installer-mod; mayor-installer-fcgi --> mayor-installer-fcgi-mod
Diffstat (limited to 'mayor-mod')
-rw-r--r--mayor-mod/bin/backup.sh317
-rw-r--r--mayor-mod/bin/crypt-backup.sh144
-rw-r--r--mayor-mod/bin/decrypt-backup.sh138
-rwxr-xr-xmayor-mod/bin/etc/cron.daily/mayor13
-rw-r--r--mayor-mod/bin/help.sh47
-rw-r--r--mayor-mod/bin/lock.sh42
-rwxr-xr-xmayor-mod/bin/mayor74
-rw-r--r--mayor-mod/bin/remote-backup.sh170
-rw-r--r--mayor-mod/bin/restore.sh257
-rwxr-xr-xmayor-mod/bin/sbin/eNaploBackup.sh95
-rwxr-xr-xmayor-mod/bin/sbin/eNaploRestore.sh82
-rw-r--r--mayor-mod/bin/sbin/update.sh33
-rw-r--r--mayor-mod/bin/tex2pdf.sh24
-rw-r--r--mayor-mod/bin/unlock.sh49
-rw-r--r--mayor-mod/bin/update.sh227
-rw-r--r--mayor-mod/bin/xetex2pdf.sh36
-rw-r--r--mayor-mod/update/processUpdateScripts.sh267
-rw-r--r--mayor-mod/update/processUpdateScripts.sh.mod.txt183
-rw-r--r--mayor-mod/update/processUpdateScripts.sh.orig259
-rw-r--r--mayor-mod/www/include/modules/naplo/share/file.php662
20 files changed, 3119 insertions, 0 deletions
diff --git a/mayor-mod/bin/backup.sh b/mayor-mod/bin/backup.sh
new file mode 100644
index 00000000..152a9b7c
--- /dev/null
+++ b/mayor-mod/bin/backup.sh
@@ -0,0 +1,317 @@
+#!/bin/bash
+
+OPT_SPEC="hnlf:d::"
+LONG_OPT_SPEC="help,now,skip-lock,file:,backup-file:,dir:,backup-dir::"
+PARSED_OPTIONS=$(getopt -n "$0" -a -o $OPT_SPEC --long $LONG_OPT_SPEC -- "$@")
+OPTIONS_RET=$?
+eval set -- "$PARSED_OPTIONS"
+
+help_usage() {
+cat <<EOF
+
+Backup használata: mayor backup [opciók]
+
+A parancs segítségével menthetjük a MaYoR rendszer adatbázisait, aktuális forrását és
+beállításait. A mentés alapértelmezetten az aktuális dátum alapján lesz elnevezve
+"YYYYmmdd.tgz" alakban (pl. $DATE.tgz).
+
+Lehetőség van azonnali mentésre, akkor is, ha már volt aznap mentés,
+ehhez használjuk a --now kapcsolót.
+
+A mentési könyvtár, a szükséges jelszavak és egyéb mentési paraméterek beállításait a
+/etc/mayor/main.conf állományban kell megadni.
+
+Újdonság:
+ Ezentúl a backup folyamat egyben a napló Lock-file -vel történő ideiglenes zárolásával jár,
+ ha ezt el szeretnénk kerülni, akkor használjuk a --skip-lock kapcsolót.
+
+Opciók:
+ -h, --help: A parancs leírása (amit most olvasol...)
+ -f, --file, --backup-file: A mentési állomány neve
+ -d, --dir, --backup-dir: A mentési könyvtár elérési útja
+ -l, --skip-lock: A mellőzi a mayor zárolását a backup futása alatt.
+ -n, --now: Mentést készít most/azonnal.
+
+EOF
+}
+
+#if [ $OPTIONS_RET -ne 0 ] || [ $# -le 1 ]; then help_usage; exit; fi
+if [ $OPTIONS_RET -ne 0 ]; then help_usage; exit; fi
+
+BACKUPFILE="$DATE"
+while [ $# -ge 1 ]; do
+ case $1 in
+ --help | -h ) help_usage
+ exit
+ ;;
+
+ --backup-file | --file | -f ) shift
+ BACKUPFILE="$1"
+ echo "Backup fájl: $BACKUPFILE"
+ ;;
+
+ --backup-dir | --dir | -d ) shift
+ BACKUPDIR="$1"
+ echo "Backup könyvtár: $BACKUPDIR"
+ ;;
+
+ --skip-lock | -l ) SKIPLOCK=1
+ ;;
+
+ --now | -n ) shift
+ DATE=$(date "+%Y%m%d_%H%M%S")
+ BACKUPFILE="$DATE"
+ #echo "Backup fájl: $BACKUPFILE.tgz"
+ ;;
+
+ -- ) shift
+ break
+ ;;
+
+ * ) echo "HIBA: ismeretlen opció: $1" # ide elvileg sose jutunk, mert a getopts már kiszűrte a hibás paramétereket...
+ exit
+ ;;
+ esac
+ shift
+done
+
+###########################
+
+if [ -z $BACKUPDIR ]; then
+ if [ -f ../config/backup.conf ]; then
+ echo "WARNING: elavult konfigurációs állomány! (backup.conf)"
+ echo " A frissítési rendszer a korábbi backup.conf és update.conf állományok helyett"
+ echo " egy új, rögzített helyen lévő állományt használ: /etc/mayor/main.conf"
+ echo " Most - ennek hiányában - a régebbi állományt használjuk"
+ . ../config/backup.conf
+ else
+ echo -e "\n\nERROR: Hiányzó konfigurációs file: ../config/backup.conf"
+ pwd
+ exit 11
+ fi
+fi
+
+### A lockfile beállítása
+
+LOCK_MARAD=0
+if [ "$SKIPLOCK" != "1" ]; then
+ if [ ! -z $LOCKFILE ] && [ ! -f $LOCKFILE ]; then
+ if [ "$VERBOSE" -gt 0 ]; then
+ echo -e "* A web-es elérés letiltása:"
+ echo -n "- Lock-file létrehozása... "
+ echo -e "kész."
+ fi
+ echo "$DATE: Backup fut... " > $LOCKFILE
+# echo -n " - Aktív munkamenetek törlése... " ### erre elvileg itt nincs szükség
+# $MYSQL $MYSQL_PARAMETERS -e"DELETE FROM mayor_login.session"
+# echo "kész."
+ else
+ if [ $VERBOSE -gt 1 ]; then echo -e "* A web-es elérés már le van tiltva..."; fi
+ LOCK_MARAD=1
+ fi
+else
+ if [ $VERBOSE -gt 1 ]; then echo -e "* A lock-olást a kérésedre kihagytam..."; fi
+fi
+
+function freeup_lock {
+if [ -e $LOCKFILE ]; then
+ if [ ! -z $LOCKFILE ] && [ $LOCK_MARAD != 1 ]; then
+ if [ $VERBOSE -gt 1 ]; then echo -e "-"; echo -n "* A web-es hozzáférés engedélyezése:..."; fi
+ rm $LOCKFILE
+ if [ $VERBOSE -gt 1 ]; then echo -e "kész."; echo -e "-"; fi
+ fi
+fi
+}
+
+
+##
+# A könyvtárak létrehozása
+##
+
+if [ ! -e $BACKUPDIR ]; then
+ mkdir $BACKUPDIR > /dev/null 2>&1
+ if [ $? -ne 1 ]; then
+ echo "*** Nem sikerült a $BACKUPDIR könyvtárat létrehozni!"
+ echo "**** MaYoR Backup failure! ****"
+ freeup_lock
+ exit 1
+ fi
+fi
+chown $WEB_SERVER_USER $BACKUPDIR
+chmod 700 $BACKUPDIR
+
+if [ -e $BACKUPDIR/$BACKUPFILE.tgz ]; then
+ echo -e "\n**** ERROR: már volt mentés: $BACKUPDIR/$BACKUPFILE.tgz ****\n"
+ freeup_lock
+ exit 1
+fi
+mkdir $BACKUPDIR/$BACKUPFILE
+chown $WEB_SERVER_USER $BACKUPDIR/$BACKUPFILE
+chmod 700 $BACKUPDIR/$BACKUPFILE
+
+##
+# mysql adatbázis mentése
+##
+if [ $VERBOSE -gt 0 ]; then
+ echo -e "-"
+ echo -e "* Backup fájl: $BACKUPFILE.tgz"
+fi
+
+if [ "$MYSQL_HOST" == "" ]; then
+ MYSQL_HOST="localhost"
+fi
+
+DB_INTEZMENYEK=''
+if [ -f $MYSQL ] && [ -f $MYSQLDUMP ]; then
+
+ if [ -f "$BASEDIR/config/my.cnf" ]; then
+ MYSQL_CONFIG="--defaults-extra-file=$BASEDIR/config/my.cnf" ##Vigyázat! a 'mysql' kliens rossz! Néha beleveszi a $(pwd) tartamát is!
+ TEST=$(echo "SHOW VARIABLES LIKE '%character_set_client%'" | $MYSQL "$MYSQL_CONFIG" | tail -n+2 | cut -f 2)
+### Csak character_set_client=utf8 engedélyezett
+ if [ "$TEST" == "utf8" ]; then
+ if [ $VERBOSE -gt 2 ]; then echo -e "- MySQL-connect OK (my.cnf)" ; fi
+ else
+ MYSQL_CONFIG="-h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PW --default-character-set=utf8"
+ fi
+ else
+ MYSQL_CONFIG="-h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PW --default-character-set=utf8"
+ fi
+
+### Ellenőrizzük
+ TEST=$(echo "SHOW VARIABLES LIKE '%character_set_client%'" | $MYSQL $MYSQL_CONFIG | tail -n+2 | cut -f 2)
+ if [ "$TEST" == "utf8" ]; then
+ if [ $VERBOSE -gt 2 ]; then echo -e "- MySQL-connect OK (utf8+user/passw)"; fi
+ else
+ echo -e "*** MySQL-connect ERROR (nem utf8 vagy hibás user/passw)"
+ exit 2
+ fi
+
+ DATABASES=''
+ for DB in $(echo 'SHOW DATABASES' | $MYSQL $MYSQL_CONFIG); do
+ if [[ ! $EXCLUDED_DBS =~ .*$DB.* ]] && { [[ $DB =~ ^mayor.* ]] || [[ $DB =~ ^naplo.* ]] || [[ $DB =~ ^intezmeny.* ]]; } then
+ DATABASES="$DATABASES $DB"
+ fi
+ done
+ DB_INTEZMENYEK=$($MYSQL $MYSQL_CONFIG -e "SET NAMES 'utf8'; SELECT rovidNev FROM mayor_naplo.intezmeny; " | tail -n+2 ) ### Elvileg itt sem lehetne ékezetes
+
+else
+ echo -e "*** MySQL ERROR: A mysql kliens nem található: $MYSQL\n"
+ freeup_lock
+ exit 2
+fi
+
+
+##
+# Adatbázisok mentése
+##
+
+if [ $VERBOSE -gt 2 ]; then echo -e "* Adatbázisok mentése:"; fi
+
+for DATABASE in $DATABASES; do
+ if [ ! -z $MYSQLDUMP ]; then
+ ### SET NAMES-hez: --set-charset
+ ### Szebb: --result-file=file_name
+# mysqldump $MYSQL_CONFIG -R --set-charset --result-file="$BACKUPDIR/$BACKUPFILE/$DATABASE.sql" $DATABASE
+ $MYSQLDUMP $MYSQL_CONFIG -R --set-charset --result-file="$BACKUPDIR/$BACKUPFILE/$DATABASE.sql" $DATABASE
+ else
+ mysqldump $MYSQL_CONFIG -R --set-charset --result-file="$BACKUPDIR/$BACKUPFILE/$DATABASE.sql" $DATABASE
+ fi
+ if [ $VERBOSE -gt 3 ]; then echo -e "- $DATABASE"; fi
+done
+
+
+##
+# A honlap mentése
+##
+if [ $VERBOSE -gt 2 ]; then echo -e "* Fájlok mentése:"; fi
+mkdir $BACKUPDIR/$BACKUPFILE/log
+cp -a $BASEDIR/log/revision $BACKUPDIR/$BACKUPFILE/log/revision
+if [ $VERBOSE -gt 3 ]; then echo -e "- revision"; fi
+cp -a $BASEDIR/www $BACKUPDIR/$BACKUPFILE/www
+if [ $VERBOSE -gt 3 ]; then echo -e "- www/*"; fi
+cp -a $BASEDIR/config $BACKUPDIR/$BACKUPFILE/config
+if [ $VERBOSE -gt 3 ]; then echo -e "- config/*"; fi
+
+if [ $VERBOSE -gt 2 ]; then echo -e "* Templétek mentése:"; fi
+for RN in $(echo $DB_INTEZMENYEK); do ## a nyomtatási templétek is legyenek benne a mentésben
+if [ -d "$BASEDIR/print/module-naplo/templates/$RN" ]; then
+ mkdir -p $BACKUPDIR/$BACKUPFILE/print/module-naplo/templates/
+ cp -a $BASEDIR/print/module-naplo/templates/$RN $BACKUPDIR/$BACKUPFILE/print/module-naplo/templates/$RN
+ if [ $VERBOSE -gt 3 ]; then echo -e "- $RN/*"; fi
+fi
+done
+
+if [ "$SAVELDAP" == 1 ]; then
+
+ ##
+ # Az LDAP adatbázis
+ ##
+ if [ $VERBOSE -gt 1 ]; then echo -e "* LDAP mentése"; fi
+
+ /etc/init.d/slapd stop
+ sleep 1
+
+ slapcat -b $BASEDN -l $BACKUPDIR/$BACKUPFILE/ldap.ldif
+
+ cp -a $LDAPDBDIR $BACKUPDIR/$BACKUPFILE/ldap
+
+ /etc/init.d/slapd start
+
+ ##
+ # LDAP konfig file-ok mentése (schema)
+ ##
+
+ mkdir $BACKUPDIR/$BACKUPFILE/etc
+ cp -a $LDAPCONFDIR $BACKUPDIR/$BACKUPFILE/etc/
+
+fi
+
+##
+# Becsomagolás
+##
+
+if [ $VERBOSE -gt 2 ]; then echo -e "* Becsaomagolás"; fi
+cd $BACKUPDIR
+#### Ez a korábbi szerintem hibás:
+#### tar cfz ${BACKUPFILE}.tgz ${DATE}
+#tar cfz ${BACKUPFILE}.tgz ${BACKUPFILE} ##Ez is néha...
+
+# ez már jó
+tar -czf "$BACKUPFILE.tgz" "$BACKUPFILE/"
+rm -rf $BACKUPFILE
+#Debian6 inkompatibilis: tar cfz ${BACKUPFILE}.tgz --remove-files ${BACKUPFILE}
+
+if [ $VERBOSE -gt 0 ]; then echo -e "* Takarítás"; fi
+##
+# Mentés átmásolása másik szerverre
+# rsync # Losonci János kiegészítése (losy@agymk.sulinet.hu)
+##
+
+if [ "$RSYNC" == 1 ]; then
+ if [ $VERBOSE -gt 2 ]; then echo -e "* RSYNC küldés"; fi
+ RSYNCBIN=$(which rsync)
+ if [ "$RSYNCBIN" != "" ]; then
+ echo $RSYNCBIN -auvE $BACKUPDIR/ $RUSER@$RHOST:$RPATH/
+ $RSYNCBIN -auvE $BACKUPDIR/ $RUSER@$RHOST:$RPATH/
+ if [ $? -ne 0 ]; then
+ echo "rsync error!"
+ fi
+ fi
+fi
+
+##
+# Elavult mentés törlése
+##
+
+declare -i BDAYS=BACKUPDAYS
+if [ $BDAYS -gt 0 ]; then
+ find $BACKUPDIR -mtime +$BDAYS -exec rm {} \;
+fi
+
+###
+## Végül a lock-olás feloldása
+#
+freeup_lock
+if [ $VERBOSE -gt 1 ]; then echo -e "* Backup-script vége.\n"; fi
+
+### \ No newline at end of file
diff --git a/mayor-mod/bin/crypt-backup.sh b/mayor-mod/bin/crypt-backup.sh
new file mode 100644
index 00000000..11e10a27
--- /dev/null
+++ b/mayor-mod/bin/crypt-backup.sh
@@ -0,0 +1,144 @@
+#!/bin/bash
+#
+# Example: mayor crypt-backup --backup-file=/tmp/wiki.tgz
+# Az eredmény a $BACKUPDIR/$DATE-crypt.tgz állományba kerül
+# (Vagy jobb lenne, ha a file nevéből venné a nevét?)
+#
+# TODO: ellenőrizni kell még, hogy van-e openssl és aespipe
+#
+
+OPT_SPEC="hf:d::"
+LONG_OPT_SPEC="help,file:,backup-file:,dir:,backup-dir::"
+PARSED_OPTIONS=$(getopt -n "$0" -a -o $OPT_SPEC --long $LONG_OPT_SPEC -- "$@")
+OPTIONS_RET=$?
+eval set -- "$PARSED_OPTIONS"
+
+help_usage() {
+cat <<EOF
+
+Crypt-backup használata: mayor crypt-backup [opciók]
+
+A parancs segítségével titkosíthatjuk meglévő mentési állományunkat. Az így kapott
+állomány akár nyilvános tárhelyen is tárolható, kibontásához az intézmény privát
+kulcsa szükséges.
+A script alapértelmezetten az aktuális dátum alapján elnevezett mentési állományt
+keres: "YYYYmmdd.tgz" alakban (pl. $DATE.tgz), ebből készít "YYYYmmdd-crypt.tgz"
+nevű állományt (pl. ${DATE}-crypt.tgz).
+
+A mentési könyvtár, a szükséges jelszavak és egyéb mentési paraméterek beállításait a
+/etc/mayor/main.conf állományban kell megadni.
+
+Opciók:
+ -h, --help: A parancs leírása (amit most olvasol...)
+ -f, --file, --backup-file: A mentési állomány neve
+ -d, --dir, --backup-dir: A mentési könyvtár elérési útja
+
+EOF
+}
+
+#if [ $OPTIONS_RET -ne 0 ] || [ $# -le 1 ]; then help_usage; exit; fi
+if [ $OPTIONS_RET -ne 0 ]; then help_usage; exit; fi
+
+BACKUPFILE="$DATE"
+while [ $# -ge 1 ]; do
+ case $1 in
+ --help | -h ) help_usage
+ exit
+ ;;
+
+ --backup-file | --file | -f ) shift
+ BACKUPFILE="$1"
+ echo "Backup fájl: $BACKUPFILE"
+ ;;
+
+ --backup-dir | --dir | -d ) shift
+ BACKUPDIR="$1"
+ echo "Backup könyvtár: $BACKUPDIR"
+ ;;
+
+ -- ) shift
+ break
+ ;;
+
+ * ) echo "HIBA: ismeretlen opció: $1" # ide elvileg sose jutunk, mert a getopts már kiszűrte a hibás paraméterek
+ exit
+ ;;
+ esac
+ shift
+done
+
+############################
+
+# mysql bináris ellenőrzése
+if [ ! -f $MYSQL ]; then
+ echo -e "\n\nERROR: A mysql kliens nem található: $MYSQL\n"
+ exit 1
+fi
+
+# Login adatbázis eléréséhez szükséges paraméterek lekérdezése a konfig-ból...
+DB=`grep db $BASEDIR/config/main-config.php | sed -e "s/$.*=\ *['|\"]//g" -e "s/['|\"];//g"`
+USER=`grep user $BASEDIR/config/main-config.php | sed -e "s/$.*=\ *['|\"]//g" -e "s/['|\"];//g"`
+PW=`grep pw $BASEDIR/config/main-config.php | sed -e "s/$.*=\ *['|\"]//g" -e "s/['|\"];//g"`
+
+# Ellenőrizzük, hogy van-e publikus kulcs - regisztrált intézmény-e
+COUNT=`$MYSQL -e 'SELECT count(publicKey) FROM mayorSsl' -p$PW -u$USER $DB | grep -i -v count`
+if [ "$COUNT" -ne "1" ]; then
+ echo "Publikus kulcsok száma: $COUNT"
+ echo "Nem regisztrált intézmény? A mentés titkosítása csak regisztrált intézmények számára érhető el!"
+ exit 2
+fi
+
+# Backup könyvtár létrehozása
+if [ ! -e $BACKUPDIR ]; then
+ mkdir $BACKUPDIR > /dev/null 2>&1
+ if [ $? -ne 0 ]; then
+ echo "Nem sikerült a ${BACKUPDIR} könyvtárat létrehozni!"
+ echo "MaYoR Backup failure!"
+ exit 3
+ fi
+fi
+CRYPTDIR=$BACKUPDIR/$DATE
+if [ ! -e $CRYPTDIR ]; then
+ mkdir $CRYPTDIR
+fi
+chown $WEB_SERVER_USER $BACKUPDIR
+chmod 700 $BACKUPDIR
+
+if [ ! -f $BACKUPFILE ]; then
+ # Próbáljuk meg a mai dátum szerinti backup-ot (alapértelmezés)
+ echo -e " HIBA: Hiányzik a kódolandó mentési állomámny: (${BACKUPFILE})\n"
+ BACKUPFILE=$BACKUPDIR/${BACKUPFILE}
+ echo "Próbáljuk a mentéi könyvtáron belül: ${BACKUPFILE}"
+ if [ ! -f $BACKUPFILE ]; then
+ echo -e " HIBA: Hiányzik a kódolandó mentési állomámny: (${BACKUPFILE})\n"
+ BACKUPFILE=$BACKUPDIR/${PREFIX}${DATE}.tgz
+ echo "Próbáljuk az alapértelmezett állománynevet: ${BACKUPFILE}"
+ if [ ! -e $BACKUPFILE ]; then
+ echo -e " HIBA: Hiányzik a kódolandó mentési állomámny: (${BACKUPFILE})\n"
+ exit 3
+ fi
+ fi
+fi
+BASENAME=`basename $BACKUPFILE`
+
+# Publikus kulcs lekérdezése
+echo 'SELECT publicKey FROM mayorSsl' | $MYSQL -p$PW -u$USER $DB | grep -v publicKey | sed -e 's/\\n/\n/g' > $CRYPTDIR/id_rsa.pub
+
+# Véletlen kulcs generálás a szimmetrikus AES kódoláshoz
+pwgen -nc 50 1 > $CRYPTDIR/key.txt
+
+# AES kódolás
+aespipe -P $CRYPTDIR/key.txt -e aes256 < $BACKUPFILE > $CRYPTDIR/$BASENAME.aes
+
+# A kulcsok RSA kódolása a publikus kulccsal
+openssl rsautl -encrypt -inkey $CRYPTDIR/id_rsa.pub -pubin -in $CRYPTDIR/key.txt -out $CRYPTDIR/key.rsa
+
+# Kulcsok törlése
+rm $CRYPTDIR/id_rsa.pub
+rm $CRYPTDIR/key.txt
+
+cd $BACKUPDIR
+tar cfz ${DATE}-crypt.tgz ${DATE}
+rm -rf $DATE
+
+echo -e "\nBecsomagolva: $BACKUPDIR/${DATE}-crypt.tgz\n\n"
diff --git a/mayor-mod/bin/decrypt-backup.sh b/mayor-mod/bin/decrypt-backup.sh
new file mode 100644
index 00000000..9eca4375
--- /dev/null
+++ b/mayor-mod/bin/decrypt-backup.sh
@@ -0,0 +1,138 @@
+#!/bin/bash
+#
+# Example: mayor decrypt-backup --crypted-file=/home/backup/20110515-crypt.tgz
+# Az eredmény a $BACKUPDIR alá kerül az eredetileg elkódolt állomány nevéből
+# származtatott néven: file.kit --> file-decrypt.kit
+#
+# TODO: ellenőrizni kell még az openssl és az aespipe meglétét
+#
+
+OPT_SPEC="hf:d::"
+LONG_OPT_SPEC="help,file:,crypted-file:,dir:,backup-dir::"
+PARSED_OPTIONS=$(getopt -n "$0" -a -o $OPT_SPEC --long $LONG_OPT_SPEC -- "$@")
+OPTIONS_RET=$?
+eval set -- "$PARSED_OPTIONS"
+
+help_usage() {
+cat <<EOF
+
+Decrypt-backup használata: mayor decrypt-backup [opciók]
+
+A parancs segítségével a korábban titkosított (ld. mayor help crypt-backup) mentést
+csomagolhatjuk ki. A kicsomagoláshoz szükséges az intézmény privát kulcsa, amit a
+program alapesetben az adatbázisban keres. Ha nincs más megadva, akkor a szkript
+"YYYYmmdd-crypt.tgz" néven keresi a kicsomagolandó állományt (pl. ${DATE}-crypt.tgz)
+
+A mentési könyvtár, a szükséges jelszavak és egyéb paraméterek beállításait a
+/etc/mayor/main.conf állományban kell megadni.
+
+Opciók:
+ -h, --help: A parancs leírása (amit most olvasol...)
+ -f, --file, --crypted-file: A kódolt állomány neve
+ -d, --dir, --backup-dir: A mentési könyvtár elérési útja
+
+EOF
+}
+
+if [ $OPTIONS_RET -ne 0 ]; then help_usage; exit; fi
+
+FILE="${DATE}-crypt.tgz"
+while [ $# -ge 1 ]; do
+ case $1 in
+ --help | -h ) help_usage
+ exit
+ ;;
+
+ --crypted-file | --file | -f ) shift
+ FILE="$1"
+ echo "Kódolt állomány: $FILE"
+ ;;
+
+ --backup-dir | --dir | -d ) shift
+ BACKUPDIR="$1"
+ echo "Backup könyvtár: $BACKUPDIR"
+ ;;
+
+ -- ) shift
+ break
+ ;;
+
+ * ) echo "HIBA: ismeretlen opció: $1" # ide elvileg sose jutunk, mert a getopts már kiszűrte a hibás paraméterek
+ exit
+ ;;
+ esac
+ shift
+done
+
+
+
+
+# A mysql bináris ellenőrzése
+if [ ! -f $MYSQL ]; then
+ echo -e "\n\nERROR: A mysql kliens nem található: $MYSQL\n"
+ exit 1
+fi
+
+# A login adatbázis eléréséhez szükséges adatok a konfig-ból
+DB=`grep db $BASEDIR/config/main-config.php | sed -e "s/$.*=\ *['|\"]//g" -e "s/['|\"];//g"`
+USER=`grep user $BASEDIR/config/main-config.php | sed -e "s/$.*=\ *['|\"]//g" -e "s/['|\"];//g"`
+PW=`grep pw $BASEDIR/config/main-config.php | sed -e "s/$.*=\ *['|\"]//g" -e "s/['|\"];//g"`
+
+# Ellenőrizzük, hogy van-e privát kulcs - regisztrált intézmény-e
+COUNT=`$MYSQL -e 'SELECT count(privateKey) FROM mayorSsl' -p$PW -u$USER $DB | grep -i -v count`
+if [ "$COUNT" -ne "1" ]; then
+ echo "Privát kulcsok száma: $COUNT"
+ echo "Nem regisztrált intézmény? A titkosított mentések kezelése csak regisztrált intézmények számára érhető el!"
+ exit 2
+fi
+
+# Backup könyvtár létrehozása
+if [ ! -e $BACKUPDIR ]; then
+ mkdir $BACKUPDIR > /dev/null 2>&1
+ if [ $? -ne 0 ]; then
+ echo "Nem sikerült a ${BACKUPDIR} könyvtárat létrehozni!"
+ echo "MaYoR Backup failure!"
+ exit 3
+ fi
+fi
+chown $WEB_SERVER_USER $BACKUPDIR
+chmod 700 $BACKUPDIR
+
+# bejövő paraméterek feldolgozása (crypted-file)
+if [ ! -f $FILE ]; then
+ echo -e " HIBA: Hiányzik a dekódolandó mentési állomámny: ${FILE}\n"
+ FILE=$BACKUPDIR/${FILE}
+ echo "Próbáljuk a mentési könyvtárban (${FILE})"
+ if [ ! -f $FILE ]; then
+ echo -e " HIBA: Hiányzik a dekódolandó mentési állomámny: ${FILE}\n"
+ FILE=$BACKUPDIR/${PREFIX}${DATE}-crypt.tgz
+ echo "Próbáljuk az alapértelmezett állományt (${FILE})"
+ if [ ! -e $FILE ]; then
+ echo " HIBA: Hiányzik a dekódolandó mentési állomámny: ${FILE}"
+ exit 4
+ fi
+ fi
+fi
+BASENAME=`basename $FILE`
+
+cd $BACKUPDIR
+tar xfz $FILE
+TARFILES=`tar tf $FILE`
+SUBDIR=`for f in $TARFILES; do echo $f; break; done`
+AESFILE=`echo $TARFILES | sed -e 's/ /\n/g' | grep '.aes'`
+AESBASE=`basename $AESFILE | sed -e 's/.aes//g'`
+DECRYPTFILE=`echo $AESBASE | sed -e 's/\.\([a-z]*\)$/-decrypt\.\1/'`
+
+# A privát kulcs lekérdezése
+echo 'SELECT privateKey FROM mayorSsl' | $MYSQL -p$PW -u$USER $DB | grep -v privateKey | sed -e 's/\\n/\n/g' > $BACKUPDIR/$SUBDIR/id_rsa
+
+# AES kulcs dekódolása
+openssl rsautl -decrypt -inkey $BACKUPDIR/$SUBDIR/id_rsa -in $BACKUPDIR/$SUBDIR/key.rsa -out $BACKUPDIR/$SUBDIR/key.txt
+
+# AES dekódolás (feltételezzük, hogy az eredmény tgz
+aespipe -P $BACKUPDIR/$SUBDIR/key.txt -d -e aes256 < $BACKUPDIR/$AESFILE > $BACKUPDIR/$DECRYPTFILE
+
+# Törlés
+rm -rf $BACKUPDIR/$SUBDIR
+
+echo -e "\nKicsomagolva: $BACKUPDIR/$DECRYPTFILE\n\n"
diff --git a/mayor-mod/bin/etc/cron.daily/mayor b/mayor-mod/bin/etc/cron.daily/mayor
new file mode 100755
index 00000000..815cc023
--- /dev/null
+++ b/mayor-mod/bin/etc/cron.daily/mayor
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+# A helyes környezet beállítása (svn alapú frissítés esetén az ékezetes file-nevekhez)
+export LANG=hu_HU.UTF-8
+
+# Napló napi mentése
+/usr/local/sbin/mayor backup
+
+# Heti frissítés
+if [ `date +'%w'` == 0 ]; then
+ /usr/local/sbin/mayor update
+fi
+
diff --git a/mayor-mod/bin/help.sh b/mayor-mod/bin/help.sh
new file mode 100644
index 00000000..e983ccd3
--- /dev/null
+++ b/mayor-mod/bin/help.sh
@@ -0,0 +1,47 @@
+#!/bin/bash
+
+OPT_SPEC="hf::"
+LONG_OPT_SPEC="help,file:,f::"
+PARSED_OPTIONS=$(getopt -n "$0" -a -o $OPT_SPEC --long $LONG_OPT_SPEC -- "$@")
+OPTIONS_RET=$?
+eval set -- "$PARSED_OPTIONS"
+
+help_usage() {
+ print_help;
+ echo -e "\nHELP használata: mayor help [parancs]\n\n"
+}
+
+if [ $OPTIONS_RET -ne 0 ] || [ $# -le 1 ]; then help_usage; exit; fi
+
+while [ $# -ge 1 ]; do
+ case $1 in
+ --help | -h ) help_usage
+ exit
+ ;;
+
+ --file | -f ) shift
+ FILE="$1"
+ echo "FILE: $FILE"
+ ;;
+
+ -- ) shift
+ break
+ ;;
+
+ * ) echo "HIBA: ismeretlen opció: $1" # ide elvileg sose jutunk, mert a getopts már kiszűrte a hibás paramétereket...
+ exit
+ ;;
+ esac
+ shift
+done
+
+while [ $# -ge 1 ]; do
+ echo -e "\n---------- HELP: $1 ----------\n"
+ if [[ ! "${CMDS[*]}" =~ .*$1.* ]]; then
+ echo -e "Ismeretlen parancs: $1"
+ #print_help
+ else
+ . ./$1.sh --help
+ fi
+ shift
+done
diff --git a/mayor-mod/bin/lock.sh b/mayor-mod/bin/lock.sh
new file mode 100644
index 00000000..ca275705
--- /dev/null
+++ b/mayor-mod/bin/lock.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+
+help_usage() {
+cat <<EOF
+
+LOCK használata: mayor lock [options]
+
+A parancs segítségével zárolhatjuk a MaYoR rendszert, ilyenkor a webes elérés le van tiltva.
+Hasznos lehet különböző Rendszergazdai műveletek elvégzésekor.
+
+ --help: ^Ez a help szöveg.
+
+EOF
+}
+
+if [ $? -ne 0 ]; then help_usage; exit; fi
+
+while [ $# -ge 1 ]; do
+ case $1 in
+ --help | -h ) help_usage
+ exit
+ ;;
+
+ -- ) shift
+ break
+ ;;
+
+ * ) echo "HIBA: ismeretlen opció: $1"
+ exit
+ ;;
+ esac
+ shift
+done
+
+if [ ! -z $LOCKFILE ]; then
+ if [ $VERBOSE -gt 0 ]; then echo -e "* A web-es elérés letiltása:"; fi
+ if [ $VERBOSE -gt 1 ]; then echo -e "- Lock-file létrehozása... "; fi
+
+ echo "$DATE: Rendszergazda dolgozik" > $LOCKFILE
+ if [ $VERBOSE -gt 0 ]; then echo -e "kész.\n"; fi
+fi
+
diff --git a/mayor-mod/bin/mayor b/mayor-mod/bin/mayor
new file mode 100755
index 00000000..09168cc0
--- /dev/null
+++ b/mayor-mod/bin/mayor
@@ -0,0 +1,74 @@
+#!/bin/bash
+
+VERSION="2.0"
+echo -e "\nmayor szkript - verzió: $VERSION (" $(date '+%Y-%m-%d') ")"
+
+CMDS=(backup update lock unlock crypt-backup decrypt-backup remote-backup restore help)
+MODS=(mayor-base mayor-portal mayor-naplo mayor-naplo-sni mayor-wiki mayor-felveteli mayor-installer mayor-installer-sulix mayor-jatek mayor-locales-de_DE mayor-locales-en_US mayor-local-jp_JP)
+DESC=('a rendszer mentése' 'a rendszer frissítése' 'a rendszer zárolása (lockfile)' 'a rendszer feloldása' 'a mentés titkosítása (ß)' 'a titkosított mentés visszakódolása (ß)' 'mentés a központi (távoli) szerverre' 'mentés visszatöltése' 'A parancs működésének leírása')
+#OPTS=('--skip-lock')
+#OPTDESC=('a rendszer zárolásának kihagyása')
+DATE=$(date "+%Y%m%d")
+DATETIME=$(date "+%Y-%m-%d %H:%M:%S")
+
+print_help() {
+ echo -e "\nHasználat: mayor [parancs] [opciók]\n\nParancs"
+ for ((i=0; i<${#CMDS[@]}; i=i+1)); do
+ len=$(echo ${CMDS[$i]} | wc -m)
+ if [ "$len" -lt 13 ]; then
+ echo -e " - ${CMDS[$i]}:\t\t${DESC[$i]}"
+ else
+ echo -e " - ${CMDS[$i]}:\t${DESC[$i]}"
+ fi
+ done
+# echo -e "\nOpciók"
+# for ((i=0; i<${#OPTS[@]}; i=i+1)); do
+# echo " ${OPTS[$i]}: ${OPTDESC[$i]}"
+# done
+ echo ""
+}
+
+# Ellenőrizzük, hogy van-e configurációs állomány
+if [ -f /etc/mayor/main.conf ]; then
+ . /etc/mayor/main.conf
+else
+ echo -e "\n*** HIBA: hiányzó konfigurációs file: /etc/mayor/main.conf\n"
+ exit 1
+fi
+
+# Ha nincs paraméter, akkor írjuk ki a tennivalót
+if [ -z $1 ]; then
+ print_help
+ exit 1
+fi
+
+# A paraméter ellenőrzése
+for ((i=0; i<${#CMDS[@]}; i=i+1)); do
+ if [ ${CMDS[$i]} == "$1" ]; then
+ CMD=${CMDS[$i]}
+ break
+ fi
+done
+
+if [ -z $CMD ]; then
+ echo -e "\n(>>> HIBA: ismeretlen parancs: $1)\n"
+ print_help
+ exit 1
+else
+ echo -e "(>>> $CMD)\n"
+fi
+
+# Alapértelmezés
+if [ "$MYSQL_HOST" == "" ]; then
+ MYSQL_HOST="localhost"
+fi
+
+shift
+# A parancs végrehajtása
+cd $BASEDIR/bin
+if [ -z $UPDATELOG ]; then
+ . ./$CMD.sh
+else
+ . ./$CMD.sh 2>&1 | tee -a $UPDATELOG
+fi
+
diff --git a/mayor-mod/bin/remote-backup.sh b/mayor-mod/bin/remote-backup.sh
new file mode 100644
index 00000000..71e241d5
--- /dev/null
+++ b/mayor-mod/bin/remote-backup.sh
@@ -0,0 +1,170 @@
+#!/bin/bash
+#
+# Example: mayor remote-backup --backup-file=/tmp/wiki.tgz
+# Az eredmény a $BACKUPDIR/$DATE-crypt.tgz állományba kerül
+# (Vagy jobb lenne, ha a file nevéből venné a nevét?)
+#
+# TODO: ellenőrizni kell még, hogy van-e openssl és aespipe
+#
+
+OPT_SPEC="hf:d::"
+LONG_OPT_SPEC="help,file:,backup-file:,dir:,backup-dir::"
+PARSED_OPTIONS=$(getopt -n "$0" -a -o $OPT_SPEC --long $LONG_OPT_SPEC -- "$@")
+OPTIONS_RET=$?
+eval set -- "$PARSED_OPTIONS"
+
+help_usage() {
+cat <<EOF
+
+Remote-backup használata: mayor remote-backup [opciók]
+
+A parancs segítségével menthetjük egy központi szerverre a MaYoR rendszer adatbázisait,
+aktuális forrását és beállításait titkosított formában. A távoli szerverre való bejele-
+lentkezéshez szükséges az intézmény privát kulcsa, amit a program alapesetben az adat-
+bázisban keres.
+A szkript, ha nincs más megadva, akkor az aktuális dátumnak megelelő,
+"YYYYmmdd-crypt.tgz" alkú néven keresi a feltöltendő mentési állományt.
+
+A mentési könyvtár, a szükséges jelszavak és egyéb mentési paraméterek beállításait a
+/etc/mayor/main.conf állományban kell megadni.
+
+Opciók:
+ -h, --help: A parancs leírása (amit most olvasol...)
+ -f, --file, --backup-file: A mentési állomány neve
+ -d, --dir, --backup-dir: A mentési könyvtár elérési útja
+
+EOF
+}
+
+if [ $OPTIONS_RET -ne 0 ]; then help_usage; exit; fi
+
+FILE="${DATE}-crypt.tgz"
+while [ $# -ge 1 ]; do
+ case $1 in
+ --help | -h ) help_usage
+ exit
+ ;;
+
+ --backup-file | --file | -f ) shift
+ FILE="$1"
+ echo "Backup fájl: $FILE"
+ ;;
+
+ --backup-dir | --dir | -d ) shift
+ BACKUPDIR="$1"
+ echo "Backup könyvtár: $BACKUPDIR"
+ ;;
+
+ -- ) shift
+ break
+ ;;
+
+ * ) echo "HIBA: ismeretlen opció: $1" # ide elvileg sose jutunk, mert a getopts már kiszűrte a hibás paraméterek
+ exit
+ ;;
+ esac
+ shift
+done
+
+
+
+SSH_PORT="8023"
+SSH_HOST="backup.mayor.hu"
+
+# mysql bináris ellenőrzése
+if [ ! -f $MYSQL ]; then
+ echo -e "\n\nERROR: A mysql kliens nem található: $MYSQL\n"
+ exit 1
+fi
+
+# Login adatbázis eléréséhez szükséges paraméterek lekérdezése a konfig-ból...
+DB=`grep db $BASEDIR/config/main-config.php | sed -e "s/$.*=\ *['|\"]//g" -e "s/['|\"];//g"`
+USER=`grep user $BASEDIR/config/main-config.php | sed -e "s/$.*=\ *['|\"]//g" -e "s/['|\"];//g" | sed 's/^ *//g'`
+PW=`grep pw $BASEDIR/config/main-config.php | sed -e "s/$.*=\ *['|\"]//g" -e "s/['|\"];//g" | sed 's/^ *//g'`
+
+# Ellenőrizzük, hogy van-e publikus kulcs - regisztrált intézmény-e
+COUNT=`$MYSQL -e 'SELECT count(publicKey) FROM mayorSsl' -p$PW -u$USER $DB | grep -i -v count`
+if [ "$COUNT" -ne "1" ]; then
+ echo "Publikus kulcsok száma: $COUNT"
+ echo "Nem regisztrált intézmény? A mentés titkosítása csak regisztrált intézmények számára érhető el!"
+ exit 2
+fi
+
+# Backup könyvtár létrehozása
+if [ ! -e $BACKUPDIR ]; then
+ mkdir $BACKUPDIR > /dev/null 2>&1
+ if [ $? -ne 0 ]; then
+ echo "Nem sikerült a ${BACKUPDIR} könyvtárat létrehozni!"
+ echo "MaYoR Backup failure!"
+ exit 3
+ fi
+fi
+CRYPTDIR=$BACKUPDIR/$DATE
+if [ ! -e $CRYPTDIR ]; then
+ mkdir $CRYPTDIR
+fi
+chown $WEB_SERVER_USER $BACKUPDIR
+chmod 700 $BACKUPDIR
+
+if [ ! -f $FILE ]; then
+ echo -e " HIBA: Hiányzik a kódolandó mentési állomámny: ${FILE}"
+ FILE=$BACKUPDIR/${FILE}
+ echo "Próbáljuk a mentési könyvtárban! (${FILE})"
+ if [ ! -f $FILE ]; then
+ echo -e " HIBA: Hiányzik a kódolandó mentési állomámny: ${FILE}"
+ FILE=$BACKUPDIR/${PREFIX}${DATE}.tgz
+ echo "Próbáljuk az alapértelmezett állományt! (${FILE})"
+ if [ ! -e $FILE ]; then
+ echo -e " HIBA: Hiányzik a kódolandó mentési állomámny: ${FILE}"
+ exit 3
+ fi
+ fi
+fi
+BASENAME=`basename $FILE`
+
+# Publikus kulcs lekérdezése
+echo 'SELECT publicKey FROM mayorSsl' | $MYSQL -p$PW -u$USER $DB | grep -v publicKey | sed -e 's/\\n/\n/g' > $CRYPTDIR/id_rsa.pub
+
+# Véletlen kulcs generálás a szimmetrikus AES kódoláshoz
+pwgen -nc 50 1 > $CRYPTDIR/key.txt
+
+# AES kódolás
+aespipe -P $CRYPTDIR/key.txt -e aes256 < $FILE > $CRYPTDIR/$BASENAME.aes
+
+# A kulcsok RSA kódolása a publikus kulccsal
+openssl rsautl -encrypt -inkey $CRYPTDIR/id_rsa.pub -pubin -in $CRYPTDIR/key.txt -out $CRYPTDIR/key.rsa
+
+# Kulcsok törlése
+rm $CRYPTDIR/id_rsa.pub
+rm $CRYPTDIR/key.txt
+
+cd $BACKUPDIR
+tar cfz ${DATE}-crypt.tgz ${DATE}
+rm -rf $DATE
+
+echo -e "\nBecsomagolva: $BACKUPDIR/${DATE}-crypt.tgz\n\n"
+
+# A privát kulcs lekérdezése, elhelyezése
+if [ ! -d $BASEDIR/ssh ]; then
+ echo "Létrehozzuk a $BASEDIR/ssh könyvtárat, amibe belerakjuk a privát kulcsot..."
+ mkdir $BASEDIR/ssh
+ chmod 700 $BASEDIR/ssh
+fi
+if [ ! -f $BASEDIR/ssh/id_rsa ]; then
+ echo 'SELECT privateKey FROM mayorSsl' | $MYSQL -p$PW -u$USER $DB | grep -v privateKey | sed -e 's/\\n/\n/g' > $BASEDIR/ssh/id_rsa
+ chmod 700 $BASEDIR/ssh/id_rsa
+fi
+
+# Az intézmény OM kódjának lekérdezése
+
+# A mayor_naplo adatbázis eléréséhez szükséges paraméterek lekérdezése a konfig-ból...
+DB=`grep db $BASEDIR/config/module-naplo/config.php | sed -e "s/$.*=\ *['|\"]//g" -e "s/['|\"];//g"`
+USER=`grep userRead $BASEDIR/config/module-naplo/config.php | sed -e "s/$.*=\ *['|\"]//g" -e "s/['|\"];//g" | sed 's/^ *//g'`
+PW=`grep pwRead $BASEDIR/config/module-naplo/config.php | sed -e "s/$.*=\ *['|\"]//g" -e "s/['|\"];//g" | sed 's/^ *//g'`
+
+OMKOD=`echo 'SELECT SUBSTR(OMKod,-6) FROM intezmeny WHERE alapertelmezett = 1' | $MYSQL -p$PW -u$USER $DB | grep -v OMKod`
+SSH_USER="om$OMKOD"
+echo $SSH_USER
+
+# A kódolt adatállomány másolása
+scp -i $BASEDIR/ssh/id_rsa -P $SSH_PORT $BACKUPDIR/${DATE}-crypt.tgz $SSH_USER@$SSH_HOST:/home/$SSH_USER/
diff --git a/mayor-mod/bin/restore.sh b/mayor-mod/bin/restore.sh
new file mode 100644
index 00000000..7a1195ed
--- /dev/null
+++ b/mayor-mod/bin/restore.sh
@@ -0,0 +1,257 @@
+#!/bin/bash
+
+OPT_SPEC="hkprf:d:t::"
+LONG_OPT_SPEC="help,keep-old-passwords,restore-parent,restore-private,tmp-dir:,file:,backup-file:,dir:,base-dir::"
+PARSED_OPTIONS=$(getopt -n "$0" -a -o $OPT_SPEC --long $LONG_OPT_SPEC -- "$@")
+OPTIONS_RET=$?
+eval set -- "$PARSED_OPTIONS"
+
+help_usage() {
+cat <<EOF
+
+Restore használata: mayor restore [opciók]
+
+A parancs segítségével korábbi mentésből állíthatjuk helyre a napló adaokat. A helyreállítás előtt
+telepíteni kell egy új, lehetőleg a mentettel megegyező, vagy újabb verziójú rendszert, amibe a régi
+adatokat betöltjük.
+A mentést alapértelmezetten az aktuális dátum alapján keresi, "YYYYmmdd.tgz" alakban (pl. $DATE.tgz).
+
+Amennyiben a paraméterként megadott alapkönyvtárban léteznek a configurációs állományok, úgy a program
+ezeket használja, különben a mentésből állítja őket helyre. A jelszavak alapértelmezetten mindig az
+új telepítés szerintiek maradnak.
+
+Opciók:
+ -h, --help: A parancs leírása (amit most olvasol...)
+ -f, --file, --backup-file: A visszatöltendő mentési állomány neve
+ -d, --dir, --base-dir: Az alapkönyvtár elérési útja
+ -t, --tmp-dir: Az ideiglenes könyvtár
+ -k, --keep-old-passwords: A mentett adatbázis-jelszavak megtartása akkor is, ha léteznek újak
+ -p, --restore-parent: A szülők felhasználói azonosítóinak helyreállítása
+ -r, --restore-private: A tanár/diák felhasználói azonosítóinak helyreállítása (csak MySQL-ből!)
+
+EOF
+}
+
+cleartmp() {
+ echo -e -n "\n\nAz ideiglenes könyvátrat töröljük: ${RTMPDIR}/restore/${DT}..."
+ rm -rf ${RTMPDIR}/restore/${DT}
+ echo "ok"
+}
+
+#if [ $OPTIONS_RET -ne 0 ] || [ $# -le 1 ]; then help_usage; exit; fi
+if [ $OPTIONS_RET -ne 0 ]; then help_usage; exit; fi
+
+# Alapéretelmezett értékek:
+RBACKUPFILE="${DATE}.tgz"
+RBASEDIR="/var/mayor"
+KEEP_OLD_PASSWORDS=0
+
+while [ $# -ge 1 ]; do
+ case $1 in
+ --help | -h ) help_usage
+ exit
+ ;;
+
+ --keep-old-passwords | -k ) KEEP_OLD_PASSWORDS=1
+ echo "A mentett adatbázis-jelszavak használata..."
+ ;;
+
+ --restore-parent | -p ) RESTORE_PARENT=1
+ echo "Szülői azonosítók betöltése..."
+ ;;
+
+ --restore-private | -r ) RESTORE_PRIVATE=1
+ echo "Tanár/diák azonosítók betöltése..."
+ ;;
+
+ --backup-file | --file | -f ) shift
+ RBACKUPFILE="$1"
+ echo "Backup fájl: $RBACKUPFILE"
+ ;;
+
+ --base-dir | --dir | -d ) shift
+ RBASEDIR="$1"
+ echo "Alapkönyvtár: $RBASEDIR"
+ ;;
+
+ --tmp-dir | -t ) shift
+ RTMPDIR="$1"
+ echo "Ideiglenes könyvtár: $RTMPDIR"
+ ;;
+
+ -- ) shift
+ break
+ ;;
+
+ * ) echo "HIBA: ismeretlen opció: $1" # ide elvileg sose jutunk, mert a getopts már kiszűrte a hibás paramétereket...
+ exit
+ ;;
+ esac
+ shift
+done
+
+##
+# A könyvtárak létrehozása
+##
+
+RREVISIONFILE="${RBASEDIR}/log/revision"
+declare -i INST_REV
+if [ ! -e "${RREVISIONFILE}" ]; then
+ echo "Hiba: A megadott alapkönyvtárban (${RBASEDIR}) nem található telepített MaYoR rendszer!"
+ echo -e " A helyreállításhoz először telepíteni kell egy azonos, vagy újabb verziójú rendszert.\n"
+ exit 1
+fi
+INST_REV=$(cat $RREVISIONFILE)
+echo "A telepített rendszer revision száma: ${INST_REV}"
+
+if [ ! -e "${RBACKUPFILE}" ]; then
+ echo "Hiba: A backup állomány nem található (${RBACKUPFILE})"
+ echo -e " A backup állományt teljes elérési úttal kell megadni!\n"
+ exit 2
+fi
+
+[ -z "${RTMPDIR:-}" ] && RTMPDIR="/tmp"
+if [ ! -e "${RTMPDIR}" ]; then
+ echo "Az ideiglenes könyvtár (${RTMPDIR}) nem létezik."
+ echo -n "Létrehozás ... "
+ if mkdir -p "${RTMPDIR}" 2>/dev/null; then
+ echo "ok."
+ else
+ echo "hiba."
+ exit 3
+ fi
+fi
+
+if [ ! -d "${RTMPDIR}/restore" ]; then
+ if ! mkdir "${RTMPDIR}/restore" 2>/dev/null; then
+ echo "Hiba: Az ideiglenes könyvtár nem írható (${RTMPDIR})!"
+ exit 4
+ fi
+fi
+chmod 700 "${RTMPDIR}/restore"
+cd "${RTMPDIR}/restore"
+tar xvfz $RBACKUPFILE
+DT=$(ls)
+echo "A mentés dátuma: ${DT}"
+cd ${DT}
+
+RREVISIONFILE="${RTMPDIR}/restore/${DT}/log/revision"
+declare -i BAK_REV
+if [ ! -e "${RREVISIONFILE}" ]; then
+ echo "Hiba: A mentési állomány nem tartalmaz verzió információt!"
+ echo -e " A mentési állományon belül, a ${DT}/log/revision állományba írja be a revision számot (pl: 2512)!\n"
+ cleartmp
+ exit 5
+fi
+BAK_REV=$(cat $RREVISIONFILE)
+echo "A mentett rendszer revision száma: ${BAK_REV}"
+
+if [ ${BAK_REV} -gt ${INST_REV} ]; then
+ echo "Hiba: A mentett rendszer újabb, mint a telepített!"
+ echo -e " A telepített rendszer revision száma nagyobb vagy egyenlő kell legyen a mentett rendszer revision számánál!\n Telepítsen frissíebb rendszert!\n"
+ cleartmp
+ exit 6
+fi
+
+# A telepített rendszer beállításainsak betöltése
+if [ -f "${RBASEDIR}/config/main.conf" ]; then
+ . "${RBASEDIR}/config/main.conf"
+else
+ echo "Hiba: A telepített rendszer nincs beállítva!"
+ echo -e " Hiányzik a konfigurációs állomány: ${RBASEDIR}/config/main.conf\n"
+ cleartmp
+ exit 7
+fi
+
+# Az adatbázisok betöltése
+NAPLOUSER=$(egrep 'userWrite.*=' $BASEDIR/config/module-naplo/config.php | sed -e "s/^.*=\ *['|\"]//g" -e "s/['|\"];//g")
+NAPLOUSERREAD=$(egrep 'userRead.*=' $BASEDIR/config/module-naplo/config.php | sed -e "s/^.*=\ *['|\"]//g" -e "s/['|\"];//g")
+DBS=$($MYSQL -h$MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PW -e"SHOW DATABASES")
+if [ "$RESTORE_PARENT" == "1" ]; then
+ FILES="mayor_naplo.sql mayor_parent.sql intezmeny_*.sql naplo_*.sql"
+else
+ FILES="mayor_naplo.sql intezmeny_*.sql naplo_*.sql"
+fi
+if [ "$RESTORE_PRIVATE" == "1" ]; then
+ FILES="$FILES mayor_private.sql"
+fi
+for SQLFILE in $FILES; do
+ if [ -e "${SQLFILE}" ]; then
+ DB=${SQLFILE%.sql}
+ echo -n "${DB} ... "
+ if [[ ! ${DBS} =~ .*$DB.* ]]; then
+ echo -n "... "
+ (cat <<EOF
+ create database ${DB} character set utf8 collate utf8_hungarian_ci;
+ grant select,execute on ${DB}.* to '$NAPLOUSERREAD'@'localhost';
+ grant all on ${DB}.* to '$NAPLOUSER'@'localhost';
+EOF
+) | $MYSQL -h$MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PW
+ fi
+ echo -n '... '
+ cat ${SQLFILE} | mysql -p${MYSQL_PW} --user=${MYSQL_USER} --default-character-set=utf8 ${DB}
+ echo ok
+ fi
+done
+
+# A mentésben szereplő user és jelszó adatok
+bNCDIR="${RTMPDIR}/restore/${DT}/config/module-naplo"
+iNCDIR="${BASEDIR}/config/module-naplo"
+cd ${bNCDIR}
+bDB=$(grep db ${bNCDIR}/config.php | egrep -v '^[[:space:]]*(//|/\*.*\*/$)' | grep naplo_base | sed -e "s/^.*=\ *['|\"]//g" -e "s/['|\"];//g")
+bUSER=$(egrep 'userWrite.*=' ${bNCDIR}/config.php | egrep -v '^[[:space:]]*(//|/\*.*\*/$)' | sed -e "s/^.*=\ *['|\"]//g" -e "s/['|\"];//g")
+bUSERREAD=$(egrep 'userRead.*=' ${bNCDIR}/config.php | egrep -v '^[[:space:]]*(//|/\*.*\*/$)' | sed -e "s/^.*=\ *['|\"]//g" -e "s/['|\"];//g")
+bPW=$(egrep 'pwWrite.*=' ${bNCDIR}/config.php | egrep -v '^[[:space:]]*(//|/\*.*\*/$)' | sed -e "s/^.*=\ *['|\"]//g" -e "s/['|\"];//g")
+bPWREAD=$(egrep 'pwRead.*=' ${bNCDIR}/config.php | egrep -v '^[[:space:]]*(//|/\*.*\*/$)' | sed -e "s/^.*=\ *['|\"]//g" -e "s/['|\"];//g")
+#echo "mentett: $bDB : $bUSER : $bUSERREAD : $bPW : $bPWREAD"
+# Az új telepítés user és jelszó adatai
+if [ -e "${iNCDIR}/config.php" ] && [ "${KEEP_OLD_PASSWORDS}" != "1" ]; then
+ iDB=$(grep db ${iNCDIR}/config.php | egrep -v '^[[:space:]]*(//|/\*.*\*/$)' | grep naplo_base | sed -e "s/^.*=\ *['|\"]//g" -e "s/['|\"];//g")
+ iUSER=$(egrep 'userWrite.*=' ${iNCDIR}/config.php | egrep -v '^[[:space:]]*(//|/\*.*\*/$)' | sed -e "s/^.*=\ *['|\"]//g" -e "s/['|\"];//g")
+ iUSERREAD=$(egrep 'userRead.*=' ${iNCDIR}/config.php | egrep -v '^[[:space:]]*(//|/\*.*\*/$)' | sed -e "s/^.*=\ *['|\"]//g" -e "s/['|\"];//g")
+ iPW=$(egrep 'pwWrite.*=' ${iNCDIR}/config.php | egrep -v '^[[:space:]]*(//|/\*.*\*/$)' | sed -e "s/^.*=\ *['|\"]//g" -e "s/['|\"];//g")
+ iPWREAD=$(egrep 'pwRead.*=' ${iNCDIR}/config.php | egrep -v '^[[:space:]]*(//|/\*.*\*/$)' | sed -e "s/^.*=\ *['|\"]//g" -e "s/['|\"];//g")
+else
+ iDB=$bDB
+ iUSER=$bUSER
+ iUSERREAD=$bUSERREAD
+ iPW=$bPW
+ iPWREAD=$bPWREAD
+fi
+#echo "installált: $iDB : $iUSER : $iUSERREAD : $iPW : $iPWREAD"
+if [ -e "${iNCDIR}/config.php" ]; then
+ if [ ! -e "${iNCDIR}/config.php.backup" ]; then
+ echo "${iNCDIR}/config.php --> ${iNCDIR}/config.php.backup"
+ mv "${iNCDIR}/config.php" "${iNCDIR}/config.php.backup"
+ fi
+fi
+
+cat "${bNCDIR}/config.php" | sed \
+ -e "s/db\(.*\)$bDB\(.*\)/db\1$iDB\2/g" \
+ -e "s/userWrite\(.*\)$bUSER\(.*\)/userWrite\1$iUSER\2/g" \
+ -e "s/userRead\(.*\)$bUSERREAD\(.*\)/userRead\1$iUSERREAD\2/g" \
+ -e "s/$bPW/$iPW/g" -e "s/$bPWREAD/$iPWREAD/g" > "${iNCDIR}/config.php"
+
+for FILE in config-*.php; do
+ echo -n "$FILE ... "
+ # mentés
+ if [ -e "${iNCDIR}/$FILE" ]; then
+ if [ ! -e "${iNCDIR}/$FILE.backup" ]; then
+ echo -n "... "
+ mv "${iNCDIR}/$FILE" "${iNCDIR}/$FILE.backup"
+ fi
+ fi
+ cp $FILE "${iNCDIR}/$FILE"
+ echo ok
+done
+
+cd ${BASEDIR}/bin
+if [ -z $UPDATELOG ]; then
+ . update.sh -e -r$BAK_REV -b${BASEDIR}
+else
+ . update.sh -e -r$BAK_REV -b${BASEDIR} 2>&1 | tee -a $UPDATELOG
+fi
+
+# Az ideiglenes könyvtár törlése
+cleartmp
+
diff --git a/mayor-mod/bin/sbin/eNaploBackup.sh b/mayor-mod/bin/sbin/eNaploBackup.sh
new file mode 100755
index 00000000..5bdba177
--- /dev/null
+++ b/mayor-mod/bin/sbin/eNaploBackup.sh
@@ -0,0 +1,95 @@
+#!/bin/sh
+##
+# Az elektronikus mentése (Version 1.0)
+##
+
+ DATE=`date +%Y%m%d`
+ NAPLO_BACKUP_BASE_DIR='/backup/naplo'
+ NAPLO_BACKUP_DIR="$NAPLO_BACKUP_BASE_DIR/$DATE"
+
+ DATABASES='mayor_parent mayor_private mayor_naplo intezmeny_fasori naplo_fasori_2007'
+ #MYSQL_DB='%MYSQL_NAPLO_DB%'
+ MYSQL_USER='%MYSQL_NAPLO_USER%'
+ MYSQL_PW='%MYSQL_NAPLO_PW%'
+
+ WWW_SSL_DIR='%BASEDIR%'
+ WEB_SERVER_USER='%WEB_SERVER_USER%'
+ EXPIRE_DATE=`date -d '30 days ago' +%Y%m%d`
+
+ BASEDN='%BASEDN%'
+ LDAP_CONF_DIR='%LDAP_CONF_DIR%'
+ LDAP_DB_DIR='%LDAP_DB_DIR%'
+
+##
+# A könyvtárak létrehozása
+##
+ if [ ! -e $NAPLO_BACKUP_BASE_DIR ]; then
+ /bin/mkdir $NAPLO_BACKUP_BASE_DIR
+ fi
+ /bin/chown $WEB_SERVER_USER $NAPLO_BACKUP_BASE_DIR
+ /bin/chmod 700 $NAPLO_BACKUP_BASE_DIR
+
+ if [ -e $NAPLO_BACKUP_DIR.tgz ]; then
+ exit 1
+ fi
+ /bin/mkdir $NAPLO_BACKUP_DIR
+ /bin/chown $WEB_SERVER_USER $NAPLO_BACKUP_DIR
+ /bin/chmod 700 $NAPLO_BACKUP_DIR
+
+##
+# mysql adatbázis mentése
+##
+
+for DATABASE in $DATABASES; do
+ /usr/bin/mysqldump -p$MYSQL_PW -u$MYSQL_USER $DATABASE >> $NAPLO_BACKUP_DIR/$DATABASE.sql
+done
+
+##
+# mysql adatbázis mentése
+##
+
+# /usr/bin/mysqldump -p$MYSQL_PW -u$MYSQL_USER $MYSQL_DB >> $NAPLO_BACKUP_DIR/$MYSQL_DB.sql
+
+##
+# A honlap mentése
+##
+
+ mkdir $NAPLO_BACKUP_DIR/html
+
+ /bin/cp -a $WWW_SSL_DIR/* $NAPLO_BACKUP_DIR/html/
+
+##
+# Az LDAP adatbázis
+##
+
+ /etc/init.d/slapd stop
+ /bin/sleep 1
+
+ /usr/sbin/slapcat -b $BASEDN -l $NAPLO_BACKUP_DIR/ldap.ldif
+
+ /bin/cp -a $LDAP_DB_DIR $NAPLO_BACKUP_DIR/ldap
+
+ /etc/init.d/slapd start
+
+##
+# LDAP konfig file-ok mentése (schema)
+##
+
+ /bin/mkdir $NAPLO_BACKUP_DIR/etc
+ /bin/cp -a $LDAP_CONF_DIR $NAPLO_BACKUP_DIR/etc/
+
+##
+# Becsomagolás
+##
+
+ cd $NAPLO_BACKUP_BASE_DIR
+ /bin/tar cfz $DATE.tgz $DATE
+ /bin/rm -rf $NAPLO_BACKUP_DIR
+
+##
+# Elavult mentés tölése
+##
+
+ if [ -e $NAPLO_BACKUP_BASE_DIR/$EXPIRE_DATE.tgz ]; then
+ rm -rf $NAPLO_BACKUP_BASE_DIR/$EXPIRE_DATE.tgz
+ fi
diff --git a/mayor-mod/bin/sbin/eNaploRestore.sh b/mayor-mod/bin/sbin/eNaploRestore.sh
new file mode 100755
index 00000000..f383360f
--- /dev/null
+++ b/mayor-mod/bin/sbin/eNaploRestore.sh
@@ -0,0 +1,82 @@
+#!/bin/sh
+##
+# Az elektronikus visszatöltése (Version 1.0)
+##
+
+ NAPLO_BACKUP_BASE_DIR='/backup/naplo'
+ NAPLO_BACKUP_TMP_DIR="$NAPLO_BACKUP_BASE_DIR/tmp"
+
+ DATABASE='%MYSQL_NAPLO_DB%'
+ MYSQL_PW='%MYSQL_ROOT_PW%'
+ MYSQL_USER='root'
+
+ WWW_DIR='%BASEDIR%'
+ WEB_SERVER_USER='%WEB_SERVER_USER%'
+ BASEDN='%BASEDN%'
+ DUMP_FILE="$DATABASE.sql"
+ LDIF_FILE='ldap.ldif'
+ LDAP_DB_DIR='%LDAP_DB_DIR%/mayor'
+
+##
+# A paraméter ellenőrzése
+##
+
+ if [ -z $1 ]; then
+ exit 1
+ else
+ if [ -e $NAPLO_BACKUP_BASE_DIR/$1 ]; then
+ FILE=$1
+ DATE=`echo $FILE | cut -d . -f 1`
+ else
+ exit 2
+ fi
+ fi
+
+echo "PARAMÉTER: $1"
+
+##
+# TMP Könyvtár ellenőrzése, létrehozása
+##
+
+ if [ ! -e $NAPLO_BACKUP_TMP_DIR ]; then
+ /bin/mkdir $NAPLO_BACKUP_TMP_DIR
+ fi
+ /bin/chown $WEB_SERVER_USER $NAPLO_BACKUP_TMP_DIR
+ /bin/chmod 700 $NAPLO_BACKUP_TMP_DIR
+
+##
+# Adatfile kicsomagolása
+##
+
+ cd $NAPLO_BACKUP_TMP_DIR
+ /bin/tar xfz $NAPLO_BACKUP_BASE_DIR/$FILE
+ if [ ! -e $NAPLO_BACKUP_TMP_DIR/$DATE/$DUMP_FILE ]; then
+ exit 3
+ fi
+ if [ ! -e $NAPLO_BACKUP_TMP_DIR/$DATE/$LDIF_FILE ]; then
+ exit 4
+ fi
+
+##
+# Az LDAP adatbázis visszatöltése/felülírása
+##
+
+ /etc/init.d/slapd stop
+ /bin/sleep 1
+
+ /bin/rm -rf $LDAP_DB_DIR/*
+ /usr/sbin/slapadd -c -b $BASEDN -l $NAPLO_BACKUP_TMP_DIR/$DATE/$LDIF_FILE
+
+ /etc/init.d/slapd start
+
+##
+# mysql adatbázis visszatöltése
+##
+
+(cat <<EOF
+DROP DATABASE IF EXISTS $DATABASE;
+CREATE DATABASE $DATABASE;
+EOF
+) | mysql -u$MYSQL_USER -p$MYSQL_PW
+
+cat $NAPLO_BACKUP_TMP_DIR/$DATE/$DUMP_FILE | mysql -u$MYSQL_USER -p$MYSQL_PW $DATABASE
diff --git a/mayor-mod/bin/sbin/update.sh b/mayor-mod/bin/sbin/update.sh
new file mode 100644
index 00000000..53735e6d
--- /dev/null
+++ b/mayor-mod/bin/sbin/update.sh
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+DIR=/var/mayor
+REV="$DIR/www/include/config/rev.php"
+PARENT="haladasi/haladasi haladasi/stat osztalyozo/diak osztalyozo/jegy osztalyozo/dolgozat bejegyzesek/bejegyzesek tanev/fogadoOra tanev/helyettesites tanev/munkaterv tanev/orarend intezmeny/valtas hianyzas/diak hianyzas/nap hianyzas/info uzeno/uzeno ertekeles/ertekeles hirnok/hirnok hirnok/hirnokFeliratkozas"
+PUBLIC="tanev/orarend tanev/szabadTerem tanev/helyettesites"
+WRITABLE="download/private/export download/private/osztalyozo download/private/nyomtatas/osztalyozo download/private/nyomtatas/haladasi"
+
+svn --force export https://blyck.vmg.sulinet.hu/svn/trunk/mayor-base/www /var/mayor/www/
+# svn --force export https://blyck.vmg.sulinet.hu/svn/trunk/mayor-keptar/www /var/mayor/www/
+# svn --force export https://blyck.vmg.sulinet.hu/svn/trunk/mayor-honosito/www /var/mayor/www/
+# svn --force export https://blyck.vmg.sulinet.hu/svn/trunk/mayor-portal/www /var/mayor/www/
+svn --force export https://blyck.vmg.sulinet.hu/svn/trunk/mayor-naplo/install/module-naplo/mysql /var/mayor/install/module-naplo/mysql
+svn --force export http://blyck.vmg.sulinet.hu/svn/trunk/mayor-base/print /var/mayor/print
+svn --force export http://blyck.vmg.sulinet.hu/svn/trunk/mayor-naplo/print /var/mayor/print
+svn --force export http://blyck.vmg.sulinet.hu/svn/trunk/mayor-naplo/print /var/mayor/download
+chown -R www-data.www-data /var/mayor/download
+svn --force export http://blyck.vmg.sulinet.hu/svn/trunk/mayor-base/data/base /var/mayor/data/base
+svn --force export https://blyck.vmg.sulinet.hu/svn/trunk/mayor-naplo/www /var/mayor/www/ | grep revision | cut -d ' ' -f 3 | uniq > $REV
+
+for f in $PARENT; do
+ ln -s $DIR/www/policy/private/naplo/$f-pre.php $DIR/www/policy/parent/naplo/$f-pre.php
+ ln -s $DIR/www/policy/private/naplo/$f.php $DIR/www/policy/parent/naplo/$f.php
+done
+
+for f in $PUBLIC; do
+ ln -s $DIR/www/policy/private/naplo/$f-pre.php $DIR/www/policy/public/naplo/$f-pre.php
+ ln -s $DIR/www/policy/private/naplo/$f.php $DIR/www/policy/public/naplo/$f.php
+done
+
+for f in $WRITABLE; do
+ chmod a+rwx $DIR/$f
+done
diff --git a/mayor-mod/bin/tex2pdf.sh b/mayor-mod/bin/tex2pdf.sh
new file mode 100644
index 00000000..ee177b11
--- /dev/null
+++ b/mayor-mod/bin/tex2pdf.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+#
+# A script segítségével tesztelhetjük, hogy mi történik, mikor a program a haladásinaplót, illetve osztályozónaplót generálja...
+#
+# Paraméter: a feldolgozandó UTF-8 kódolású TeX állomány "-u8.tex" végződés nélküli neve.
+#
+
+. /etc/mayor/main.conf
+
+HOME="/tmp"
+export HOME
+
+# Make sure this exists
+# cd $BASEDIR/print/module-naplo/tex/
+# fmtutil-sys --cnffile $BASEDIR/print/module-naplo/tex/mayor.cnf --fmtdir $BASEDIR/print/module-naplo/ --byfmt mayor
+
+cat $1-u8.tex | recode u8..T1 > $1.tex
+
+tex -fmt $BASEDIR/print/module-naplo/tex/mayor $1.tex
+
+dvips $1.dvi
+
+ps2pdf -sPAPERSIZE=a4 -dAutoRotatePages=/None $1.ps
+
diff --git a/mayor-mod/bin/unlock.sh b/mayor-mod/bin/unlock.sh
new file mode 100644
index 00000000..98783f4b
--- /dev/null
+++ b/mayor-mod/bin/unlock.sh
@@ -0,0 +1,49 @@
+#!/bin/bash
+
+help_usage() {
+cat <<EOF
+
+LOCK használata: mayor lock [options]
+
+A parancs segítségével feloldhatjuk a MaYoR rendszert, ilyenkor a webes engedélyezésre kerül.
+Hasznos lehet különböző Rendszergazdai műveletek elvégzésekor.
+
+*** FIGYELEM! ***
+ Veszélyes lehet, ha a feloldás, a frissítés, vagy a mentés vége előtt történik!!
+
+ --help: ^Ez a help szöveg.
+
+EOF
+}
+
+if [ $? -ne 0 ]; then help_usage; exit; fi
+
+while [ $# -ge 1 ]; do
+ case $1 in
+ --help | -h ) help_usage
+ exit
+ ;;
+
+ -- ) shift
+ break
+ ;;
+
+ * ) echo "HIBA: ismeretlen opció: $1"
+ exit
+ ;;
+ esac
+ shift
+done
+
+if [ -e $LOCKFILE ]; then
+ if [ ! -z $LOCKFILE ]; then
+ if [ $VERBOSE -gt 0 ]; then echo -e "* A web-es hozzáférés engedélyezése:"; fi
+ if [ $VERBOSE -gt 1 ]; then echo -e "- A Lock-file törlése..."; fi
+
+ rm $LOCKFILE
+ if [ $VERBOSE -gt 0 ]; then echo -e "kész.\n"; fi
+ fi
+else
+ if [ $VERBOSE -gt 0 ]; then echo -e "* Már engedélyezett.\n"; fi
+fi
+
diff --git a/mayor-mod/bin/update.sh b/mayor-mod/bin/update.sh
new file mode 100644
index 00000000..19585df2
--- /dev/null
+++ b/mayor-mod/bin/update.sh
@@ -0,0 +1,227 @@
+#!/bin/bash
+
+OPT_SPEC="hes:lb:r::"
+LONG_OPT_SPEC="http-server:,skip-lock,basedir:,backup-dir:,from-revision:,exec-only,help:"
+PARSED_OPTIONS=$(getopt -n "$0" -a -o $OPT_SPEC --long $LONG_OPT_SPEC -- "$@")
+OPTIONS_RET=$?
+
+eval set -- "$PARSED_OPTIONS"
+
+help_usage() {
+cat <<EOF
+
+UPDATE használata: mayor update [opciók] [modulok]
+
+A parancs segítségével frissíthetjük a MaYoR rendszert, a program forrását és
+az adatbázis-szerkezetet. A frissítések letöltése és kicsomagolása mellett
+a szkript egyéb módosításokat is végrehajthat, ezért alapértelmezett működés
+esetén a frissítés idejére letiltjuk a napló elérését. A zárolás a
+/var/run/mayor.lock állomány létrehozásával történik.
+
+A HTTP szervert, a frissítendő modulokat, a szükséges jelszavak és egyéb beál-
+lításokat a /etc/mayor/main.conf állományban kell megadni.
+
+Opciók:
+ -h, --help: A parancs leírása (amit most olvasol...)
+ -s, --http-server: A szerver ahonnan a frissítéseket letöltjük
+ -b, --basedir: A telepítési könyvtár
+ -l, --skip-lock: A frissítés idejére se zároljuk a program működését
+ -r, --from-revision: A frissítés indítása a megadott revision számtól - függetlenül a
+ jelenleg eltárolt aktuális számtól
+ -e, --exec-only: A frissítő szkriptek futtatása új állományok letöltése nélkül.
+ Csak a --from-revision opcióval együtt használható!
+
+Modulok:
+ A frissítendő modulok listája, pl: mayor-base mayor-naplo mayor-portal
+
+EOF
+}
+
+if [ $OPTIONS_RET -ne 0 ]; then help_usage; exit; fi
+
+declare -i REV
+while [ $# -ge 1 ]; do
+ case $1 in
+ --help | -h ) help_usage
+ exit
+ ;;
+
+ --skip-lock | -l ) SKIPLOCK=1
+ export SKIPLOCK
+ ;;
+
+ --exec-only | -e ) EXECONLY=1
+ export EXECONLY
+ ;;
+
+ --http-server | -s ) shift
+ HTTP_SERVER="$1"
+ echo "HTTP szerver: $HTTP_SERVER"
+ ;;
+
+ --basedir | -b ) shift
+ BASEDIR="$1"
+ echo "Alapkönyvtár: $BASEDIR"
+ ;;
+
+ --from-revision | -r ) shift
+ REV="$1"
+ echo "Revision: $REV"
+ ;;
+
+ -- ) shift
+ break
+ ;;
+
+ * ) echo "HIBA: ismeretlen opció: $1" # ide elvileg sose jutunk, mert a getopts már kiszűrte a hibás paraméterek
+ exit
+ ;;
+ esac
+ shift
+done
+
+TMPMODS=""
+while [ $# -ge 1 ]; do
+ if [[ ! "${MODS[*]}" =~ .*$1.* ]]; then
+ echo -e "Ismeretlen modul: $1"
+ else
+ TMPMODS="$1 $TMPMODS"
+ fi
+ shift
+done
+if [ "$TMPMODS" != '' ]; then
+ MODULES=$TMPMODS
+fi
+
+###########################
+
+
+if [ -z $UPDATEDIR ]; then
+ if [ -f ../config/update.conf ]; then
+ echo -e "\n\nWARNING: elavult konfigurációs állomány! (update.conf)"
+ echo " A frissítési rendszer a korábbi backup.conf és update.conf állományok helyett"
+ echo " egy új, rögzített helyen lévő állományt használ: /etc/mayor/main.conf"
+ echo " Most - ennek hiányában - a régebbi állományt használjuk"
+ . ../config/update.conf
+ else
+ echo -e "\n\nERROR: Hiányzó konfigurációs file: ../config/update.conf"
+ pwd
+ exit 10
+ fi
+fi
+
+# Ha paraméterknént nem volt megadva revision
+if [ -z "${REV:-}" ]; then
+ if [ "$EXECONLY" == "1" ]; then
+ echo "Hiba: Az --exec-only kapcsoló csak a --from-revision paraméterrel együtt használható!"
+ exit 9
+ fi
+ if [ -f $REVISION_FILE ]; then
+ REV=$(cat $REVISION_FILE)
+ else
+ REV=0
+ fi
+fi
+
+echo -e "\n%%%%%%%%%%%%%%%%% $DATETIME %%%%%%%%%%%%%%%%%"
+echo -e "\nFrissítés $REV számú változatról."
+
+if [ "$EXECONLY" != "1" ]; then
+ echo -e "\n * Az frissítéshez szükséges állományok letöltése (eltarthat pár percig)... "
+
+ if [ "$MODULES" == '' ]; then
+ echo -e "\n\nERROR: Nincs megadva a frissítendő modulok listája (/etc/mayor/main.conf)!\n"
+ exit 1
+ else
+ declare -i UJ_REV
+ if [ "$HTTP_SERVER" == '' ]; then
+ if [ -f $SVN ]; then
+ # frissítés SVN-ből
+ $SVN --force export https://svn.mayor.hu/svn/trunk/mayor-base/bin "$BASEDIR/bin" > /dev/null
+ for MODULE in $MODULES; do
+ echo -n " $MODULE... "
+ chmod +x $BASEDIR/bin/mayor
+ if [ $? != 0 ]; then exit 2; fi
+ UJ_REV=$($SVN --force export https://svn.mayor.hu/svn/trunk/$MODULE/update "$BASEDIR/update" | grep revision | cut -d ' ' -f 3 | uniq | sed -e 's/\.//g')
+ if [ $? != 0 ]; then exit 3; fi
+ echo "kész."
+ done
+ else
+ echo -e "\n\nERROR: A subversion kliens nem található: $SVN"
+ exit 4
+ fi
+ else
+ # Munkakönyvtár létrehozása
+ if [ ! -d $TMPDIR ]; then
+ mkdir $TMPDIR
+ chown -R 0:0 $TMPDIR
+ chmod -R 700 $TMPDIR
+ else
+ rm -rf $TMPDIR/*
+ fi
+ cd $TMPDIR
+ # Az md5sum állomány leszedáse
+ if [ -z $VERSION ]; then
+ wget "http://www.mayor.hu/download/md5sum"
+ else
+ wget "http://www.mayor.hu/download/$VERSION/md5sum"
+ if [[ ! $HTTP_SERVER =~ .*$VERSION.* ]]; then HTTP_SERVER="$HTTP_SERVER/$VERSION"; fi
+ fi
+ if [ $? != 0 ]; then exit 5; fi
+ UJ_REV=$(grep Revision md5sum | cut -d ' ' -f 2)
+ if [ "$REV" -lt "$UJ_REV" ]; then
+ # csomagok leszedése
+ for MODULE in $MODULES; do
+ echo -n " $MODULE... "
+ MOD=$(echo $MODULE | sed "s#/#-#")
+ FILE=$(grep "$MOD-rev" md5sum | cut -d ' ' -f 3)
+ if [ "$FILE" != '' ]; then
+ wget "$HTTP_SERVER/$FILE"
+ if [ $? != 0 ]; then
+ echo -e "\n\n ERROR: Az frissítés nem tölthető le: $FILE!\n"
+ exit 6
+ fi
+ grep $FILE md5sum | md5sum -c --status
+ if [ $? == 0 ]; then
+ tar xfz $FILE -C $BASEDIR ./update
+ else
+ echo -e "\n\n ERROR: Az ellenörző összeg nem egyezik!\n"
+ exit 7
+ fi
+ else
+ echo 'Nincs ilyen modul!'
+ exit 8 # nem szabad hiányzó csomagok mellett frissíteni!!
+ fi
+ done
+ fi
+ cd $BASEDIR/bin
+ fi
+ fi
+else # exec-only
+ if [ -f $REVISION_FILE ]; then
+ UJ_REV=$(cat $REVISION_FILE)
+ else
+ UJ_REV=0 # nem frissítünk semmit
+ fi
+fi
+
+if [ "$REV" -ge "$UJ_REV" ]; then
+ echo -e "\nNincs újabb változat.\n"
+ echo -e "\n * A szükséges jogosultságok beállítása:"
+ chmod +x $BASEDIR/bin/mayor
+ echo 'kész.'
+else
+ echo 'kész.'
+ . $BASEDIR/update/processUpdateScripts.sh
+fi
+
+PWDTEX=$(pwd)
+echo -e "\nMaYoR TeX formátum állomány újragenerálása... "
+cd $BASEDIR/print/module-naplo/tex/ && fmtutil-sys --cnffile $BASEDIR/print/module-naplo/tex/mayor.cnf --fmtdir $BASEDIR/print/module-naplo/ --byfmt mayor > /dev/null 2>&1
+echo -e "\nMaYoR XeTeX formátum állomány újragenerálása... "
+cd $BASEDIR/print/module-naplo/xetex/ && fmtutil-sys --cnffile $BASEDIR/print/module-naplo/xetex/mayor-xetex.cnf --fmtdir $BASEDIR/print/module-naplo/ --byfmt mayor-xetex > /dev/null 2>&1
+cd $PWDTEX
+echo 'kész.'
+
+echo -e "\nFrissítés vége.\n"
+exit 0
diff --git a/mayor-mod/bin/xetex2pdf.sh b/mayor-mod/bin/xetex2pdf.sh
new file mode 100644
index 00000000..a4f7bf3f
--- /dev/null
+++ b/mayor-mod/bin/xetex2pdf.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+#
+# A script segítségével tesztelhetjük, hogy mi történik, mikor a program a haladásinaplót, illetve osztályozónaplót generálja
+# __NYOMTATAS_XETEX===true beállítás mellett
+#
+# Paraméter: a feldolgozandó UTF-8 kódolású TeX állomány "-u8.tex" végződés nélküli neve.
+#
+
+. /etc/mayor/main.conf
+
+HOME="/tmp"
+export HOME
+
+# Make sure this exists
+# cd $BASEDIR/print/module-naplo/tex/
+# fmtutil-sys --cnffile $BASEDIR/print/module-naplo/tex/mayor.cnf --fmtdir $BASEDIR/print/module-naplo/ --byfmt mayor
+
+cat <<EOF > $1.tex
+%\font\kicsi=ecrm0500
+%\font\nagy=ecbx1200
+%\font\vastag=ecsx0800
+%\font\nagyss=ecsx1200
+%\font\normal=ecss0800
+%\font\dolt=ecsi0800
+
+\font\kicsi="Linux Libertine O" at 5pt
+\font\nagy="Linux Libertine O/B" at 12pt
+\font\nagyss="Arial/B" at 12pt
+\font\normal="Linux Biolinum O" at 8pt
+\font\dolt="Linux Biolinum O/I" at 8pt
+\normal
+
+EOF
+cat $1-u8.tex >> $1.tex
+xetex -fmt $BASEDIR/print/module-naplo/xetex/mayor-xetex $1.tex
+
diff --git a/mayor-mod/update/processUpdateScripts.sh b/mayor-mod/update/processUpdateScripts.sh
new file mode 100644
index 00000000..61ab5618
--- /dev/null
+++ b/mayor-mod/update/processUpdateScripts.sh
@@ -0,0 +1,267 @@
+#!/bin/bash
+
+source $BASEDIR/update/linkme.sh
+
+# Setting Mysql Connection Parameters
+echo -e "[mysqld]
+character-set-server = utf8
+collation-server = utf8_hungarian_ci
+[client]
+default-character-set=utf8
+host=$MYSQL_HOST
+user=$MYSQL_USER
+password=$MYSQL_PW
+" > $BASEDIR/config/my.cnf
+
+PRECHARSET="SET NAMES 'utf8' COLLATE 'utf8_hungarian_ci'; " ## fontos, hogy a ";" ott legyen a végén!!
+#PRECHARSET="$PRECHARSET SET collation_connection = utf8_hungarian_ci; " ## ha a mysql server esetleg régebbi lenne.
+
+MYSQL_CONFIG="--defaults-extra-file=$BASEDIR/config/my.cnf"
+MYSQL_PARAMETERS=""
+TEST=$($MYSQL -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PW -e exit 2>&1 >/dev/null)
+if [ $? == "0" ]; then
+ echo "SQL-connect test #2 OK"
+ MYSQL_PARAMETERS="-h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PW"
+else
+ echo "Hibás SQL csatlakozás(2)"
+fi
+TEST=$($MYSQL $MYSQL_CONFIG -e exit 2>&1 >/dev/null)
+if [ $? == "0" ]; then
+ echo "SQL-connect test #1 OK"
+ MYSQL_PARAMETERS=$MYSQL_CONFIG
+else
+ echo "Hibás SQL csatlakozás(1)"
+fi
+echo "Karakterkódolás ellenőrzése"
+echo "SHOW VARIABLES LIKE 'character%';" | $MYSQL $MYSQL_PARAMETERS
+# patch by Acsai Gabor <acsi@c3.hu> - FreeBSD
+# Kiegészítve: Miklós Gergő <gergo@bmrg.hu> - Baár-Madas
+# gondolatmenet:
+# A "default-character-set" beállítása után a "character_set_client" változóból 1db kell legyen, és értéke pontosan "utf8" kell legyen!
+### TEST=`echo "SHOW VARIABLES LIKE 'character_set_client'" | $MYSQL $MYSQL_PARAMETERS | grep utf8 | wc -l | tr -d " "`
+TEST=$(echo "SHOW VARIABLES LIKE '%character_set_client%'" | $MYSQL $MYSQL_PARAMETERS | tail -n+2 | cut -f 2)
+if [ "$TEST" == "utf8" ]; then
+ echo "SQL-UTF8 test OK"
+else
+ echo -e "\n\nERROR: Hibás - nem utf8 - MySQL kliens karakterkódolás!\n"
+ echo -e "Ellenőrizd a beállításokat és kérj segítséget a support@mayor.hu -n!\n"
+ exit 12
+fi
+# --
+
+run_script() {
+ FILEELEJE=$(echo $FILE | cut -f 1 -d '-')
+ FILEREV=${FILEELEJE: -6}
+ LOGSQL=""
+ if [ "$FILEREV" != "" ]; then
+ if [ "$FILEREV" -gt 3399 ]; then
+ LOGSQL="INSERT IGNORE mayorUpdateLog (scriptFile) VALUES ('${FILE}')"
+ fi
+ fi
+ if [ ! "${FILEREV}" \< "${REVSTR}" ]; then
+ FILEEXT=$(echo $FILE | cut -f 2 -d '.')
+ if [ "$FILEEXT" == "sh" ]; then
+ echo " - Szkript futtatása ($FILE)..."
+ . $FILE
+ if [ $? != 0 ]; then exit 13; fi
+ elif [ "$FILEEXT" == "sql" ]; then
+ echo " - SQL utasítások végrehajtása ($FILE)..."
+ FILEDB=$(echo $FILE | cut -f 1 -d '.' | cut -f 3 -d '-')
+ case "$FILEDB" in
+ naplo)
+ DBS=$DB_NAPLO
+ ;;
+ intezmeny)
+ DBS=$DB_INTEZMENY
+ ;;
+ auth)
+ DBS=$DB_AUTH
+ ;;
+ *)
+ DBS=$FILEDB
+ ;;
+ esac
+ for DB in $DBS; do
+ echo -e "\n $DB..."
+
+ if [ "$FILEREV" != "" ]; then
+ if [ "$FILEREV" -gt 3399 ]; then
+ TEST=$((echo $PRECHARSET && echo "SELECT count(*) as db FROM information_schema.TABLES WHERE TABLE_SCHEMA='${DB}' and TABLE_NAME='mayorUpdateLog'") | $MYSQL $MYSQL_PARAMETERS $DB | grep -v "db")
+ if [ "$TEST" == "0" ]; then
+ echo " Hiányzik a mayorUpdateLog tábla... tovább..."
+ continue
+ fi
+ fi
+ fi
+
+ case "$FILEDB" in
+ naplo)
+ INTEZMENYDB=$(echo $DB | sed -e 's/\(naplo_\)\(.*\)\(_.*\)/intezmeny_\2/')
+ INTEZMENYROVIDNEV=$(echo $DB | cut -f 2 -d '_')
+ TANEV=$(echo $DB | cut -f 3 -d '_')
+ (echo $PRECHARSET && cat $FILE && echo "${LOGSQL}") | sed -e "s/%INTEZMENYDB%/$INTEZMENYDB/g" | sed -e "s/%INTEZMENY%/$INTEZMENYROVIDNEV/g" | \
+ sed -e "s/%TANEV%/$TANEV/g" | $MYSQL $MYSQL_PARAMETERS $DB
+ ;;
+ auth)
+ (echo $PRECHARSET && cat $FILE && echo "${LOGSQL}") | sed -e "s/%MYSQL_ENCODE_STR%/$MYSQL_ENCODE_STR/g" | $MYSQL $MYSQL_PARAMETERS $DB
+ ;;
+ intezmeny)
+ INTEZMENYROVIDNEV=$(echo $DB | cut -f 2 -d '_')
+ (echo $PRECHARSET && cat $FILE && echo "${LOGSQL}") | sed -e "s/%INTEZMENY%/$INTEZMENYROVIDNEV/g" | $MYSQL $MYSQL_PARAMETERS $DB
+ ;;
+ *)
+ (echo $PRECHARSET && cat $FILE && echo "${LOGSQL}") | $MYSQL $MYSQL_PARAMETERS $DB
+ ;;
+ esac
+ if [ $? != 0 ]; then
+ exit 13;
+ fi
+ done
+ [ ! -z $SQLLOG ] && echo $FILE >> $SQLLOG;
+ fi
+ fi
+}
+
+echo " Az új változat verziószáma: $UJ_REV"
+
+REVSTR=$(printf "%06d" $REV)
+MYSQL_ENCODE_STR=$(grep _MYSQL_ENCODE_STR $BASEDIR/config/main-config.php | sed -e "s/define('_MYSQL_ENCODE_STR','\(.*\)');/\\1/")
+
+# mysql host beállítása
+if [ "$MYSQL_HOST" == "" ]; then
+ MYSQL_HOST="localhost"
+fi
+echo " A MySQL backend a következő lesz: $MYSQL_HOST"
+echo " Figyelem! MySQL Master-Slave architekturát az upgrade script jelenleg nem támogat!!!"
+
+echo -e "\n * Adatbázisok lekérdezése..."
+if [ -f $MYSQL ]
+then
+ DB_MAYOR=$($MYSQL $MYSQL_PARAMETERS -e"$PRECHARSET SHOW DATABASES LIKE 'mayor\_%'" | grep -e '^mayor\_[^_]*$') ## ide elvileg nem kellene precharset, mert itt minden ASCCI/2
+ DB_NAPLO=$($MYSQL $MYSQL_PARAMETERS -e"$PRECHARSET SHOW DATABASES LIKE 'naplo\_%\_%'" | grep -e '^naplo\_[^\_]*\_20[0-9][0-9]$')
+ DB_INTEZMENY=$($MYSQL $MYSQL_PARAMETERS -e"$PRECHARSET SELECT CONCAT('intezmeny_',rovidNev) FROM mayor_naplo.intezmeny" | grep -e '^intezmeny\_[^\_]*$')
+# DB_INTEZMENY=`$MYSQL $MYSQL_PARAMETERS -e"SHOW DATABASES LIKE 'intezmeny\_%'" | grep -e '^intezmeny\_[^\_]*$'`
+ if [ $? != 0 ]; then exit 12; fi
+ DB_AUTH=""
+ for DB in $DB_MAYOR; do
+ if [ "$DB" == "mayor_parent" -o "$DB" == "mayor_private" -o "$DB" == "mayor_public" ]; then
+ DB_AUTH="$DB_AUTH $DB"
+ fi
+ done
+else
+ echo -e "\n\nERROR: A mysql kliens nem található: $MYSQL\n"
+ exit 12
+fi
+
+if [ "$SKIPLOCK" != "1" ]; then
+ if [ ! -z $LOCKFILE ]; then
+ echo -e "\n * A web-es elérés letiltása:"
+ echo -n " - Lock-file létrehozása... "
+ echo "$DATE: Update process runing... " > $LOCKFILE
+ echo "kész."
+
+ echo -n " - Aktív munkamenetek törlése... "
+ $MYSQL $MYSQL_PARAMETERS -e"DELETE FROM mayor_login.session" ##itt se kell, jó az ASCII
+ echo "kész."
+ fi
+else
+ echo -e "\n * A lock-olást a kérésedre kihagyjuk..."
+fi
+
+echo -e "\n * Az előzetes frissítő állományok feldolgozása (pre*, rev*):\n"
+for FILE in $(ls $UPDATEDIR/rev* $UPDATEDIR/pre* | sort); do
+ run_script
+done
+
+if [ "$EXECONLY" != "1" ]; then
+ echo -e "\n * A modulok állományainak frissítése:\n"
+ for MODULE in $MODULES; do
+ echo -e "\n $MODULE... \n"
+ if [ "$HTTP_SERVER" == '' ]; then
+ $SVN --force --quiet export https://svn.mayor.hu/svn/trunk/$MODULE "$BASEDIR"
+ if [ $? != 0 ]; then exit 13; fi
+ else
+ # Ha rpm csomag futtatja, akkor már ki van csomagolva minden és nincs md5sum
+ if [ -f $TMPDIR/md5sum ]; then
+ MOD=$(echo $MODULE | sed "s#/#-#")
+ FILE=$(grep "$MOD-rev" $TMPDIR/md5sum | cut -d ' ' -f 3)
+ if [ -f $TMPDIR/$FILE ]; then
+ tar xfz $TMPDIR/$FILE -C $BASEDIR
+ if [ $? != 0 ]; then exit 13; fi
+ fi
+ fi
+ fi
+ done
+ if [ -d $TMPDIR ]; then rm -rf $TMPDIR; fi
+ echo -e "\nkész.\n"
+fi
+
+echo -e "\n * Az utólagos frissítő állományok feldolgozása (post*):\n"
+for FILE in $(ls $UPDATEDIR/post* | sort); do
+ run_script
+done
+
+
+if [ -e $LOCKFILE ]; then
+ if [ ! -z $LOCKFILE ]; then
+ echo -e "\n * A web-es hozzáférés engedélyezése:"
+ rm $LOCKFILE
+ fi
+fi
+
+if [ "$EXECONLY" != "1" ]; then
+ echo -e "\n * A szükséges jogosultságok beállítása:"
+ chmod +x $BASEDIR/bin/mayor
+ echo -n " ... "
+ chown -R $WEB_SERVER_USER $BASEDIR/download
+ chown -R $WEB_SERVER_USER $BASEDIR/cache
+ if [ -d $BASEDIR/www/wiki/conf ]; then
+ chown -R $WEB_SERVER_USER $BASEDIR/www/wiki/conf $BASEDIR/www/wiki/data
+ fi
+ chown $WEB_SERVER_USER $BASEDIR/config
+ chmod 700 $BASEDIR/config
+ echo -e "... kész.\n"
+
+ echo -e "\n * Szimbolikus linkek ellenőrzése/létrehozása"
+ POLICIES="parent public"
+ for POLICY in $POLICIES; do
+ eval "LIST=\$${POLICY}Link"
+ for f in $LIST; do
+ DIR=$(echo $f | cut -d / -f 1-2)
+ if [ ! -d $BASEDIR/www/policy/$POLICY/$DIR ]; then
+ echo " Könyvtár: $BASEDIR/www/policy/$POLICY/$DIR"
+ mkdir -p $BASEDIR/www/policy/$POLICY/$DIR
+ fi
+ FILES="$f-pre.php $f.php"
+ for file in $FILES; do
+ if [ ! -e $BASEDIR/www/policy/$POLICY/$file ]; then
+ if [ -f $BASEDIR/www/policy/private/$file ]; then
+ echo " $BASEDIR/www/policy/private/$file --> $BASEDIR/www/policy/$POLICY/$file"
+ ln -s $BASEDIR/www/policy/private/$file $BASEDIR/www/policy/$POLICY/$file
+ else
+ echo " Hiányzó file: $BASEDIR/www/policy/private/$file"
+ fi
+ fi
+ done
+ done
+ eval "DLIST=\$${POLICY}Deny"
+ for f in $DLIST; do
+ FILES="$f-pre.php $f.php"
+ for file in $FILES; do
+ if [ -e $BASEDIR/www/policy/$POLICY/$file ]; then
+ echo " $BASEDIR/www/policy/$POLICY/$file link(file) törlése"
+ rm "$BASEDIR/www/policy/$POLICY/$file"
+ fi
+ done
+ done
+ done
+fi # execonly
+
+echo -e "\n * Az frissített verziószám rögzítése ($UJ_REV)"
+if [ "$UJ_REV" -gt 0 ]; then
+ echo $UJ_REV > $REVISION_FILE
+else
+ echo " Hibás (nulla) verziószám! Nem rögzítjük."
+fi
+
+[ -x "$LOCAL_UPDATE_SCRIPT" ] && echo -e "\n * Helyi szkript futtatása: $LOCAL_UPDATE_SCRIPT...\n " && . "$LOCAL_UPDATE_SCRIPT"
diff --git a/mayor-mod/update/processUpdateScripts.sh.mod.txt b/mayor-mod/update/processUpdateScripts.sh.mod.txt
new file mode 100644
index 00000000..3168b48d
--- /dev/null
+++ b/mayor-mod/update/processUpdateScripts.sh.mod.txt
@@ -0,0 +1,183 @@
+--- processUpdateScripts.sh.orig 2016-03-04 13:44:39.000000000 +0100
++++ processUpdateScripts.sh 2018-03-04 14:10:13.835309914 +0100
+@@ -6,22 +6,26 @@
+ echo -e "[mysqld]
+ character-set-server = utf8
+ collation-server = utf8_hungarian_ci
+-skip-character-set-client-handshake
+ [client]
++default-character-set=utf8
+ host=$MYSQL_HOST
+ user=$MYSQL_USER
+ password=$MYSQL_PW
+ " > $BASEDIR/config/my.cnf
++
++PRECHARSET="SET NAMES 'utf8' COLLATE 'utf8_hungarian_ci'; " ## fontos, hogy a ";" ott legyen a végén!!
++#PRECHARSET="$PRECHARSET SET collation_connection = utf8_hungarian_ci; " ## ha a mysql server esetleg régebbi lenne.
++
+ MYSQL_CONFIG="--defaults-extra-file=$BASEDIR/config/my.cnf"
+ MYSQL_PARAMETERS=""
+-TEST=`$MYSQL -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PW -e exit 2>&1 >/dev/null`
++TEST=$($MYSQL -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PW -e exit 2>&1 >/dev/null)
+ if [ $? == "0" ]; then
+ echo "SQL-connect test #2 OK"
+ MYSQL_PARAMETERS="-h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PW"
+ else
+ echo "Hibás SQL csatlakozás(2)"
+ fi
+-TEST=`$MYSQL $MYSQL_CONFIG -e exit 2>&1 >/dev/null`
++TEST=$($MYSQL $MYSQL_CONFIG -e exit 2>&1 >/dev/null)
+ if [ $? == "0" ]; then
+ echo "SQL-connect test #1 OK"
+ MYSQL_PARAMETERS=$MYSQL_CONFIG
+@@ -31,8 +35,12 @@
+ echo "Karakterkódolás ellenőrzése"
+ echo "SHOW VARIABLES LIKE 'character%';" | $MYSQL $MYSQL_PARAMETERS
+ # patch by Acsai Gabor <acsi@c3.hu> - FreeBSD
+-TEST=`echo "SHOW VARIABLES LIKE 'character_set_client'" | $MYSQL $MYSQL_PARAMETERS | grep utf8 | wc -l | tr -d " "`
+-if [ "x${TEST}" == "x1" ]; then
++# Kiegészítve: Miklós Gergő <gergo@bmrg.hu> - Baár-Madas
++# gondolatmenet:
++# A "default-character-set" beállítása után a "character_set_client" változóból 1db kell legyen, és értéke pontosan "utf8" kell legyen!
++### TEST=`echo "SHOW VARIABLES LIKE 'character_set_client'" | $MYSQL $MYSQL_PARAMETERS | grep utf8 | wc -l | tr -d " "`
++TEST=$(echo "SHOW VARIABLES LIKE '%character_set_client%'" | $MYSQL $MYSQL_PARAMETERS | tail -n+2 | cut -f 2)
++if [ "$TEST" == "utf8" ]; then
+ echo "SQL-UTF8 test OK"
+ else
+ echo -e "\n\nERROR: Hibás - nem utf8 - MySQL kliens karakterkódolás!\n"
+@@ -42,7 +50,7 @@
+ # --
+
+ run_script() {
+- FILEELEJE=`echo $FILE | cut -f 1 -d '-'`
++ FILEELEJE=$(echo $FILE | cut -f 1 -d '-')
+ FILEREV=${FILEELEJE: -6}
+ LOGSQL=""
+ if [ "$FILEREV" != "" ]; then
+@@ -51,14 +59,14 @@
+ fi
+ fi
+ if [ ! "${FILEREV}" \< "${REVSTR}" ]; then
+- FILEEXT=`echo $FILE | cut -f 2 -d '.'`
++ FILEEXT=$(echo $FILE | cut -f 2 -d '.')
+ if [ "$FILEEXT" == "sh" ]; then
+ echo " - Szkript futtatása ($FILE)..."
+ . $FILE
+ if [ $? != 0 ]; then exit 13; fi
+ elif [ "$FILEEXT" == "sql" ]; then
+ echo " - SQL utasítások végrehajtása ($FILE)..."
+- FILEDB=`echo $FILE | cut -f 1 -d '.' | cut -f 3 -d '-'`
++ FILEDB=$(echo $FILE | cut -f 1 -d '.' | cut -f 3 -d '-')
+ case "$FILEDB" in
+ naplo)
+ DBS=$DB_NAPLO
+@@ -78,7 +86,7 @@
+
+ if [ "$FILEREV" != "" ]; then
+ if [ "$FILEREV" -gt 3399 ]; then
+- TEST=`echo "SELECT count(*) as db FROM information_schema.TABLES WHERE TABLE_SCHEMA='${DB}' and TABLE_NAME='mayorUpdateLog'" | $MYSQL $MYSQL_PARAMETERS $DB | grep -v "db"`
++ TEST=$((echo $PRECHARSET && echo "SELECT count(*) as db FROM information_schema.TABLES WHERE TABLE_SCHEMA='${DB}' and TABLE_NAME='mayorUpdateLog'") | $MYSQL $MYSQL_PARAMETERS $DB | grep -v "db")
+ if [ "$TEST" == "0" ]; then
+ echo " Hiányzik a mayorUpdateLog tábla... tovább..."
+ continue
+@@ -88,21 +96,21 @@
+
+ case "$FILEDB" in
+ naplo)
+- INTEZMENYDB=`echo $DB | sed -e 's/\(naplo_\)\(.*\)\(_.*\)/intezmeny_\2/'`
+- INTEZMENYROVIDNEV=`echo $DB | cut -f 2 -d '_'`
+- TANEV=`echo $DB | cut -f 3 -d '_'`
+- (cat $FILE && echo "${LOGSQL}") | sed -e "s/%INTEZMENYDB%/$INTEZMENYDB/g" | sed -e "s/%INTEZMENY%/$INTEZMENYROVIDNEV/g" | \
++ INTEZMENYDB=$(echo $DB | sed -e 's/\(naplo_\)\(.*\)\(_.*\)/intezmeny_\2/')
++ INTEZMENYROVIDNEV=$(echo $DB | cut -f 2 -d '_')
++ TANEV=$(echo $DB | cut -f 3 -d '_')
++ (echo $PRECHARSET && cat $FILE && echo "${LOGSQL}") | sed -e "s/%INTEZMENYDB%/$INTEZMENYDB/g" | sed -e "s/%INTEZMENY%/$INTEZMENYROVIDNEV/g" | \
+ sed -e "s/%TANEV%/$TANEV/g" | $MYSQL $MYSQL_PARAMETERS $DB
+ ;;
+ auth)
+- (cat $FILE && echo "${LOGSQL}") | sed -e "s/%MYSQL_ENCODE_STR%/$MYSQL_ENCODE_STR/g" | $MYSQL $MYSQL_PARAMETERS $DB
++ (echo $PRECHARSET && cat $FILE && echo "${LOGSQL}") | sed -e "s/%MYSQL_ENCODE_STR%/$MYSQL_ENCODE_STR/g" | $MYSQL $MYSQL_PARAMETERS $DB
+ ;;
+ intezmeny)
+- INTEZMENYROVIDNEV=`echo $DB | cut -f 2 -d '_'`
+- (cat $FILE && echo "${LOGSQL}") | sed -e "s/%INTEZMENY%/$INTEZMENYROVIDNEV/g" | $MYSQL $MYSQL_PARAMETERS $DB
++ INTEZMENYROVIDNEV=$(echo $DB | cut -f 2 -d '_')
++ (echo $PRECHARSET && cat $FILE && echo "${LOGSQL}") | sed -e "s/%INTEZMENY%/$INTEZMENYROVIDNEV/g" | $MYSQL $MYSQL_PARAMETERS $DB
+ ;;
+ *)
+- (cat $FILE && echo "${LOGSQL}") | $MYSQL $MYSQL_PARAMETERS $DB
++ (echo $PRECHARSET && cat $FILE && echo "${LOGSQL}") | $MYSQL $MYSQL_PARAMETERS $DB
+ ;;
+ esac
+ if [ $? != 0 ]; then
+@@ -116,8 +124,8 @@
+
+ echo " Az új változat verziószáma: $UJ_REV"
+
+-REVSTR=`printf "%06d" $REV`
+-MYSQL_ENCODE_STR=`grep _MYSQL_ENCODE_STR $BASEDIR/config/main-config.php | sed -e "s/define('_MYSQL_ENCODE_STR','\(.*\)');/\\1/"`
++REVSTR=$(printf "%06d" $REV)
++MYSQL_ENCODE_STR=$(grep _MYSQL_ENCODE_STR $BASEDIR/config/main-config.php | sed -e "s/define('_MYSQL_ENCODE_STR','\(.*\)');/\\1/")
+
+ # mysql host beállítása
+ if [ "$MYSQL_HOST" == "" ]; then
+@@ -129,9 +137,9 @@
+ echo -e "\n * Adatbázisok lekérdezése..."
+ if [ -f $MYSQL ]
+ then
+- DB_MAYOR=`$MYSQL $MYSQL_PARAMETERS -e"SHOW DATABASES LIKE 'mayor\_%'" | grep -e '^mayor\_[^_]*$'`
+- DB_NAPLO=`$MYSQL $MYSQL_PARAMETERS -e"SHOW DATABASES LIKE 'naplo\_%\_%'" | grep -e '^naplo\_[^\_]*\_20[0-9][0-9]$'`
+- DB_INTEZMENY=`$MYSQL $MYSQL_PARAMETERS -e"SELECT CONCAT('intezmeny_',rovidNev) FROM mayor_naplo.intezmeny" | grep -e '^intezmeny\_[^\_]*$'`
++ DB_MAYOR=$($MYSQL $MYSQL_PARAMETERS -e"$PRECHARSET SHOW DATABASES LIKE 'mayor\_%'" | grep -e '^mayor\_[^_]*$') ## ide elvileg nem kellene precharset, mert itt minden ASCCI/2
++ DB_NAPLO=$($MYSQL $MYSQL_PARAMETERS -e"$PRECHARSET SHOW DATABASES LIKE 'naplo\_%\_%'" | grep -e '^naplo\_[^\_]*\_20[0-9][0-9]$')
++ DB_INTEZMENY=$($MYSQL $MYSQL_PARAMETERS -e"$PRECHARSET SELECT CONCAT('intezmeny_',rovidNev) FROM mayor_naplo.intezmeny" | grep -e '^intezmeny\_[^\_]*$')
+ # DB_INTEZMENY=`$MYSQL $MYSQL_PARAMETERS -e"SHOW DATABASES LIKE 'intezmeny\_%'" | grep -e '^intezmeny\_[^\_]*$'`
+ if [ $? != 0 ]; then exit 12; fi
+ DB_AUTH=""
+@@ -153,7 +161,7 @@
+ echo "kész."
+
+ echo -n " - Aktív munkamenetek törlése... "
+- $MYSQL $MYSQL_PARAMETERS -e"DELETE FROM mayor_login.session"
++ $MYSQL $MYSQL_PARAMETERS -e"DELETE FROM mayor_login.session" ##itt se kell, jó az ASCII
+ echo "kész."
+ fi
+ else
+@@ -161,7 +169,7 @@
+ fi
+
+ echo -e "\n * Az előzetes frissítő állományok feldolgozása (pre*, rev*):\n"
+-for FILE in `ls $UPDATEDIR/rev* $UPDATEDIR/pre* | sort`; do
++for FILE in $(ls $UPDATEDIR/rev* $UPDATEDIR/pre* | sort); do
+ run_script
+ done
+
+@@ -175,8 +183,8 @@
+ else
+ # Ha rpm csomag futtatja, akkor már ki van csomagolva minden és nincs md5sum
+ if [ -f $TMPDIR/md5sum ]; then
+- MOD=`echo $MODULE | sed "s#/#-#"`
+- FILE=`grep "$MOD-rev" $TMPDIR/md5sum | cut -d ' ' -f 3`
++ MOD=$(echo $MODULE | sed "s#/#-#")
++ FILE=$(grep "$MOD-rev" $TMPDIR/md5sum | cut -d ' ' -f 3)
+ if [ -f $TMPDIR/$FILE ]; then
+ tar xfz $TMPDIR/$FILE -C $BASEDIR
+ if [ $? != 0 ]; then exit 13; fi
+@@ -189,7 +197,7 @@
+ fi
+
+ echo -e "\n * Az utólagos frissítő állományok feldolgozása (post*):\n"
+-for FILE in `ls $UPDATEDIR/post* | sort`; do
++for FILE in $(ls $UPDATEDIR/post* | sort); do
+ run_script
+ done
+
+@@ -219,7 +227,7 @@
+ for POLICY in $POLICIES; do
+ eval "LIST=\$${POLICY}Link"
+ for f in $LIST; do
+- DIR=`echo $f | cut -d / -f 1-2`
++ DIR=$(echo $f | cut -d / -f 1-2)
+ if [ ! -d $BASEDIR/www/policy/$POLICY/$DIR ]; then
+ echo " Könyvtár: $BASEDIR/www/policy/$POLICY/$DIR"
+ mkdir -p $BASEDIR/www/policy/$POLICY/$DIR
diff --git a/mayor-mod/update/processUpdateScripts.sh.orig b/mayor-mod/update/processUpdateScripts.sh.orig
new file mode 100644
index 00000000..47fbb23e
--- /dev/null
+++ b/mayor-mod/update/processUpdateScripts.sh.orig
@@ -0,0 +1,259 @@
+#!/bin/bash
+
+source $BASEDIR/update/linkme.sh
+
+# Setting Mysql Connection Parameters
+echo -e "[mysqld]
+character-set-server = utf8
+collation-server = utf8_hungarian_ci
+skip-character-set-client-handshake
+[client]
+host=$MYSQL_HOST
+user=$MYSQL_USER
+password=$MYSQL_PW
+" > $BASEDIR/config/my.cnf
+MYSQL_CONFIG="--defaults-extra-file=$BASEDIR/config/my.cnf"
+MYSQL_PARAMETERS=""
+TEST=`$MYSQL -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PW -e exit 2>&1 >/dev/null`
+if [ $? == "0" ]; then
+ echo "SQL-connect test #2 OK"
+ MYSQL_PARAMETERS="-h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PW"
+else
+ echo "Hibás SQL csatlakozás(2)"
+fi
+TEST=`$MYSQL $MYSQL_CONFIG -e exit 2>&1 >/dev/null`
+if [ $? == "0" ]; then
+ echo "SQL-connect test #1 OK"
+ MYSQL_PARAMETERS=$MYSQL_CONFIG
+else
+ echo "Hibás SQL csatlakozás(1)"
+fi
+echo "Karakterkódolás ellenőrzése"
+echo "SHOW VARIABLES LIKE 'character%';" | $MYSQL $MYSQL_PARAMETERS
+# patch by Acsai Gabor <acsi@c3.hu> - FreeBSD
+TEST=`echo "SHOW VARIABLES LIKE 'character_set_client'" | $MYSQL $MYSQL_PARAMETERS | grep utf8 | wc -l | tr -d " "`
+if [ "x${TEST}" == "x1" ]; then
+ echo "SQL-UTF8 test OK"
+else
+ echo -e "\n\nERROR: Hibás - nem utf8 - MySQL kliens karakterkódolás!\n"
+ echo -e "Ellenőrizd a beállításokat és kérj segítséget a support@mayor.hu -n!\n"
+ exit 12
+fi
+# --
+
+run_script() {
+ FILEELEJE=`echo $FILE | cut -f 1 -d '-'`
+ FILEREV=${FILEELEJE: -6}
+ LOGSQL=""
+ if [ "$FILEREV" != "" ]; then
+ if [ "$FILEREV" -gt 3399 ]; then
+ LOGSQL="INSERT IGNORE mayorUpdateLog (scriptFile) VALUES ('${FILE}')"
+ fi
+ fi
+ if [ ! "${FILEREV}" \< "${REVSTR}" ]; then
+ FILEEXT=`echo $FILE | cut -f 2 -d '.'`
+ if [ "$FILEEXT" == "sh" ]; then
+ echo " - Szkript futtatása ($FILE)..."
+ . $FILE
+ if [ $? != 0 ]; then exit 13; fi
+ elif [ "$FILEEXT" == "sql" ]; then
+ echo " - SQL utasítások végrehajtása ($FILE)..."
+ FILEDB=`echo $FILE | cut -f 1 -d '.' | cut -f 3 -d '-'`
+ case "$FILEDB" in
+ naplo)
+ DBS=$DB_NAPLO
+ ;;
+ intezmeny)
+ DBS=$DB_INTEZMENY
+ ;;
+ auth)
+ DBS=$DB_AUTH
+ ;;
+ *)
+ DBS=$FILEDB
+ ;;
+ esac
+ for DB in $DBS; do
+ echo -e "\n $DB..."
+
+ if [ "$FILEREV" != "" ]; then
+ if [ "$FILEREV" -gt 3399 ]; then
+ TEST=`echo "SELECT count(*) as db FROM information_schema.TABLES WHERE TABLE_SCHEMA='${DB}' and TABLE_NAME='mayorUpdateLog'" | $MYSQL $MYSQL_PARAMETERS $DB | grep -v "db"`
+ if [ "$TEST" == "0" ]; then
+ echo " Hiányzik a mayorUpdateLog tábla... tovább..."
+ continue
+ fi
+ fi
+ fi
+
+ case "$FILEDB" in
+ naplo)
+ INTEZMENYDB=`echo $DB | sed -e 's/\(naplo_\)\(.*\)\(_.*\)/intezmeny_\2/'`
+ INTEZMENYROVIDNEV=`echo $DB | cut -f 2 -d '_'`
+ TANEV=`echo $DB | cut -f 3 -d '_'`
+ (cat $FILE && echo "${LOGSQL}") | sed -e "s/%INTEZMENYDB%/$INTEZMENYDB/g" | sed -e "s/%INTEZMENY%/$INTEZMENYROVIDNEV/g" | \
+ sed -e "s/%TANEV%/$TANEV/g" | $MYSQL $MYSQL_PARAMETERS $DB
+ ;;
+ auth)
+ (cat $FILE && echo "${LOGSQL}") | sed -e "s/%MYSQL_ENCODE_STR%/$MYSQL_ENCODE_STR/g" | $MYSQL $MYSQL_PARAMETERS $DB
+ ;;
+ intezmeny)
+ INTEZMENYROVIDNEV=`echo $DB | cut -f 2 -d '_'`
+ (cat $FILE && echo "${LOGSQL}") | sed -e "s/%INTEZMENY%/$INTEZMENYROVIDNEV/g" | $MYSQL $MYSQL_PARAMETERS $DB
+ ;;
+ *)
+ (cat $FILE && echo "${LOGSQL}") | $MYSQL $MYSQL_PARAMETERS $DB
+ ;;
+ esac
+ if [ $? != 0 ]; then
+ exit 13;
+ fi
+ done
+ [ ! -z $SQLLOG ] && echo $FILE >> $SQLLOG;
+ fi
+ fi
+}
+
+echo " Az új változat verziószáma: $UJ_REV"
+
+REVSTR=`printf "%06d" $REV`
+MYSQL_ENCODE_STR=`grep _MYSQL_ENCODE_STR $BASEDIR/config/main-config.php | sed -e "s/define('_MYSQL_ENCODE_STR','\(.*\)');/\\1/"`
+
+# mysql host beállítása
+if [ "$MYSQL_HOST" == "" ]; then
+ MYSQL_HOST="localhost"
+fi
+echo " A MySQL backend a következő lesz: $MYSQL_HOST"
+echo " Figyelem! MySQL Master-Slave architekturát az upgrade script jelenleg nem támogat!!!"
+
+echo -e "\n * Adatbázisok lekérdezése..."
+if [ -f $MYSQL ]
+then
+ DB_MAYOR=`$MYSQL $MYSQL_PARAMETERS -e"SHOW DATABASES LIKE 'mayor\_%'" | grep -e '^mayor\_[^_]*$'`
+ DB_NAPLO=`$MYSQL $MYSQL_PARAMETERS -e"SHOW DATABASES LIKE 'naplo\_%\_%'" | grep -e '^naplo\_[^\_]*\_20[0-9][0-9]$'`
+ DB_INTEZMENY=`$MYSQL $MYSQL_PARAMETERS -e"SELECT CONCAT('intezmeny_',rovidNev) FROM mayor_naplo.intezmeny" | grep -e '^intezmeny\_[^\_]*$'`
+# DB_INTEZMENY=`$MYSQL $MYSQL_PARAMETERS -e"SHOW DATABASES LIKE 'intezmeny\_%'" | grep -e '^intezmeny\_[^\_]*$'`
+ if [ $? != 0 ]; then exit 12; fi
+ DB_AUTH=""
+ for DB in $DB_MAYOR; do
+ if [ "$DB" == "mayor_parent" -o "$DB" == "mayor_private" -o "$DB" == "mayor_public" ]; then
+ DB_AUTH="$DB_AUTH $DB"
+ fi
+ done
+else
+ echo -e "\n\nERROR: A mysql kliens nem található: $MYSQL\n"
+ exit 12
+fi
+
+if [ "$SKIPLOCK" != "1" ]; then
+ if [ ! -z $LOCKFILE ]; then
+ echo -e "\n * A web-es elérés letiltása:"
+ echo -n " - Lock-file létrehozása... "
+ echo "$DATE: Update process runing... " > $LOCKFILE
+ echo "kész."
+
+ echo -n " - Aktív munkamenetek törlése... "
+ $MYSQL $MYSQL_PARAMETERS -e"DELETE FROM mayor_login.session"
+ echo "kész."
+ fi
+else
+ echo -e "\n * A lock-olást a kérésedre kihagyjuk..."
+fi
+
+echo -e "\n * Az előzetes frissítő állományok feldolgozása (pre*, rev*):\n"
+for FILE in `ls $UPDATEDIR/rev* $UPDATEDIR/pre* | sort`; do
+ run_script
+done
+
+if [ "$EXECONLY" != "1" ]; then
+ echo -e "\n * A modulok állományainak frissítése:\n"
+ for MODULE in $MODULES; do
+ echo -e "\n $MODULE... \n"
+ if [ "$HTTP_SERVER" == '' ]; then
+ $SVN --force --quiet export https://svn.mayor.hu/svn/trunk/$MODULE "$BASEDIR"
+ if [ $? != 0 ]; then exit 13; fi
+ else
+ # Ha rpm csomag futtatja, akkor már ki van csomagolva minden és nincs md5sum
+ if [ -f $TMPDIR/md5sum ]; then
+ MOD=`echo $MODULE | sed "s#/#-#"`
+ FILE=`grep "$MOD-rev" $TMPDIR/md5sum | cut -d ' ' -f 3`
+ if [ -f $TMPDIR/$FILE ]; then
+ tar xfz $TMPDIR/$FILE -C $BASEDIR
+ if [ $? != 0 ]; then exit 13; fi
+ fi
+ fi
+ fi
+ done
+ if [ -d $TMPDIR ]; then rm -rf $TMPDIR; fi
+ echo -e "\nkész.\n"
+fi
+
+echo -e "\n * Az utólagos frissítő állományok feldolgozása (post*):\n"
+for FILE in `ls $UPDATEDIR/post* | sort`; do
+ run_script
+done
+
+
+if [ -e $LOCKFILE ]; then
+ if [ ! -z $LOCKFILE ]; then
+ echo -e "\n * A web-es hozzáférés engedélyezése:"
+ rm $LOCKFILE
+ fi
+fi
+
+if [ "$EXECONLY" != "1" ]; then
+ echo -e "\n * A szükséges jogosultságok beállítása:"
+ chmod +x $BASEDIR/bin/mayor
+ echo -n " ... "
+ chown -R $WEB_SERVER_USER $BASEDIR/download
+ chown -R $WEB_SERVER_USER $BASEDIR/cache
+ if [ -d $BASEDIR/www/wiki/conf ]; then
+ chown -R $WEB_SERVER_USER $BASEDIR/www/wiki/conf $BASEDIR/www/wiki/data
+ fi
+ chown $WEB_SERVER_USER $BASEDIR/config
+ chmod 700 $BASEDIR/config
+ echo -e "... kész.\n"
+
+ echo -e "\n * Szimbolikus linkek ellenőrzése/létrehozása"
+ POLICIES="parent public"
+ for POLICY in $POLICIES; do
+ eval "LIST=\$${POLICY}Link"
+ for f in $LIST; do
+ DIR=`echo $f | cut -d / -f 1-2`
+ if [ ! -d $BASEDIR/www/policy/$POLICY/$DIR ]; then
+ echo " Könyvtár: $BASEDIR/www/policy/$POLICY/$DIR"
+ mkdir -p $BASEDIR/www/policy/$POLICY/$DIR
+ fi
+ FILES="$f-pre.php $f.php"
+ for file in $FILES; do
+ if [ ! -e $BASEDIR/www/policy/$POLICY/$file ]; then
+ if [ -f $BASEDIR/www/policy/private/$file ]; then
+ echo " $BASEDIR/www/policy/private/$file --> $BASEDIR/www/policy/$POLICY/$file"
+ ln -s $BASEDIR/www/policy/private/$file $BASEDIR/www/policy/$POLICY/$file
+ else
+ echo " Hiányzó file: $BASEDIR/www/policy/private/$file"
+ fi
+ fi
+ done
+ done
+ eval "DLIST=\$${POLICY}Deny"
+ for f in $DLIST; do
+ FILES="$f-pre.php $f.php"
+ for file in $FILES; do
+ if [ -e $BASEDIR/www/policy/$POLICY/$file ]; then
+ echo " $BASEDIR/www/policy/$POLICY/$file link(file) törlése"
+ rm "$BASEDIR/www/policy/$POLICY/$file"
+ fi
+ done
+ done
+ done
+fi # execonly
+
+echo -e "\n * Az frissített verziószám rögzítése ($UJ_REV)"
+if [ "$UJ_REV" -gt 0 ]; then
+ echo $UJ_REV > $REVISION_FILE
+else
+ echo " Hibás (nulla) verziószám! Nem rögzítjük."
+fi
+
+[ -x "$LOCAL_UPDATE_SCRIPT" ] && echo -e "\n * Helyi szkript futtatása: $LOCAL_UPDATE_SCRIPT...\n " && . "$LOCAL_UPDATE_SCRIPT"
diff --git a/mayor-mod/www/include/modules/naplo/share/file.php b/mayor-mod/www/include/modules/naplo/share/file.php
new file mode 100644
index 00000000..1e6c7595
--- /dev/null
+++ b/mayor-mod/www/include/modules/naplo/share/file.php
@@ -0,0 +1,662 @@
+<?php
+
+ require_once('include/share/print/pdf.php');
+
+ if (file_exists("lang/$lang/module-naplo/share/file.php")) {
+ require_once("lang/$lang/module-naplo/share/file.php");
+ } elseif (file_exists('lang/'._DEFAULT_LANG.'/module-naplo/share/file.php')) {
+ require_once('lang/'._DEFAULT_LANG.'/module-naplo/share/file.php');
+ } else {
+ echo $lang;
+ }
+
+ $Attrs = array(
+
+ 'diakid' => _ATTR_DIAKID,
+ 'oid' => _ATTR_OID,
+ 'diakigazolvanyszam' => _ATTR_IGAZOLVANYSZAM,
+ 'viseltnevelotag' => _ATTR_VNE,
+ 'viseltcsaladinev' => _ATTR_VCSN,
+ 'viseltutonev' => _ATTR_VUN,
+ 'szuleteskorinevelotag' => _ATTR_SZNE,
+ 'szuleteskoricsaladinev' => _ATTR_SZCSN,
+ 'szuleteskoriutonev' => _ATTR_SZUN,
+ 'szuletesihely' => _ATTR_SZH,
+ 'szuletesiido' => _ATTR_SZI,
+ 'anyanevelotag' => _ATTR_ANE,
+ 'anyacsaladinev' => _ATTR_ACSN,
+ 'anyautoneve' => _ATTR_AUN,
+ 'kezdotanev' => _ATTR_KEZDO_TANEV,
+ 'kezdoszemeszter' => _ATTR_KEZDO_SZEMESZTER,
+ 'vegzotanev' => _ATTR_VEGZO_TANEV,
+ 'vegzoszemeszter' => _ATTR_VEGZO_SZEMESZTER,
+ 'adoazonosito' => _ATTR_ADOAZONOSITO,
+ 'allampolgarsag' => _ATTR_ALLAMPOLGARSAG,
+ 'anyaid' => _ATTR_ANYAID,
+ 'apaid' => _ATTR_APAID,
+ 'gondviseloid' => _ATTR_GONDVISELOID,
+ 'neveloid' => _ATTR_NEVELOID,
+ 'diaknaplosorszam' => _ATTR_DIAKNAPLOSORSZAM,
+ 'elozoiskolaomkod' => _ATTR_ELOZOISKOLAOMKOD,
+ 'email' => _ATTR_EMAIL,
+ 'fogyatekossag' => _ATTR_FOGYATEKOSSAG,
+ 'gondozasiszam' => _ATTR_GONDOZASISZAM,
+ 'jogviszonykezdete' => _ATTR_JOGVISZONYKEZDETE,
+ 'jogviszonyvege' => _ATTR_JOGVISZONYVEGE,
+
+ 'lakhelyorszag' => _ATTR_LAKHELY_ORSZAG,
+ 'lakhelyirsz' => _ATTR_LAKHELY_IRSZ,
+ 'lakhelyhelyseg' => _ATTR_LAKHELY_HELYSEG,
+ 'lakhelykozteruletnev' => _ATTR_LAKHELY_KOZTERULETNEV,
+ 'lakhelykozteruletjelleg' => _ATTR_LAKHELY_KOZTERULETJELLEG,
+ 'lakhelyhazszam' => _ATTR_LAKHELY_HAZSZAM,
+ 'lakhelyemelet' => _ATTR_LAKHELY_EMELET,
+ 'lakhelyajto' => _ATTR_LAKHELY_AJTO,
+
+ 'tartorszag' => _ATTR_TART_ORSZAG,
+ 'tartirsz' => _ATTR_TART_IRSZ,
+ 'tarthelyseg' => _ATTR_TART_HELYSEG,
+ 'tartkozteruletnev' => _ATTR_TART_KOZTERULETNEV,
+ 'tartkozteruletjelleg' => _ATTR_TART_KOZTERULETJELLEG,
+ 'tarthazszam' => _ATTR_TART_HAZSZAM,
+ 'tartemelet' => _ATTR_TART_EMELET,
+ 'tartajto' => _ATTR_TART_AJTO,
+
+ 'tajszam' => _ATTR_TAJSZAM,
+ 'osztalyjel' => _ATTR_OSZTALYJEL,
+ 'penzugyistatusz' => _ATTR_PENZUGYISTATUSZ,
+ 'szemelyiigazolvanyszam' => _ATTR_SZEMELYIIGAZOLVANYSZAM,
+ 'szocialishelyzet' => _ATTR_SZOCIALISHELYZET,
+ 'statusz' => _ATTR_STATUSZ,
+ 'tartozkodasiokiratszam' => _ATTR_TARTOZKODASIOKIRATSZAM,
+ 'torvenyeskepviselo' => _ATTR_TORVENYESKEPVISELO,
+ 'telefon' => _ATTR_TELEFON,
+ 'mobil' => _ATTR_MOBIL,
+ 'nem' => _ATTR_NEM,
+ 'lakohelyijellemzo' => _ATTR_LAKOHELYIJELLEMZO,
+ 'megjegyzes' => _ATTR_MEGJEGYZES,
+ );
+
+ function readUpdateFile($fileName, $mezo_elvalaszto = ' ') {
+
+
+ $ADATOK = array();
+ if ($fp = @fopen($fileName,'r')) {
+ // Az első 50 sor beolvasása - minta a mező-hozzárendeléshez
+ $i=0;
+ while (($sor = fgets($fp,1024)) and ($i<50)) {
+ $ADATOK[$i] = explode($mezo_elvalaszto,chop($sor));
+ $i++;
+ }
+ fclose($fp);
+ } else {
+ $_SESSION['alert'][] = 'message:file_open_error:'.$fileName;
+ }
+
+ return $ADATOK;
+ }
+/*
+ * Lekérdezi egy adatbázis (naplo_intezmeny, naplo (tanév)) egy adott táblájának mezőit.
+ * Ha szükséges ezek listáját kiegészíti az extraAttrs tömbben felsorolt mezőkkel.
+ * A mezőnevekhez nyelvi konstansokat rendelhetünk ($Attrs tömb és lang/.../share/file.php)
+ */
+ function getTableFields($table, $db = 'naplo_intezmeny', $extraAttrs = array(), $SET = array('withType' => false)) {
+
+ global $Attrs;
+
+ $return = $type = $name = array();
+ $q = "SHOW FIELDS FROM `%s`";
+ $r = db_query($q, array('fv' => 'getTableFields','modul' => $db, 'result' => 'indexed', 'values' => array($table)));
+ for ($i = 0; $i < count($r); $i++) {
+ if ($SET['withType']) {
+ if (substr($r[$i]['Type'],0,7) == 'varchar') $type[ $r[$i]['Field'] ] = 'string';
+ elseif (substr($r[$i]['Type'],0,4) == 'enum') $type[ $r[$i]['Field'] ] = 'enum';
+ elseif (substr($r[$i]['Type'],0,4) == 'date') $type[ $r[$i]['Field'] ] = 'date';
+ elseif (strpos($r[$i]['Type'],'int(') !== false) $type[ $r[$i]['Field'] ] = 'int';
+ else $type[ $r[$i]['Field'] ] = 'string';
+ }
+ if ($Attrs[kisbetus($r[$i]['Field'])] != '') $name[$r[$i]['Field']] = $Attrs[kisbetus($r[$i]['Field'])];
+ else $name[$r[$i]['Field']] = $r[$i]['Field'];
+ }
+ for ($i = 0; $i < count($extraAttrs); $i++) {
+ if (!isset($name[$extraAttrs[$i]])) {
+ if ($Attrs[kisbetus($extraAttrs[$i])] != '') $name[$extraAttrs[$i]] = $Attrs[kisbetus($extraAttrs[$i])];
+ else $name[$extraAttrs[$i]] = $extraAttrs[$i];
+ }
+ }
+ ksort($name);
+
+ if ($SET['withType']) return array('names' => $name, 'types' => $type);
+ return $name;
+
+ }
+
+
+ function getEnumField($modul, $table, $field) {
+
+ $table = '`'.str_replace('.','`.`',$table).'`';
+ $q = "SHOW FIELDS FROM %s LIKE '%s'";
+ $v = array($table, $field);
+ $field = db_query($q, array('fv' => 'getEnumField', 'modul' => $modul, 'result' => 'record', 'values' => $v));
+ $enum = substr($field['Type'], 6, -2);
+ $values = explode("','", $enum);
+
+ return $values;
+ }
+
+ function getSetField($modul, $table, $field) {
+
+ $table = '`'.str_replace('.','`.`',$table).'`';
+ $q = "SHOW FIELDS FROM %s LIKE '%s'";
+ $v = array($table, $field);
+ $field = db_query($q, array('fv' => 'getSetField', 'modul' => $modul, 'result' => 'record', 'values' => $v));
+ $set = substr($field['Type'], 5, -2);
+ $values = explode("','", $set);
+
+ return $values;
+ }
+
+
+ function updateTable($table, $file, $MEZO_LISTA, $KULCS_MEZOK, $mezo_elvalaszto = ' ', $rovatfej = false, $db = 'naplo_intezmeny') {
+
+
+ if (!file_exists($file)) {
+ $_SESSION['alert'][] = 'message:file_not_found:updateTable:'.$file;
+ return false;
+ }
+
+ if (!is_array($MEZO_LISTA)) {
+ $_SESSION['alert'][] = 'message:wrong_data:updateTable:MEZO_LISTA';
+ return false;
+ }
+
+ if (!is_array($KULCS_MEZOK)) {
+ $_SESSION['alert'][] = 'message:wrong_data:updateTable:KULCS_MEZOK';
+ return false;
+ }
+
+ // A frissítendő attribútumok listája
+ $attrList = array_values(array_filter($MEZO_LISTA));
+
+ $fp = fopen($file,'r');
+ if (!$fp) {
+ $_SESSION['alert'][] = 'message:file_open_error:updateTable:'.$file;
+ return false;
+ }
+
+ $lr = db_connect($db, array('fv' => 'updateTable'));
+ if (!$lr) {
+ $_SESSION['alert'][] = 'message:db_connect_failure:updateTable';
+ fclose($fp);
+ return false;
+ }
+ db_start_trans($lr);
+
+ // Az első sor kihagyása
+ if ($rovatfej) $sor = fgets($fp,1024);
+ while ($sor = fgets($fp,1024)) {
+
+ $insertValues = $insertPatterns = array();
+ $adatSor = explode($mezo_elvalaszto,chop($sor));
+ $update = false;
+
+ // keresési feltétel összerakása
+ $where = $v = $vw = array();
+ for ($i = 0; $i < count($KULCS_MEZOK); $i++) {
+ if ($adatSor[$KULCS_MEZOK[$i]] != '') {
+ $where[] = "`%s`='%s'";
+ array_push($vw, $MEZO_LISTA[$KULCS_MEZOK[$i]], $adatSor[$KULCS_MEZOK[$i]]);
+ }
+ }
+ $num = 0;
+ if (count($where) != 0) {
+ $q = 'SELECT COUNT(*) FROM `%s` WHERE '.implode(' AND ', $where);
+ array_unshift($vw, $table);
+ $num = db_query($q, array('fv' => 'updateTable', 'values' => $vw, 'result' => 'value', 'modul' => $db), $lr);
+ }
+ if ($num == 1 && _SKIP_ON_DUP === true) { $_SESSION['alert'][] = 'info:_SKIP_ON_DUP:'.serialize($sor); continue; }
+ if ($num == 1) { // update
+ $v = $vw;
+ array_shift($v); //$table kivétele
+ $UPDATE = array();
+ for ($i = 0; $i < count($MEZO_LISTA); $i++) {
+ if (
+ $MEZO_LISTA[$i] != ''
+ and $adatSor[$i] != ''
+ and !in_array($i,$KULCS_MEZOK)
+ ) {
+ if ($adatSor[$i] == '\N') {
+ array_unshift($UPDATE, "`%s`=NULL");
+ array_unshift($v, $MEZO_LISTA[$i]);
+ } else {
+ array_unshift($UPDATE, "`%s`='%s'");
+ array_unshift($v, $MEZO_LISTA[$i], $adatSor[$i]);
+ }
+ }
+ }
+ if (count($UPDATE) > 0) {
+ array_unshift($v, $table);
+ $q = 'UPDATE `%s` SET '.implode(',',$UPDATE).' WHERE '.implode(' AND ', $where);
+ $r = db_query($q, array('fv' => 'updateTable/update', 'values' => $v, 'modul' => $db, 'rollback' => true), $lr);
+ if (!$r) {
+ db_close($lr);
+ return false;
+ }
+ }
+ } elseif ($num == 0) { // insert
+ for ($i = 0; $i < count($MEZO_LISTA); $i++) {
+ if ($MEZO_LISTA[$i] != '') {
+ if ($adatSor[$i] == '\N') {
+ $insertValues[] = 'NULL';
+ $insertPatterns[] = '%s';
+ } else {
+ $insertValues[] = $adatSor[$i];
+ $insertPatterns[] = "'%s'";
+ }
+ }
+ }
+ $q = 'INSERT INTO `%s` ('.implode(',', array_fill(0, count($attrList), '%s')).')
+ VALUES ('.implode(',', $insertPatterns).')';
+ $v = mayor_array_join(array($table), $attrList, $insertValues);
+ $r = db_query($q, array('fv' => 'updateTable/insert', 'modul' => $db, 'values' => $v, 'rollback' => true), $lr);
+ if (!$r) {
+ db_close($lr);
+ return false;
+ }
+ } else {
+ $_SESSION['alert'][] = 'message:wrong_data:updateTable:több illeszkedő rekord is van, túl laza a kulcs feltétel ('
+ .call_user_func_array('sprintf', array_merge(array('%s tábla, '.implode(' AND ',$where)), $vw)).')';
+ db_rollback($lr);
+ db_close($lr);
+ return false;
+ }
+ } // while
+ db_commit($lr);
+ db_close($lr);
+
+ fclose($fp);
+
+ }
+
+ function generatePDF($outputFile, $outputDir, $str, $booklet=false) {
+
+
+ // A szöveg file-ba írása
+ if (!$fp = fopen($outputDir.'/'.$outputFile.'-u8.tex', 'w')) {
+ $_SESSION['alert'][] = 'message:file_open_failure:generatePDF:'.$outputDir.'/'.$outputFile.'-u8.tex';
+ return false;
+ }
+ if (!fwrite($fp, $str)) {
+ $_SESSION['alert'][] = 'message:file_write_failure:generatePDF:'.$outputDir.'/'.$outputFile.'-u8.tex';
+ return false;
+ }
+ fclose($fp);
+ if (__NYOMTATAS_XETEX===true) {
+ $ret = exec('cd '.$outputDir.'; cat <<EOF > '.$outputFile.'.tex
+%\font\kicsi=ecrm0500
+%\font\nagy=ecbx1200
+%\font\vastag=ecsx0800
+%\font\nagyss=ecsx1200
+%\font\normal=ecss0800
+%\font\dolt=ecsi0800
+
+\font\kicsi="Linux Libertine O" at 5pt
+\font\nagy="Linux Libertine O/B" at 12pt
+\font\nagyss="Arial/B" at 12pt
+\font\normal="Linux Biolinum O" at 8pt
+\font\dolt="Linux Biolinum O/I" at 8pt
+\normal
+
+EOF
+');
+ $ret = exec('cd '.$outputDir.'; cat '.$outputFile.'-u8.tex >> '.$outputFile.'.tex');
+ $ret = exec('cd '.$outputDir.'; xetex -fmt '._MAYOR_DIR.'/print/module-naplo/xetex/mayor-xetex '.$outputFile.'.tex');
+#ex -fmt '._MAYOR_DIR.'/print/module-naplo/tex/mayor '.$outputFile.'.tex');
+ } else {
+ // utf8 --> cork (t1)
+ $ret = exec('cd '.$outputDir.'; cat '.$outputFile.'-u8.tex | sed -e "s/\xc2\xa0/\x20/g" | recode u8..T1 > '.$outputFile.'.tex');
+ // DVI, PS, PFD generálás (a rotate miatt nem megy a pdftex közvetlenül :o(
+ $ret = exec('cd '.$outputDir.'; tex -fmt '._MAYOR_DIR.'/print/module-naplo/tex/mayor '.$outputFile.'.tex');
+ if ($ret === false) { $_SESSION['alert'][] = 'message:futási_hiba:generatePDF:tex'; return false; }
+# LOG $ret = exec('cd '.$outputDir.'; dvips '.$outputFile.'.dvi 2>&1 | tee -a /tmp/x.log ');
+ $ret = exec('HOME=/tmp && export HOME && cd '.$outputDir.'; dvips '.$outputFile.'.dvi ');
+ if ($ret === false) { $_SESSION['alert'][] = 'message:futási_hiba:generatePDF:ps'; return false; }
+ $ret = exec('cd '.$outputDir.'; ps2pdf -sPAPERSIZE=a4 -dAutoRotatePages=/None '.$outputFile.'.ps');
+ if (strpos($ret, 'error') !== false) { $_SESSION['alert'][] = 'message:futási_hiba:generatePDF:pdf'; return false; }
+
+ }
+ if ($booklet) {
+ $ret = exec('cd '.$outputDir.'; mv '.$outputFile.'.pdf '.$outputFile.'-A4.pdf; pdfbook --short-edge --outfile '.$outputFile.'.pdf '.$outputFile.'-A4.pdf');
+ }
+ return true;
+ }
+
+ function generateXLS($fileName, $Table, $title) {
+
+ global $policy, $page, $sub, $f;
+
+ if (dirname($fileName) == '.') $fileName = _DOWNLOADDIR."/$policy/$page/$sub/$f/$fileName";
+ $fp = fopen($fileName, 'w');
+ if (!$fp) {
+ $_SESSION['alert'][] = 'message:file_open_failure:'.$fileName;
+ return false;
+ }
+
+ fputs($fp, '<?xml version="1.0"?>'."\r\n");
+ fputs($fp, '<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
+ xmlns:o="urn:schemas-microsoft-com:office:office"
+ xmlns:x="urn:schemas-microsoft-com:office:excel"
+ xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
+ xmlns:html="http://www.w3.org/TR/REC-html40">'."\r\n");
+ fputs($fp, ' <Styles>'."\r\n"
+ .' <Style ss:ID="s21">'."\r\n".' <NumberFormat ss:Format="Short Date" />'."\r\n".' </Style>'."\r\n"
+ .' <Style ss:ID="s22">'."\r\n".' <NumberFormat ss:Format="yyyy\.m\.d\.\ h:mm" />'."\r\n".' </Style>'."\r\n"
+ ."\r\n".' </Styles>'."\r\n");
+
+ fputs($fp, '<Worksheet ss:Name="'.$title.'">'."\r\n");
+ fputs($fp, '<Table>'."\r\n");
+
+ for ($i = 0; $i < count($Table); $i++) {
+ fputs($fp, ' <Row>'."\r\n");
+ foreach ($Table[$i] as $index => $value) {
+ if (is_numeric($value))
+ fputs($fp, " <Cell><Data ss:Type=\"Number\">".$value."</Data></Cell>\r\n");
+ elseif (strtotime($value))
+ if (strlen($value) > 10) {
+ fputs($fp, " <Cell ss:StyleID=\"s22\"><Data ss:Type=\"DateTime\">".str_replace(' ','T',$value).'.000'."</Data></Cell>\r\n");
+ } else {
+ fputs($fp, " <Cell ss:StyleID=\"s21\"><Data ss:Type=\"DateTime\">".$value.'T08:40:00.000'."</Data></Cell>\r\n");
+ }
+ else
+ fputs($fp, " <Cell><Data ss:Type=\"String\">".$value."</Data></Cell>\r\n");
+ }
+ fputs($fp, ' </Row>'."\r\n");
+ }
+
+ fputs($fp, '</Table>'."\r\n");
+ fputs($fp, '</Worksheet>'."\r\n");
+ fputs($fp, '</Workbook>'."\r\n");
+
+ fclose($fp);
+ return true;
+
+ }
+
+ function generateCSV($fileName, $Table, $title, $mezoElvalaszto=' ') {
+
+ global $policy, $page, $sub, $f;
+
+ if (dirname($fileName) == '.') $fileName = _DOWNLOADDIR."/$policy/$page/$sub/$f/$fileName";
+ $fp = fopen($fileName, 'w');
+ if (!$fp) {
+ $_SESSION['alert'][] = 'message:file_open_failure:'.$fileName;
+ return false;
+ }
+
+ if ($title !='') fputs($fp, $title."\n");
+ for ($i = 0; $i < count($Table); $i++) fputs($fp, implode($mezoElvalaszto, $Table[$i])."\n");
+
+ fclose($fp);
+ return true;
+
+ }
+
+ function generateODS($fileName, $Table, $title) {
+
+ global $policy, $page, $sub, $f;
+
+ if (dirname($fileName) == '.') $fileName = _DOWNLOADDIR."/$policy/$page/$sub/$f/$fileName";
+ define('TMPZIP','/tmp/'.substr(basename($fileName), 0, strpos(basename($fileName), '.')));
+ define('ODS_MIMETIPE','application/vnd.oasis.opendocument.spreadsheet');
+ define('ODS_MANIFEST','<?xml version="1.0" encoding="UTF-8"?>
+<manifest:manifest xmlns:manifest="urn:oasis:names:tc:opendocument:xmlns:manifest:1.0">
+ <manifest:file-entry manifest:media-type="application/vnd.oasis.opendocument.spreadsheet" manifest:version="1.2" manifest:full-path="/"/>
+ <manifest:file-entry manifest:media-type="text/xml" manifest:full-path="content.xml"/>
+</manifest:manifest>');
+ define('ODS_START_XMLDOCUMENT','<?xml version="1.0" encoding="UTF-8"?>
+<office:document-content
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:presentation="urn:oasis:names:tc:opendocument:xmlns:presentation:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rpt="http://openoffice.org/2005/report"
+ xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2"
+ xmlns:xhtml="http://www.w3.org/1999/xhtml"
+ xmlns:grddl="http://www.w3.org/2003/g/data-view#"
+ xmlns:tableooo="http://openoffice.org/2009/table"
+ xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0"
+ xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0"
+ office:version="1.2" grddl:transformation="http://docs.oasis-open.org/office/1.2/xslt/odf2rdf.xsl">');
+ define('ODS_ASTYLES','<office:automatic-styles>
+ <number:date-style style:name="N84">
+ <number:year number:style="long"/>
+ <number:text>-</number:text>
+ <number:month number:style="long"/>
+ <number:text>-</number:text>
+ <number:day number:style="long"/>
+ </number:date-style>
+ <style:style style:name="ce1" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N84"/>
+ </office:automatic-styles>');
+ define('ODS_START_SPREADSHEET','<office:body><office:spreadsheet>');
+ define('ODS_START_TABLE','<table:table table:name="Export">');
+ define('ODS_START_ROW','<table:table-row>');
+ define('ODS_END_ROW','</table:table-row>');
+ define('ODS_END_TABLE','</table:table>');
+ define('ODS_END_SPREADSHEET','</office:spreadsheet></office:body>');
+ define('ODS_END_XMLDOCUMENT','</office:document-content>');
+
+ $content = ODS_START_XMLDOCUMENT . ODS_ASTYLES . ODS_START_SPREADSHEET . ODS_START_TABLE;
+ for ($i = 0; $i < count($Table); $i++) {
+ $content .= ODS_START_ROW;
+ foreach ($Table[$i] as $index => $value) {
+ if (is_numeric($value))
+ $content .= '<table:table-cell office:value-type="float" office:value="'.$value.'"/>'."\n";
+ elseif (strtotime($value))
+ if (strlen($value) > 10) {
+ $content .= '<table:table-cell table:style-name="ce1" office:value-type="date" office:date-value="'.$value.'"/>'."\n";
+ } else {
+ $content .= '<table:table-cell table:style-name="ce1" office:value-type="date" office:date-value="'.$value.'"/>'."\n";
+ }
+ elseif ($value[0] == '=') $content .= '<table:table-cell table:formula="'.$value.'" office:value-type="float"/>'."\n";
+ // formula példa: $value = 'of:=SUM([.A1:.B1])*2+[.A1]'
+ else $content .= '<table:table-cell office:value-type="string"><text:p>'.$value.'</text:p></table:table-cell>'."\n";
+ }
+ $content .= ODS_END_ROW;
+ }
+ $content .= ODS_END_TABLE . ODS_END_SPREADSHEET . ODS_END_XMLDOCUMENT;
+
+ mkdir(TMPZIP);
+ mkdir(TMPZIP."/META-INF");
+ file_put_contents(TMPZIP."/META-INF/manifest.xml", ODS_MANIFEST);
+ file_put_contents(TMPZIP."/content.xml", $content);
+ file_put_contents(TMPZIP."/mimetype", ODS_MIMETIPE);
+ system("cd ".TMPZIP."; zip -mr ".$fileName." mimetype META-INF/* content.xml >/dev/null");
+ rmdir(TMPZIP."/META-INF");
+ rmdir(TMPZIP);
+
+ return true;
+ }
+
+/* --------------------------------------- */
+
+ function _template2array($fp, $type, &$aTeX) {
+ $vege = false;
+ $aTeX[$type] = array();
+ while (!$vege && ($sor = fgets($fp, 1024))) {
+ $sor = chop($sor);
+ if ($sor == "%}$type") {
+ $vege = true;
+ } elseif (substr($sor, 0, 2) != '%!') { // A feldolgozást végző függvény megadása
+ if (substr($sor, 0, 2) == '%}') {
+ echo "HIBA #1 Megnyitás előtti blokk lezárás a {$type} blokkban: $sor<hr>";
+ } else {
+ if (substr($sor, 0, 2) == '%{') {
+ $_type = substr($sor, 2);
+ _template2array($fp, $_type, $aTeX);
+ $aTeX[$type][] = '%{'.$_type.'}';
+ } else {
+ // feltételes szövegrészek
+ $condArray = explode('%?', $sor);
+ for ($i = 1; $i < count($condArray); $i = $i + 2) {
+ $str = $condArray[$i];
+ $tmpArray = explode('|', $str);
+ $j = 0; while (is_array($aTeX['conditional']["$j".$tmpArray[0]])) $j++;
+ $newCondition = "$j".$tmpArray[0];
+ $aTeX['conditional'][$newCondition] = array(true => $tmpArray[1], false => $tmpArray[2], 'orig' => $tmpArray[0]);
+ $sor = str_replace($str.'%?', $newCondition, $sor);
+ }
+// $aTeX[$type][] = $sor;
+ // lezáró eset
+ $finalArray = explode('%>', $sor);
+ for ($i = 1; $i < count($finalArray); $i = $i + 2) {
+ $str = $finalArray[$i];
+ $tmpArray = explode('<!>', $str);
+ $j = 0; while (is_array($aTeX['finalCase']["$j".$type])) $j++;
+ $newCondition = "$j".$type;
+ $aTeX['finalCase'][$newCondition] = array(true => $tmpArray[0], false => $tmpArray[1]);
+ $sor = str_replace($str.'%>', $newCondition, $sor);
+ }
+ $aTeX[$type][] = $sor;
+ }
+ }
+ }
+ }
+ }
+
+ function _array2text($type, $id, $mit, $mire, $aTeX, $ADAT, $flag = null) {
+ $ret = '';
+ if (is_null($id)) $A = $ADAT[$type];
+ else $A = $ADAT[$type][$id];
+
+ // A cserélendő attribútumok
+ if (is_array($A)) foreach ($A as $attr => $value) {
+ if (!is_array($value)) {
+ if (true || !is_bool($value)) { // feltételes szövegrészek külön kezelendők ??? Miért is? Az általánosabb feltételes kiíráshoz kell!
+ if (in_array('%$'.$attr, $mit)) { // A már szereplő mintát felülírjuk!
+ $key = array_search('%$'.$attr, $mit);
+ $mit[$key] = '%$'.$attr;
+ $mire[$key] = $value;
+ } else {
+ $mit[] = '%$'.$attr;
+ $mire[] = $value;
+ }
+ }
+ }
+ }
+
+ // aTeX feldolgozása
+ $TeX = $aTeX[$type];
+ for ($i = 0; $i < count($TeX); $i++) {
+ $sor = $TeX[$i];
+ if (substr($sor, 0, 2) == '%{') {
+ // Almodul feldolgozása
+ $_type = substr($sor, 2, -1);
+ if (is_array($A[$_type])) {
+ if (is_null($id)) {
+ foreach ($A[$_type] as $key => $_id) $ret .= _array2text($_type, $_id, $mit, $mire, $aTeX, $ADAT);
+ } else {
+ $count = count($A[$_type]); $db = 0;
+ foreach ($A[$_type] as $_id => $_data) {
+ $db++; if ($count == $db) $_flag = 'final'; else $_flag = null;
+ if (!is_array($ADAT[$_type][$_id]) && !is_array($_data)) {
+ echo '<br>HIBA#2!!! '.$_type.':'.$_id.':'.$_data.'<hr />';
+// return false;
+ } else {
+ if (!is_array($ADAT[$_type][$_id])) $ADAT[$_type][$_id] = array();
+ elseif (!is_array($_data)) $_data = array();
+ $ADAT[$_type][$_id] = $ADAT[$_type][$_id] + $_data;
+ $ret .= _array2text($_type, $_id, $mit, $mire, $aTeX, $ADAT, $_flag);
+ }
+ }
+ }
+ } elseif (__DEBUG === true) { echo '<br>HIBA#3: '.$sor.'<br />'.$_type.':'; var_dump($A[$_type]); echo '<hr />';}
+ } else {
+ // Csere - lezáró eset
+ if (strpos($sor, '%>') !== false) foreach ($aTeX['finalCase'] as $attr => $values) {
+ $sor = str_replace('%>'.$attr, $values[ $flag === 'final' ], $sor);
+ }
+ // Csete - feltételes kiírás
+ if (strpos($sor, '%?') !== false) foreach ($aTeX['conditional'] as $attr => $values) {
+ // Nem csak az adott szintről veszi az értéket, hanem feljebbről is (a feljebbi a meghatározó - ez nem biztos, hogy jó...)
+ if ($key = array_search('%$'.$values['orig'], $mit)) $_val = $mire[$key];
+ else $_val = $A[$values['orig']];
+ $sor = str_replace('%?'.$attr, $values[ $_val==true ], $sor);
+ //$sor = str_replace('%?'.$attr, $values[ $A[$values['orig']]==true ], $sor);
+ }
+ // Kiírás
+ $ret .= str_replace($mit, $mire, $sor)."\n";
+ }
+ }
+
+ return $ret;
+ }
+
+ function template2text($templateFile, $ADAT) {
+
+ $mit = $mire = array();
+ $aTeX = array('conditional' => array());
+
+ $fp = fopen($templateFile, 'r');
+ _template2array($fp, 'base', $aTeX);
+ fclose($fp);
+ return _array2text('base', null, $mit, $mire, $aTeX, $ADAT);
+
+ }
+
+ function template2file($templateFile, $ADAT) {
+
+ global $policy, $page, $sub, $f;
+
+ $mit = $mire = array();
+ $aTeX = array('conditional' => array());
+
+ $fp = fopen($templateFile, 'r');
+ // A feldolgozást végző függvény neve
+ $sor = fgets($fp, 1024);
+ rewind($fp);
+ if (substr($sor, 0, 2) == '%!') {
+ list($func,$ext,$opt) = explode(' ', substr(chop($sor), 2));
+ if (!function_exists($func)) unset($func);
+ }
+ if ($ext=='') $ext = 'txt';
+ _template2array($fp, 'base', $aTeX);
+ fclose($fp);
+ $text = _array2text('base', null, $mit, $mire, $aTeX, $ADAT);
+//die();
+ if ($text === false) return false;
+ $success = true;
+ if (isset($func)) {
+ $success = $func($text, $ADAT['file'], $opt);
+ } else {
+ $fp = fopen(_DOWNLOADDIR."/$policy/$page/$sub/$f/".$ADAT['file'].'.'.$ext, 'w');
+ fputs($fp, $text);
+ fclose($fp);
+ }
+ if ($success) return $ADAT['file'].".$ext";
+ else return false;
+
+ }
+
+
+
+?>