aboutsummaryrefslogtreecommitdiffstats
path: root/external
diff options
context:
space:
mode:
Diffstat (limited to 'external')
-rw-r--r--external/munin/README98
-rwxr-xr-xexternal/munin/mayor_munin.php122
-rw-r--r--external/nextcloud/README183
-rw-r--r--external/nextcloud/mayor-nextcloud.php577
4 files changed, 980 insertions, 0 deletions
diff --git a/external/munin/README b/external/munin/README
new file mode 100644
index 00000000..a0ad5eb8
--- /dev/null
+++ b/external/munin/README
@@ -0,0 +1,98 @@
+
+Munin monitorozó plugin a mayorhoz
+
+Grafikonokat készít a "munin" program segítségével a Mayor pillanatnyi állapotáról.
+Egyelőre csak debian 9+ rendszeren tesztelt, de pár apró módosítással életrekelthető más rendszereken is.
+
+Rögzíti az:
+-- Egyidejűleg (pillanatnyi) bejelentkezett felhasználók számát.
+-- IP-cím alapján a lokális (192.168.*.*, 10.*.*.*, 172.16.*.*, fd**::/8) és külön a külső tartományokat.
+-- Policy alapján a 'private' és/vagy 'parent' -ben belépett felhasználókat.
+-- Aktivitás alapján az Xperc (pl:10perc) ideje, a 2*Xperc ideje aktív felhasználókat és a tétleneket.
+
+
+Beállítása a következő: (debian)
+
+1.lépés: >>> apt-get install munin
+2.lépés: a "/etc/munin/munin.conf" fájl szerkesztése a következő módon:
+
+--(I.) először keressük meg a következő részt:
+ # a simple host tree
+ [localhost.localdomain]
+ address 127.0.0.1
+ use_node_name yes
+
+-- módosítsuk a "localhost.localdomain"-t a napló-szerver gépnevének megfelelően:
+ (itt az FQDN (teljes elérési út szükséges))
+ [gépnév.iskolaneve.hu]
+ address 127.0.0.1
+ use_node_name yes
+
+--(II.) ugyanitt, adjuk hozzá a következő sorokat:
+ (és írjuk át a "mayor.iskolaneve.hu" címet a napló címének megfelelően)
+ [mayor.iskolaneve.hu]
+ address 127.0.0.1
+ use_node_name no
+
+
+--(III.) ezután módosítanunk kell a "mayor_munin.php" scriptben a "$set['naplo_host'] = "mayor.iskolaneve.hu";"-t
+ (első sorok egyike) a saját naplónk címének megfelelően.
+ Ez egy fontos beállítás, mert ezen keresztül ismeri fel a munin rendszer a mi
+ monitorozó scriptünket.
+
+
+--(IV.) utána másoljuk a "mayor_munin.php"-t az:
+ az /usr/share/munin/plugins/ mappába vagy
+ az /etc/munin/ könyvtárba vagy
+ bárhova, ahonnan a munin eléri.
+
+ FONTOS!!
+ A "mayor_munin.php"-nak állítsuk be a "root" tulajdonost és 700-as jogokat!
+ (nehogy valami kiolvassa a jelszót)
+
+
+--(V.) ezután el kell helyezni egy simlink-et a /etc/munin/plugins/ könyvtárba, ami a bemásolt fájlra mutat.
+ pl: ln -s /usr/share/munin/plugins/mayor_munin.php /etc/munin/plugins/munin
+
+
+--(VI.) végül be kell állítanunk egy felhasználót, a mysql-ben, amivel olvasni lehet a mayor_login.session és a mayor_login.loginLog táblákat
+ (például:)
+ mysql> GRANT SELECT ON mayor_login.loginLog TO 'mayor-monitor'@'localhost' IDENTIFIED BY 'erőős-jelszóó!';
+ mysql> GRANT SELECT ON mayor_login.session TO 'mayor-monitor'@'localhost' IDENTIFIED BY 'erőős-jelszóó!';
+
+- Lehetőség van mysql/unix_socket authentikációra is, ez nagyban növeli biztonságot, mert nem alkalmaz jelszót,
+ így szinte lehetetlen próbálgatással feltörni.
+ Fontos, hogy a kiválasztott felhasználónak/felhasználónévnek valósnak kell lenni, és léteznie kell a rendszerben.
+ Egyszerűség kedvéért használhatjuk a "root" felhasználót, ez eredetileg is unix_socket-tel authentikál a mysql-ben,
+ (hacsak a mysql telepítésénél meg nem változtattuk)
+
+ vagy a "munin" nevű felhasználót, ezt adjuk hozzá a mysql-hez:
+
+ mysql> GRANT SELECT ON mayor_login.session TO 'munin'@'localhost' IDENTIFIED via unix_socket;
+ mysql> GRANT SELECT ON mayor_login.loginLog TO 'munin'@'localhost' IDENTIFIED via unix_socket;
+
+ majd rá kell venni a munin-t, hogy a "munin" felhasználónévvel futtassa, ezt a "/etc/munin/plugin-conf.d/munin-node"
+ fájlba kell beírni, a következő sorok hozzáadásával:
+
+ [mayor_munin]
+ user munin
+
+ Fontos: ekkor a mayor_munin.php tulajdonosát a "munin"-ra kell állítani!
+
+
+
+--(VII.) Finomhangolás:
+ Végül írjuk be a "mayor_munin.php" elejére, a "$set['___']" tömböt módosítva, a maysql adatokat,
+ illetve itt tudjuk beállítani az aktivitáshoz számolt időt percben, és a napló webcímét is.
+
+
+--(VIII.) Befejezésképpen pedig indítsuk újra a munin-t az alábbi parancsokkal:
+ >>> /etc/init.d/munin-node restart
+ >>> /etc/init.d/munin restart
+
+
+--(++) a beálítás végeztével a következő paranccsal ellenőrizhetjük, hogy mindent jól csináltunk-e:
+ >>> munin-run mayor_munin
+
+ Ekkor egy listát kapunk, ahol a változók nevei ("mayor_xxxx_xx.values") mellett számértékeket látunk,
+ ha semmi, vagy a számok helyett egy "U" betű jelenik meg, akkor még valamit finomhangolni kell.
diff --git a/external/munin/mayor_munin.php b/external/munin/mayor_munin.php
new file mode 100755
index 00000000..92fc264d
--- /dev/null
+++ b/external/munin/mayor_munin.php
@@ -0,0 +1,122 @@
+#!/usr/bin/env php
+<?php
+
+
+$set['db_user'] = "mayor-munin";
+$set['db_pass'] = "";
+$set['db_db'] = "mayor_login";
+$set['db_host'] = "localhost";
+$set['naplo_host'] = "mayor.iskolaneve.hu";
+$set['t_active'] = "10"; //pl: 10 perc (Az elmúlt x percben aktívak voltak)
+$ret = array();
+
+
+if (isset($argv[1]) and $argv[1] == "config"){
+
+ $cf = "host_name ".$set['naplo_host']."\n";
+ $cf .= "graph_title Napló rendszerterhelés (Mayor)\n";
+ $cf .= "graph_args --base 1000 \n";
+ $cf .= "graph_vlabel db/fő\n";
+ $cf .= "graph_category mayor\n";
+ $cf .= "graph_info Naplo users\n";
+
+ $cf .= "mayor_ip_sum.label Összes\n";
+ $cf .= "mayor_ip_sum.draw AREA\n";
+ $cf .= "mayor_ip_sum.info Összes\n";
+
+ $cf .= "mayor_ip_k.label Külső IP\n";
+ $cf .= "mayor_ip_k.draw AREA\n";
+ $cf .= "mayor_ip_k.info Külső IP\n";
+
+ $cf .= "mayor_ip_b.label Belső IP\n";
+ $cf .= "mayor_ip_b.draw AREA\n";
+ $cf .= "mayor_ip_b.info Belső IP\n";
+
+ $cf .= "mayor_p_pri.label Policy pri.\n";
+ $cf .= "mayor_p_pri.draw LINE1.2\n";
+ $cf .= "mayor_p_pri.info Policy pri.\n";
+
+ $cf .= "mayor_p_par.label Policy par.\n";
+ $cf .= "mayor_p_par.draw LINE1.2\n";
+ $cf .= "mayor_p_par.info Policy par.\n";
+
+ $cf .= "mayor_a_t1.label Aktív: ".$set['t_active']."perc\n";
+ $cf .= "mayor_a_t1.draw AREA\n";
+ $cf .= "mayor_a_t1.info Aktív: ".$set['t_active']."perc\n";
+
+ $cf .= "mayor_a_t2.label Aktív: ".($set['t_active']*2)."perc\n";
+ $cf .= "mayor_a_t2.draw LINE1\n";
+ $cf .= "mayor_a_t2.info Aktív: ".($set['t_active']*2)."perc\n";
+
+ $cf .= "mayor_a_tt.label Aktív: tétlen\n";
+ $cf .= "mayor_a_tt.draw LINE1\n";
+ $cf .= "mayor_a_tt.info Aktív: tétlen\n";
+
+ echo iconv("UTF-8", "ISO-8859-2", $cf), PHP_EOL;
+
+} else {
+
+ if (function_exists('mysqli_connect') and PHP_MAJOR_VERSION >= 7 ) { //MySQLi (Improved) és php7 kell!!!
+
+ $ret['ip_b'] = 0;
+ $ret['ip_k'] = 0;
+ $ret['p_pri'] = 0;
+ $ret['p_par'] = 0;
+ $ret['a_t1'] = 0;
+ $ret['a_t2'] = 0;
+ $ret['a_tt'] = 0;
+ $l = mysqli_connect($set['db_host'], $set['db_user'], $set['db_pass'], $set['db_db']);
+ if(!$l){
+// echo "hiba\n ";
+ $ret['ip_b'] = "U";
+ $ret['ip_k'] = "U";
+ $ret['p_pri'] = "U";
+ $ret['p_par'] = "U";
+ $ret['a_t1'] = "U";
+ $ret['a_t2'] = "U";
+ $ret['a_tt'] = "U";
+
+ } else{
+ mysqli_set_charset($l, "utf8");
+ $r = mysqli_query($l," SELECT session.userAccount,session.policy, UNIX_TIMESTAMP(session.activity) AS activity, loginLog.ip
+ FROM mayor_login.session, mayor_login.loginLog
+ WHERE session.dt = loginLog.dt AND session.userAccount=loginLog.userAccount AND loginLog.flag=0; ");
+
+ while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
+ if($row['policy'] == "private") {
+ $ret['p_pri'] ++;
+ }
+ if($row['policy'] == "parent") {
+ $ret['p_par'] ++;
+ }
+
+ if( $row['activity'] >= time()-$set['t_active']*60){ //Az elmúlt x percben aktívak voltak
+ $ret['a_t1']++;
+ } else if( $row['activity'] >= time()-$set['t_active']*2*60){ //Az elmúlt 2*x percben aktívak voltak
+ $ret['a_t2']++;
+ } else {
+ $ret['a_tt']++;
+ }
+
+ if( preg_match('/^((10\.)|(192\.168\.)|(172\.16\.)|(fd..\:)).*/', $row['ip']) ){
+ $ret['ip_b']++ ;
+ } else{
+ $ret['ip_k']++ ;
+ }
+ }
+ }
+
+ @mysqli_free_result($r);
+ @mysqli_close($l);
+ echo "mayor_ip_sum.value ".($ret['ip_b']+$ret['ip_k'])."\n". "mayor_ip_k.value ".$ret['ip_k']."\n". "mayor_ip_b.value ".$ret['ip_b']."\n" ;
+ echo "mayor_p_pri.value ".$ret['p_pri']."\n". "mayor_p_par.value ".$ret['p_par']."\n";
+ echo "mayor_a_t1.value ".$ret['a_t1']."\n". "mayor_a_t2.value ".$ret['a_t2']."\n". "mayor_a_tt.value ".$ret['a_tt']."\n" ;
+
+ } else{
+ echo "mayor_ip_sum.value U\n". "mayor_ip_b.value U\n". "mayor_ip_k.value U\n" ;
+ echo "mayor_p_pri.value U\n". "mayor_p_par.value U\n";
+ echo "mayor_a_t1.value U\n". "mayor_a_t2.value U\n". "mayor_a_tt.value U\n";
+ }
+}
+
+?> \ No newline at end of file
diff --git a/external/nextcloud/README b/external/nextcloud/README
new file mode 100644
index 00000000..5eee1962
--- /dev/null
+++ b/external/nextcloud/README
@@ -0,0 +1,183 @@
+
+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.
+
+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.
+
+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!
+ Legalább "php7.0" és "Apache 2.4" kell hozzá!
+
+
+
+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)
+ 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.
+
+-(II.) Helyezzük el a "mayor-nextcloud.php"-t biztos, védett helyre,a nextcloud szerveren, akár a /etc/ mappába, akár a /root könyvtárba,
+ ezt később "root"-ként kell majd futtatnunk, és mysql jelszó is (lehet/) van benne,
+ ezért ennek megfelelően állítsuk be a tulajdonost, és vegyük el a jogosultságokat. (chown root; chmod 600)
+
+
+
+-(III.) A fajl elején találhatóak a konfigurációs adatok, ezeket a következőképpen módosíthatjuk:
+
+
+ $db['host'] = "localhost"; //Ez a nextcloud alatt futó mysql elérhetősége.
+ // (Csak localhost lehet, a scriptet a nextcloud-szerveren kell futtatnunk.)
+
+ $db['port'] = "3306"; //nextcloud-mysql port
+
+ $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á.
+ // 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ó)
+ // érdemes a debian 9.x-en, a root-hoz alapértelmezett "unix_socket" bejelentkezési módot
+ // használnunk, ez biztonságosabb, mert nem jön létre "olvasható" jelszó.
+
+
+
+ $db['nxt_dbname'] = "nextcloud"; //A Nextcloud által használt adatbázis neve.
+ $db['nxt_prefix'] = "oc_"; //A Nextcloud által használt adatbázisban a táblák prefix-je. (ha van)
+
+
+ $db['m2n_db'] = "mayor_to_nextcloud"; //A nyilvántartó adatbázis neve.
+ // Ennek az adatbázisnak a nextcloud-mysql szerveren kell lennie!
+ //
+ // 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.
+
+ $db['m2n_prefix'] = "m2n_"; //A nyilvántartó adatbázisban használt prefix, ha van. (ha nincs, akkor "üres string"-re kell állítani)
+
+
+ //$db['mayor_host'] = ""; //Akkor használatos, ha a mayor alatti mysql szerver egy másik szerveren van.
+ //$db['mayor_port'] = ""; // ekkor ki kell venni kommentből, és ki kell tölteni a mayor-mysql serverre érvényes adatokkal.
+ //$db['mayor_user'] = "";
+ //$db['mayor_pass'] = ""; //A kiválasztott felhaználónak olvasnia (GRANT SELECT) kell tudnia a mayor-mysql serveren a(z):
+ // intezmeny_xxx, mayor_parent, naplo_xxx_yyyy adatbázisokból.
+
+ //Ha a mayor-mysql sezvere fizikailag (vagy virtuálisan) másik szerveren van, akkor érdemes egy "ssh-tunnel"-lel
+ // áthozni a portját a nextcloud-serverre. (ez a legbiztonságossabb)
+
+
+ $m2n['isk_rovidnev'] = "rovid"; //A mayor-ban használt "iskola rövidneve" megnevezés.
+
+ $m2n['min_evfolyam'] = 10; //A minimális évfolyam, amelytől fölfelé engedélyezzük a felhő használatát a diákoknak.
+
+ $m2n['csoport_prefix'] = "(tk) "; //A Nextcloud-ban ezzel az előtaggal jelennek majd meg mayor-ból importált csoportok, a jobb átláthatóság érdekében.
+
+
+
+ $m2n['default_email'] = "rendszergazda@iskola.hu"; //Ha a mayor intezmeny_xxx.diak, vagy az intezmeny_xxx.tanar táblákban nincs kitöltve az
+ // e-mail, akkor ezt használja alapértelmezetten.
+ // (ide megy a jelszó-emlékeztető, amíg a felhasználó birtokba nem veszi a fiókját)
+
+ $m2n['default_passw'] = "EHYmGktzrdfS7wxJR6DFqxjJ"; //Az induló jelszó a Nextcloud-ban a felhasználóknak. (érdemes erőset megadni, a botnet-ek miatt)
+
+ $m2n['default_quota'] = "10GB"; //Az induló fájl-kvóta a Nextcloud-ban.
+
+ $m2n['default_lang'] = "hu"; //Az alapértelmezett nyelv (később minden felhasználó átállíthatja magának)
+
+ $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.
+
+
+ $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.
+
+ $occ_user = "www-data"; //A Nextcloud-servert futtató (Apache) felhasználónév
+
+
+
+ FONTOS!!
+ 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!
+
+
+
+
+
+ További Információk:
+
+ Lehetőség van egy-egy felhasználó letiltására, ezt a nyilvántartó adatbázisban tehetjük meg, a "register" tábla,
+ az adott felhasználónévhez tartozó "status" mezőjének "forbidden"-re állításával.
+ Ekkor a script nem fog foglalkozni, az adott felhasználóval a továbbiakban.
+
+
+ Esetleg érdemes lehet a scriptet betenni a "cron"-ba (éjszakára), így naponta lefut, és követi napló változásait.
+
+
+ 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ő,
+ viszont (sajnos) egyáltalán nem POSIX kompatibilis (amely csak az angol ABC betűit +pár kiegészítő karaktert engedélyez)
+ így a legtöbb rendszerrel nem hozható összhangba, ezért szükség van az ékezetes karakterek lecserélésére.
+
+ A karakterek cseréje az alábbi módon történik:
+
+ á --> aa Á --> Aa
+ ä --> ae Ä --> Aae
+ é --> ee É --> Ee Például:
+ í --> ii Í --> Ii Vezetéknév.Keresztnév --> Vezeteekneev.Keresztneev
+ ó --> oo Ó --> Oo Bőrönd.Ödön --> Booeroend.Oedoen
+ ö --> oe Ö --> Oe
+ ő --> ooe Ő --> Ooe
+ ú --> uu Ú --> Uu
+ ü --> ue Ü --> Ue
+ ű --> uue Ű --> Uue
+
+ Ezeket a karakter cseréket maga a script végzi, futás közben, a mayor felhasználónevekből,
+ a létrejövő Nextcloud felhasználónév már a lecserélt változat lesz.
+
+
+
+ A mayor-nextcloud script működése néhány mondatban:
+
+ Első lépésben lekérdezi a feltételeknek megfelelő tanköröket a mayorból, (tankör-osztály évfolyama, tankör aktív-e a dátumok apaján)
+ majd ez alapján ellenőrzi, hogy a Nextcloud-ban már szerepelnek-e ezen tankörneveknek megfelelő csoportok.
+ Ha új tankör van a mayorban, akkor azt a Nextcloud-ban is létrehozza, ha egy tankört töröltek a mayorból, akkor azt a csoportot Nextcloud-ból is törli.
+ Fontos!
+ A csoport prefix-szel, például: "(tk) "-val kezdődő csoportokat magáénak tekinti, és ha nem találja a mayorban, akkor automatikusan töröli!
+
+ 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 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 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.)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/external/nextcloud/mayor-nextcloud.php b/external/nextcloud/mayor-nextcloud.php
new file mode 100644
index 00000000..f0359931
--- /dev/null
+++ b/external/nextcloud/mayor-nextcloud.php
@@ -0,0 +1,577 @@
+#!/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";
+}
+
+
+
+
+
+?>