aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorM.Gergo2018-03-19 09:19:45 +0100
committerM.Gergo2018-03-19 09:19:45 +0100
commit250c90e80ebb8ac42d0ea8f7074280b034282b1f (patch)
tree1fa58d499fc252fe5c5a0316c485a4cadc1be97c
parent6b335352b719ae8871701df637cf5725692198b4 (diff)
downloadmayor-250c90e80ebb8ac42d0ea8f7074280b034282b1f.tar.gz
mayor-250c90e80ebb8ac42d0ea8f7074280b034282b1f.zip
Nextcloud-Mayor script logolás fingomhangolva
-rw-r--r--.gitignore1
-rw-r--r--egyéb/munin/README (renamed from external/munin/README)0
-rwxr-xr-xegyéb/munin/mayor_munin.php (renamed from external/munin/mayor_munin.php)0
-rw-r--r--egyéb/nextcloud/README (renamed from external/nextcloud/README)70
-rw-r--r--egyéb/nextcloud/mayor-nextcloud.php635
-rw-r--r--external/nextcloud/mayor-nextcloud.php577
6 files changed, 686 insertions, 597 deletions
diff --git a/.gitignore b/.gitignore
index ac33c165..e4e5f6c8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1 @@
-index.html
*~ \ No newline at end of file
diff --git a/external/munin/README b/egyéb/munin/README
index a0ad5eb8..a0ad5eb8 100644
--- a/external/munin/README
+++ b/egyéb/munin/README
diff --git a/external/munin/mayor_munin.php b/egyéb/munin/mayor_munin.php
index 92fc264d..92fc264d 100755
--- a/external/munin/mayor_munin.php
+++ b/egyéb/munin/mayor_munin.php
diff --git a/external/nextcloud/README b/egyéb/nextcloud/README
index 5eee1962..bb620cf5 100644
--- a/external/nextcloud/README
+++ b/egyéb/nextcloud/README
@@ -1,14 +1,15 @@
Nextcloud(13) - Mayor script
-Ezzen script segítségével a Mayor-naplóból tudunk felhasználókat és csoportokat importálni a Nextcloud felhőbe,
-létrehozva ezzel a saját, iskoali felhőszolgáltatásunkat.
+Ezen script segítségével a Mayor-naplóból tudunk felhasználókat és csoportokat importálni a Nextcloud felhőbe,
+létrehozva ezzel a saját, iskolai felhőszolgáltatásunkat.
-Ez a script lényegében annyit csinál, hogy a mysql segítségével lekérdezi a mayorból a diák-tankör-tanár összerendezéseket,
-és a tankörök nevei alapján létrehoz csoportokat, majd belépteti ezen csoportokba a diákokat, és tanárokat,
-megspórolva ezzel a kézi (egyesével történő) feltöltést, és egy csomó időt az adminisztrátornak.
+Ez a script lényegében annyit csinál, hogy a mysql-ből lekérdezi a mayor diák-tankör-tanár kapcsolatokat,
+majd a tankörök nevei alapján létrehozza a csoportokat és a felhasználókat a Nextcloud szerveren,
+majd belépteti ezen csoportokba a diákokat, és tanárokat, megspórolva ezzel a kézi (egyesével történő) feltöltést,
+és egy csomó időt az adminisztrátornak.
-Támogatja a külön, illetve az egy, közös szerverre történő telepítését a mayornak és a nextcloud-nak. *(lásd: Szeparációs lehetőségek rész.)
+Támogatja a külön, illetve az egy, közös szerverre történő telepítését a mayornak és a nextcloud-nak. **(lásd: Szeparációs lehetőségek rész.)
Egyelőre még csak a Nextcloud 13.x -mal tesztelt.
FONTOS!
@@ -19,7 +20,7 @@ FONTOS!
Beállítása az alábbiak szerint: (egy lehetséges elrendezés)
-(I.) Először telepítsünk föl egy Nextcloud(13+) szervert egy Debian 9+ szerverre,
- szükség van e-mail küldés (smtp) szolgáltatásra is. (ez lehet külső, pl google)
+ szükség van e-mail küldés (smtp) szolgáltatásra is. (ez lehet külső, pl.: google)
Bővebb leírást a telepítésről a
https://docs.nextcloud.com/server/13/admin_manual/installation/index.html oldalon találunk.
@@ -40,7 +41,7 @@ Beállítása az alábbiak szerint: (egy lehetséges elrendezés)
$db['user'] = "root"; //nextcloud-mysql felhasználónév
// HA nem a root-ot használjuk, akkor, a használt felhasználónak írási-olvasási-törlési
// (insert,select,update,delete) joggal kell rendelkeznie a nextcloud adatbázis "..groups" tábláján,
- // valamit saját kezűleg kell lérehozni a script saját nyilvántartó adatbázisát, és a fenti jogokat beállítani rá.
+ // valamit saját kezűleg kell létrehozni a script saját, nyilvántartó adatbázisát, és a fenti jogokat beállítani rá.
// Ha a Debian-on alapértelmezett root-ot használjuk, akkor mindez automatikusan történik.
$db['pass'] = ""; //A nextcloud-mysql jelszó (pl a "root" felhasználónévhez tartozó)
@@ -58,7 +59,7 @@ Beállítása az alábbiak szerint: (egy lehetséges elrendezés)
//
// Ebben az adatbázisban könyveli el a script által létrehozott felhasználókat, azért,
// hogy így meg tudja különböztetni, a saját maga által létrehozottakat, az Adminisztrátor
- // által, külön, kézzel létrehozott felhasználóktól.
+ // által, külön létrehozott felhasználóktól.
$db['m2n_prefix'] = "m2n_"; //A nyilvántartó adatbázisban használt prefix, ha van. (ha nincs, akkor "üres string"-re kell állítani)
@@ -94,6 +95,10 @@ Beállítása az alábbiak szerint: (egy lehetséges elrendezés)
$m2n['mindenki_csop'] = "naplós_felhasználók"; //A Nextcloud "mindenki" csoportja
// ebbe a "mindenki" csoportba minden, a script által létrehozott felhasználó bekerül.
+ $m2n['verbose'] = 3 //Log bőbeszédűség (A leg informatívabb, talán a 3-mas fokozat.)
+ // 0: csak fatális hibák, 1: fontosabbak, 2: csop./felh. elvétel, 3: csop./felh. hozzáadás,
+ // 4: csop./felh. tények, 5: részletesebben, 6: sql query + bash parancsok kiírása
+
$occ_path = "/var/www/nextcloud/"; //A Nextcloud-server fájljainak elérési útja. (DocumentRoot)
// Erre szükség van a nextcloud "occ" parancsának eléréséhez.
@@ -106,7 +111,7 @@ Beállítása az alábbiak szerint: (egy lehetséges elrendezés)
A Nextcloud szerver "occ" parancsa elérhető kell legyen a script számára!
Az "occ" parancs működését pl. az: (>>> sudo -u www-data php /var/www/nextcloud/occ ) kiadásával ellenőrizzük!
-
+ Lehetőség van a scriptet a "--loglevel xx" kapcsolóval is indítani. (>>> php mayor-nextcloud.php --loglevel 3 )
@@ -118,6 +123,12 @@ Beállítása az alábbiak szerint: (egy lehetséges elrendezés)
Esetleg érdemes lehet a scriptet betenni a "cron"-ba (éjszakára), így naponta lefut, és követi napló változásait.
+ (Ez esetben figyelni kell arra, hogy mayorban a tankör-diák, tankör-tanár összerendelések az év végén lejárhatnak, (pl. júni. 15-én)
+ így a script futtatása júni. 16-án kitörli, letiltja az összes létrehozott mayor-os csoportot, és felhasználót a nextcloud-ból,
+ amely csak a script szept. 1-je után történő futtatásával hozható vissza,
+ ezért érdemes lehet a script automatikus futtatását átmenetileg júni. 15. és szept. 1. között felfüggeszteni. )
+ (pl: /etc/crontab -ban
+ 01 3 * * * root php -f /root/mayor-nextcloud.php )
A mayor által ajánlott "Vezetéknév.Keresztnév" típusú felhasználónév formátum, bár hasznos, mert könnyen megjegyezhető,
@@ -132,8 +143,8 @@ Beállítása az alábbiak szerint: (egy lehetséges elrendezés)
í --> ii Í --> Ii Vezetéknév.Keresztnév --> Vezeteekneev.Keresztneev
ó --> oo Ó --> Oo Bőrönd.Ödön --> Booeroend.Oedoen
ö --> oe Ö --> Oe
- ő --> ooe Ő --> Ooe
- ú --> uu Ú --> Uu
+ ő --> ooe Ő --> Ooe Ha a mayor felhasználónév nem tartalmaz ékezetes betűt,
+ ú --> uu Ú --> Uu akkor nem történik csere, a felhasználónév marad az eredeti.
ü --> ue Ü --> Ue
ű --> uue Ű --> Uue
@@ -153,16 +164,16 @@ Beállítása az alábbiak szerint: (egy lehetséges elrendezés)
Második lépésben lekérdezi a felhasználókat a mayorból, (jogviszony státusz, évfolyam, kapcsolódó tankörök)
csak azokat a tanárokat, illetve diákokat veszi figyelembe, akinek a státusza nem "jogviszonya lezárva", vagy nem "felvételt nyert".
Ha az illető még nem rendelkezik felhasználónévvel a Nextcloud-ban, akkor létrehozza,
- - ha a mayorban, az "intezmeny_xxx.diak", illetve az "intezmeny_xxx.tanar" táblákon van beállított e-mail címe, akkor azt használja, ha nincs,
- akkor az alapértelmezettet állítja be a Nextcloud-ba, valamint ekkor állítódik be az alapértelmezett qvóta, és a felhasználó valódi neve is.
- (ezeket később Rendszergazdai, és Felhasználói oldalról változtatni lehet, értelemszerűen)
+ - ha a mayorban, az "intezmeny_xxx.diak", illetve az "intezmeny_xxx.tanar" táblákon van beállított e-mail címe, akkor azt használja,
+ - ha nincs, akkor az alapértelmezettet állítja be a Nextcloud-ba, valamint ekkor állítódik be az alapértelmezett qvóta, és a felhasználó valódi neve is.
+ (Ezeket később Rendszergazdai, és Felhasználói oldalról változtatni lehet, értelemszerűen.)
Ha az illető már rendelkezik felhasználónévvel, de az le volt tiltva, akkor újra engedélyezi.
Ezután egyezteti a tankör-csoport összerendeléseket, ha az illető új tankörbe került be, akkor belépteti a megfelelő csportba,
ha kikerült egy tankörből, akkor a csoportból is kilépteti.
Végül ellenőrzi a kiléptetndő felhasználókat.
- Ha velekinek a státusza a mayorban "jogviszonya lezárva"-ra változott, vagy a felhasználót a mayorból törölték, akkor
+ Ha velekinek a státusza a mayorban "jogviszonya lezárva"-ra változott, vagy a felhasználónevét a mayorból törölték, akkor
- ha még nem lépett be soha a Nextcloudba, akkor a felhasználót fizikailag törli.
- ha már használta a fiókját, akkor csak letiltja, azért, hogy a fájljai ne vesszenek el automatikusan.
(Ez, utóbbi esetben a Rendszergazdának kell külön elvégezni a törlést.)
@@ -170,14 +181,35 @@ Beállítása az alábbiak szerint: (egy lehetséges elrendezés)
+ ** Szeparációs lehetőségek:
+ Biztonsági megfontolásokból nem javasolt a Nextcloud-ot és a mayort ugyanazon Apache szerver és ugyanazon "DocumentRoot" alól futtatni.
+ Szétválasztásukra többféle lehetőség van:
+ - külön fizikai szerver mindegyiknek
+ - külön virtuális szerver mindegyiknek
+ - külön "DOCKER konténer" mindegyiknek
+ - külön felhasználónévvel futtatott php
+ Természetesen a legerősebb szeparációt az 1. megoldás jelenti, de ugyanakkor előjöhetnek ennek hátrányai is, például, hogy dupla
+ akkora adminisztrációs teher a rendszergazdának.
+ Ugyanakkor foglalkoznunk kell azzal a kérdéssel is, hogy ha az iskola vásárol egy komolyabb szervergépet, (ma már) több-tíz gigabájt RAM-mal,
+ ekkor felesleges pazarlás fizikailag is külön szervergépre telepíteni a kettőt, különösen, ha figyelembe vesszük a mayor (ma már kicsinek számító)
+ memória igényét is.
+ Ekkor jöhet képbe a 2. és 3. lehetőség, amely már ugyanazon fizikai gépre is telepíthető egyszerre, ez már ésszerű elosztást biztosít.
+ Ám, ha tovább gondoljuk, akkor szóba jöhet az a kérdés is, hogy ekkora fizikai memória (RAM) esetén
+ miért futtassunk több, különálló mysql-szervert, ahelyett, hogy egy, központi mysql-serverünk lenne,
+ aminek kiosztunk néhányszor-tíz gigabájt ramot?
+ (Különösen annak fényében, hogy egy ilyen "felturbózott" mysql sokszorosára növeli a mayor-napló sebességét.)
+ Erre a megoldásra születtek a "php külön felhasználónévvel futtatva" típusú lehetőségek.
+ Ezek közül is a legésszerűbb, és legbiztonságosabb az Apache2 mod_suexec és mod_fcgid segítségével futtatott php.
+ (Ekkor egy, közös Mysql és Apache2 szerver van, ahol az egyes weboldalak (apache virtualhost-ok) mind,
+ külön "rendszer felhasználónévvel" futnak, külön "DocumentRoot" könyvtárból, (és külön a www-data felhasználótól)
+ ahol a felhasználónév váltást a mod_suexec modul végzi, a php futtatását pedig a mod_fcgid. )
+ (Természetesen vannak még más megoldások is, mint pl. a php_fpm, de azokat nem javaslom. )
-
-
-
+
diff --git a/egyéb/nextcloud/mayor-nextcloud.php b/egyéb/nextcloud/mayor-nextcloud.php
new file mode 100644
index 00000000..689715d7
--- /dev/null
+++ b/egyéb/nextcloud/mayor-nextcloud.php
@@ -0,0 +1,635 @@
+#!/usr/bin/php
+<?php
+$db = array();
+$m2n = array();
+
+
+$db['host'] = "localhost";
+$db['port'] = "3306";
+$db['user'] = "root";
+$db['pass'] = "";
+$db['m2n_db'] = "mayor_to_nextcloud";
+$db['m2n_prefix'] = "m2n_";
+$db['nxt_dbname'] = "Nextcloud";
+$db['nxt_prefix'] = "oc_";
+//$db['mayor_host'] = "";
+//$db['mayor_port'] = "";
+//$db['mayor_user'] = "";
+//$db['mayor_pass'] = "";
+
+$m2n['min_evfolyam'] = 1;
+$m2n['isk_rovidnev'] = "rovid";
+$m2n['csoport_prefix'] = "(tk) ";
+$m2n['default_email'] = "indulo@iskola.hu";
+$m2n['default_passw'] = "EHYmGktzrdfS7wxJR6DFqxjJ";
+$m2n['default_quota'] = "10GB";
+$m2n['default_lang'] = "hu";
+$m2n['mindenki_csop'] = "naplós_felhasználók";
+$m2n['verbose'] = 3 ;
+
+$occ_path = "/var/www/nextcloud/";
+$occ_user = "www-data";
+
+// Le kell cserélni az ékezetes betűket, mert a Vezetéknév.Keresztnév nem POSIX kompatibilis.
+$search = array( 'á', 'ä', 'é', 'í', 'ó', 'ö', 'ő', 'ú', 'ü', 'ű', 'Á', 'Ä', 'É', 'Í', 'Ó', 'Ö', 'Ő', 'Ú', 'Ü', 'Ű'); // egyelőre csak a magyar betűket ismeri
+$replace = array( 'aa', 'ae', 'ee', 'ii', 'oo', 'oe', 'ooe', 'uu', 'ue', 'uue', 'Aa', 'Aae', 'Ee', 'Ii', 'Oo', 'Oe', 'Ooe', 'Uu', 'Ue', 'Uue');
+
+$log['verbose'] = $m2n['verbose'];
+if($argv[1] == "--loglevel" and is_numeric($argv[2])){$log['verbose'] = $argv[2];}
+
+
+if (function_exists('mysqli_connect') and PHP_MAJOR_VERSION >= 7) { //MySQLi (Improved) és php7 kell!
+
+ function db_connect(array $db){
+ global $log;
+ if ($log['verbose'] > 0 ){ echo "***\tAdatbázis kapcsolódás. (m2n_db=".$db['m2n_db'].")\n"; }
+ $l = mysqli_connect($db['host'], $db['user'], $db['pass'], $db['m2n_db'],$db['port']);
+ if(!$l){
+ if ($log['verbose'] > 0 ){echo "*\tAdatbázis kapcsolat újrapróbálása... (m2n_db=) hiba:".mysqli_connect_errno()."\n";}
+ $db_old = $db['m2n_db'];
+ $db['m2n_db'] = "";
+ $l = mysqli_connect($db['host'], $db['user'], $db['pass'], $db['m2n_db'],$db['port']);
+ if(!$l){
+ echo "\n**** Sikertelen kapcsolódás! **** (m2n_db=".$db['m2n_db'].") info:".mysqli_get_host_info($l)."\n";
+ return null;
+ } else{
+ if ($log['verbose'] > 4 ){ echo "*\tSikeres kapcsolódás. (m2n_db=".$db['m2n_db'].") info:".mysqli_get_host_info($l)."\n";}
+ if ($log['verbose'] > 0 ){ echo "***\tAdatbázis létrehozása: ".$db_old." ...\n";}
+ mysqli_set_charset($l, "utf8");
+ mysqli_query($l, "SET NAMES utf8 COLLATE utf8_general_ci;" );
+ script_install($l);
+ return $l;
+ }
+ } else {
+ if ($log['verbose'] > 4 ){ echo "*\tSikeres kapcsolódás. (m2n_db=".$db['m2n_db'].") info:".mysqli_get_host_info($l)."\n"; }
+ mysqli_set_charset($l, "utf8");
+ mysqli_query($l, "SET NAMES utf8 COLLATE utf8_general_ci;" );
+ if(mysqli_query($l, "SELECT * FROM ".$db['m2n_db'].".".$db['m2n_prefix']."register;" ) == FALSE ){
+ script_install($l);
+ }
+ return $l;
+ }
+ }
+// bezár: mysqli_close($link);
+
+ function script_install($link){
+ global $db,$log;
+ $q = "CREATE DATABASE IF NOT EXISTS ".$db['m2n_db']." DEFAULT COLLATE 'utf8_general_ci'; ";
+ if ($log['verbose'] > 0 ){ echo "M2N -> \t".$q."\n"; }
+ if(( $r = mysqli_query($link, $q)) !== FALSE ){
+ if ($log['verbose'] > 0 ){ echo "*\tAz ".$db['m2n_db']." adatbázis sikeresen létrehozva.\n"; }
+ }
+ $q = "CREATE TABLE IF NOT EXISTS ".$db['m2n_db'].".".$db['m2n_prefix']."register (
+ account VARCHAR(64) NOT NULL COLLATE 'utf8_bin',
+ status ENUM('active','disabled','forbidden','deleted') NULL DEFAULT 'active' COLLATE 'utf8_bin',
+ PRIMARY KEY (account))
+ COLLATE='utf8_general_ci'
+ ENGINE=InnoDB;";
+ if ($log['verbose'] > 5 ){ echo "M2N ->\t".$q."\n"; }
+ if(( $r = mysqli_query($link, $q)) !== FALSE ){
+ if ($log['verbose'] > 0 ){ echo "*\tAz ".$db['m2n_db'].".".$db['m2n_prefix']."register (nextcloud-register) tábla sikeresen létrehozva.\n";}
+ }
+ }
+
+ function nxt_register_userlist($link){ //akiket a script hozott létre
+ global $db,$log;
+ $q = "SELECT * FROM ".$db['m2n_db'].".".$db['m2n_prefix']."register WHERE STATUS != 'forbidden'; ";
+ if ($log['verbose'] > 5 ){ echo "M2N ->\t".$q."\n"; }
+ if(( $r = mysqli_query($link, $q)) !== FALSE ){
+ while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
+ $ret['account'][] = $row['account'];
+ $ret['status'][] = $row['status'];
+ }
+ mysqli_free_result($r);
+ if ($log['verbose'] > 4 ){ echo "*\tFelhasználó-feljegyzések lekérdezése.\n"; }
+ return $ret;
+ } else {
+ echo "\nM2N -> \t**** Adatbázislekérdezési hiba! ****\n";
+ }
+ }
+
+ function nxt_register_forbiddenlist($link){ //akiket a rendszergazda kitiltott
+ global $log,$db;
+ $q = "SELECT * FROM ".$db['m2n_db'].".".$db['m2n_prefix']."register WHERE STATUS = 'forbidden'; ";
+ if ($log['verbose'] > 5 ){ echo "M2N ->\t".$q."\n"; }
+ if(( $r = mysqli_query($link, $q)) !== FALSE ){
+ $ret = array();
+ while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
+ $ret[] = $row['account'];
+ }
+ mysqli_free_result($r);
+ if ($log['verbose'] > 4 ){ echo "*\tFelhasználó-letiltások feljegyzésének lekérdezése.\n"; }
+ return $ret;
+ } else {
+ echo "\nM2N ->\t**** Adatbázislekérdezési hiba! ****\n";
+ }
+ }
+
+ function nxt_register_useradd($link, $account){ // feljegyzi az általa létrehozott felhasználókat
+ global $log,$db;
+ $q = "INSERT INTO ".$db['m2n_db'].".".$db['m2n_prefix']."register (account) VALUES ('".$account."')";
+ if ($log['verbose'] > 5 ){ echo "M2N -> \t".$q."\n"; }
+ if(( mysqli_query($link, $q)) !== FALSE ){
+ if ($log['verbose'] > 4 ){ echo "*\tFelhasználó-hozzáadás feljegyzése.\n"; }
+ }
+ }
+
+ function nxt_register_userena($link, $account){ // az engedélyezetteket
+ global $db,$log;
+ $q = "UPDATE ".$db['m2n_db'].".".$db['m2n_prefix']."register SET status='active' WHERE account='".$account."'";
+ if ($log['verbose'] > 5 ){ echo "M2N ->\t".$q."\n"; }
+ if(( mysqli_query($link, $q)) !== FALSE ){
+ if ($log['verbose'] > 4 ){ echo "*\tFelhasználó-engedélyezés feljegyzése.\n" ;}
+ }
+ }
+
+ function nxt_register_userdel($link, $account){ // a törölteket
+ global $db,$log;
+ $q = "DELETE FROM ".$db['m2n_db'].".".$db['m2n_prefix']."register WHERE account='".$account."' ";
+ if ($log['verbose'] > 5 ){ echo "M2N ->\t".$q."\n"; }
+ if(( mysqli_query($link, $q)) !== FALSE ){
+ if ($log['verbose'] > 5 ){ echo "*\tFelhasználó-törlés feljegyzése.\n"; }
+ }
+ }
+
+ function nxt_register_userdis($link, $account){ // a letiltottakat
+ global $m2n,$db,$log;
+ $q = "UPDATE ".$db['m2n_db'].".".$db['m2n_prefix']."register SET status='disabled' WHERE account='".$account."'";
+ if ($log['verbose'] > 5 ){ echo "M2N ->\t".$q."\n"; }
+ if(( mysqli_query($link, $q)) !== FALSE ){
+ if ($log['verbose'] > 5 ){ echo "*\tFelhasználó-letiltás feljegyzése.\n"; }
+ }
+ }
+
+
+
+
+ function user_add($userAccount, $fullName){ // létrehoz egy felhasználót a Nextcloud-ban
+ global $occ_path,$occ_user,$m2n,$log;
+// export OC_PASS=ErősJelszó123; su -s /bin/sh www-data -c 'php web/occ user:add --password-from-env --display-name="Teszt Tamás" --group="csop" t.tamas'
+ if(strlen($userAccount) > 64 or strlen($fullName) > 64){
+ echo "\n******** Hiba: A felahsználónév, vagy a \"teljes név\" hosszabb, mint 64 karakter! ********\n";
+ } else {
+ $e = "export OC_PASS=".$m2n['default_passw']."; su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:add \
+ --password-from-env --display-name=\"$fullName\" --group=\"".$m2n['mindenki_csop']."\" $userAccount'" ;
+ if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; }
+ shell_exec($e);
+ }
+ }
+
+ function user_del($userAccount){ // kitöröl vagy letilt egy felhasználót a Nextcloud-ban
+ global $occ_path,$occ_user,$log;
+ $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:info $userAccount --output=json'";
+ if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; }
+ $last_login = json_decode(shell_exec($e),true)['last_seen'] ;
+ if($last_login == "1970-01-01T00:00:00+00:00" ){
+ $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:delete $userAccount'"; // Ha még soha nem lépett be
+ if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; }
+ shell_exec($e); // akkor törölhető
+ } else {
+ $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:disable $userAccount'";
+ if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; }
+ shell_exec($e); // különben csak letiltja
+ }
+
+ }
+
+ function user_dis($userAccount){ // letiltja a felhasználót a Nextcloud-ban
+ global $occ_path,$occ_user,$log;
+ $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:disable $userAccount'";
+ if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; }
+ shell_exec($e);
+ }
+
+ function user_ena($userAccount){ // engedélyezi
+ global $occ_path,$occ_user,$log;
+ $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:enable $userAccount'";
+ if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; }
+ shell_exec($e);
+ }
+
+
+ function nxt_group_list() { // Csoportok listázása a Nextcloud-ból
+ global $occ_path,$occ_user,$log;
+ $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" group:list --output=json'";
+ if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; }
+ return (array)json_decode(shell_exec($e),true);
+ }
+
+ function nxt_user_list() { // Felhasználók listázása a Nextcloud-ból
+ global $occ_path,$occ_user,$log;
+ $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:report | grep \"total\" | sed -e \"s/[^0-9]//g\" | tr -d \"[:blank:]\n\" '";
+ if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; }
+ $num = shell_exec($e);
+ $num = $num + 100; // Biztos-ami-biztos, a nextcloud rejtett hibái miatt...
+ $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:list --limit $num --output=json'";
+ if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; }
+ return (array)json_decode(shell_exec($e),true);
+ }
+
+ function nxt_user_lastlogin($userAccount){ // legutóbbi belépés lekérdezése
+ global $occ_path,$occ_user,$log;
+ $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:info $userAccount --output=json'";
+ if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; }
+ return json_decode(shell_exec($e),true)['last_seen'] ;
+ }
+
+
+ function user_set($userAccount, array $params){ //beállítja az e-mailt, quota-t, nyelvet a kapott értékekere
+ global $occ_path,$occ_user,$log;
+ if(isset($params['quota']))
+ $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:setting $userAccount files quota \"".$params['quota']."\"'";
+ if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; }
+ shell_exec( $e );
+ if(isset($params['email']))
+ $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:setting $userAccount settings email \"".$params['email']."\"'";
+ if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; }
+ shell_exec( $e );
+ if(isset($params['lang']))
+ $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:setting $userAccount core lang \"".$params['lang']."\"'";
+ if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; }
+ shell_exec($e);
+ }
+
+ function group_add($groupName){ //Új csoport létrehozása a Nextcloud-ban
+ global $link,$db,$log;
+ if(strlen($groupName) > 64){ //mivel (egyelőre) nics erre 'occ' parancs, ezért közvetlenül kell...
+ echo "\n****** Hiba: a csoportnév nagyobb, mint 64 karakter!! ******\n";
+ } else {
+ $q = "INSERT IGNORE INTO ".$db['nxt_dbname'].".".$db['nxt_prefix']."groups (gid) VALUES ('".$groupName."'); ";
+ if ($log['verbose'] > 5 ){ echo "NXT ->\t".$q."\n"; }
+ if(mysqli_query($link, $q) !== TRUE ) echo "\nNXT -> \t****** Csoport létrehozási hiba. (adatbázis) ******\n";
+ }
+ }
+
+ function group_del($groupName){ // Csoport törlése a Nextcloud-ból
+ global $occ_user,$occ_path,$db,$link,$log;
+ $grp = nxt_group_list();
+ if(isset($grp[$groupName])){ // Mivel erre még nincs hivatalos "occ" parancs, ezért közvetlenül kell...
+ foreach($grp[$groupName] as $key => $user){
+ $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" group:removeuser \"$groupName\" $user'";
+ if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; }
+ shell_exec($e);
+ if ($log['verbose'] > 1 ){ echo "*--\t\tTörölve ($user) a:\t$groupName\t csoportból.\n"; }
+ }
+ $q = "DELETE FROM ".$db['nxt_dbname'].".".$db['nxt_prefix']."groups WHERE gid='".$groupName."'; " ;
+ if ($log['verbose'] > 5 ){ echo "NXT ->\t".$q."\n"; }
+ if(mysqli_query($link, $q) !== TRUE ) echo "\n NXT -> \t****** csoport törlési hiba. (adatbázis) ******\n";
+ }
+ }
+
+ function group_user_add($groupName, $userAccount){ // Hozzáad egy felhasználót egy csoporthoz a Nextcloud-ban
+ global $occ_user, $occ_path,$log;
+ $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" group:adduser \"$groupName\" $userAccount'";
+ if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; }
+ shell_exec($e);
+ }
+
+ function group_user_del($groupName, $userAccount){ // Kitöröl egy felhasználót egy Nextcoud csoportból
+ global $occ_user, $occ_path,$log;
+ $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" group:removeuser \"$groupName\" $userAccount'";
+ if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; }
+ shell_exec($e);
+ }
+
+
+ function get_mayor_tankor($link){ // A tankörök neveinek lekérdezése a mayorból
+ global $m2n,$log;
+ $ret = array();
+//Létező összes tankör:
+/* $q = "SELECT tankorId, TRIM(BOTH ' '
+ FROM CONCAT('".$m2n['csoport_prefix']."',tankorNev)) AS tankorNev
+ FROM intezmeny_".$m2n['isk_rovidnev'].".tankorSzemeszter
+ WHERE tanev = (
+ SELECT tanev
+ FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter
+ WHERE statusz = 'aktív'
+ GROUP BY tanev) AND szemeszter = (
+ SELECT szemeszter
+ FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter
+ WHERE statusz = 'aktív' AND kezdesDt <= CURRENT_DATE() AND CURRENT_DATE() <= zarasDt); ";
+*/
+//csak a megadott évfeolyamokhoz tartozó tankörök:
+ $q = "SELECT tanev FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter WHERE statusz = 'aktív' GROUP BY tanev; ";
+ if ($log['verbose'] > 5 ){ echo "MAY ->\t".$q."\n"; }
+ if( ($r = mysqli_query($link, $q)) !== FALSE ){
+ $ev = mysqli_fetch_array($r, MYSQLI_ASSOC);
+ $q = "SELECT tankorId, TRIM(BOTH ' '
+ FROM CONCAT('".$m2n['csoport_prefix']."',tankorNev)) AS tankorNev
+ FROM intezmeny_".$m2n['isk_rovidnev'].".tankorSzemeszter
+ WHERE tanev = (
+ SELECT tanev
+ FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter
+ WHERE statusz = 'aktív'
+ GROUP BY tanev) AND szemeszter = (
+ SELECT szemeszter
+ FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter
+ WHERE statusz = 'aktív' AND kezdesDt <= CURRENT_DATE() AND CURRENT_DATE() <= zarasDt) AND tankorId IN(
+ SELECT tankorId
+ FROM intezmeny_".$m2n['isk_rovidnev'].".tankorOsztaly
+ WHERE osztalyId IN (
+ SELECT osztalyId
+ FROM naplo_".$m2n['isk_rovidnev']."_".$ev['tanev'].".osztalyNaplo
+ WHERE evfolyamJel >= ".$m2n['min_evfolyam']."
+ ORDER BY osztalyId)
+ ORDER BY tankorId );
+ ";
+ if ($log['verbose'] > 5 ){ echo "MAY ->\t".$q."\n"; }
+ if(( $r = mysqli_query($link, $q)) !== FALSE ){
+ while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
+ $ret[] = $row;
+ }
+ mysqli_free_result($r);
+ return $ret;
+ } else {
+ echo "\nMAY ->\t ******** Mayor_napló (tankör)lekérdezési hiba. (adatbázis) ********\n";
+ }
+ }
+ }
+
+
+ function get_mayor_tanar($link){ // A tanárok lekérdezése a mayorból
+ global $m2n,$log;
+ $ret = array();
+ $q = "SELECT userAccount, email, tanar.tanarId, tankorTanar.tankorId, TRIM(BOTH ' '
+ FROM CONCAT_WS(' ',viseltNevElotag, viseltCsaladinev, viseltUtonev)) AS fullName, TRIM(BOTH ' '
+ FROM CONCAT('".$m2n['csoport_prefix']."',tankorNev)) AS tankorNev
+ FROM intezmeny_".$m2n['isk_rovidnev'].".tanar, mayor_private.accounts, intezmeny_".$m2n['isk_rovidnev'].".tankorTanar, intezmeny_".$m2n['isk_rovidnev'].".tankorSzemeszter
+ WHERE accounts.studyId = tanar.oId AND statusz != 'jogviszonya lezárva' AND tanar.beDt <= CURRENT_DATE() AND (CURRENT_DATE() <= tanar.kiDt
+ OR tanar.kiDt IS NULL) AND tanar.tanarId = tankorTanar.tanarId AND tankorTanar.beDt <= CURRENT_DATE() AND CURRENT_DATE() <= tankorTanar.kiDt
+ AND tankorTanar.tankorId = tankorSzemeszter.tankorId AND tankorSzemeszter.tanev = (
+ SELECT tanev
+ FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter
+ WHERE statusz = 'aktív'
+ GROUP BY tanev) AND szemeszter = (
+ SELECT szemeszter
+ FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter
+ WHERE statusz = 'aktív' AND kezdesDt <= CURRENT_DATE() AND CURRENT_DATE() <= zarasDt)
+ ORDER BY userAccount ;
+ ";
+ if ($log['verbose'] > 5 ){ echo "MAY ->\t".$q."\n"; }
+ if(( $r = mysqli_query($link, $q)) !== FALSE ){
+ while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
+ $ret[] = $row;
+ }
+ mysqli_free_result($r);
+ return $ret;
+ } else {
+ echo "\nMAY ->\t ******** Mayor_napló (tanár)lekérdezési hiba. (adatbázis) ********\n";
+ }
+ }
+
+
+ function get_mayor_diak($link){ // diákok lekérdezése
+ global $m2n,$log;
+ $ret = array();
+ $q = "SELECT tanev FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter WHERE statusz = 'aktív' GROUP BY tanev; ";
+ if ($log['verbose'] > 5 ){ echo "MAY ->\t".$q."\n"; }
+ if( ($r = mysqli_query($link, $q)) !== FALSE ){
+ $ev = mysqli_fetch_array($r, MYSQLI_ASSOC);
+ $q = "SELECT userAccount, email, diak.diakId, tankorDiak.tankorId, TRIM(BOTH ' '
+ FROM CONCAT_WS(' ',viseltNevElotag, viseltCsaladinev, viseltUtonev)) AS fullName, TRIM(BOTH ' '
+ FROM CONCAT('".$m2n['csoport_prefix']."',tankorNev)) AS tankorNev
+ FROM intezmeny_".$m2n['isk_rovidnev'].".diak, mayor_private.accounts,intezmeny_".$m2n['isk_rovidnev'].".tankorDiak, intezmeny_".$m2n['isk_rovidnev'].".tankorSzemeszter
+ WHERE diak.diakId IN (
+ SELECT diakId
+ FROM intezmeny_".$m2n['isk_rovidnev'].".osztalyDiak
+ WHERE osztalyId IN (
+ SELECT osztalyId
+ FROM naplo_".$m2n['isk_rovidnev']."_".$ev['tanev'].".osztalyNaplo
+ WHERE evfolyamJel >= ".$m2n['min_evfolyam']."
+ ORDER BY osztalyId)
+ ORDER BY diakId) AND diak.statusz != 'jogviszonya lezárva' AND diak.statusz != 'felvételt nyert' AND diak.oId = accounts.studyId
+ AND tankorDiak.diakId = diak.diakId AND tankorDiak.beDt <= CURRENT_DATE() AND (tankorDiak.kiDt >= CURRENT_DATE() OR tankorDiak.kiDt IS NULL)
+ AND tankorSzemeszter.tankorId = tankorDiak.tankorId AND tankorSzemeszter.tanev = (
+ SELECT tanev
+ FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter
+ WHERE statusz = 'aktív'
+ GROUP BY tanev) AND tankorSzemeszter.szemeszter = (
+ SELECT szemeszter
+ FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter
+ WHERE statusz = 'aktív' AND kezdesDt <= CURRENT_DATE() AND CURRENT_DATE() <= zarasDt)
+ ORDER BY userAccount ;
+ ";
+ if ($log['verbose'] > 5 ){ echo "MAY ->\t".$q."\n"; }
+ if(( $r = mysqli_query($link, $q)) !== FALSE ){
+// mysqli_fetch_array($r, MYSQLI_ASSOC);
+ while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
+ $ret[] = $row;
+ }
+ mysqli_free_result($r);
+ return $ret;
+ } else {
+ echo "\nMAY ->\t ******** Mayor_napló (diák)lekérdezési hiba. (adatbázis) ********";
+ }
+ } else {
+ echo "\nMAY ->\t ******** Mayor_napló (diák)lekérdezési hiba. (adatbázis) ********";
+ }
+
+ }
+
+
+//-------------------------------------------------------------------------------------------------------------------------------
+
+ if($log['verbose'] > 0) { echo "\n\n######## Mayor-Nextcloud Script ########\n\n\n"; }
+
+ if(($link = db_connect($db)) == FALSE){ //csatlakozás
+ echo "\n******** MySQL (general) kapcsolat hiba. ********\n";
+ echo "\n******** Script leáll... ********\n";
+ die();
+ }
+ $link2 = $link;
+
+ group_add($m2n['mindenki_csop']); // A "mindenki" csoport hozzáadása
+
+
+ if(isset($db['mayor_user']) and isset($db['mayor_pass']) and isset($db['mayor_host']) or isset($db['mayor_port']))
+ {
+ $db['user'] = $db['mayor_user']; //ha a mayor egy másik szerveren lenne
+ $db['pass'] = $db['mayor_pass'];
+ $db['host'] = $db['mayor_host'];
+ $db['port'] = $db['mayor_port'];
+ if(($link2 = db_connect($db)) == FALSE){
+ echo "\n******** MySQL (mayor) kapcsolat hiba. ********\n";
+ echo "\n******** Script leáll... ********\n";
+ die();
+ } else {
+ if ($log['verbose'] > 0 ){ echo "***\tMayor DB connect.\n"; }
+ }
+ }
+
+
+//------------------------------------------------------------------------------------------------------------------------------
+
+// Létrehozza az új Mayor tanköröket
+ if ($log['verbose'] > 0 ){ echo "\n***\tCsoportok egyeztetése.\n";}
+ $tankorok = get_mayor_tankor($link2);
+ $nxt_csop = nxt_group_list();
+ foreach($tankorok as $key => $val){ //Végignézi a tankörök szerint
+ foreach($nxt_csop as $key2 => $val2){ //
+ if($key2 == $val['tankorNev']){ //Már van ilyen (tankör)nevű csoport
+ if ($log['verbose'] > 3 ){ echo " -\t Csoport:\t".$val['tankorNev']." \t ok.\n";}
+ break;
+ }
+ }
+ unset($nxt_csop[$val['tankorNev']]); //Megvizsgálva, többször már nem kell dönteni róla.
+ if($key2 != $val['tankorNev']){ //Ha nincs ilyen (tankör)nevű csoport
+ group_add($val['tankorNev']); //Akkor létrehozza
+ if ($log['verbose'] > 2 ){ echo "* -\t Új csoport:\t".$val['tankorNev']." \thozzáadva.\n";}
+ }
+ }
+// A megszűnt tanköröket-csoportokat kitörli
+ foreach($nxt_csop as $key => $val){
+ if(substr($key, 0, strlen($m2n['csoport_prefix'])) === $m2n['csoport_prefix'] ){ //Csak a "prefix"-el kezdődő nevűekre.
+ group_del($key); //elvégzi a törlést
+ if ($log['verbose'] > 1 ){ echo "** -\t Korábbi csoport:\t$key \t eltávolítva.\n";}
+ } else {
+ if ($log['verbose'] > 5 ){ echo " ---\t Külső csoport:\t$key \t békén hagyva.\n";}
+ } // Figyelem! A csoport prefix-szel: "(tk) " kezdődő csoportokat magáénak tekinti, automatikusan töröli!
+ } // Akkor is, ha az külön, kézzel lett létrehozva.
+
+
+
+//-------------------------------------------------------------------------------------------------------------------------------
+// Felhasználónevek egyeztetése
+ if ($log['verbose'] > 0 ){ echo "\n***\tFelhasználók egyeztetése.\n";}
+ $mayor_user = array_merge( get_mayor_tanar($link2), get_mayor_diak($link2) ); //tanár, diák
+ $mayor_user = array_merge($mayor_user, array(array('userAccount' => null, 'fullName' => null, 'tankorNev' => null,)) ); //strázsa a lista végére
+ $nxt_user = nxt_user_list();
+ $nxt_group = nxt_group_list();
+ $nxt_registered = nxt_register_userlist($link);
+ $m2n_forbidden = nxt_register_forbiddenlist($link);
+ if ($log['verbose'] > 3 ){ echo "\n";}
+
+ foreach($mayor_user as $key => $val){
+ //Lecseréli az ékezetes betűket a felhasználónévből
+ $mayor_user[$key]['userAccount'] = str_replace($search, $replace, $val['userAccount']); // (pl: Á->Aa, á->aa, ...)
+ if(in_array($val['userAccount'], $m2n_forbidden) ){ //Ha a nyilvántartásban "forbidden"-ként szerepel,
+ unset($mayor_user[$key]); // akkor nem foglalkozik vele tovább.
+ }
+ }
+
+ $curr = "";
+ $tankorei = array();
+ foreach($mayor_user as $key => $val){ //Végignézi a mayorból kinyert lista alapján.
+
+ if($curr != $val['userAccount']){ //A következő felhasználó..
+ foreach($nxt_user as $key2 => $val2){
+ if($curr == $key2){ //Már létezik a felhasználó a Nextcloud-ban
+ $log['curr'] = "-\tFelhasználó:\t$curr_n ($curr) \t -- \tok.\n";
+ if ($log['verbose'] > 3 ){ echo " -".$log['curr']; $log['curr'] = "";}
+ if($nxt_registered['status'][array_keys($nxt_registered['account'], $curr)[0]] == 'disabled' ){
+ nxt_register_userena($link, $curr); //Ha netán le lenne tiltva, akkor engedélyezi,
+ user_ena($curr); //ha a script tiltotta le.
+ }
+
+ foreach($nxt_group as $key3 => $val3){ //A tankörök egyeztetése
+ if(in_array($key3, $tankorei)){ //szerepel-e a felhasználó tankörei között a csoport?
+ if( in_array($curr, $val3)){ //Igen, és már benne is van +++
+
+ if ($log['verbose'] > 3 ){ echo " -\t\tBenne van a:\t$key3 \tcsoportban.\n";}
+ } else { //Nincs, most kell beletenni
+ if ($log['verbose'] > 2 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} echo "* -\t\tHozzáadva a:\t $key3 \tcsoporthoz.\n";}
+ group_user_add($key3, $curr);
+ }
+ } else { //Nem szerepel a tankörei között
+ if(in_array($curr, $val3) and (substr($key3, 0, strlen($m2n['csoport_prefix'])) === $m2n['csoport_prefix']) ){
+ // korábban benne volt egy tankörben, de már nincs, vagy a hozzátartozó tankörben már nem tanít => kiveszi
+ if ($log['verbose'] > 1 ){if($log['curr'] !== ""){echo "*".$log['curr'];$log['curr'] = "";} echo "* -\t\tTörölve a:\t $key3 \tcsoportból.\n";}
+ group_user_del($key3, $curr); //egy korábbi tankör lehetett...
+ }
+ }
+ }
+ break;
+ }
+ }
+ unset($nxt_user[$curr]); //Megvizsgálva, többször már nem kell dönteni róla.
+ if($curr != $key2 and $curr != null){ //Nincs még ilyen felhasználó
+ if ($log['verbose'] > 2 ){ echo "**-\tFelhasználó:\t$curr_n ($curr) \t -- \tlétrehozva.\n";}
+ user_add($curr, $curr_n); //Akkor hozzá kell adni
+ nxt_register_useradd($link, $curr);
+
+ foreach($tankorei as $key3 => $val3){ //Hozzáadja a (tankör)csoportokhoz is.
+ group_user_add($val3,$curr);
+ if ($log['verbose'] > 2 ){ echo "* -\t\tHozzáadva a:\t $val3 \tcsoporthoz.\n"; }
+ }
+ $params['quota'] = $m2n['default_quota']; // Alapértelmezett kvóta
+ $params['lang'] = $m2n['default_lang']; // Nyelv
+ if($curr_e == ""){
+ $params['email'] = $m2n['default_email']; // e-mail beállítása
+ } else {
+ $params['email'] = $curr_e; // ha van a mysql-ben e-mail, akkor azt használja
+ }
+ user_set($curr,$params); //Alapértelmezett paraméterek érvényesítése
+ if ($log['verbose'] > 2 ){ echo "* -\t\tBeállítva:\t"."Qvóta: ".$params['quota']."\tNyelv: ".$params['lang']."\tE-mail: ".$params['email']."\n";}
+ }
+
+ $tankorei = array(); // új ciklus kezdődik
+ $curr = $val['userAccount']; //
+ $curr_n = $val['fullName']; //
+ $curr_e = @$val['email']; //
+ }
+ $tankorei[] = $val['tankorNev']; // Egyébként a csoportok (tankörök) összegyűjtése
+ }
+
+
+// A megszűnő felhasználónevek egyeztetése
+ if ($log['verbose'] > 0 ){ echo "\n***\tTörlendő/Letiltandó felhasználók egyeztetése.\n";}
+ $nxt_registered = nxt_register_userlist($link);
+ foreach($nxt_user as $key => $val){ //Benne van a nyilvántartásban,
+ if(in_array($key, $nxt_registered['account'])){ //vagyis a script adta hozzá korábban
+ if( nxt_user_lastlogin($key) == "1970-01-01T00:00:00+00:00" ){ //Még soha nem lépett be = 1970.01.01 ??
+ user_del($key); //Akkor törli
+ nxt_register_userdel($link, $key); //A listáról is
+ if ($log['verbose'] > 1 ){ echo "**-\tFelhasználó:\t$val ($key)\t -- \ttörölve.\n";}
+ } else {
+ user_dis($key); //Különben csak letiltja (fájlok ne vesszenek el)
+ nxt_register_userdis($link, $key); //Feljegyzi a nyilvántartásba
+ if ($log['verbose'] > 1 ){ echo "**-\tFelhasználó:\t$val ($key)\t -- \t letiltva.\n";}
+ }
+ }
+ // döntési logika:
+ // ha benne van a $mayor_user-ben,
+ // - akkor vagy új user, vagy már meglévő,
+ // - ezért őt kihúzza az $nxt_user listáról, --> megtartja
+ // ezután ha valaki még rajta van az $nxt_user listán, az
+ // - vagy más, mayor_naplón kívüli user (rendszergazda vette föl) --> nem nyúl hozzá
+ // - vagy megszűnő, korábbi mayor_napló-s user --> törli (vagy letiltja)
+ // ha rajta van a $nxt_registered listán is, és nincs rajta $mayor_user listán
+ // - akkor őt a script hozta létre régen --> megszűnő, törli (vagy letiltja)
+ // (hiszen, ha aktív lenne, rajta lenne a $mayor_user listán, és kihúzta volna a $nxt_user-ből)
+ }
+
+// Végül a nyilvántartás kipucolása
+ if ($log['verbose'] > 0 ){ echo "\n***\tNyilvántartás ellenőrzése.\n";}
+ $nxt_user = nxt_user_list();
+ $nxt_registered = nxt_register_userlist($link);
+ foreach($nxt_registered['account'] as $key => $val){ //Erre a nextcloud "occ" parancs hibakezelése miatt van szükség
+
+ if(@$nxt_user[$val] === null ){
+ if ($log['verbose'] > 4 ){ echo "**-\tFelhasználónév:\t($val)\t -- \t kivéve a nyilvántartásból.";}
+ nxt_register_userdel($link, $val);
+ }
+ }
+
+//-------------------------------------------------------------------------------------------------------------------------------
+
+//test
+//script_install($link);
+
+
+ @mysqli_close($link2);
+ @mysqli_close($link);
+ if ($log['verbose'] > 0 ){echo "kész.\n";} //endline
+
+} else {
+ echo "\n\n******** Legalább PHP7 és mysqli szükséges! ********\n\n";
+}
+
+
+
+?>
+
+
+
+
diff --git a/external/nextcloud/mayor-nextcloud.php b/external/nextcloud/mayor-nextcloud.php
deleted file mode 100644
index f0359931..00000000
--- a/external/nextcloud/mayor-nextcloud.php
+++ /dev/null
@@ -1,577 +0,0 @@
-#!/usr/bin/php
-<?php
-$db = array();
-$m2n = array();
-
-
-$db['host'] = "localhost";
-$db['port'] = "3306";
-$db['user'] = "root";
-$db['pass'] = "";
-$db['m2n_db'] = "mayor_to_nextcloud";
-$db['m2n_prefix'] = "m2n_";
-$db['nxt_dbname'] = "nextcloud";
-$db['nxt_prefix'] = "nc_";
-//$db['mayor_host'] = "";
-//$db['mayor_port'] = "";
-//$db['mayor_user'] = "";
-//$db['mayor_pass'] = "";
-
-$m2n['min_evfolyam'] = 1;
-$m2n['isk_rovidnev'] = "rovid";
-$m2n['csoport_prefix'] = "(tk) ";
-$m2n['default_email'] = "indulo@iskola.hu";
-$m2n['default_passw'] = "EHYmGktzrdfS7wxJR6DFqxjJ";
-$m2n['default_quota'] = "10GB";
-$m2n['default_lang'] = "hu";
-$m2n['mindenki_csop'] = "naplós_felhasználók";
-
-$occ_path = "/var/www/nextcloud/";
-$occ_user = "www-data";
-
-// Le kell cserélni az ékezetes betűket, mert a Vezetéknév.Keresztnév nem POSIX kompatibilis.
-$search = array( 'á', 'ä', 'é', 'í', 'ó', 'ö', 'ő', 'ú', 'ü', 'ű', 'Á', 'Ä', 'É', 'Í', 'Ó', 'Ö', 'Ő', 'Ú', 'Ü', 'Ű'); // egyelőre csak a magyar betűket ismeri
-$replace = array( 'aa', 'ae', 'ee', 'ii', 'oo', 'oe', 'ooe', 'uu', 'ue', 'uue', 'Aa', 'Aae', 'Ee', 'Ii', 'Oo', 'Oe', 'Ooe', 'Uu', 'Ue', 'Uue');
-
-
-
-if (function_exists('mysqli_connect') and PHP_MAJOR_VERSION >= 7) { //MySQLi (Improved) és php7 kell!!!
-
- function db_connect(array $db){
- echo "Adatbázis kapcsolódás. (m2n_db=".$db['m2n_db'].")\n";
- $l = mysqli_connect($db['host'], $db['user'], $db['pass'], $db['m2n_db'],$db['port']);
- if(!$l){
- echo "Adatbázis kapcsolat újrapróbálása... (m2n_db=) hiba:".mysqli_connect_errno()."\n";
- $db_old = $db['m2n_db'];
- $db['m2n_db'] = "";
- $l = mysqli_connect($db['host'], $db['user'], $db['pass'], $db['m2n_db'],$db['port']);
- if(!$l){
- echo "Sikertelen kapcsolódás. (m2n_db=".$db['m2n_db'].") info:".mysqli_get_host_info($l)."\n";
- return null;
- } else{
- echo "Sikeres kapcsolódás. (m2n_db=".$db['m2n_db'].") info:".mysqli_get_host_info($l)."\n";
- echo "Adatbázis létrehozása: ".$db_old." ...\n";
- mysqli_set_charset($l, "utf8");
- mysqli_query($l, "SET NAMES utf8 COLLATE utf8_general_ci;" );
- script_install($l);
- return $l;
- }
- } else {
- echo "Sikeres kapcsolódás. (m2n_db=".$db['m2n_db'].") info:".mysqli_get_host_info($l)."\n";
- mysqli_set_charset($l, "utf8");
- mysqli_query($l, "SET NAMES utf8 COLLATE utf8_general_ci;" );
- if(mysqli_query($l, "SELECT * FROM ".$db['m2n_db'].".".$db['m2n_prefix']."register;" )) == FALSE ){
- script_install($l);
- }
- return $l;
- }
- }
-// bezár: mysqli_close($link);
-
- function script_install($link){
- global $m2n,$db;
- $q = "CREATE DATABASE IF NOT EXISTS ".$db['m2n_db']." DEFAULT COLLATE 'utf8_general_ci'; ";
- if(( $r = mysqli_query($link, $q)) !== FALSE ){
- echo "Az ".$db['m2n_db']." adatbázis sikeresen létrehozva.\n";
- }
- $q = "CREATE TABLE IF NOT EXISTS ".$db['m2n_db'].".".$db['m2n_prefix']."register (
- account VARCHAR(64) NOT NULL COLLATE 'utf8_bin',
- status ENUM('active','disabled','forbidden','deleted') NULL DEFAULT 'active' COLLATE 'utf8_bin',
- PRIMARY KEY (account))
- COLLATE='utf8_general_ci'
- ENGINE=InnoDB;";
- if(( $r = mysqli_query($link, $q)) !== FALSE ){
- echo "Az ".$db['m2n_db'].".".$db['m2n_prefix']."A nextcloud-register tábla sikeresen létrehozva.\n";
- }
- }
-
- function nxt_register_userlist($link){ //akiket a script hozott létre
- global $m2n,$db;
- $q = "SELECT * FROM ".$db['m2n_db'].".".$db['m2n_prefix']."register WHERE STATUS != 'forbidden'; ";
- if(( $r = mysqli_query($link, $q)) !== FALSE ){
-// echo $q."\n";
- while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
- $ret['account'][] = $row['account'];
- $ret['status'][] = $row['status'];
- }
- mysqli_free_result($r);
- return $ret;
- } else {
- echo "adatbázis hiba";
- }
- }
-
- function nxt_register_forbiddenlist($link){ //akiket a rendszergazda kitiltott
- global $m2n,$db;
- $q = "SELECT * FROM ".$db['m2n_db'].".".$db['m2n_prefix']."register WHERE STATUS = 'forbidden'; ";
- if(( $r = mysqli_query($link, $q)) !== FALSE ){
-// echo $q."\n";
- $ret = array();
- while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
- $ret[] = $row['account'];
- }
- mysqli_free_result($r);
- return $ret;
- } else {
- echo "adatbázis hiba";
- }
- }
-
- function nxt_register_useradd($link, $account){ // feljegyzi az általa létrehozott felhasználókat
- global $m2n,$db;
- $q = "INSERT INTO ".$db['m2n_db'].".".$db['m2n_prefix']."register (account) VALUES ('".$account."')";
- if(( mysqli_query($link, $q)) !== FALSE ){
-// echo $q."\n";
- }
- }
-
- function nxt_register_userena($link, $account){ // az engedélyezetteket
- global $m2n,$db;
- $q = "UPDATE ".$db['m2n_db'].".".$db['m2n_prefix']."register SET status='active' WHERE account='".$account."'";
- if(( mysqli_query($link, $q)) !== FALSE ){
-// echo $q."\n";
- }
- }
-
- function nxt_register_userdel($link, $account){ // a törölteket
- global $m2n,$db;
- $q = "DELETE FROM ".$db['m2n_db'].".".$db['m2n_prefix']."register WHERE account='".$account."' ";
- if(( mysqli_query($link, $q)) !== FALSE ){
-// echo $q."\n";
- }
- }
-
- function nxt_register_userdis($link, $account){ // a letiltottakat
- global $m2n,$db;
- $q = "UPDATE ".$db['m2n_db'].".".$db['m2n_prefix']."register SET status='disabled' WHERE account='".$account."'";
- if(( mysqli_query($link, $q)) !== FALSE ){
-// echo $q."\n";
- }
- }
-
-
-
-
- function user_add($userAccount, $fullName){ // létrehoz egy felhasználót a Nextcloud-ban
- global $occ_path,$occ_user,$m2n;
-// export OC_PASS=ErősJelszó123; su -s /bin/sh www-data -c 'php web/occ user:add --password-from-env --display-name="Teszt Tamás" --group="csop" t.tamas'
- if(strlen($userAccount) > 64 or strlen($fullName) > 64){
- echo "Hiba: A felahsználónév, vagy a teljes név hosszabb, mint 64 karakter!!";
- } else {
-// shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:enable $userAccount '");
- shell_exec("export OC_PASS=".$m2n['default_passw']."; su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:add --password-from-env --display-name=\"$fullName\" --group=\"".$m2n['mindenki_csop']."\" $userAccount '");
- }
- }
-
- function user_del($userAccount){ // kitöröl vagy letilt egy felhasználót a Nextcloud-ban
- global $occ_path,$occ_user;
- $last_login = json_decode(shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:info $userAccount --output=json '"),true)['last_seen'] ;
- if($last_login == "1970-01-01T00:00:00+00:00" ){ // Ha még soha nem lépett be
- shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:delete $userAccount '"); // akkor törölhető
- } else {
- shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:disable $userAccount '"); // különben csak letiltja
- }
-
- }
-
- function user_dis($userAccount){ // letiltja a felhasználót a Nextcloud-ban
- global $occ_path,$occ_user;
- shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:disable $userAccount '");
- }
-
- function user_ena($userAccount){ // engedélyezi
- global $occ_path,$occ_user;
- shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:enable $userAccount '");
- }
-
-
- function nxt_group_list() { // Csoportok listázása a Nextcloud-ból
- global $occ_path,$occ_user;
- return (array)json_decode(shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" group:list --output=json '"));
- }
-
- function nxt_user_list() { // Felhasználók listázása a Nextcloud-ból
- global $occ_path,$occ_user;
- $num = shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:report | grep \"total\" | sed -e \"s/[^0-9]//g\" | tr -d \"[:blank:]\n\" '");
- $num = $num + 100; // Biztos-ami-biztos, a nextcloud rejtett hibái miatt...
- return (array)json_decode(shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:list --limit $num --output=json '"));
- }
-
- function nxt_user_lastlogin($userAccount){ // legutóbbi belépés lekérdezése
- global $occ_path,$occ_user;
- return json_decode(shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:info $userAccount --output=json '"),true)['last_seen'] ;
- }
-
-
- function user_set($userAccount, array $params){ //beállítja az e-mailt, quota-t, nyelvet a paott értékekere
- global $occ_path,$occ_user;
- if(isset($params['quota']))
- shell_exec( "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:setting $userAccount files quota \"".$params['quota']."\" '" );
- if(isset($params['email']))
- shell_exec( "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:setting $userAccount settings email \"".$params['email']."\" '" );
- if(isset($params['lang']))
- shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" user:setting $userAccount core lang \"".$params['lang']."\" '");
- }
-
- function group_add($groupName){ //Új csoport létrehozása a Nextcloud-ban
- global $link,$db;
- if(strlen($groupName) > 64){ //mivel (egyelőre) nics erre 'occ' parancs, ezért közvetlenül kell...
- echo "Hiba: a csoportnév nagyobb, mint 64 karakter!!\n";
- } else {
- $q = "INSERT IGNORE INTO ".$db['nxt_dbname'].".".$db['nxt_prefix']."groups (gid) VALUES ('".$groupName."'); ";
- if(mysqli_query($link, $q) !== TRUE ) echo "group add query error";
- echo "\n".$q."\n";
- }
- }
-
- function group_del($groupName){ // Csoport törlése a Nextcloud-ból
- global $occ_user,$occ_path,$db,$link;
- $grp = nxt_group_list();
- if(isset($grp[$groupName])){ // Mivel erre még nincs hivatalos "occ" parancs, ezért közvetlenül kell...
- foreach($grp[$groupName] as $key => $user){
- shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" group:removeuser \"$groupName\" $user '");
- echo "$user removed from group:'$groupName' \n";
- }
- $q = "DELETE FROM ".$db['nxt_dbname'].".".$db['nxt_prefix']."groups WHERE gid='".$groupName."'; " ;
- if(mysqli_query($link, $q) !== TRUE ) echo "group del query error";
- echo "\n".$q."\n";
- }
- }
-
- function group_user_add($groupName, $userAccount){ // Hozzáad egy felhasználót egy csoporthoz a Nextcloud-ban
- global $occ_user, $occ_path;
- shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" group:adduser \"$groupName\" $userAccount '");
- }
-
- function group_user_del($groupName, $userAccount){ // Kitöröl egy felhasználót egy Nextcoud csoportból
- global $occ_user, $occ_path;
- shell_exec("su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" group:removeuser \"$groupName\" $userAccount '");
- }
-
-
- function get_mayor_tankor($link){ // A tankörök neveinek lekérdezése a mayorból
- global $m2n;
- $ret = array();
-//Létező összes tankör:
-/* $q = "SELECT tankorId, TRIM(BOTH ' '
- FROM CONCAT('".$m2n['csoport_prefix']."',tankorNev)) AS tankorNev
- FROM intezmeny_".$m2n['isk_rovidnev'].".tankorSzemeszter
- WHERE tanev = (
- SELECT tanev
- FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter
- WHERE statusz = 'aktív'
- GROUP BY tanev) AND szemeszter = (
- SELECT szemeszter
- FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter
- WHERE statusz = 'aktív' AND kezdesDt <= CURRENT_DATE() AND CURRENT_DATE() <= zarasDt); ";
-*/
-//csak a megadott évfeolyamokhoz kötődő tankörök:
- $q = "SELECT tanev FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter WHERE statusz = 'aktív' GROUP BY tanev; ";
- if( ($r = mysqli_query($link, $q)) !== FALSE ){
- $ev = mysqli_fetch_array($r, MYSQLI_ASSOC);
- $q = "SELECT tankorId, TRIM(BOTH ' '
- FROM CONCAT('".$m2n['csoport_prefix']."',tankorNev)) AS tankorNev
- FROM intezmeny_".$m2n['isk_rovidnev'].".tankorSzemeszter
- WHERE tanev = (
- SELECT tanev
- FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter
- WHERE statusz = 'aktív'
- GROUP BY tanev) AND szemeszter = (
- SELECT szemeszter
- FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter
- WHERE statusz = 'aktív' AND kezdesDt <= CURRENT_DATE() AND CURRENT_DATE() <= zarasDt) AND tankorId IN(
- SELECT tankorId
- FROM intezmeny_".$m2n['isk_rovidnev'].".tankorOsztaly
- WHERE osztalyId IN (
- SELECT osztalyId
- FROM naplo_".$m2n['isk_rovidnev']."_".$ev['tanev'].".osztalyNaplo
- WHERE evfolyamJel >= ".$m2n['min_evfolyam']."
- ORDER BY osztalyId)
- ORDER BY tankorId );
- ";
- if(( $r = mysqli_query($link, $q)) !== FALSE ){
- echo $q."\n";
- while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
- $ret[] = $row;
- }
- mysqli_free_result($r);
- return $ret;
- } else {
- echo "adatbázis hiba";
- }
- }
- }
-
-
- function get_mayor_tanar($link){ // A tanárok lekérdezése a mayorból
- global $m2n;
- $ret = array();
- $q = "SELECT userAccount, email, tanar.tanarId, tankorTanar.tankorId, TRIM(BOTH ' '
- FROM CONCAT_WS(' ',viseltNevElotag, viseltCsaladinev, viseltUtonev)) AS fullName, TRIM(BOTH ' '
- FROM CONCAT('".$m2n['csoport_prefix']."',tankorNev)) AS tankorNev
- FROM intezmeny_".$m2n['isk_rovidnev'].".tanar, mayor_private.accounts, intezmeny_".$m2n['isk_rovidnev'].".tankorTanar, intezmeny_".$m2n['isk_rovidnev'].".tankorSzemeszter
- WHERE accounts.studyId = tanar.oId AND statusz != 'jogviszonya lezárva' AND tanar.beDt <= CURRENT_DATE() AND (CURRENT_DATE() <= tanar.kiDt
- OR tanar.kiDt IS NULL) AND tanar.tanarId = tankorTanar.tanarId AND tankorTanar.beDt <= CURRENT_DATE() AND CURRENT_DATE() <= tankorTanar.kiDt
- AND tankorTanar.tankorId = tankorSzemeszter.tankorId AND tankorSzemeszter.tanev = (
- SELECT tanev
- FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter
- WHERE statusz = 'aktív'
- GROUP BY tanev) AND szemeszter = (
- SELECT szemeszter
- FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter
- WHERE statusz = 'aktív' AND kezdesDt <= CURRENT_DATE() AND CURRENT_DATE() <= zarasDt)
- ORDER BY userAccount ;
- ";
-
- if(( $r = mysqli_query($link, $q)) !== FALSE ){
-// echo $q."\n";
-// mysqli_fetch_array($r, MYSQLI_ASSOC);
- while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
- $ret[] = $row;
- }
- mysqli_free_result($r);
- return $ret;
- } else {
- echo "adatbázis hiba";
- }
- }
-
-
- function get_mayor_diak($link){ // diákok lekérdezése
- global $m2n;
- $ret = array();
- $q = "SELECT tanev FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter WHERE statusz = 'aktív' GROUP BY tanev; ";
- if( ($r = mysqli_query($link, $q)) !== FALSE ){
- $ev = mysqli_fetch_array($r, MYSQLI_ASSOC);
- $q = "SELECT userAccount, email, diak.diakId, tankorDiak.tankorId, TRIM(BOTH ' '
- FROM CONCAT_WS(' ',viseltNevElotag, viseltCsaladinev, viseltUtonev)) AS fullName, TRIM(BOTH ' '
- FROM CONCAT('".$m2n['csoport_prefix']."',tankorNev)) AS tankorNev
- FROM intezmeny_".$m2n['isk_rovidnev'].".diak, mayor_private.accounts,intezmeny_".$m2n['isk_rovidnev'].".tankorDiak, intezmeny_".$m2n['isk_rovidnev'].".tankorSzemeszter
- WHERE diak.diakId IN (
- SELECT diakId
- FROM intezmeny_".$m2n['isk_rovidnev'].".osztalyDiak
- WHERE osztalyId IN (
- SELECT osztalyId
- FROM naplo_".$m2n['isk_rovidnev']."_".$ev['tanev'].".osztalyNaplo
- WHERE evfolyamJel >= ".$m2n['min_evfolyam']."
- ORDER BY osztalyId)
- ORDER BY diakId) AND diak.statusz != 'jogviszonya lezárva' AND diak.statusz != 'felvételt nyert' AND diak.oId = accounts.studyId
- AND tankorDiak.diakId = diak.diakId AND tankorDiak.beDt <= CURRENT_DATE() AND (tankorDiak.kiDt >= CURRENT_DATE() OR tankorDiak.kiDt IS NULL)
- AND tankorSzemeszter.tankorId = tankorDiak.tankorId AND tankorSzemeszter.tanev = (
- SELECT tanev
- FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter
- WHERE statusz = 'aktív'
- GROUP BY tanev) AND tankorSzemeszter.szemeszter = (
- SELECT szemeszter
- FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter
- WHERE statusz = 'aktív' AND kezdesDt <= CURRENT_DATE() AND CURRENT_DATE() <= zarasDt)
- ORDER BY userAccount ;
- ";
-
- if(( $r = mysqli_query($link, $q)) !== FALSE ){
- echo $q."\n";
-// mysqli_fetch_array($r, MYSQLI_ASSOC);
- while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
- $ret[] = $row;
- }
- mysqli_free_result($r);
- return $ret;
- } else {
- echo "adatbázis hiba";
- }
- } else {
- echo "adatbázis hiba";
- }
-
- }
-
-
-//-------------------------------------------------------------------------------------------------------------------------------
-if(($link = db_connect($db)) == FALSE){ //csatlakozás
- echo "MySQL (general) kapcsolat hiba\n";
- die();
-}
-$link2 = $link;
-
-group_add($m2n['mindenki_csop']); // A "mindenki" csoport hozzáadása
-
-
-if(isset($db['mayor_user']) and isset($db['mayor_pass']) and isset($db['mayor_host']) or isset($db['mayor_port']))
-{
- $db['user'] = $db['mayor_user']; //ha a mayor egy másik szerveren lenne
- $db['pass'] = $db['mayor_pass'];
- $db['host'] = $db['mayor_host'];
- $db['port'] = $db['mayor_port'];
- if(($link2 = db_connect($db)) == FALSE){
- echo "MySQL (mayor) kapcsolat hiba\n";
- die();
- } else {
- echo "Mayor DB connect";
- }
-}
-
-// Létrehozza az új Mayor tanköröket
-$tankorok = get_mayor_tankor($link2);
-$nxt_csop = nxt_group_list();
-foreach($tankorok as $key => $val){ //Végignézi a tankörök szerint
- foreach($nxt_csop as $key2 => $val2){ //
- if($key2 == $val['tankorNev']){ //Már van ilyen (tankör)nevű csoport
- echo "group:".$val['tankorNev']." found\n";
- break;
- }
- }
- unset($nxt_csop[$val['tankorNev']]); //Megvizsgálva, többször már nem kell dönteni róla.
- if($key2 != $val['tankorNev']){ //Ha nincs ilyen (tankör)nevű csoport
- group_add($val['tankorNev']); //Akkor létrehozza
- echo "group:[".$val['tankorNev']."] created\n";
- }
-}
-// A megszűnt tanköröket-csoportokat kitörli
-foreach($nxt_csop as $key => $val){
- if(substr($key, 0, strlen($m2n['csoport_prefix'])) === $m2n['csoport_prefix'] ){ //Csak a "prefix"-el kezdődő nevűekre.
- group_del($key); //elvégzi a törlést
- echo "group:[".$key."] Yes, removed\n";
- } else {
- echo "group: $key Non removed\n";
- } // Figyelem! A csoport prefix-szel: "(tk) " kezdődő csoportokat magáénak tekinti, automatikusan töröli!
-} // Akkor is, ha az külön, kézzel lett létrehozva.
-
-
-
-//-------------------------------------------------------------------------------------------------------------------------------
-// Felhasználónevek egyeztetése
-$mayor_user = array_merge( get_mayor_tanar($link2), get_mayor_diak($link2) ); //tanár, diák
-$mayor_user = array_merge($mayor_user, array(array('userAccount' => null, 'fullName' => null, 'tankorNev' => null,)) ); //strázsa a lista végére
-$nxt_user = nxt_user_list();
-$nxt_group = nxt_group_list();
-$nxt_registered = nxt_register_userlist($link);
-
-foreach($mayor_user as $key => $val){
- //Lecseréli az ékezetes betűket a felhasználónévből
- $mayor_user[$key]['userAccount'] = str_replace($search, $replace, $val['userAccount']); // (pl: Á->Aa, á->aa, ...)
- if(in_array($val['userAccount'], nxt_register_forbiddenlist($link)) ){ //Ha a nyilvántartásban "forbidden"-ként szerepel,
- unset($mayor_user[$key]); // akkor nem foglalkozik vele tovább.
- }
-}
-
-$curr = "";
-$tankorei = array();
-foreach($mayor_user as $key => $val){ //Végignézi a mayorból kinyert lista alapján.
-
- if($curr != $val['userAccount']){ //A következő felhasználó..
- foreach($nxt_user as $key2 => $val2){
- if($curr == $key2){ //Már létezik a felhasználó a Nextcloud-ban
- echo "user found: $curr:$curr_n\n";
- if($nxt_registered['status'][array_keys($nxt_registered['account'], $curr)[0]] == 'disabled' ){
- nxt_register_userena($link, $curr); //Ha netán le lenne tiltva, akkor engedélyezi,
- user_ena($curr); //ha a script tiltotta le.
- }
-
- foreach($nxt_group as $key3 => $val3){ //A tankörök egyeztetése
- if(in_array($key3, $tankorei)){ //szerepel-e a felhasználó tankörei között a csoport?
- if( in_array($curr, $val3)){ //Igen, és már benne is van +++
-
- echo "$curr már benne van a \"$key3\" csoportban\n";
- } else { //Nincs, most kell beletenni
- echo "$curr még nincs bent a \"$key3\" csoportban\n";
- group_user_add($key3, $curr);
- }
- } else { //Nem szerepel a tankörei között
- if(in_array($curr, $val3) and (substr($key3, 0, strlen($m2n['csoport_prefix'])) === $m2n['csoport_prefix']) ){
- // korábban benne volt egy tankörben, de már nincs, vagy a hozzátartozó tankörben már nem tanít => kivenni
- echo "$curr benne volt a \"$key3\" csoportban, kiszedve\n";
- group_user_del($key3, $curr); //egy korábbi tankör lehetett...
- }
- }
- }
- break;
- }
- }
-// echo "\n\n curr:$curr, key2:$key2, val2:$val2, key3:$key3, val3:$val3,\n\n";
- unset($nxt_user[$curr]); //Megvizsgálva, többször már nem kell dönteni róla.
- if($curr != $key2 and $curr != null){ //Nincs még ilyen felhasználó
- echo "user added: $curr:$curr_n \n";
- user_add($curr, $curr_n); //Akkor hozzá kell adni
- nxt_register_useradd($link, $curr);
-
- foreach($tankorei as $key3 => $val3){ //Hozzáadja a (tankör)csoportokhoz is.
- group_user_add($val3,$curr);
- echo "felhasználó hozzáadva: $val3 csoporthoz\n";
- }
- $params['quota'] = $m2n['default_quota']; // Alapértelmezett kvóta
- $params['lang'] = $m2n['default_lang']; // Nyelv
- if($curr_e == ""){
- $params['email'] = $m2n['default_email']; // e-mail beállítása
- } else {
- $params['email'] = $curr_e; // ha van a mysql-ben e-mail, akkor azt használja
- }
- user_set($curr,$params); //Alapértelmezett paraméterek érvényesítése
- echo "paraméterek beállítva:".$params['quota'].$params['lang'].$params['email']."\n";
- }
-
- echo "--$curr--$curr_n--\n";
- $tankorei = array(); // új ciklus kezdődik
- $curr = $val['userAccount']; //
- $curr_n = $val['fullName']; //
- $curr_e = $val['email']; //
- }
- $tankorei[] = $val['tankorNev']; // Egyébként a csoportok (tankörök) összegyűjtése
-}
-
-
-// A megszűnő felhasználónevek egyeztetése
-$nxt_registered = nxt_register_userlist($link);
-foreach($nxt_user as $key => $val){ //Benne van a nyilvántartásban,
- if(in_array($key, $nxt_registered['account'])){ //vagyis a script adta hozzá korábban
- if( nxt_user_lastlogin($key) == "1970-01-01T00:00:00+00:00" ){ //Még soha nem lépett be = 1970.01.01 ??
- user_del($key); //Akkor törli
- nxt_register_userdel($link, $key); //A listáról is
- echo "felhasználó eltávolítva: $key\n";
- } else {
- user_dis($key); //Különben csak letiltja (fájlok ne vesszenek el)
- nxt_register_userdis($link, $key); //Feljegyzi a nyilvántartásba
- echo "felhasználó letiltva: $key\n";
- }
- }
- // döntési logika:
- // ha benne van a $mayor_user-ben,
- // - akkor vagy új user, vagy már meglévő,
- // - ezért őt kihúzza az $nxt_user listáról, --> megtartja
- // ezután ha valaki még rajta van az $nxt_user listán, az
- // - vagy más, mayor_naplón kívüli user (rendszergazda vette föl) --> nem nyúl hozzá
- // - vagy megszűnő, korábbi mayor_napló-s user --> törli (vagy letiltja)
- // ha rajta van a $nxt_registered listán is, és nincs rajta $mayor_user listán
- // - akkor őt a script hozta létre régen --> megszűnő, törli (vagy letiltja)
- // (hiszen, ha aktív lenne, rajta lenne a $mayor_user listán, és kihúzta volna a $nxt_user-ből)
-}
-
-// Végül a nyilvántartás kipucolása
-$nxt_user = nxt_user_list();
-$nxt_registered = nxt_register_userlist($link);
-foreach($nxt_registered['account'] as $key => $val){ //Erre a nextcloud "occ" parancs hibakezelése miatt van szükség
-
- if(@$nxt_user[$val] === null ){
- echo "kivéve a nyilvántartásból: $val";
- nxt_register_userdel($link, $val);
- }
-}
-
-//-------------------------------------------------------------------------------------------------------------------------------
-
-//test
-//script_install($link);
-
-
-@mysqli_close($link2);
-@mysqli_close($link);
-echo "\n"; //endline
-
-} else {
- echo "Legalább PHP7 és mysqli szükséges!\n\n";
-}
-
-
-
-
-
-?>