aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorM.Gergo2022-06-15 04:09:37 +0200
committerM.Gergo2022-06-15 04:09:37 +0200
commit44241c611369f5325e1105e8795efca94dc28906 (patch)
tree33d3ff7706411f1e0e6f831e0fc30eaf8d300b4e
parentb5ebdb5cc418c10cd2b7010aba2a73c4f9752973 (diff)
parent3edda58a29c50957a72b8e74f078df54fc914f97 (diff)
downloadmayor-44241c611369f5325e1105e8795efca94dc28906.tar.gz
mayor-44241c611369f5325e1105e8795efca94dc28906.zip
Merge branch 'devel' into MaYor-dev
-rw-r--r--README.md2
-rw-r--r--egyéb/munin/README98
-rw-r--r--egyéb/munin/README.md91
-rwxr-xr-xegyéb/munin/mayor_munin.php152
-rw-r--r--egyéb/nextcloud/README2
-rw-r--r--egyéb/nextcloud/mayor-ldap.php1953
-rw-r--r--egyéb/nextcloud/mayor-nextcloud.cfg.php636
-rw-r--r--egyéb/nextcloud/mayor-nextcloud.php1354
8 files changed, 3352 insertions, 936 deletions
diff --git a/README.md b/README.md
index 3135a2c6..db9790b7 100644
--- a/README.md
+++ b/README.md
@@ -2,8 +2,6 @@
Ez a tároló, a MaYoR elektornikus napló (© [www.mayor.hu](http://www.mayor.hu)), és a hozzá készített apróbb javítások/módosítások/kiegészítések gyüjteménye.
-**Original: [http://git.bmrg.hu/pub/mayormods.git](http://git.bmrg.hu/pub/mayormods.git/)**
-**Mirror 2: [https://github.com/eper1/mayormods](https://github.com/EpeR1/mayormods)**
## Struktúra:
diff --git a/egyéb/munin/README b/egyéb/munin/README
deleted file mode 100644
index a0ad5eb8..00000000
--- a/egyéb/munin/README
+++ /dev/null
@@ -1,98 +0,0 @@
-
-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/egyéb/munin/README.md b/egyéb/munin/README.md
new file mode 100644
index 00000000..c8eb91e4
--- /dev/null
+++ b/egyéb/munin/README.md
@@ -0,0 +1,91 @@
+
+# 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ásokkal életre kelthető más/régebbi 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: (debian)
+
+1. lépés: Telepítsük fel a Munin monitorozó rendszert!
+ >>> apt-get install munin
+2. lépés: a **/etc/munin/munin.conf** fájl szerkesztése a következő módon:
+
+* Adjuk hozzá az alábbi sorokat, a napló-szerver gépnevének megfelelően:
+ (itt az FQDN (teljes elérési út szükséges)) és állítsuk "no"-ra az "use_node_name"-t.
+
+ [gépnév.iskolaneve.hu]
+ address 127.0.0.1
+ use_node_name no
+
+3. Ezután módoítanunk kell a **/etc/munin/plugin-conf.d/munin-node** fájlt,
+
+* (a.) Adjuk hozzá a következőket:
+
+ [mayor_munin]
+ user munin
+ timeout 60
+ env.host naplo.iskolaneve.hu
+ env.db_user mayor-munin
+ env.db_pass <;erős_jelszó>
+ env.db_host localhost
+ env.t_active 10
+
+ [mayor_munin]
+ user >>A felhasználó, amelyik neve alatt a munin futtatja a scriptet<<
+ timeout >>A munin ennyi ideig várjon a script lefutására<<
+ env.host >>A napló web-címe<<
+ env.db_user >>Az adatbázishoz használt felhasználónév<<
+ env.db_pass >>Az adatbázishoz használt jelszó<<
+ env.db_host >>Ahol a mayor mysql szervere elérhető<<
+ env.t_active >>Mennyi percet számoljon a tétlenségnek<<
+
+* (b.) Vagy lehetőségünk van mindezeket a script fejlécében is beáálítani,
+ akkor nem szükséges a **/etc/munin/plugin-conf.d/munin-node** fájl szerkesztése.
+
+* (c.) Debian 10-től lehetőség van a mysql-nél úgynevezett **unix-shocket** hitelesítésre is.
+ Ez alapból a **root**-nak van bekapcsolva, előnye, hogy sehol sem kell kiolvasható jelszót
+ használni, a mysql egyszerűen az oprendszerhez hitelesíti a bejelentkező felhasználót.
+ (Értelemszerűen ez csak "locahost"-ra működik.)
+
+ * Az unix_shocket használtaához állítsuk be az alábbiakat:
+ (Ekkor a root lesz a mysql felhasználó, számára nem kell külön engedélyezni a mayor_login
+ táblából való olvasást, viszont ekkor a munin-nak is root-ként kell futtatnia a scriptet.)
+
+ [mayor_munin]
+ user root
+ env.host naplo.iskolaneve.hu
+ env.db_user root
+ #env.db_pass
+ env.db_host localhost
+ env.t_active 10
+
+4. Utána másoljuk a **mayor_munin.php** 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!
+ (A Munin-nak futtatási jog kell, illetve nehogy valami kiolvassa a jelszót)
+
+
+5. Végül el kell helyezni egy simlink-et a **/etc/munin plugins**
+ könyvtárba, ami a bemásolt fájlra mutat.
+ >>> ln -s /usr/share/munin/plugins/mayor_munin.php /etc/munin/plugins/munin/mayor_munin
+
+
+6. 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
+
+7. 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
+
diff --git a/egyéb/munin/mayor_munin.php b/egyéb/munin/mayor_munin.php
index 92fc264d..dfb92efc 100755
--- a/egyéb/munin/mayor_munin.php
+++ b/egyéb/munin/mayor_munin.php
@@ -1,19 +1,26 @@
#!/usr/bin/env php
<?php
-
+$ret = array();
+$set['host'] = getenv('host');
+$set['db_user'] = strval(getenv('db_user'));
+$set['db_pass'] = strval(getenv('db_pass'));
+$set['db_db'] = "mayor_login";
+$set['db_host'] = strval(getenv('db_host'));
+$set['t_active'] = intval(getenv('t_active'));
+/*
$set['db_user'] = "mayor-munin";
$set['db_pass'] = "";
$set['db_db'] = "mayor_login";
$set['db_host'] = "localhost";
-$set['naplo_host'] = "mayor.iskolaneve.hu";
+$set['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"){
+if (isset($argv[1]) and $argv[1] == "config"){
- $cf = "host_name ".$set['naplo_host']."\n";
+ $cf = "host_name ".$set['host']."\n";
$cf .= "graph_title Napló rendszerterhelés (Mayor)\n";
$cf .= "graph_args --base 1000 \n";
$cf .= "graph_vlabel db/fő\n";
@@ -22,100 +29,139 @@ if (isset($argv[1]) and $argv[1] == "config"){
$cf .= "mayor_ip_sum.label Összes\n";
$cf .= "mayor_ip_sum.draw AREA\n";
- $cf .= "mayor_ip_sum.info Összes\n";
+ $cf .= "mayor_ip_sum.info Összes bejelentkezett felhasználó +(a villámgyorsak)\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_k.info Külső IP címről\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_ip_b.info Belső IP címről\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_pri.info Policy privát\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_p_par.info Policy parent\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_t1.info Aktív felhasználók az elmúlt ".$set['t_active']."percben\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_t2.info Aktív felhasználók az elmúlt ".($set['t_active']*2)."percben\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";
+ $cf .= "mayor_a_tt.info Tétlen, de bejelentkezett felhasználók\n";
+
+ $cf .= "mayor_villam.label Villámgyors\n";
+ $cf .= "mayor_villam.draw LINE1\n";
+ $cf .= "mayor_villam.info Azok a villámgyors felhasználók, akik kevesebb mint 5 perc alatt, be, és ki is jelentkeztenk.\n";
+
+ $cf .= "mayor_s_len.label Sikertelen\n";
+ $cf .= "mayor_s_len.draw LINE1\n";
+ $cf .= "mayor_s_len.info Sikertelen bejelentkezések\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_sum'] = 0;
$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;
+ $ret['a_tt'] = 0;
+ $ret['villam'] = 0;
+ $ret['s_len'] = 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";
-
+ // echo "hiba\n ";
+ $ret['ip_sum'] = "U";
+ $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";
+ $ret['villam'] = "U";
+ $ret['s_len'] = "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; ");
+ 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 UNIX_TIMESTAMP(loginLog.dt) >= (UNIX_TIMESTAMP()-36000)
+ AND ( ABS(UNIX_TIMESTAMP(session.dt) - UNIX_TIMESTAMP(loginLog.dt))<2
+ AND session.userAccount=loginLog.userAccount ) AND loginLog.flag=0
+ GROUP BY session.sessionId ORDER BY activity ;"
+ );
+ while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
+ if($row['policy'] == "private") {
+ $ret['p_pri'] ++;
+ }
+ if($row['policy'] == "parent") {
+ $ret['p_par'] ++;
+ }
- 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']++ ;
+ 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']++ ;
+ }
+
+ $ret['ip_sum']++; //Mindenki
}
+ @mysqli_free_result($r);
+
+ $r = mysqli_query($l,"SELECT COUNT(*) AS cnt FROM loginLog
+ WHERE UNIX_TIMESTAMP(dt) >= (UNIX_TIMESTAMP() - 300)
+ AND userAccount NOT IN (SELECT userAccount FROM session)
+ AND flag=0
+ ORDER BY dt desc ;"
+ );
+ $ret['villam'] = mysqli_fetch_array($r, MYSQLI_ASSOC)['cnt'];
+ $ret['ip_sum'] += $ret['villam'];
+ @mysqli_free_result($r);
+
+
+ $r = mysqli_query($l,"SELECT COUNT(*) AS cnt FROM loginLog
+ WHERE UNIX_TIMESTAMP(dt) >= (UNIX_TIMESTAMP() - 300)
+ AND userAccount NOT IN (SELECT userAccount FROM session)
+ AND flag!=0
+ ORDER BY dt desc ;"
+ );
+ $ret['s_len'] = mysqli_fetch_array($r, MYSQLI_ASSOC)['cnt'];
+ @mysqli_free_result($r);
}
- }
- @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_ip_sum.value ".($ret['ip_sum'])."\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" ;
+ 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" ;
+ echo "mayor_villam.value ".$ret['villam']."\n". "mayor_s_len.value ".$ret['s_len']."\n";
- } else{
+ } else{ // függvény/PHP hiány külön kezelve
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";
+ echo "mayor_villam.value U\n". "mayor_s_len.value U\n";
}
}
diff --git a/egyéb/nextcloud/README b/egyéb/nextcloud/README
index 85eb8da5..cac6a972 100644
--- a/egyéb/nextcloud/README
+++ b/egyéb/nextcloud/README
@@ -1,4 +1,4 @@
-
+
Nextcloud(13) - Mayor script
Ezen script segítségével a Mayor-naplóból tudunk felhasználókat és csoportokat importálni a Nextcloud felhőbe,
diff --git a/egyéb/nextcloud/mayor-ldap.php b/egyéb/nextcloud/mayor-ldap.php
new file mode 100644
index 00000000..0fbd5177
--- /dev/null
+++ b/egyéb/nextcloud/mayor-ldap.php
@@ -0,0 +1,1953 @@
+#!/usr/bin/php
+<?php
+
+$cfg = array();
+////////////////////////////////////////////// Figyelem! az alábbi konfig automatikusan külön fájból töltődik, ha létezik a "mayor-nextcloud.cfg.php" fájl!! /////////////////////////////////
+$cfg['db_host'] = "localhost";
+$cfg['db_port'] = "3306";
+$cfg['db_user'] = "root";
+$cfg['db_pass'] = "";
+$cfg['db_m2n_db'] = "mayor_to_nextcloud";
+$cfg['db_m2n_prefix'] = "m2n_";
+$cfg['db_nxt_dbname'] = "Nextcloud";
+$cfg['db_nxt_prefix'] = "oc_";
+//$cfg['db_mayor_host'] = "";
+//$cfg['db_mayor_port'] = "";
+//$cfg['db_mayor_user'] = "";
+//$cfg['db_mayor_pass'] = "";
+
+$cfg['min_evfolyam'] = 1;
+$cfg['isk_rovidnev'] = "rovid";
+$cfg['csoport_prefix'] = "(tk) ";
+$cfg['default_email'] = "indulo@iskola.hu";
+//$cfg['default_passw'] = "EHYmGktzrdfS7wxJR6DFqxjJ"; //Megszűnt -> Helyette random jelszót generál
+$cfg['always_set_diak_quota'] = false;
+$cfg['default_quota'] = "10GB";
+$cfg['diak_quota'] = "2GB";
+$cfg['min_osztalyok'] = array(); //pl: array('9.a','11.a');
+$cfg['csoportnev_hossz'] = 40;
+$cfg['felhasznalo_hossz'] = 45;
+$cfg['megfigyelo_user'] = "naplo_robot"; //ha nem kell, akkor állítsd üres stringre.
+$cfg['kihagy'] = array(); //pl: array('Trap.Pista', 'Ebeed.Elek', '22att')
+$cfg['default_lang'] = "hu";
+$cfg['manage_groups'] = true;
+$cfg['manage_groupdirs'] = false; // Foglalkozzon-e a script a tankörmappákkal
+$cfg['groupdir_prefix'] = "tavsuli";
+$cfg['groupdir_users'] = array("naplo_robot","123abcd"); //Ha mindenkire -> =array(); //(legyen üres)
+$cfg['mindenki_csop'] = "naplós_felhasználók";
+$cfg['mindenki_tanar'] = "naplós_tanárok";
+$cfg['mindenki_diak'] = "naplós_diákok";
+$cfg['allapot_tartas'] = "2018-06-14"; //A jelölt napnak megfelelő állapot betöltése minden futtatáskor, ha nem kell, akkor állítsd üresre!;
+$cfg['infotxt_szöveg'] = "info.txt";
+$cfg['verbose'] = 3 ;
+
+
+
+$cfg['ldap_server'] = "ldaps://windows.iskola.hu:636"; //Jelszóváltoztatást csak TLS/SSL porton enged a windows!
+$cfg['ldap_reqCert'] = "allow"; // Ellenőrizze-e a certet: "true" "allow" "never"
+$cfg['ldap_baseDn'] = "DC=ad,DC=iskola,DC=hu";
+//$cfg['ldap_groupOuName'] = "";
+$cfg['ldap_rootBindDn'] = "CN=LDAP_ADATCSERE_ADMIN,CN=Users,DC=ad,DC=iskola,DC=hu";
+$cfg['ldap_rootBindPw'] = "<password>";
+$cfg['ldap_pageSize'] = 100;
+$cfg['ld_username'] = "sAMAccountName";
+$cfg['ld_groupname'] = "sAMAccountName";
+$cfg['ld_oId'] = "telephoneNumber"; //"serialNumber";
+$cfg['ld_employeeId'] = "employeeNumber";
+$cfg['ld_osztalyJel'] = "department";
+$cfg['ld_viseltNevElotag'] = "initials";
+$cfg['ld_viseltCsaladinev'] = "sn";
+$cfg['ld_viseltUtonev'] = "givenName";
+$cfg['ld_lakhelyOrszag'] = "st";
+$cfg['ld_lakhelyHelyseg'] = "l";
+$cfg['ld_lakhelyIrsz'] = "postalCode";
+$cfg['ld_lakHely'] = "streetAddress";
+$cfg['ld_telefon'] = "homePhone";
+$cfg['ld_mobil'] ="mobile";
+$cfg['ld_statusz'] = "company";
+$cfg['ld_beoszt'] = "title";
+$cfg['ld_nxtQuota'] = "description";
+$cfg['ld_leiras'] = "description";
+$cfg['ld_iroda'] = "physicalDeliveryOfficeName";
+$cfg['ld_info'] = "info";
+$cfg['csoport_oupfx'] = "mayor";
+$cfg['manage_users'] = true;
+
+
+$occ_path = "/var/www/nextcloud/";
+$occ_user = "www-data";
+$nxt_version = 0;
+$printhelp = false;
+$printconfig = false;
+$printpasswds = false;
+$dryrun = false;
+$debug = false;
+
+$cfgfile = realpath(pathinfo($argv[0])['dirname'])."/"."mayor-nextcloud.cfg.php"; // A fenti konfig behívható config fájlból is, így a nextcloud-betöltő (ez a php) szerkesztés nélkül frissíthető.
+// 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');
+$pwchars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_?";
+$ldap_group_attrs = array('objectCalss', 'samaccountname', 'cn', 'member', 'name', 'description', 'info', 'mail', 'gidNumber', 'samaccounttype', 'instancetype', );
+$ldap_user_attrs = array('sn', 'serialNumber', 'c', 'l', 'st', 'street', 'title', 'description', 'postalAddress', 'postalCode', 'postOfficeBox', 'physicalDeliveryOfficeName',
+ 'telephoneNumber', 'facsimileTelephoneNumber', 'givenName', 'initials', 'otherTelephone', 'info', 'memberOf', 'otherPager', 'co', 'department',
+ 'company', 'streetAddress', 'otherHomePhone', 'wWWHomePage', 'employeeNumber', 'employeeType', 'personalTitle', 'homePostalAddress', 'name','accountExpires',
+ 'countryCode', 'employeeID', 'homeDirectory', 'comment', 'sAMAccountName', 'division', 'otherFacsimileTelephoneNumber', 'otherMobile', 'lastLogon',
+ 'primaryTelexNumber', 'otherMailbox', 'ipPhone', 'otherIpPhone', 'url', 'uid', 'mail', 'roomNumber', 'homePhone', 'mobile', 'pager', 'lastLogonTimestamp',
+ 'jpegPhoto', 'departmentNumber', 'middleName', 'thumbnailPhoto', 'preferredLanguage', 'uidNumber', 'gidNumber', 'unixHomeDirectory', 'loginShell'
+ );
+
+
+
+
+
+for($i = 1; $i<$argc; $i++){ //Ha van külön config megadva, akkor először azt töltjük be.
+ if($argv[$i] == "--config-file" ){$cfgfile = strval($argv[$i+1]); $i++;}
+}
+if(file_exists($cfgfile) === TRUE){ $cfg_o = $cfg; include($cfgfile); $cfg_n = $cfg; $cfg = array_merge($cfg, $cfg_o, $cfg_n); } //Config betöltés
+if(!empty($m2n)){ $cfg = array_merge($cfg, $m2n); } //Ha valahol még a régi config lenne
+
+
+for($i = 1; $i<$argc; $i++){ // Kézzel felülbírált config opciók
+ if($argv[$i] == "--help" ){$printhelp = true;}
+ if($argv[$i] == "--debug" ){$debug = true;}
+ if($argv[$i] == "--loglevel" and is_numeric($argv[$i+1])){$cfg['verbose'] = intval($argv[$i+1]); $i++;}
+ if($argv[$i] == "--set-diak-quota" ){ $cfg['always_set_diak_quota'] = true; }
+ if($argv[$i] == "--create-groupdir"){ $cfg['groupdir_users'] = array($argv[$i+1]); $i++;}
+ if($argv[$i] == "--manage-groupdirs" and is_string($argv[$i+1])){$cfg['manage_groupdirs'] = boolval($argv[$i+1]); $i++;}
+ if($argv[$i] == "--manage-groups" and is_string($argv[$i+1])){$cfg['manage_groups'] = boolval($argv[$i+1]); $i++;}
+ if($argv[$i] == "--allapot-tartas" and is_string($argv[$i+1])){$cfg['allapot_tartas'] = strval($argv[$i+1]); $i++;}
+ if($argv[$i] == "--print-passwords" ){ $printpasswds = true; }
+ if($argv[$i] == "--print-config" ){ $printconfig = true; }
+ if($argv[$i] == "--dry-run" ){ $dryrun = true; }
+}
+
+function print_help(){
+ echo "".phpv()." mayor-nextcloud.php [kapcsolók] \n";
+ echo "Kapcsolók: (felülbírálja a configot!)\n";
+ echo " --help : Help kiírása. \n";
+ echo " --debug : Ugyanaz mint a \"--loglevel 100\" \n";
+ echo " --config-file : Konfig fájl elérési útvonala.\n";
+ echo " --loglevel x : A bőbeszédűséget/logolást tudjuk ezzel szabályozni, ekkor ez az érték érvényesül, nem a configban megadott. \n";
+ echo " --set-diak-quota : Az összes diák qvótáját átállítja az \"\$cfg['diak_quota'] = x\" -nél megadott értékre, \n";
+ echo " csak kézzel futtatva működik, az automatikus, napi futtatásban nicns benne.\n";
+ echo " --create-groupdir <username>: A távoktatást segítő könyvtárstruktúrát csak az <username> felhasználónak hozza létre, \n";
+ echo " illetve kapcsoló nélküli híváskor, automatikusan, a napi futásban, esténként az összes tanárnak egyszerre.\n";
+ echo " --manage-groups <1/0> : Ha 1: A felhasználókat csoportokba rendezi a MaYor tankörök szerint, ha 0, nem foglalkozik vele.\n";
+ echo " --manage-groupdirs <1/0> : Ha 1: tankörmappákat hoz létre a tankör-csoportokhoz, ha 0, nem foglalkozik vele. (kell hozzá a --manage-groups is!)\n";
+ echo " --print-config : A betöltött konfig kiírása a konzolra.\n";
+ echo " --print-passwords : A létrehozott felhasználóknál a jelszavakat is megjeleníti a konzolon.\n";
+ echo " --dry-run : Csak megmutatja, de nem végzi el a változtatásokat.\n";
+ echo "\n\n";
+}
+
+
+function phpv() { //Az aktuális php verzió lekérdezése
+ $v = explode('.', phpversion());
+ return "php".$v[0].".".$v[1];
+}
+
+function rndstr($l, $chs) { //Ál-Véletlen stringet generál
+ return substr(str_shuffle($chs), 0, $l);
+}
+
+function gen_password($l = 12, $inp = array()){
+ global $pwchars;
+ return rndstr($l, $pwchars);
+}
+
+function gen_username($inp){ //Felhasználónevet generál
+ global $search, $replace;
+ $ret = str_replace($search, $replace, $inp['userAccount']); // (pl: Á->Aa, á->aa, ...)
+ return $ret;
+}
+
+function rmnp($str){ //Remove non-printable
+ return preg_replace('/[\x00-\x1F\x7F-\xA0\xAD]/u', '', $str);
+}
+
+function escp($str){ //Escape strings
+ $str = str_replace(array("\\","`", "\'", "\"" ),array("\\\\", "\`", "\\\'", "\\\""), $str);
+ return escapeshellarg($str);
+}
+
+function rnescp($str){ //Escape strings
+ $str = rmnp($str);
+ $str = escapeshellarg($str);
+ $str = str_replace(array("\\", "`", "'", "\"", "\ ", ), array("", "", "", "", "_", ), $str);
+ return $str;
+}
+
+
+
+if (function_exists('mysqli_connect') and function_exists('iconv') and function_exists('ldap_search') and version_compare(phpversion(), '5.0', '>=')) { //MySQLi (Improved) és php7 kell!
+
+ function db_connect($db = ""){
+ global $log,$cfg;
+ if ($log['verbose'] > 0 ){ echo "***\tAdatbázis kapcsolódás. (db='".$db."')\n"; }
+ $l = mysqli_connect($cfg['db_host'], $cfg['db_user'], $cfg['db_pass'], $db, $cfg['db_port']);
+ if(!$l){
+ if ($log['verbose'] > 0 ){ echo "*\tAdatbázis kapcsolat újrapróbálása... (db=''), info:".mysqli_connect_errno()."\n\n"; }
+ $db = "";
+ $l = mysqli_connect($cfg['db_host'], $cfg['db_user'], $cfg['db_pass'], $db, $cfg['db_port']);
+ if(!$l){
+ echo "\n**** Sikertelen kapcsolódás! **** (db='".$db."') info:".mysqli_get_host_info($l)."\n\n";
+ return null; //Hiba esetén visszatér
+ }
+ }
+ if ($log['verbose'] > 0 ){ echo "*\tSikeres kapcsolódás. (db='".$db."') info:".mysqli_get_host_info($l)."\n\n"; }
+ mysqli_set_charset($l, "utf8");
+ mysqli_query($l, "SET NAMES utf8 COLLATE utf8_general_ci;" );
+ return $l; //Egyébként a sikeressel tér vissza
+ }
+ // bezár: mysqli_close($link);
+
+
+
+ function ldap_open($host = ""){
+ global $cfg, $log;
+
+ if(empty($host)){
+ $host = $cfg['ldap_server'];
+ }
+ if ($log['verbose'] > 0 ){ echo "***\tLDAP kapcsolódás. ('".$host."')\n"; }
+ $ld = ldap_connect($host);
+
+ if($ld !== False){
+
+ if($cfg['ldap_reqCert'] == "never"){ //Mennyire legyen szigorú a CERT-ekkel
+ ldap_set_option($ld, LDAP_OPT_X_TLS_REQUIRE_CERT, LDAP_OPT_X_TLS_NEVER);
+ } else if($cfg['ldap_reqCert'] == "allow"){
+ ldap_set_option($ld, LDAP_OPT_X_TLS_REQUIRE_CERT, LDAP_OPT_X_TLS_ALLOW);
+ } else if($cfg['ldap_reqCert'] == "true"){
+ ldap_set_option($ld, LDAP_OPT_X_TLS_REQUIRE_CERT, LDAP_OPT_X_TLS_HARD);
+ } else {
+ ldap_set_option($ld, LDAP_OPT_X_TLS_REQUIRE_CERT, LDAP_OPT_X_TLS_TRY);
+ }
+ ldap_set_option($ld, LDAP_OPT_NETWORK_TIMEOUT, 10); //Szerver felülbírálhatja
+ ldap_set_option($ld, LDAP_OPT_PROTOCOL_VERSION, 3);
+ ldap_set_option($ld, LDAP_OPT_REFERRALS, 0); //Így azért gyorsabb
+ ldap_set_option($ld, LDAP_OPT_MATCHED_DN, $cfg['ldap_baseDn']); //Jobb, ha mindjárt az elején beállítjuk
+
+ if(ldap_bind($ld, $cfg['ldap_rootBindDn'], $cfg['ldap_rootBindPw']) === FALSE){
+ $ern = ldap_errno($ld);
+ echo "\n**** Sikertelen kapcsolódás! **** ('".$host."') info:".ldap_err2str($ern)." [$ern] \n\n";
+ return null;
+ } else {
+ if ($log['verbose'] > 0 ){ echo "*\tSikeres kapcsolódás. ('".$host."') info:".ldap_error($ld)."\n\n"; }
+ return $ld;
+ }
+ } else {
+ echo "\n**** Sikertelen kapcsolódás! **** ('".$host."') info:".ldap_error($ld)."\n\n";
+ return null;
+ }
+ }
+ // bezár: ldap_close($ldap);
+
+
+ function ldap_find($ld, $base, $filt, $attr=array()){
+ global $cfg, $log;
+ $ret = array();
+ $cookie = '';
+ $errn = $mdn = $errmsg = $refs = $ctrl = null;
+ ldap_set_option($ld, LDAP_OPT_PROTOCOL_VERSION, 3);
+
+ if(version_compare(phpversion(), '7.4', '<')){ //PHP 5-7
+ do {
+ if ($log['verbose'] > 7 ){ echo "LDAP ->\t ldap_search('".$ld."', '".$base."', '".$filt."', \$attr, 0, 0, 0, LDAP_DEREF_NEVER);\n Attr: "; print_r($attr); }
+ ldap_control_paged_result($ld, $cfg['ldap_pageSize'], true, $cookie);
+ $res = ldap_search($ld, $base, $filt, $attr, 0, 0, 0, LDAP_DEREF_NEVER);
+ ldap_parse_result($ld, $res, $errn , $mdn , $errmsg , $refs, $ctrl);
+ if($errn == 0){
+ $ret = array_merge($ret, ldap_get_entries($ld, $res));
+ } else {
+ echo "\nLDAP ->\t ******** Ldap ('".$ld."', '".$base."', '".$filt."') lekérdezési hiba. (Infó: [".$errn."]".$errmsg."!) ********";
+ }
+ ldap_control_paged_result_response($ld, $res, $cookie);
+ } while($cookie !== null && $cookie != '');
+
+ } else { //PHP 8+
+ do {
+ if ($log['verbose'] > 7 ){ echo "LDAP ->\t ldap_search('".$ld."', '".$base."', '".$filt."', \$attr, 0, 0, 0, LDAP_DEREF_NEVER, \$ctrl);\n Attr: "; print_r($attr); }
+ $ctrl = array(array('oid' => LDAP_CONTROL_PAGEDRESULTS, 'iscritical' => true, 'value' => array('size' => $cfg['ldap_pageSize'], 'cookie' => $cookie)));
+ $res = ldap_search($ld, $base, $filt, $attr, 0, 0, 0, LDAP_DEREF_NEVER, $ctrl);
+ ldap_parse_result($ld, $res, $errn , $mdn , $errmsg , $refs, $ctrl);
+ if($errn == 0){
+ $ret = array_merge($ret, ldap_get_entries($ld, $res));
+ } else {
+ echo "\nLDAP ->\t ******** Ldap ('".$ld."', '".$base."', '".$filt."') lekérdezési hiba. (Infó: [".$errn."]".$errmsg."!) ********";
+ }
+ if (isset($ctrl[LDAP_CONTROL_PAGEDRESULTS]['value']['cookie'])) { //újraküldéshez
+ $cookie = $ctrl[LDAP_CONTROL_PAGEDRESULTS]['value']['cookie'];
+ } else {
+ $cookie = '';
+ }
+ } while (!empty($cookie));
+ }
+ if ($log['verbose'] > 11 ){ $pr = $ret; for($i = 0; $i < $pr['count']; $i++){ $pr[$i]['jpegphoto'][0] = @base64_encode(@$pr[$i]['jpegphoto'][0]); $pr[$i]['thumbnailphoto'][0] = @base64_encode(@$pr[$i]['thumbnailphoto'][0]);} print_r($pr);}
+ if($res !== False){
+ ldap_free_result($res);
+ }
+ return $ret;
+ }
+
+
+ function attr_add_defaults($inp = array()){ //Attributes tömb feltöltése alapértékekkel
+ global $cfg, $log;
+ $ovr = array();
+
+ if(!empty($inp['email'])) {
+ $ovr['email'] = $inp['email'];
+ } else if(!empty($inp['mail'])){
+ $ovr['email'] = $inp['mail'];
+ } else {
+ $ovr['email'] = $cfg['default_email'];
+ }
+ $def = array('mail','oId', 'employeeId', 'osztalyJel', 'viseltNevElotag', 'viseltCsaladinev','viseltUtonev',
+ 'szuletesiHely', 'szuletesiIdo', 'lakhelyOrszag', 'lakhelyHelyseg', 'lakhelyIrsz', 'lakHely',
+ 'telefon', 'mobil', 'statusz', 'beoszt', 'quota', 'kezdoTanev', 'vegzoTanev', 'jel', 'diakId',
+ 'tanarId', 'beDt', 'kiDt', 'beEv', 'userAccount', 'fullName',
+ );
+ $defo = array('oId' => "11111111111", 'quota' => $cfg['default_quota'], 'jel' => 'x', 'vegzoTanev' => -1, 'beDt' => -1,
+ 'kezdoTanev' => -1, 'diakId' => 0, 'tanarId' => 0, 'kiDt' => -1, 'beEv' => -1,
+ );
+ return array_merge($def, $defo, $inp, $ovr);
+ }
+
+
+
+function ld_user_info($l, $userAccount, $attrs = array()){ //Csak a fontosabb tulajdonságokkal
+ global $cfg,$log,$ldap_user_attrs;
+ if(empty($attrs)){
+ $attrs = $ldap_user_attrs;
+ }
+ $ret = array();
+
+ if($log['verbose'] > 7){ echo "LDAP ->\tldap_find('".$l."', '".$cfg['ldap_baseDn']."', '(&(|(|(objectClass=person)(objectClass=organizationalPerson))(objectClass=user))(".$cfg['ld_username']."=".ldap_escape($userAccount, "", LDAP_ESCAPE_FILTER)."))', \$attrs);\n"; }
+ if($log['verbose'] > 11 ){ echo "\$attrs = "; print_r($attrs); }
+ $users = ldap_find($l, $cfg['ldap_baseDn'], "(&(|(|(objectClass=person)(objectClass=organizationalPerson))(objectClass=user))(".$cfg['ld_username']."=".ldap_escape($userAccount, "", LDAP_ESCAPE_FILTER).") )", $attrs);
+ if ($log['verbose'] > 11 ){ $pr = $users; for($i = 0; $i < $users['count']; $i++){ $pr[$i]['jpegphoto'][0] = base64_encode($pr[$i]['jpegphoto'][0]); $pr[$i]['thumbnailphoto'][0] = base64_encode($pr[$i]['thumbnailphoto'][0]); } echo "Users: "; print_r($pr); }
+
+ return $users;
+}
+
+
+function ld_find_group($l, $groupName, $scope, $attrs = array()){
+ global $cfg,$log,$ldap_group_attrs;
+ if(empty($attrs)){
+ $attrs = $ldap_group_attrs;
+ }
+ $ret = array();
+ $dn = "";
+
+ if(empty($scope) or $scope == "own"){ //A Script saját csoportjai között
+ $dn = "OU=".ldap_escape($cfg['isk_rovidnev']."-".$cfg['csoport_oupfx'], "", LDAP_ESCAPE_DN).",".$cfg['ldap_baseDn'];
+ if($log['verbose'] > 7){ echo "LDAP ->\tldap_find('".$l."', '".$dn."', '(&(objectClass=group)(cn=".ldap_escape($groupName, "", LDAP_ESCAPE_FILTER).")', \$attrs);\n"; } if ($log['verbose'] > 11 ) { echo "Attr: "; print_r($attrs); }
+ $ret[1] = ldap_find($l, $dn, "(&(objectClass=group)(cn=".ldap_escape($groupName, "", LDAP_ESCAPE_FILTER)."))", $attrs );
+ } else if($scope == "global"){ //Egész szerveren
+ $dn = $cfg['ldap_baseDn'];
+ if($log['verbose'] > 7){ echo "LDAP ->\tldap_find('".$l."', '".$dn."', '(&(objectClass=group)(cn=".ldap_escape($groupName, "", LDAP_ESCAPE_FILTER).")', \$attrs);\n"; } if ($log['verbose'] > 11 ) { echo "Attr: "; print_r($attrs); }
+ $ret[1] = ldap_find($l, $dn, "(&(objectClass=group)(cn=".ldap_escape($groupName, "", LDAP_ESCAPE_FILTER)."))", $attrs );
+ } else { //Csak a megadott DN-ben (OU)
+ $dn = $scope;
+ if($log['verbose'] > 7){ echo "LDAP ->\tldap_find('".$l."', '".$dn."', '(&(objectClass=group)(cn=".ldap_escape($groupName, "", LDAP_ESCAPE_FILTER).")', \$attrs);\n"; } if ($log['verbose'] > 11 ) { echo "Attr: "; print_r($attrs); }
+ $ret[1] = ldap_find($l, $dn, "(&(objectClass=group)(cn=".ldap_escape($groupName, "", LDAP_ESCAPE_FILTER)."))", $attrs );
+ }
+ $ret[4] = $dn;
+
+ return $ret;
+}
+
+
+ function ld_user_add($l, $userAccount, $fullname, $attr=array()){
+ global $cfg,$log;
+ $attrs = $ret = array();
+
+
+ $attr = attr_add_defaults($attr);
+ if(!empty($fullname) ){ $attrs['displayname'][0] = $fullname;}
+ else if(!empty($attr['fullName']) ){ $attrs['displayname'][0] = $attr['fullName'];}
+ else { $attrs['displayname'][0] = $userAccount;}
+
+ $dn = "CN=".ldap_escape($userAccount, "", LDAP_ESCAPE_DN).",CN=Users,".$cfg['ldap_baseDn']; //Ezt még lehetne cizellálni
+
+ $attrs['objectclass'][0] = "top"; //Alap dolgok, ami mindenképpen kell
+ $attrs['objectclass'][1] = "person";
+ $attrs['objectclass'][2] = "organizationalPerson";
+ $attrs['objectclass'][3] = "user";
+ $attrs['instancetype'][0] = "4";
+ $attrs['useraccountcontrol'][0] = "514";
+ $attrs['accountexpires'][0] = "9223372036854775807"; // vagy "0"
+ $attrs['distinguishedname'][0] = $dn;
+ $attrs[strtolower($cfg['ld_username'])][0] = $userAccount;
+
+ $attrs['mail'][0] = $attr['email'];
+ $attrs[strtolower($cfg['ld_oId'])][0] = $attr['oId'];
+ $attrs[strtolower($cfg['ld_employeeId'])][0] = $attr['employeeId'];
+ $attrs[strtolower($cfg['ld_osztalyJel'])][0] = $attr['osztalyJel'];
+ $attrs[strtolower($cfg['ld_viseltNevElotag'])][0] = $attr['viseltNevElotag'];
+ $attrs[strtolower($cfg['ld_viseltCsaladinev'])][0]= $attr['viseltCsaladinev'];
+ $attrs[strtolower($cfg['ld_viseltUtonev'])][0] = $attr['viseltUtonev'];
+ $attrs[strtolower($cfg['ld_lakhelyOrszag'])][0] = @$attr['lakhelyOrszag'];
+ $attrs[strtolower($cfg['ld_lakhelyHelyseg'])][0] = $attr['lakhelyHelyseg'];
+ $attrs[strtolower($cfg['ld_lakhelyIrsz'])][0] = $attr['lakhelyIrsz'];
+ $attrs[strtolower($cfg['ld_lakHely'])][0] = $attr['lakHely'];
+ $attrs[strtolower($cfg['ld_telefon'])][0] = $attr['telefon'];
+ $attrs[strtolower($cfg['ld_mobil'])][0] = $attr['mobil'];
+ $attrs[strtolower($cfg['ld_statusz'])][0] = $attr['statusz'];
+ $attrs[strtolower($cfg['ld_beoszt'])][0] = $attr['beoszt'];
+ $attrs[strtolower($cfg['ld_nxtQuota'])][0] = $attr['quota'];
+ $attrs[strtolower($cfg['ld_iroda'])][0] = "MaYor-Script-Managed";
+ $attrs[strtolower($cfg['ld_info'])][0] = "Jogviszony kezdete: ".($attr['kezdoTanev'])."\r\nJogviszony terv. vége: ".($attr['vegzoTanev']+1)." Június\r\n\r\n(Generated-by MaYor-LDAP Script.)\r\n(Updated: ".date('Y-m-d H:i:s').")\r\n";
+ //$attrs[strtolower($cfg['ld_'])][0] = $attr[''];
+
+ foreach($attrs as $key => $val){ //Üresek kipucolása
+ if($key == "" or $val[0] == ""){ unset($attrs[$key]); }
+ }
+ $ret[4] = $dn;
+ $ret[5] = $attrs;
+
+ if($log['verbose'] > 7){ echo "LDAP ->\tldap_add('".$l."', '".$dn."', \$attrs)\n"; } if ($log['verbose'] > 11 ){ echo "Attr: "; print_r($attrs); }
+
+ $ret[0] = @ldap_add($l, $dn, $attrs);
+ $ret[2] = ldap_errno($l);
+ $ret[3] = ldap_err2str($ret[2]);
+ if($ret[0] === true){ //Sikeres volt a létrehozás
+ unset($attrs); //Attr tisztítása
+ $ret[1] = gen_password(16); //Jelszó
+ $attrs[strtolower('unicodePwd')][0] = iconv( "UTF-8", "UTF-16LE", "\"".$ret[1]."\"" );
+ if($log['verbose'] > 7){ echo "LDAP ->\tldap_mod_replace('".$l."', '".$dn."', \$attrs)\n"; } if ($log['verbose'] > 11 ){ echo "Attr: "; print_r($attrs); }
+
+ if(!@ldap_mod_replace ($l, $dn, $attrs )){ //Jelszó beállítása
+ $ret[2] = ldap_errno($l);
+ $ret[3] = ldap_err2str($ret[2]);
+ echo "\nLDAP ->\t ******** LDAP Felhasználó jelszócsere hiba. (infó: [".$ret[2]."] ".$ret[3]."!) ********\n";
+ return $ret;
+ }
+ unset($attrs); //User Engedélyezése
+ $attrs[strtolower('userAccountControl')][0] = 512;
+ if(!@ldap_mod_replace ($l, $dn, $attrs )){
+ $ret[2] = ldap_errno($l);
+ $ret[3] = ldap_err2str($errn);
+ echo "\nLDAP ->\t ******** LDAP Felhasználó jelszócsere hiba. (infó: [".$ret[2]."] ".$ret[3]."!) ********\n";
+ return $ret;
+ }
+ } else {
+ echo "\nLDAP ->\t ******** LDAP Felhasználó létrehozási hiba. (infó: [".$ret[2]."] ".$ret[3]."!) ********\n";
+ }
+ return $ret;
+ }
+
+
+
+ function ld_user_del($l, $userAccount){
+ global $cfg, $log;
+ $ret = array();
+ $attrs = array(strtolower($cfg['ld_username']), 'lastLogonTimestamp', 'samaccountname', 'physicalDeliveryOfficeName', 'displayName', 'cn');
+
+ $user = ld_user_info($l, $userAccount, $attrs);
+ if ($log['verbose'] > 0 ){ echo "\$user = "; print_r($user); }
+
+ for($i = 0; $i < $user['count']; $i++){ //Az összeset, ha több? lenne.
+ if($user[$i][strtolower($cfg['ld_username'])][0] == $userAccount and !in_array($userAccount, $cfg['kihagy']) and $user[$i]['physicaldeliveryofficename'][0] == "MaYor-Script-Managed" ){ //Biztonság kedvéért
+
+ if(!empty($user[$i][strtolower('lastLogonTimestamp')]) /*and $user[$i][strtolower('lastLogonTimestamp')][0] != "0"*/ ){ //Ha egyszer már belépett, letiltja
+
+ unset($attrs); //Letiltás
+ $attrs['useraccountcontrol'][0] = "514";
+ $ret[0] = ldap_mod_replace($l, $user[$i]['dn'], $attrs);
+ $ret[4] = $user[$i]['dn'];
+ $ret[2] = ldap_errno($l);
+ $ret[3] = ldap_err2str($ret[2]);
+ $ret[5] = $attrs;
+
+ } else { //Egyébként törli is
+ $ret[0] = @ldap_delete($l, $user[$i]['dn']);
+ $ret[4] = $user[$i]['dn'];
+ $ret[2] = ldap_errno($l);
+ $ret[3] = ldap_err2str($ret[2]);
+ }
+ } else { //Nem nyúl hozzá
+ echo "\nNem nyúl hozzá!\n";
+ }
+ }
+ if($i == 0){
+ $ret[3] = "LDAP ->\t ******** LDAP Felhasználó törlés hiba! (infó: FElhasználó nem található! [".$userAccount."]/[".$cfg['ldap_baseDn']."]) ********\n";
+ }
+ return $ret;
+
+ }
+
+/*
+ function user_del($userAccount){ // kitöröl vagy letilt egy felhasználót a Nextcloud-ban
+ global $occ_path,$occ_user,$log,$dryrun;
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." user:info ".escp($userAccount)." --output=json \"";
+ if($log['verbose'] > 7) { 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 \"".phpv()." ".escp($occ_path."/occ")." user:delete ".escp($userAccount)." \""; // Ha még soha nem lépett be
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ $ret = shell_exec($e); } else { $ret = true; } // akkor törölhető
+ if ($log['verbose'] > 11 ){ print_r($ret); }
+ } else {
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." user:disable ".escp($userAccount)." \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ $ret = shell_exec($e); } else { $ret = true; } // különben csak letiltja
+ if ($log['verbose'] > 11 ){ print_r($ret); }
+ }
+ }
+*/
+
+function ld_group_user_add($l, $groupName, $userAccount, $scope = null){
+ global $cfg,$log,$ldap_group_attrs,$ldap_user_attrs;
+ $ret = array(0 => true, 2 => 0);
+ //$attrs = $ldap_group_attrs;
+ $attrs = array('member', 'cn', strtolower($cfg['ld_groupname']));
+
+ $rv = ld_find_group($l, $groupName, $scope, $attrs);
+ $ret[4] = $dn = $rv[4];
+ $group = $rv[1];
+ $ret[5] = $attrs;
+ if ($log['verbose'] > 11 ){ echo "\$group = "; print_r($group); }
+
+ if(!empty($group) and $group['count'] == 1){ //Ha megvan a csoport //A felhasználókat viszont globálisan keresi!
+
+ $users = ld_user_info($l, $userAccount, array('dn'));
+
+ if(!empty($users) and $users['count'] == 1){
+ $userdn = $users[0]['dn'];
+ if(empty($group[0]['member']) or !in_array($userdn, $group[0]['member'])){
+ $ldif['member'] = $userdn;
+ $ret[0] = @ldap_mod_add($l, $group[0]['dn'], $ldif);
+ $ret[2] = ldap_errno($l);
+ $ret[3] = ldap_err2str($ret[2]);
+
+ unset($attrs); //Módosítási dátum frissítés
+ $attrs[strtolower($cfg['ld_info'])][0] = "(Generated-by MaYor-LDAP Script.)\r\n(Updated: ".date('Y-m-d H:i:s').")\r\n";
+ @ldap_mod_replace($l, $group[0]['dn'], $attrs);
+
+ //if ($log['verbose'] > 6 ){ echo "\nLDAP ->\t Felhasználó: [".$userAccount."] hozzáadva a: [".$groupName."]/[".$dn."] csoporthoz!\n"; }
+ } else {
+ //if ($log['verbose'] > 6 ) { echo "\nLDAP ->\t Felhasználó: [".$userAccount."] már benne volt a: [".$groupName."]/[".$dn."] csoportban!\n"; }
+ }
+ } else if($users['count'] > 1){ //Több user
+ $ret[0] = false;
+ $ret[3] = "LDAP ->\t ******** LDAP Csoporthoz adás hiba! (infó: Több ugyanolyan felhasználó a létezik! [".$userAccount."]/[".$cfg['ldap_baseDn']."]) ********\n";
+ echo $ret[3];
+ } else { //vagy nincs user
+ $ret[0] = false;
+ $ret[3] = "LDAP ->\t ******** LDAP Csoporthoz adás hiba! (infó: Nincs ilyen felhasználó! [".$userAccount."]/[".$cfg['ldap_baseDn']."]) ********\n";
+ echo $ret[3];
+ }
+ } else if($group['count'] > 1) { //Több csoport,
+ $ret[0] = false;
+ $ret[3] = "LDAP ->\t ******** LDAP Csoporthoz adás hiba! (infó: Több ugyanolyan csoport található! [".$groupName."]/[".$dn."]) ********\n";
+ echo $ret[3];
+ } else { ///vagy nincs csoport
+ $ret[0] = false;
+ $ret[3] = "LDAP ->\t ******** LDAP Csoporthoz adás hiba! (infó: Csoport nem található! [".$groupName."]/[".$dn."]) ********\n";
+ echo $ret[3];
+ }
+ return $ret;
+}
+
+
+
+function ld_group_user_del($l, $groupName, $userAccount, $scope = null){
+ global $cfg,$log,$ldap_group_attrs,$ldap_user_attrs;
+ $ret = array(0 => true, 2 => 0);
+ //$attrs = $ldap_group_attrs;
+ $attrs = array('member', 'cn', strtolower($cfg['ld_groupname']));
+ $dn = "";
+
+ $rv = ld_find_group($l, $groupName, $scope, $attrs);
+ $ret[4] = $dn = $rv[4];
+ $group = $rv[1];
+ $ret[5] = $attrs;
+ if ($log['verbose'] > 11 ){ echo "\$group = "; print_r($group); }
+
+ if(!empty($group) and $group['count'] == 1 ){ //Ha megvan a csoport //A felhasználókat viszont globálisan keresi!
+ for( $i = 0; (!empty($group[0]['member']) and $i < $group[0]['member']['count']); $i++ ){ //Memebereket végigkérdezi
+
+ if($log['verbose'] > 7){ echo "LDAP ->\tldap_find('".$l."', '".$group[0]['member'][$i]."', '', array('".strtolower($cfg['ld_username'])."'));\n"; }
+ $users = ldap_find($l, $group[0]['member'][$i], "(objectClass=*)", array(strtolower($cfg['ld_username']))); //lekérdezni egyesével a sAMAccountName-t
+ if ($log['verbose'] > 11 ) { echo "Users: "; print_r($users); }
+
+ if($users[0][strtolower($cfg['ld_username'])][0] == $userAccount){ //Ha ő az, törölni belőle
+ $ldif['member'] = $group[0]['member'][$i]; //vagy $users[0]['dn'];
+ if($log['verbose'] > 7){ echo "LDAP ->\tldap_mod_del('".$l."', '".$group[0]['dn']."', '', array('".'member'."' => '".$ldif['member']."'));\n"; }
+
+ $ret[0] = ldap_mod_del($l, $group[0]['dn'], $ldif);
+ $ret[2] = ldap_errno($l);
+ $ret[3] = ldap_err2str($ret[2]);
+
+ unset($attrs); //Módosítási dátum frissítés
+ $attrs[strtolower($cfg['ld_info'])][0] = "(Generated-by MaYor-LDAP Script.)\r\n(Updated: ".date('Y-m-d H:i:s').")\r\n";
+ @ldap_mod_replace($l, $group[0]['dn'], $attrs);
+
+ if($ret[0] === false ){
+ $errn = ldap_errno($l);
+ echo "\nLDAP ->\t ******** LDAP Csoportból törlés hiba! (infó: {".$groupName."/".$userAccount."} [".$errn."] ".ldap_err2str($errn)." ) ********\n";
+ }
+ }
+ }
+ if(empty($ldif)){ //Nem töröltünk senkit
+ $ret[3] = "LDAP ->\t Felhasználó: [".$userAccount."] nincs: [".$groupName."]/[".$dn."] csoportban!\n";
+ if ($log['verbose'] > 7 ){ echo $ret[3]; }
+ }
+
+ /*
+ //if($log['verbose'] > 7){ echo "LDAP ->\tldap_find('".$l."', '".$cfg['ldap_baseDn']."', '(&(|(|(objectClass=person)(objectClass=organizationalPerson))(objectClass=user))(".$cfg['ld_username']."=".ldap_escape($userAccount, "", LDAP_ESCAPE_FILTER)."))', array('dn'));\n"; }
+ //$users = ldap_find($l, $cfg['ldap_baseDn'], "(&(|(|(objectClass=person)(objectClass=organizationalPerson))(objectClass=user))(".$cfg['ld_username']."=".ldap_escape($userAccount, "", LDAP_ESCAPE_FILTER).") )" , array('memberOf'));
+ $users = ld_user_info($l, $userAccount, array('memberOf'));
+ //if ($log['verbose'] > 11 ) { echo "Users: "; print_r($users); }
+
+ if(!empty($users) and $users['count'] == 1){ //Csak 1db user van
+ $userdn = $users[0]['dn'];
+ if(in_array($userdn, $group[0]['member'])){
+ $ldif['member'] = $userdn;
+ $ret[0] = @ldap_mod_del($l, $group[0]['dn'], $ldif);
+ $ret[2] = $errn = ldap_errno($l);
+ $ret[3] = ldap_err2str($errn);
+
+ unset($attrs); //Módosítási dátum frissítés
+ $attrs[strtolower($cfg['ld_info'])][0] = "(Generated-by MaYor-LDAP Script.)\r\n(Updated: ".date('Y-m-d H:i:s').")\r\n";
+ @ldap_mod_replace($l, $group[0]['dn'], $attrs);
+
+ //if ($log['verbose'] > 7 ){ echo "\nLDAP ->\t Felhasználó: [".$userAccount."] törölve a: [".$groupName."]/[".$dn."] csoportból!\n"; }
+ } else {
+ //if ($log['verbose'] > 7 ) { echo "\nLDAP ->\t Felhasználó: [".$userAccount."] nincs benne a: [".$groupName."]/[".$dn."] csoportban!\n"; }
+ }
+ } else if($users['count'] > 1){ //Több user
+ echo "\nLDAP ->\t ******** LDAP Csoporthoz adás hiba! (infó: Több ugyanolyan felhasználó a létezik! [".$userAccount."]/[".$cfg['ldap_baseDn']."]) ********\n";
+ } else { //vagy nincs user
+ echo "\nLDAP ->\t ******** LDAP Csoporthoz adás hiba! (infó: Nincs ilyen felhasználó! [".$userAccount."]/[".$cfg['ldap_baseDn']."]) ********\n";
+ }
+ */
+ } else if($group['count'] > 1) { //Több csoport,
+ $ret[0] = false;
+ $ret[3] = "LDAP ->\t ******** LDAP Csoportból törlés hiba! (infó: Több ugyanolyan csoport található! [".$groupName."]/[".$dn."]) ********\n";
+ } else { /// vagy nincs ilyen csoport
+ $ret[0] = false;
+ $ret[3] = "LDAP ->\t ******** LDAP Csoportból törlés hiba! (infó: Csoport nem található! [".$groupName."]/[".$dn."]) ********\n";
+ }
+ return $ret;
+}
+
+
+ function ld_group_add($l, $groupName, $attr=array()){
+ global $cfg,$log,$ldap_group_attrs;
+ $attrs = $ret = array();
+
+ $dn = "CN=".ldap_escape($groupName, "", LDAP_ESCAPE_DN).",OU=".ldap_escape($cfg['isk_rovidnev']."-".$cfg['csoport_oupfx'], "", LDAP_ESCAPE_DN).",".$cfg['ldap_baseDn'];
+
+ $attrs['objectclass'][0] = "top"; //Alap dolgok, ami mindenképpen kell
+ $attrs['objectclass'][1] = "group";
+ $attrs['instancetype'][0] = "4";
+ $attrs['distinguishedname'][0] = $dn;
+ $attrs[strtolower($cfg['ld_groupname'])][0] = $groupName;
+ $attrs[strtolower($cfg['ld_leiras'])][0] = "MaYor-Script-Managed";
+ $attrs[strtolower($cfg['ld_info'])][0] = "(Generated-by MaYor-LDAP Script.)\r\n(Updated: ".date('Y-m-d H:i:s').")\r\n";
+ unset($attrs['']);
+ $ret[4] = $dn;
+ $ret[5] = $attrs;
+
+ if($log['verbose'] > 7){ echo "LDAP ->\tldap_add('".$l."', '".$dn."', \$attrs)\n"; } if ($log['verbose'] > 10 ){ echo "Attr: "; print_r($attrs); }
+ $ret[0] = @ldap_add($l, $dn, $attrs);
+ $ret[2] = ldap_errno($l);
+ $ret[3] = ldap_err2str($ret[2]);
+ if($ret[0] == false){
+ echo "\nLDAP ->\t ******** LDAP Csoport létrehozási hiba. (infó: {".$dn."} [".$ret[2]."] ".$ret[3]."!) ********\n";
+ }
+ return $ret;
+ }
+
+
+ function ld_group_del($l, $groupName, $scope=null){
+ global $cfg,$log,$ldap_group_attrs,$ldap_user_attrs;
+ $ret = array(0 => true, 2 => 0);
+ $attrs = array(strtolower($cfg['ld_groupname']), 'cn');
+
+ $rv = ld_find_group($l, $groupName, $scope, $attrs);
+ $ret[6] = $rv[4];
+ $group = $rv[1];
+ $ret[5] = $attrs;
+ if ($log['verbose'] > 11 ){ echo "\$group = "; print_r($group); }
+
+ for($i = 0; $i < $group['count']; $i++){
+ if($group[$i][strtolower($cfg['ld_groupname'])][0] == $groupName){ //Biztonság kedvéért
+ $ret[0] = ldap_delete($l, $group[$i]['dn']);
+ $ret[4] = $group[$i]['dn'];
+ $ret[2] = ldap_errno($l);
+ $ret[3] = ldap_err2str($ret[2]);
+ }
+ }
+ if($i == 0){
+ $ret[3] = "LDAP ->\t ******** LDAP Csoport törlés hiba! (infó: Csoport nem található! [".$groupName."]/[".$rv[4]."]) ********\n";
+ }
+ return $ret;
+ }
+
+
+
+ function ld_user_set(){}
+ function ld_user_enable(){}
+ function ld_user_disable(){}
+
+ function ld_user_list(){}
+ function ld_group_list(){}
+ function ld_user_lastlogin(){}
+
+ function ld_ou_add(){}
+ function ld_ou_del(){}
+
+
+
+ function script_install($l){
+ global $cfg,$log;
+ if(mysqli_query($l, "SELECT * FROM ".$cfg['db_m2n_db'].".".$cfg['db_m2n_prefix']."register LIMIT 10;" ) == FALSE ){ //nincs nyilvántartás
+ $q = "CREATE DATABASE IF NOT EXISTS ".$cfg['db_m2n_db']." DEFAULT COLLATE 'utf8_general_ci'; ";
+ if ($log['verbose'] > 7 ){ echo "M2N -> \t".$q."\n\n"; }
+ if(( $r = mysqli_query($l, $q)) !== FALSE ){
+ if ($log['verbose'] > 0 ){ echo "*\tAz ".$cfg['db_m2n_db']." adatbázis sikeresen létrehozva.\n"; }
+ }
+ $q = "CREATE TABLE IF NOT EXISTS ".$cfg['db_m2n_db'].".".$cfg['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'] > 7 ){ echo "M2N ->\t".$q."\n"; }
+ if(( $r = mysqli_query($l, $q)) !== FALSE ){
+ if ($log['verbose'] > 0 ){ echo "*\tAz ".$cfg['db_m2n_db'].".".$cfg['db_m2n_prefix']."register (script-katalógus) tábla sikeresen létrehozva.\n\n";}
+ }
+ }
+ }
+
+
+ function nxt_get_version(){
+ global $occ_path,$occ_user,$cfg,$log;
+ $ret = array();
+ // sudo -u honlap-felho ".phpv()." /home/honlap-felho/web/occ status --output=json
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." status --output=json \"" ;
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ $ret[0] = shell_exec($e);
+ $ret[1] = intval(explode(".", json_decode($ret[0],true)['version'])[0]);
+ if ($log['verbose'] > 10 ){ print_r($ret); echo "\n\n"; }
+ return $ret;
+ }
+
+ function catalog_userlist($link){ //akiket a script hozott létre
+ global $cfg,$log,$cfg;
+ $ret['account'] = array();
+ $ret['status'] = array();
+ $q = "SELECT * FROM ".$cfg['db_m2n_db'].".".$cfg['db_m2n_prefix']."register WHERE STATUS != 'forbidden'; ";
+ if ($log['verbose'] > 7 ){ echo "M2N ->\t".$q."\n"; }
+ if(( $r = mysqli_query($link, $q)) !== FALSE ){
+ while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
+ if(!in_array($row['account'], $cfg['kihagy'])){
+ $ret['account'][] = $row['account'];
+ $ret['status'][] = $row['status'];
+ }
+ }
+ mysqli_free_result($r);
+ if ($log['verbose'] > 4 ){ echo "*\tFelhasználó m2n nyilvántartás lekérdezése.\n"; }
+ return $ret;
+ if ($log['verbose'] > 10 ){ print_r($ret); }
+ } else {
+ echo "\nM2N -> \t**** Adatbázislekérdezési hiba! ****\n";
+ }
+ }
+
+ function catalog_forbiddenlist($link){ //akiket a rendszergazda kitiltott
+ global $log,$cfg,$cfg;
+ $q = "SELECT * FROM ".$cfg['db_m2n_db'].".".$cfg['db_m2n_prefix']."register WHERE STATUS = 'forbidden'; ";
+ if ($log['verbose'] > 7 ){ 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);
+ $ret = array_merge($ret, $cfg['kihagy']);
+ if ($log['verbose'] > 4 ){ echo "*\tFelhasználó-letiltások m2n nyilvántartás lekérdezése.\n"; }
+ return $ret;
+ } else {
+ echo "\nM2N ->\t**** Adatbázislekérdezési hiba! ****\n";
+ }
+ }
+
+ function catalog_useradd($link, $account){ // feljegyzi az általa létrehozott felhasználókat
+ global $log,$cfg,$dryrun;
+ $q = "INSERT INTO ".$cfg['db_m2n_db'].".".$cfg['db_m2n_prefix']."register (account) VALUES ('".mysqli_real_escape_string($link, $account)."')";
+ if ($log['verbose'] > 7 ){ echo "M2N -> \t".$q."\n"; }
+ if( $dryrun or (mysqli_query($link, $q)) !== FALSE ){
+ if ($log['verbose'] > 4 ){ echo "*\tFelhasználó-hozzáadás, m2n nyilvántartásba vétele.\n"; }
+ }
+ }
+
+ function catalog_userena($link, $account){ // az engedélyezetteket
+ global $cfg,$log,$dryrun;
+ $q = "UPDATE ".$cfg['db_m2n_db'].".".$cfg['db_m2n_prefix']."register SET status='active' WHERE account='".mysqli_real_escape_string($link, $account)."'";
+ if ($log['verbose'] > 7 ){ echo "M2N ->\t".$q."\n"; }
+ if( $dryrun or (mysqli_query($link, $q)) !== FALSE ){
+ if ($log['verbose'] > 4 ){ echo "*\tFelhasználó-engedélyezés, m2n nyilvántartásba vétele.\n" ;}
+ }
+ }
+
+ function catalog_userdel($link, $account){ // a törölteket
+ global $cfg,$log,$dryrun;
+ $q = "DELETE FROM ".$cfg['db_m2n_db'].".".$cfg['db_m2n_prefix']."register WHERE account='".mysqli_real_escape_string($link, $account)."' ";
+ if ($log['verbose'] > 7 ){ echo "M2N ->\t".$q."\n"; }
+ if( $dryrun or (mysqli_query($link, $q)) !== FALSE ){
+ if ($log['verbose'] > 5 ){ echo "*\tFelhasználó-törlés, m2n nyilvántartásba vétele.\n"; }
+ }
+ }
+
+ function catalog_userdis($link, $account){ // a letiltottakat
+ global $cfg,$cfg,$log,$dryrun;
+ $q = "UPDATE ".$cfg['db_m2n_db'].".".$cfg['db_m2n_prefix']."register SET status='disabled' WHERE account='".mysqli_real_escape_string($link, $account)."'";
+ if ($log['verbose'] > 7 ){ echo "M2N ->\t".$q."\n"; }
+ if( $dryrun or (mysqli_query($link, $q)) !== FALSE ){
+ if ($log['verbose'] > 5 ){ echo "*\tFelhasználó-letiltás, m2n nyilvántartásba vétele.\n"; }
+ }
+ }
+
+ function user_add($userAccount, $fullName){ // létrehoz egy felhasználót a Nextcloud-ban
+ global $occ_path,$occ_user,$cfg,$log,$dryrun;
+ $ret = array();
+// export OC_PASS=ErősJelszó123; su -s /bin/sh www-data -c '".phpv()." 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! NEM hozható létre!! ********\n";
+ } else {
+ $pw = gen_password(16);
+ $ret[1] = $pw;
+ $e = "export OC_PASS=".escp($pw)."; su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." user:add --password-from-env --display-name=".escp($fullName)." --group=".escp($cfg['mindenki_csop'])." ".escp($userAccount)." \"" ;
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ $ret[0] = shell_exec($e); } else { $ret[0] = true; }
+ if ($log['verbose'] > 11 ){ print_r($ret); }
+ }
+ return $ret;
+ }
+
+ function user_del($userAccount){ // kitöröl vagy letilt egy felhasználót a Nextcloud-ban
+ global $occ_path,$occ_user,$log,$dryrun;
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." user:info ".escp($userAccount)." --output=json \"";
+ if($log['verbose'] > 7) { 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 \"".phpv()." ".escp($occ_path."/occ")." user:delete ".escp($userAccount)." \""; // Ha még soha nem lépett be
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ $ret = shell_exec($e); } else { $ret = true; } // akkor törölhető
+ if ($log['verbose'] > 11 ){ print_r($ret); }
+ } else {
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." user:disable ".escp($userAccount)." \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ $ret = shell_exec($e); } else { $ret = true; } // különben csak letiltja
+ if ($log['verbose'] > 11 ){ print_r($ret); }
+ }
+
+ }
+
+ function user_info($userAccount){ // User állpot a Nextcloudban
+ global $occ_path,$occ_user,$log;
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." user:info ".escp($userAccount)." --output=json \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ $ret = (array)json_decode(shell_exec($e),true);
+ if ($log['verbose'] > 10 ){ print_r($ret); }
+ return $ret;
+ }
+
+ function user_dis($userAccount){ // letiltja a felhasználót a Nextcloud-ban
+ global $occ_path,$occ_user,$log,$dryrun;
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." user:disable ".escp($userAccount)." \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ $ret = shell_exec($e); } else { $ret = true; }
+ if ($log['verbose'] > 11 ){ print_r($ret); }
+ }
+
+ function user_ena($userAccount){ // engedélyezi
+ global $occ_path,$occ_user,$log,$dryrun;
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." user:enable ".escp($userAccount)." \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ $ret = shell_exec($e); } else { $ret = true; }
+ if ($log['verbose'] > 11 ){ print_r($ret); }
+ }
+
+
+ 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 \"".phpv()." ".escp($occ_path."/occ")." group:list --limit=1000000 --output=json \""; //* Jó nagy limittel dolgozzunk
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ $ret = (array)json_decode(shell_exec($e),true);
+ if ($log['verbose'] > 10 ){ print_r($ret); }
+ return $ret;
+ }
+
+ 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 \"".phpv()." ".escp($occ_path."/occ")." user:report | grep 'total' | sed -e 's/[^0-9]//g' | tr -d '[:blank:]\n' \"";
+ // if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ // $num = shell_exec($e);
+ $num = 1000000; //inkább kézi limit!
+ // $num = $num + 100; // Biztos-ami-biztos, a nextcloud rejtett hibái miatt...
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." user:list --limit ".escp($num)." --output=json \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ $ret = (array)json_decode(shell_exec($e),true);
+ if ($log['verbose'] > 10 ){ print_r($ret); }
+ return $ret;
+ }
+
+ 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 \"".phpv()." ".escp($occ_path."/occ")." user:info ".escp($userAccount)." --output=json \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ $ret = json_decode(shell_exec($e),true)['last_seen'];
+ if ($log['verbose'] > 10 ){ print_r($ret); }
+ return $ret;
+ }
+
+
+ function user_set($userAccount, array $params){ //beállítja az e-mailt, quota-t, nyelvet a kapott értékekre
+ global $occ_path,$occ_user,$log,$dryrun;
+ if(isset($params['quota'])){
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." user:setting ".escp($userAccount)." files quota ".escp($params['quota'])." \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ shell_exec( $e ); }
+ }
+ if(isset($params['email'])){
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." user:setting ".escp($userAccount)." settings email ".escp($params['email'])." \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ shell_exec( $e ); }
+ }
+ if(isset($params['lang'])){
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." user:setting ".escp($userAccount)." core lang ".escp($params['lang'])." \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun) { shell_exec($e); }
+ }
+ }
+
+
+
+ function group_add($groupName){ //Új csoport létrehozása a Nextcloud-ban
+ global $occ_user,$occ_path,$link,$cfg,$log,$nxt_version,$dryrun;
+ $groupName = rmnp($groupName);
+ 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 {
+ if($nxt_version < 14) {
+ $q = "INSERT IGNORE INTO ".mysqli_real_escape_string($link, $cfg['db_nxt_dbname']).".".mysqli_real_escape_string($link, $cfg['db_nxt_prefix'])."groups (gid) VALUES ('".mysqli_real_escape_string($link,$groupName)."'); ";
+ if ($log['verbose'] > 7 ){ echo "NXT ->\t".$q."\n"; }
+ if(!$dryrun){
+ if( mysqli_query($link, $q) !== TRUE ) { echo "\nNXT -> \t****** Csoport létrehozási hiba. (adatbázis) ******\n"; }
+ }
+ } else {
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." group:add ".escp($groupName)." \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ $ret = shell_exec($e); } else { $ret = true; }
+ if ($log['verbose'] > 11 ){ print_r($ret); }
+ }
+ }
+ }
+
+ function group_del($groupName){ // Csoport törlése a Nextcloud-ból
+ global $occ_user,$occ_path,$cfg,$link,$log,$cfg,$nxt_version,$dryrun;
+ $grp = nxt_group_list();
+ $groupName = rmnp($groupName);
+ if(isset($grp[$groupName])){
+ if($nxt_version < 14){ // Mivel erre csak a Nextcloud 14-től van "occ" parancs, ezért néha közvetlenül kell...
+
+ foreach($grp[$groupName] as $key => $user){
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." group:removeuser ".escp($groupName)." ".escp($user)." \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ $ret = shell_exec($e); } else { $ret = true; }
+ if ($log['verbose'] > 11 ){ print_r($ret); }
+ if ($log['verbose'] > 1 ){ echo "*--\t\tTörölve".po(" ($user) a: $groupName",$cfg['csoportnev_hossz']+5,1)."\t csoportból.\n"; }
+ }
+ $q = "DELETE FROM ".mysqli_real_escape_string($link, $cfg['db_nxt_dbname']).".".mysqli_real_escape_string($link,$cfg['db_nxt_prefix'])."groups WHERE gid='".mysqli_real_escape_string($link, $groupName)."'; " ;
+ if ($log['verbose'] > 7 ){ echo "NXT ->\t".$q."\n"; }
+ if(mysqli_query($link, $q) !== TRUE ) echo "\n NXT -> \t****** csoport törlési hiba. (adatbázis) ******\n";
+
+ } else {
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." group:delete ".escp($groupName)." \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ $ret = shell_exec($e);
+ if ($log['verbose'] > 11 ){ print_r($ret); }
+ }
+ }
+ }
+
+ function group_user_add($groupName, $userAccount){ // Hozzáad egy felhasználót egy csoporthoz a Nextcloud-ban
+ global $occ_user, $occ_path,$log,$dryrun;
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." group:adduser ".escp($groupName)." ".escp($userAccount)." \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ $ret = shell_exec($e); } else { $ret = true; }
+ if ($log['verbose'] > 11 ){ print_r($ret); }
+ }
+
+ function group_user_del($groupName, $userAccount){ // Kitöröl egy felhasználót egy Nextcoud csoportból
+ global $occ_user, $occ_path,$log,$dryrun;
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." group:removeuser ".escp($groupName)." ".escp($userAccount)." \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ $ret = shell_exec($e); } else { $ret = true; }
+ if ($log['verbose'] > 11 ){ print_r($ret); }
+ }
+
+
+ function create_dir($user, $path){ // Készít egy mappát a: data/$user/files/$path alá
+ global $occ_user, $occ_path,$log,$dryrun;
+ $ret = null;
+ if(!file_exists($occ_path."/data/".$user."/files/".$path)){ // Ha Még nem létezik
+ if(!$dryrun){
+ $ret = @mkdir($occ_path."/data/".$user."/files/".$path, 0755, true); // Akkor létrehozza
+ chown($occ_path."/data/".$user."/files/".$path, $occ_user);
+ chgrp($occ_path."/data/".$user."/files/".$path, $occ_user);
+ } else { $ret = true; }
+ if($ret === true && $log['verbose'] > 7) { echo "php ->\tDIR: \"".$occ_path."/data/".$user."/files/".$path."\" \t created.\n"; }
+ if($ret === false && $log['verbose'] > -1) { echo "php ->\tDIR: \"".$occ_path."/data/".$user."/files/".$path."\" \t makedir failed!!\n"; } //mondjuk ilyen egyáltalán mikor lehet?
+ }
+ if ($log['verbose'] > 11 ){ print_r($ret); }
+ return $ret;
+ }
+
+
+ function write_tofile($user, $path, $msg ){ // Fájlba írja a $msg tartalmát
+ global $occ_user, $occ_path,$log,$dryrun;
+ $ret = 0;
+ if( ($h = @fopen($occ_path."/data/".$user."/files/".$path, 'w+')) !== false ){
+ if(!$dryrun){
+ $ret = fwrite($h, $msg );
+ } else { $ret = strlen($msg); }
+ fclose($h);
+ if(!$dryrun){
+ chown($occ_path."/data/".$user."/files/".$path, $occ_user);
+ chgrp($occ_path."/data/".$user."/files/".$path, $occ_user);
+ }
+ if($log['verbose'] > 7) { echo "php ->\tFILE: \"".$occ_path."/data/".$user."/files/".$path."\" \t created.\n"; }
+ } else {
+ if($log['verbose'] > 5) { echo "php ->\tFILE ERROR: \"".$occ_path."/data/".$user."/files/".$path."\" \t dir not found.\n"; }
+ }
+ if ($log['verbose'] > 11 ){ print_r($ret); }
+ return $ret;
+ }
+
+ function files_scan($user, $path ){ // Nextcloud files:scan --path=xxx
+ global $occ_user, $occ_path,$log,$dryrun;
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." '".$occ_path."/occ' files:scan --path=".escp($user."/files/".$path)." \""; // -v
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ $ret = shell_exec($e); } else { $ret = true; }
+ if ($log['verbose'] > 11 ){ print_r($ret); }
+ }
+
+ function user_notify($user, $msg, $title ){ // Nextcloud értesítés
+ global $occ_user, $occ_path, $log,$dryrun;
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." '".$occ_path."/occ' notification:generate -l ".escp($msg)." -- ".escp($user)." ".escp($title)." \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ $ret = shell_exec($e); } else { $ret = true; }
+ if ($log['verbose'] > 11 ){ print_r($ret); }
+ }
+
+ function scan_dir($user, $path ){ // PHP mappa listázása
+ global $occ_user, $occ_path,$log;
+ $ret = array();
+ if(is_dir($occ_path."/data/".$user."/files/".$path)){
+ $ret = scandir($occ_path."/data/".$user."/files/".$path);
+ if($ret[0] == "." && $ret[1] == ".."){
+ unset($ret[0]);
+ unset($ret[1]);
+ }
+ }
+ if ($log['verbose'] > 11 ){ print_r($ret); }
+ return $ret;
+ }
+
+ function clean_dir($user, $path, $tankorei){ //Tankörmappák kitisztítása (path: mappagyökér)
+ global $occ_user, $occ_path, $log, $cfg, $dryrun;
+ $listdir = scan_dir($user, $path);
+ $ret[0] = array();
+ $ret[1] = array();
+ $ret[2] = array();
+ foreach($listdir as $key => $val) {
+ if((!in_array($val, $tankorei) && !in_array(basename($val,"_beadás"), $tankorei) || !is_dir($occ_path."/data/".$user."/files/".$path."/".$val)) && $val != "INFO.txt"){ //Nincs a tanköreiben, akkor törölni kell (de csak ha üres)
+
+ if(is_dir($occ_path."/data/".$user."/files/".$path."/".$val) && empty(scan_dir($user, $path."/".$val))){ // Ha mappa, és üres -> törlés
+ if(!$dryrun){ rmdir($occ_path."/data/".$user."/files/".$path."/".$val); }
+ $ret[0][] = $val;
+ if($log['verbose'] > 7) { echo "php ->\tDIR: \"".$occ_path."/data/".$user."/files/".$path."/".$val."\" deleted.\n"; }
+
+ } else { //Nem mappa, vagy nem üres
+ if(file_exists( $occ_path."/data/".$user."/files/".$path."/".pathinfo(basename($occ_path."/data/".$user."/files/".$path."/".$val ,".please-remove"))['basename'])){ //Ha az eredeti könyvtár vagy fájl él
+ if(!$dryrun){ rename($occ_path."/data/".$user."/files/".$path."/".$val, $occ_path."/data/".rnescp($user."/files/".$path."/".basename($val, '.please-remove').".".time().".please-remove")); }
+ $ret[1][] = basename($val, '.please-remove').".".time().".please-remove";
+ user_notify($user,"Az ön >>".$path."/<< könyvtárában tiltott helyen lévő fájl, vagy olyan (tankör)mappa található, amely tankörnek ön továbbá már nem tagja. Kérem helyezze el kívül a >>".$path."/<< mappán, vagy törölje belőle! Eltávolításra megjeleölve! A fájl átnevezve, új neve --> ".rnescp(basename($val, '.please-remove').".".time().".please-remove"), "Fájl/Mappa rossz helyen! --> ".rnescp($path."/".basename($val, '.please-remove').".".time().".please-remove" ));
+ if($log['verbose'] > 7) { echo "php ->\tF/D: \"".$occ_path."/data/".$user."/files/".$path."/".$val."\" \t renamed -> ".rnescp(basename($val, '.please-remove').".".time().".please-remove")."\n"; }
+ } else {
+ // A Hanyagul otthagyottakért csak figyelmeztessen:
+ user_notify($user,"Az ön >>".$path."/<< könyvtárában tiltott helyen lévő fájl, vagy olyan (tankör)mappa található, amely tankörnek ön továbbá már nem tagja. Kérem helyezze el kívül a >>".$path."/<< mappán, vagy törölje belőle! Eltávolításra megjelölve! --> ".$val, "Fájl/Mappa rossz helyen! --> ".$path."/".$val );
+ }
+ }
+ } else {
+ $ret[2][] = $val;
+ }
+ }
+ if ($log['verbose'] > 12 ){ print_r($ret); }
+ return $ret;
+ }
+
+
+ function groupdir_create_root($user, $oktId, $path){ //Tankörmappák gyökerét előállítja $path=tankörgyökér
+ global $cfg, $occ_path, $occ_user,$log,$dryrun;
+ $ret = array(false, false);
+ if((empty($cfg['groupdir_users']) || in_array($user, $cfg['groupdir_users'])) && $oktId > 0 && $cfg['manage_groupdirs'] === true){ //Ha null -> mindenki, Ha "user" -> scak neki, && tanár && groupdir bekapcsolava
+
+ if(is_file($occ_path."/data/".$user."/files/".$path) || is_link($occ_path."/data/".$user."/files/".$path)){ //Ha már vam ott valami ilyen fájl
+ if(!$dryrun){ rename($occ_path."/data/".$user."/files/".$path, $occ_path."/data/".rnescp($user."/files/".$path.".".time().".please-remove")); } //Átnevezi, hogy azért mégse vasszen oda
+ echo "php ->\tFILE: \"".$occ_path."/data/".$user."/files/".$path."\" \t \t moved away!!!\n";
+ user_notify($user,"Fájl: >>".$path.".please-remove<< Illegális helyen volt. Server által eltávolítva.", "Fájl: >>".$path."<< eltávolítva!");
+ files_scan($user, "" ); //Ekkor az egész $user/files mappát szkenneli
+ }
+ $ret[0] = create_dir($user, rmnp($path)); // Tankörmappa gyökér létrehozása
+ $ret[1] = write_tofile($user, $path."/"."INFO.txt", $cfg['infotxt_szöveg']); // INFO.txt (Újra)Írása.
+ if($ret[0] === true){ // Ha frissen létrehozott mappa, akkor az egész userre kell jogot adni
+ $e = "/bin/chown -R ".escp($occ_user.":".$occ_user)." ".escp($occ_path."/data/".$user."/")." ";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ shell_exec($e); }
+ files_scan($user, $path);
+ }
+ }
+ if ($log['verbose'] > 12 ){ print_r($ret); }
+ return $ret;
+ }
+
+ function groupdir_create_groupdir($user, $oktId, $path){ // $path = tankörmappa
+ global $cfg,$log;
+ $ret = false;
+ if( basename($path,"_beadás") != $cfg['mindenki_tanar'] and basename($path,"_beadás") != $cfg['mindenki_diak'] and basename($path,"_beadás") != $cfg['mindenki_csop']){ //Ezekre a csoportokra minek?
+ if((empty($cfg['groupdir_users']) || in_array($user, $cfg['groupdir_users'])) && $oktId > 0 && $cfg['manage_groupdirs'] === true){
+ $ret = create_dir($user, rmnp($path)); // Tankörmappa létrehozása
+ if($ret === true){
+ files_scan($user, $path);
+ }
+ }
+ if ($log['verbose'] > 12 ){ print_r($ret); }
+ return $ret;
+ }
+ }
+
+ function groupdir_finish($user, $oktId, $path, $tankorei ){ //$path=tankörgyökér
+ global $cfg,$log;
+ $ret = array(array(),array(),array(),false,false); //return sekelton
+ if((empty($cfg['groupdir_users']) || in_array($user, $cfg['groupdir_users'])) && $oktId > 0 && $cfg['manage_groupdirs'] === true){
+ if(isset($tankorei)) {
+ $ret = clean_dir($user, $path, $tankorei);
+ $ret[3] = false; //mert felülírja a skeleton-t
+ }
+ if(!empty($ret[0]) or !empty($ret[1]) ){
+ files_scan($user, $path); // Nextcloud értesítése
+ $ret[3] = true;
+ }
+ files_scan($user, $path."/INFO.txt");
+ }
+ if ($log['verbose'] > 12 ){ print_r($ret); }
+ return $ret;
+ }
+
+
+
+
+ function add_tk_to_users($list, $user, $tankorname){ //Naplón kívüli csoportokat adhatunk a felhasználókhoz
+ global $log;
+ $curr = "";
+ foreach($list as $key => $val){ // Csak rendezett tömbökön!
+ if($curr != $val['userAccount'] && ($user === null or ($user !== null && $val['userAccount'] == $user ))){ //Vagy mindenki vagy adott user + rendezett lista
+
+ if(!isset($val['tanarId'])){ //workaround
+ $val['tanarId'] = 0;
+ }
+ if(!isset($val['diakId'])){ //workaround
+ $val['diakId'] = 0;
+ }
+ $list = array_merge($list, array( $val));
+ $list[$key]['tankorNev'] = $tankorname;
+ $list[$key]['tankorId'] = 0;
+
+ if($user !== null && $val['userAccount'] == $user ){ // Null -> mindenkihez, "user" -> csak neki
+ break;
+ }
+ $curr = $val['userAccount'];
+ }
+ }
+ if ($log['verbose'] > 15 ){ print_r($list); }
+ return $list;
+ }
+
+ function set_param_to_user($list, $user, $paramname, $param){ // Paramétert állít be a felhasználónak.
+ global $log;
+ foreach($list as $key => $val){ // Csak rendezett tömbökön! (vagy mégsem?)
+ if($user === null or ($user !== null && $val['userAccount'] == $user )){ //Vagy mindenki vagy adott user
+
+ $list[$key][$paramname] = $param; // A paraméter
+ }
+ }
+ if ($log['verbose'] > 15 ){ print_r($list); }
+ return $list;
+ }
+
+ function mayor_userlistcmp($a, $b){
+ // return strcmp($a['oId'], $b['oId']); //Ez lenne a jó, de az átfedések miatt nem működik
+ return strcmp($a['userAccount'], $b['userAccount']); //Pillanatnyilag csak az az egyedi
+ }
+
+ function po($inp,$ll,$dir){ // Szép kimenetet gyárt
+ while(grapheme_strlen($inp) < $ll){
+ if($dir == 0){
+ $inp = " ".$inp." ";
+ } else if($dir == 1){
+ $inp = $inp." ";
+ } else if ($dir == -1){
+ $inp = " ".$inp;
+ }
+ }
+ return $inp;
+ }
+
+ function get_mayor_szemeszter($link, $date) {
+ global $cfg,$log;
+ $ret = array();
+ $q = "SELECT * FROM intezmeny_".$cfg['isk_rovidnev'].".szemeszter
+ WHERE (statusz = 'aktív' OR statusz = 'lezárt') AND kezdesDt <= '".$date."'
+ AND '".$date."' <= (SELECT MAX(zarasDt) FROM intezmeny_".$cfg['isk_rovidnev'].".szemeszter WHERE statusz = 'aktív' OR statusz = 'lezárt' )
+ AND '".$date."' >= (SELECT MIN(kezdesDt) FROM intezmeny_".$cfg['isk_rovidnev'].".szemeszter WHERE statusz = 'aktív' OR statusz = 'lezárt' )
+ ORDER BY zarasDt DESC
+ LIMIT 1;
+ ";
+ if ($log['verbose'] > 7 ){ echo "MAY ->\t".$q."\n"; }
+ if( ($r = mysqli_query($link, $q)) !== FALSE ){
+ $ret = mysqli_fetch_array($r, MYSQLI_ASSOC);
+ if(!empty($ret)){ $ret["reqDt"] = $date; } //szükség lehet a megkérdezett dt-re is
+ mysqli_free_result($r);
+ } else {
+ echo "\nMAY ->\t ******** Mayor_napló (szemeszter)lekérdezési hiba. (adatbázis) ********\n";
+ }
+ if ($log['verbose'] > 10 ){ print_r($ret); }
+ return $ret;
+ }
+
+
+
+
+ function get_mayor_tankor($link, $date){ // A tankörök neveinek lekérdezése a mayorból
+ global $cfg,$log;
+ $ret = array();
+ $req_oszt = "'#'";
+ foreach($cfg['min_osztalyok'] as $key => $val){ //A megadott konkrét osztályokra
+ $req_oszt .= ",'$val'";
+ }
+ $szm = get_mayor_szemeszter($link, $date);
+ if(!empty($szm)){
+ //Létező összes tankör:
+ /* $q = "SELECT tankorId, TRIM(BOTH ' ' FROM CONCAT('".$cfg['csoport_prefix']."',tankorNev)) AS tankorNev
+ FROM intezmeny_".$cfg['isk_rovidnev'].".tankorSzemeszter
+ WHERE tanev = '".$szm['tanev']."' AND szemeszter = '".$szm['szemeszter']."';
+ ";
+ */
+ //csak a megadott évfeolyamokhoz kötődő tankörök:
+ $q = "SELECT tankorId, TRIM(BOTH ' ' FROM CONCAT('".$cfg['csoport_prefix']."',tankorNev)) AS tankorNev
+ FROM intezmeny_".$cfg['isk_rovidnev'].".tankorSzemeszter
+ WHERE tanev = '".$szm['tanev']."' AND szemeszter = '".$szm['szemeszter']."' AND tankorId IN(
+ SELECT tankorId
+ FROM intezmeny_".$cfg['isk_rovidnev'].".tankorOsztaly
+ WHERE osztalyId IN (
+ SELECT osztalyId
+ FROM naplo_".$cfg['isk_rovidnev']."_".$szm['tanev'].".osztalyNaplo
+ WHERE evfolyamJel >= ".$cfg['min_evfolyam']." OR osztalyJel IN(".$req_oszt.")
+ ORDER BY osztalyId )
+ ORDER BY tankorId )
+ ORDER BY tankorNev;
+ ";
+ if ($log['verbose'] > 7 ){ 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);
+ } else {
+ echo "\nMAY ->\t ******** Mayor_napló (tankör)lekérdezési hiba. (adatbázis) ********\n";
+ }
+ } else {
+ echo "\nMAY ->\t ******** Mayor_napló (tankör)lekérdezési hiba. (Nincs ilyen Szemeszter: ".$date."!) ********\n";
+ }
+ if ($log['verbose'] > 10 ){ print_r($ret); }
+ return $ret;
+ }
+
+
+ function get_mayor_tanar($link, $date){ // A tanárok lekérdezése a mayorból
+ global $cfg,$log;
+ $ret = array();
+ $szm = get_mayor_szemeszter($link, $date);
+ if(!empty($szm)){
+ $q = "SELECT accounts.userAccount, accounts.mail, tanar.email, tanar.tanarId, tankorTanar.tankorId, tanar.oId, '' AS employeeId,
+ tanar.beDt, tanar.kiDt, '' AS kezdoTanev, '' AS vegzoTanev, '' AS jel, '' AS beEv, '' AS osztalyJel,
+ tanar.viseltNevElotag, tanar.viseltCsaladinev, tanar.viseltUtonev,
+ tanar.szuletesiHely,tanar.szuletesiIdo, '' as lakhelyOrszag, '' as lakhelyHelyseg, '' as lakhelyIrsz,
+ '' AS lakHely, '' AS telefon, '' AS mobil, tanar.statusz, 'Tanár' AS beoszt,
+ TRIM(BOTH ' ' FROM CONCAT_WS(' ',viseltNevElotag, viseltCsaladinev, viseltUtonev)) AS fullName,
+ TRIM(BOTH ' ' FROM CONCAT('".$cfg['csoport_prefix']."',tankorNev)) AS tankorNev
+ FROM intezmeny_".$cfg['isk_rovidnev'].".tanar, mayor_private.accounts, intezmeny_".$cfg['isk_rovidnev'].".tankorTanar, intezmeny_".$cfg['isk_rovidnev'].".tankorSzemeszter
+ WHERE accounts.studyId = tanar.oId AND statusz != 'jogviszonya lezárva'
+ AND ( (tanar.beDt <= '".$szm['reqDt']."' AND ( tanar.kiDt >= '".$szm['reqDt']."' OR tanar.kiDt IS NULL))
+ /*OR (tanar.beDt <= CURRENT_DATE() AND (CURRENT_DATE() <= tanar.kiDt OR tanar.kiDt IS NULL))*/ )
+ AND tanar.tanarId = tankorTanar.tanarId
+ AND ((tankorTanar.beDt <= '".$szm['reqDt']."' AND tankorTanar.kiDt >= '".$szm['reqDt']."' )
+ /*OR (tankorTanar.beDt <= CURRENT_DATE() AND CURRENT_DATE() <= tankorTanar.kiDt )*/ )
+ AND tankorTanar.tankorId = tankorSzemeszter.tankorId
+ AND tankorSzemeszter.tanev = '".$szm['tanev']."' AND tankorSzemeszter.szemeszter = '".$szm['szemeszter']."'
+ /* ORDER BY oId; */
+ ORDER BY userAccount ;
+ ";
+ if ($log['verbose'] > 7 ){ 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);
+ } else {
+ echo "\nMAY ->\t ******** Mayor_napló (tanár)lekérdezési hiba. (adatbázis) ********\n";
+ }
+ } else {
+ echo "\nMAY ->\t ******** Mayor_napló (tanár)lekérdezési hiba. (Nincs ilyen Szemeszter: ".$date."!) ********\n";
+ }
+ if ($log['verbose'] > 10 ){ print_r($ret); }
+ return $ret;
+ }
+
+
+ function get_mayor_diak($link, $date){ // diákok lekérdezése
+ global $cfg,$log;
+ $ret = array();
+ $req_oszt = "'#'";
+ foreach($cfg['min_osztalyok'] as $key => $val){ //A megadott konkrét osztályokra
+ $req_oszt .= ",'$val'";
+ }
+ $szm = get_mayor_szemeszter($link, $date);
+ if(!empty($szm)){
+ $q = "SELECT accounts.userAccount, accounts.mail, diak.email, diak.diakId, tankorDiak.tankorId, diak.oId, diak.diakigazolvanySzam AS employeeId,
+ diak.jogviszonyKezdete AS beDt, diak.jogviszonyVege AS kiDt, osztaly.kezdoTanev, osztaly.vegzoTanev, osztaly.jel, diak.kezdoTanev AS beEv,
+ osztalyNaplo.osztalyJel, diak.viseltNevElotag, diak.viseltCsaladinev, diak.viseltUtonev,
+ diak.szuletesiHely, diak.szuletesiIdo, diak.lakhelyOrszag, diak.lakhelyHelyseg, diak.lakhelyIrsz,
+ TRIM(BOTH ' ' FROM CONCAT_WS(' ',diak.lakhelyKozteruletNev, diak.lakhelyKozteruletJelleg, diak.lakhelyHazszam, diak.lakhelyEmelet, diak.lakhelyAjto)) AS lakHely,
+ diak.telefon, diak.mobil, diak.statusz,
+ TRIM(BOTH ' ' FROM CONCAT_WS(' ',viseltNevElotag, viseltCsaladinev, viseltUtonev)) AS fullName,
+ TRIM(BOTH ' ' FROM CONCAT('".$cfg['csoport_prefix']."',tankorNev)) AS tankorNev
+ FROM intezmeny_".$cfg['isk_rovidnev'].".diak, mayor_private.accounts, intezmeny_".$cfg['isk_rovidnev'].".tankorDiak, intezmeny_".$cfg['isk_rovidnev'].".tankorSzemeszter,
+ intezmeny_".$cfg['isk_rovidnev'].".osztalyDiak, intezmeny_".$cfg['isk_rovidnev'].".osztaly, naplo_".$cfg['isk_rovidnev']."_".$szm['tanev'].".osztalyNaplo
+ WHERE diak.diakId IN (
+ SELECT diakId
+ FROM intezmeny_".$cfg['isk_rovidnev'].".osztalyDiak
+ WHERE osztalyId IN (
+ SELECT osztalyId
+ FROM naplo_".$cfg['isk_rovidnev']."_".$szm['tanev'].".osztalyNaplo
+ WHERE evfolyamJel >= ".$cfg['min_evfolyam']." OR osztalyJel IN(".$req_oszt.")
+ 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 <= '".$szm['reqDt']."' AND (tankorDiak.kiDt IS NULL OR tankorDiak.kiDt >= '".$szm['reqDt']."' ))
+ /*OR (tankorDiak.beDt <= CURRENT_DATE() AND (tankorDiak.kiDt IS NULL OR tankorDiak.kiDt >= CURRENT_DATE() ))*/ )
+ AND tankorSzemeszter.tankorId = tankorDiak.tankorId
+ AND tankorSzemeszter.tanev = '".$szm['tanev']."' AND tankorSzemeszter.szemeszter = '".$szm['szemeszter']."'
+ AND osztalyDiak.diakId = diak.diakId
+ AND (osztalyDiak.beDt <= '".$szm['reqDt']."' AND (osztalyDiak.kiDt >= '".$szm['reqDt']."' OR osztalyDiak.kiDt IS NULL))
+ AND osztaly.osztalyId = osztalyDiak.osztalyId
+ AND osztalyDiak.osztalyId = osztalyNaplo.osztalyId
+ /* ORDER BY oId ; */
+ ORDER BY userAccount ;
+ ";
+ if ($log['verbose'] > 7 ){ 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);
+ } 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. (Nincs ilyen Szemeszter: ".$date."!) ********";
+ }
+ if ($log['verbose'] > 10 ){ print_r($ret); }
+ return $ret;
+ }
+
+
+//--------------------------------------------------------------------------------------------------------------------------------------------//
+// RUN -- RUN -- RUN -- RUN -- RUN -- RUN -- RUN -- RUN -- RUN -- RUN -- RUN -- RUN -- RUN -- RUN -- RUN -- RUN //
+//--------------------------------------------------------------------------------------------------------------------------------------------//
+
+
+ if(true){ echo "\n\n###################################################\n" ;}
+ if(true){ echo "######## Mayor-Nextcloud Script ########\n"; }
+ if(true){ echo "######## Start: ".date("Y-m-d H:i:s")." ########\n"; }
+ $t_start = microtime(true);
+
+ if(!isset($cfg['allapot_tartas']) or empty($cfg['allapot_tartas']) or $cfg['allapot_tartas'] == "1970-01-01"){ //A jelölt nap állapotának betöltése
+ $cfg['allapot_tartas'] = date("Y-m-d");
+ }
+ if(true) { echo "######## A (".$cfg['allapot_tartas'].")-i állapot szerint. ########\n"; }
+ if(true){ echo "###################################################\n" ;}
+
+ if(true) { echo "\n*** M2N Config betöltése: ($cfgfile fájlból.) ***\n\n"; }
+ if($printconfig === true or $debug === true){
+ echo "\n Betöltött Konfig:\n";
+ $m2l = $cfg;
+ $m2l['infotxt_szöveg'] = "<-- TEXT -->"; //Túl hosszú lenne kiprintelni
+ var_export($m2l);
+ echo "\n";
+ }
+ $log['verbose'] = $cfg['verbose'];
+ if($debug === true) {$log['verbose'] = 1000; $printpasswds = true;}
+ if( $cfg['always_set_diak_quota'] === true && $log['verbose'] < 4 ){ $log['verbose'] = 4; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+//-----------------------------------------------------------------------------------------------------------------------------------------------------
+
+$ld = ldap_open();
+
+
+
+
+
+
+
+
+
+
+
+
+
+$dn = "dc=ad,dc=bmrg,dc=lan";
+$filter = "(objectclass=*)";
+$attr = array("mail", "sn");
+
+$aa = ldap_find($ld,$dn,$filter);
+//print_r($aa);
+
+
+
+$attr=array();
+$attr['fullName'] = "fn Teszt Elek";
+$attr['email'] = "elek@suli.hu";
+$attr['oId'] = "75999888777";
+$attr['employeeId'] = "123AA";
+$attr['osztalyJel'] = "12.c";
+$attr['viseltNevElotag'] = "Msgr.";
+$attr['viseltCsaladinev'] = "Teszt";
+$attr['viseltUtonev'] = "Elek";
+//$attr['lakhelyOrszag'] = "Magyarország";
+$attr['lakhelyHelyseg'] = "Pilisborosjenő";
+$attr['lakhelyIrsz'] = "";
+$attr['lakHely'] = "Boros utca 19.";
+$attr['telefon'] = "1234567";
+$attr['mobil'] = "06700000000";
+$attr['statusz'] = "jogviszonyban van";
+$attr['beoszt'] = "Diák";
+$attr['quota'] = "4GB";
+$attr['vegzoTanev'] = 3001;
+
+
+echo "\nUser:\n";
+$rv = ld_user_add($ld, 'bbb', '', $attr);
+print_r($rv);
+
+echo "g add\n";
+print_r(ld_group_add($ld, "(tk) 10.c Tééészta"));
+echo "g u add\n";
+print_r(ld_group_user_add($ld, "bmrg_cloud", "bbb", "global"));
+echo "g u add\n";
+print_r(ld_group_user_add($ld, "(tk) 10.c Tééészta", "aaa", "own"));
+
+echo "g u add\n";
+print_r(ld_group_user_add($ld, "(tk) 10.c Tééészta", "23bbmp", "own"));
+
+echo "g del\n";
+print_r(ld_group_del($ld, "(tk) 10.c Tééészta", ""));
+
+print_r(ld_user_info($ld, "bbb"));
+
+echo "u del\n";
+print_r(ld_user_del($ld, "gergo111"));
+
+
+ldap_close($ld);
+die();
+
+
+
+
+
+
+
+
+
+
+
+
+
+ //-------------------------------------------------------------------------------------------------------------------------------
+ $ret = nxt_get_version();
+ $nxt_version = $ret[1];
+ if($ret[1] < 13){ //Nextcloud 13-tól támogatott
+ echo "\n\n******** Legalább Nextcloud 13-mas verzió szükséges! ********\n\n";
+ echo $ret[0]."\n\n";
+ die();
+ }
+ if($printhelp === true){
+ print_help();
+ die();
+ }
+ if ($cfg['manage_groupdirs'] === true && $cfg['manage_groups'] === false){
+ print_help();
+ die();
+ }
+
+
+ if(($link = db_connect($cfg['db_m2n_db'])) == FALSE){ //csatlakozás
+ echo "\n******** MySQL (general) kapcsolat hiba. ********\n";
+ echo "\n******** Script leáll... ********\n";
+ die();
+ }
+ script_install($link); // $link -> script, $link2 -> mayor
+
+
+ //ha a mayor egy másik szerveren lenne
+ if(!empty($cfg['db_mayor_user'])){ $cfg['db_user'] = $cfg['db_mayor_user']; }
+ if(!empty($cfg['db_mayor_pass'])){ $cfg['db_pass'] = $cfg['db_mayor_pass']; }
+ if(!empty($cfg['db_mayor_host'])){ $cfg['db_host'] = $cfg['db_mayor_host']; }
+ if(!empty($cfg['db_mayor_port'])){ $cfg['db_port'] = $cfg['db_mayor_port']; }
+
+ if(($link2 = db_connect()) == FALSE){
+ echo "\n******** MySQL (mayor) kapcsolat hiba. ********\n";
+ echo "\n******** Script leáll... ********\n";
+ die();
+ } else {
+ if ($log['verbose'] > 0 ){ echo "***\tMayor DB connected.\n"; }
+ }
+
+ // group_add($cfg['mindenki_csop']); // A "mindenki" csoport hozzáadása (később adjuk hozzá)
+ // group_add($cfg['mindenki_tanar']); // A "mindenki"/tanár csoport hozzáadása
+ // group_add($cfg['mindenki_diak']); // A "mindenki"/diák csoport hozzáadása
+
+ //------------------------------------------------------------------------------------------------------------------------------
+
+// Létrehozza az új coportokat a Mayor tankörök szerint
+ if ($log['verbose'] > 0 ){ echo "\n***\tCsoportok egyeztetése.\n";}
+ $tankorok = get_mayor_tankor($link2, $cfg['allapot_tartas']);
+ $tankorok = array_merge($tankorok, array( array("tankorId" => 0, "tankorNev" => $cfg['mindenki_csop'] )));
+ $tankorok = array_merge($tankorok, array( array("tankorId" => 0, "tankorNev" => $cfg['mindenki_tanar'] )));
+ $tankorok = array_merge($tankorok, array( array("tankorId" => 0, "tankorNev" => $cfg['mindenki_diak'] )));
+ $nxt_csop = nxt_group_list();
+ $elozo_tcsop = "";
+ $mod_nxt_group = 0;
+ if($cfg['manage_groups'] === true){
+ 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:".po("\t".$val['tankorNev'],$cfg['csoportnev_hossz'],1)."-\tok.\n";}
+ $elozo_tcsop = $val['tankorNev'];
+ break;
+ }
+ }
+ unset($nxt_csop[$val['tankorNev']]); //Megvizsgálva, többször már nem kell dönteni róla.
+ if( $val['tankorNev'] == $elozo_tcsop and $key2 != $val['tankorNev'] ){ //Duplikált tankör(név) a Mayorban
+ if($log['verbose'] > 2 ){ echo "* -\t Dupla tankör:".po("\t".$val['tankorNev'], $cfg['csoportnev_hossz'],1)."-\tmayor.\n";}
+ }
+ else if($key2 != $val['tankorNev']){ //Ha nincs ilyen (tankör)nevű csoport
+ group_add($val['tankorNev']); //Akkor létrehozza
+ $mod_nxt_group++;
+ if ($log['verbose'] > 2 ){ echo "* -\t Új csoport:".po("\t".$val['tankorNev'],$cfg['csoportnev_hossz'],1)."-\thozzáadva.\n";}
+ }
+ }
+
+ // A megszűnt tanköröket-csoportokat kitörli
+ foreach($nxt_csop as $key => $val){
+ if(substr($key, 0, strlen($cfg['csoport_prefix'])) === $cfg['csoport_prefix'] ){ //Csak a "prefix"-el kezdődő nevűekre.
+ group_del($key); //elvégzi a törlést
+ $mod_nxt_group++;
+ if ($log['verbose'] > 1 ){ echo "** -\t Megszűnő csop:".po("\t$key",$cfg['csoportnev_hossz'],1)."-\t eltávolítva.\n";}
+ } else {
+ if ($log['verbose'] > 3 ){ echo " ---\t Egyéb csoport:".po("\t$key",$cfg['csoportnev_hossz'],1)."-\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_tanar = get_mayor_tanar($link2, $cfg['allapot_tartas']); //Rendezve jön
+ $mayor_tanar = add_tk_to_users( $mayor_tanar, null, $cfg['mindenki_tanar']); //csak rendezett tömbökön!
+ $mayor_tanar = set_param_to_user($mayor_tanar, null, 'quota', $cfg['default_quota']);
+ $mayor_tanar = set_param_to_user($mayor_tanar, null, 'diakId', -1 );
+ usort($mayor_tanar, "mayor_userlistcmp");
+
+ $mayor_diak = get_mayor_diak($link2, $cfg['allapot_tartas']); //mysql rendezi
+ $mayor_diak = add_tk_to_users( $mayor_diak, null, $cfg['mindenki_diak']); //csak rendezett tömbökön!
+ $mayor_diak = set_param_to_user($mayor_diak, null, 'quota', $cfg['diak_quota']);
+ $mayor_diak = set_param_to_user($mayor_diak, null, 'tanarId', -1 );
+ usort($mayor_diak, "mayor_userlistcmp");
+
+ $mayor_user = array();
+ $mayor_user = array_merge($mayor_tanar, $mayor_diak); //Tanár, és diák lista együtt
+
+ if(!empty($cfg['megfigyelo_user'])){ //A megfigyelő user felvétele a lista végére
+ $mayor_user = array_merge($mayor_user, array(
+ array( 'userAccount' => $cfg['megfigyelo_user'], //A megfigyelő user legyen egyben virtuális tanár is
+ 'tanarId' => 1, 'oId' => 70000000000, 'diakId' => 0, 'tankorId' => 0, 'fullName' => "Napló Admin Megfigyelő",
+ 'email' => $cfg['default_email'],
+ 'tankorNev' => $cfg['mindenki_tanar'],
+ )));
+ foreach(get_mayor_tankor($link2, $cfg['allapot_tartas']) as $key => $val){ //És beléptetve az összes létező csoportba
+ $mayor_user = array_merge($mayor_user, array(
+ array( 'userAccount' => $cfg['megfigyelo_user'],
+ 'email' => $cfg['default_email'],
+ 'tanarId' => 1,
+ 'diakId' => 0,
+ 'oId' => 70000000000,
+ 'tankorId' => $val['tankorId'],
+ 'fullName' => "Napló Admin Megfigyelő",
+ 'tankorNev' => $val['tankorNev'],
+ )
+ )
+ );
+ //if($val['tankorNev'] == "(tk) 10.b kémia" ){ break; }
+ }
+ }
+ usort($mayor_user, "mayor_userlistcmp"); //rendezés
+ $mayor_user = add_tk_to_users( $mayor_user, null, $cfg['mindenki_csop']); //csak rendezett tömbökön //mindenki csoport
+ usort($mayor_user, "mayor_userlistcmp"); //Végén ismét rendezzük az egészet
+ $mayor_user = array_merge($mayor_user, array(array('userAccount' => null, 'fullName' => null, 'tankorNev' => null, 'diakId' => 0, 'tanarId' => 0,)) ); //strázsa a lista végére
+
+ $nxt_user = nxt_user_list();
+ $nxt_group = nxt_group_list();
+ $m2n_catalog = catalog_userlist($link);
+ $m2n_forbidden = catalog_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'] = gen_username($val); // lehet saját függvény is
+ if(in_array($mayor_user[$key]['userAccount'], $m2n_forbidden) ){ //És, ha a nyilvántartásban "forbidden"-ként szerepel,
+ unset($mayor_user[$key]); // akkor nem foglalkozik vele tovább.
+ }
+ }
+
+ $curr = "";
+ $curr_o = array();
+ $tankorei = array();
+ $mod_nxt_user_all = 0;
+ $mod_nxt_user = 0;
+ foreach($mayor_user as $key => $val){ //Végignézi a mayorból kinyert lista alapján.
+
+ if($curr != $val['userAccount']){ //CSAK Rendezett tömbökön !!
+ foreach($nxt_user as $key2 => $val2){
+ if($curr == $key2){ //Már létezik a felhasználó a Nextcloud-ban
+ $log['curr'] = "-\n-\tFelhasználó:".po("\t$curr_n ($curr)",$cfg['felhasznalo_hossz'],1)."--\tlétezik.\n";
+ if ($log['verbose'] > 3 ){ echo " -".$log['curr']; $log['curr'] = "";}
+ if ( in_array($curr, $m2n_catalog['account'])){ //Benne van-e a nyilvántartásban?
+ if($m2n_catalog['status'][array_keys($m2n_catalog['account'], $curr)[0]] == 'disabled' ){ // Ha le lett tiltva
+ //if(user_info($curr)['enabled']!=true){ // Ez valós, de irtó lassú
+ catalog_userena($link, $curr); //Ha netán le lenne tiltva, akkor engedélyezi,
+ user_ena($curr); // ha a script tiltotta le.
+ $mod_nxt_user++;
+ $log['curr'] = "-\n-\tFelhasználó:".po("\t$curr_n ($curr)",$cfg['felhasznalo_hossz'],1)."--\tengedélyezve.\n";
+ if ($log['verbose'] > 2 ){ echo " -".$log['curr']; $log['curr'] = ""; } //Ez is változtatás
+ }
+ } else { //Nincs a katalógusban, nincs tiltva, felvesszük
+ catalog_useradd($link, $curr);
+ if ($log['verbose'] > 1 ){ echo "-\t\tA felhasználó:".po("\t$curr",$cfg['felhasznalo_hossz'],1)."-\tnyilvántartásba véve.\n";}
+ }
+ //--------------------------------------- QUOTA -----------------------------------//
+ if($cfg['always_set_diak_quota'] === true && $curr_tanarId < 0 && $curr_diakId > 0 ){ //Állítsunk-e erőből (diák) qvótát?
+ $params['quota'] = $cfg['diak_quota']; // Alapértelmezett diák kvóta
+ user_set($curr,$params);
+ $mod_nxt_user++;
+ if ($log['verbose'] > 3 ){ echo "* -\t\tBeállítva:\t"."Qvóta: ".$params['quota']."\t\n"; }
+ }
+
+ if($cfg['manage_groups'] === true){ //Csak, ha a acsoportokhoz is nyúlunk
+ //------------------------- Tankörmappa györkér + info.txt ------------------------//
+ $ret = groupdir_create_root($curr, $curr_tanarId, $cfg['groupdir_prefix']);
+ if ($ret[0] === true && $log['verbose'] > 2 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} echo "* -\t\tLétrehozva :".po("\t./".$curr."/files/".$cfg['groupdir_prefix'],$cfg['csoportnev_hossz'],1)."\ttankörmappa gyökér.\n";}
+ if ($ret[1] > 0 && $log['verbose'] > 3 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} echo "* -\t\tLétrehozva :".po("\t./".$curr."/files/". $cfg['groupdir_prefix']."/INFO.txt",$cfg['csoportnev_hossz'],1)."\tfájl.\n";}
+
+ //------------------------------------------ Tankörök egyeztetése -------------------------------------------//
+ foreach($nxt_group as $key3 => $val3){ //A tankörök egyeztetése
+ if(in_array($key3, $tankorei) /*or $key3 == $cfg['mindenki_csop']*/){ //szerepel-e a felhasználó tankörei között a csoport, vagy a "mindenki" csoport?
+ if( in_array($curr, $val3)){ //Igen, és már benne is van +++
+ if ($log['verbose'] > 3 ){ echo " -\t\tBenne van a:".po("\t$key3",$cfg['csoportnev_hossz'],1)."\tcsoportban.\n";}
+ } else { //Nincs, most kell beletenni
+ if ($log['verbose'] > 2 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} echo "* -\t\tHozzáadva a:".po("\t$key3",$cfg['csoportnev_hossz'],1)."\tcsoporthoz.\n"; }
+ group_user_add($key3, $curr); //A "mindenki csoportot is ellenőrzi
+ $mod_nxt_user++;
+ }
+
+ //------------------------------- Tankörmappa -----------------------------// //( "_" --> mindenkinek, "username" --> csak neki ) && tanár
+ $ret = groupdir_create_groupdir($curr, $curr_tanarId, $cfg['groupdir_prefix']."/".$key3);
+ if ($ret === true && $log['verbose'] > 2 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} echo "* -\tÚj mappa Létrehozva:".po("\t/".$key3."/",$cfg['csoportnev_hossz'],1)."\t./".$curr."/files/".$cfg['groupdir_prefix']."/ mappába\n";}
+ $ret = groupdir_create_groupdir($curr, $curr_tanarId, $cfg['groupdir_prefix']."/".$key3."_beadás");
+ if ($ret === true && $log['verbose'] > 2 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} echo "* -\tÚj mappa Létrehozva:".po("\t/".$key3."_beadás/",$cfg['csoportnev_hossz'],1)."\t./".$curr."/files/".$cfg['groupdir_prefix']."/ mappába\n";}
+
+ //------------------------------------- Tankör (Csoportból) törlés -------------------------//
+ } else { //Nem szerepel a tankörei között
+ if(in_array($curr, $val3) and (substr($key3, 0, strlen($cfg['csoport_prefix'])) === $cfg['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:".po("\t$key3",$cfg['csoportnev_hossz'],1)."\tcsoportból.\n"; }
+ group_user_del($key3, $curr); //egy korábbi tankör lehetett...
+ $mod_nxt_user++;
+ }
+ }
+ }
+
+ //------------------------------------- Tankörmappa törlés + NXT-rescan ----------------------------------// //( "_" --> mindenkinek, "username" --> csak neki ) && tanár
+ $ret = groupdir_finish($curr, $curr_tanarId, $cfg['groupdir_prefix'], $tankorei);
+ if (count($ret[0]) > 0 && $log['verbose'] > 2 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} foreach($ret[0] as $retkey => $retval){ echo "* -\t Üres (Tankör)mappa:".po("\t/".$retval."/", $cfg['csoportnev_hossz'],1)."\t./".$curr."/files/".$cfg['groupdir_prefix']."/ mappából törölve.\n";}}
+ if (count($ret[1]) > 0 && $log['verbose'] > 2 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} foreach($ret[1] as $retkey => $retval){ echo "* -\tFájl/Mappa Átnevezve:".po("\t/".$retval."/", $cfg['csoportnev_hossz'],1)."\t./".$curr."/files/".$cfg['groupdir_prefix']."/ mappában.\n";}}
+ if (count($ret[2]) > 0 && $log['verbose'] > 3 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} foreach($ret[2] as $retkey => $retval){ echo "* -\t\tTankörmappa:".po("\t/".$retval."/", $cfg['csoportnev_hossz'],1)."\t./".$curr."/files/".$cfg['groupdir_prefix']."/ mappában békén hagyva.\n";}}
+ if ($ret[3] === true && $log['verbose'] > 3 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} echo "* -\t\tNXT-rescan :".po("\t./".$curr."/files/".$cfg['groupdir_prefix']."/", $cfg['csoportnev_hossz'],1)."\t mappán.\n";}
+ }
+ $mod_nxt_user_all++;
+ break;
+ }
+ }
+ unset($nxt_user[$curr]); //Felhasználó 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ó
+
+ $ret = user_add($curr, $curr_n); //Akkor hozzá kell adni
+ catalog_useradd($link, $curr);
+ if ($printpasswds === true ){ $pw = strval($ret[1]); } else { $pw = "<password>"; }
+ if ($log['verbose'] > 2 ){ echo "-\n**-\tFelhasználó:".po("\t".po($curr_n, 25, 1)." ($curr/$pw)",$cfg['felhasznalo_hossz'],1)." --\tlétrehozva.\n"; }
+ $mod_nxt_user++;
+
+ if($cfg['manage_groups'] === true){
+ $ret = groupdir_create_root($curr, $curr_tanarId, $cfg['groupdir_prefix']);
+ if ($ret[0] === true && $log['verbose'] > 2 ){ echo "* -\t\tLétrehozva :".po("\t./".$curr."/files/".$cfg['groupdir_prefix']."/",$cfg['csoportnev_hossz'],1)."\ttankörmappa gyökér.\n";}
+ if ($ret[1] > 0 && $log['verbose'] > 2 ){ echo "* -\t\tLétrehozva :".po("\t./".$curr."/files/".$cfg['groupdir_prefix']."/INFO.txt",$cfg['csoportnev_hossz'],1)."\tfájl.\n";}
+
+ foreach($tankorei as $key3 => $val3){ //Hozzáadja a (tankör)csoportokhoz is egyből,
+ if(array_key_exists($val3, $nxt_group)) { // de, csak akkor, ha az a csoport a Nextcloud-ban is létezik.
+ group_user_add($val3, $curr);
+ if ($log['verbose'] > 2 ){ echo "* -\t\tHozzáadva a:".po("\t $val3",$cfg['csoportnev_hossz'],1)."\tcsoporthoz.\n"; }
+ $ret = groupdir_create_groupdir($curr, $curr_tanarId, $cfg['groupdir_prefix']."/".$val3);
+ if ($ret === true && $log['verbose'] > 2 ){echo "* -\tÚj mappa Létrehozva:".po("\t/".$val3."/",$cfg['csoportnev_hossz'],1)."\t./".$curr."/files/".$cfg['groupdir_prefix']."/ mappa\n";}
+ $ret = groupdir_create_groupdir($curr, $curr_tanarId, $cfg['groupdir_prefix']."/".$val3."_beadás");
+ if ($ret === true && $log['verbose'] > 2 ){echo "* -\tÚj mappa Létrehozva:".po("\t/".$val3."_beadás/",$cfg['csoportnev_hossz'],1)."\t./".$curr."/files/".$cfg['groupdir_prefix']."/ mappa\n";}
+ }
+ }
+ $ret = groupdir_finish($curr, $curr_tanarId, $cfg['groupdir_prefix'], null);
+ if ($ret[3] === true && $log['verbose'] > 3 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} echo "* -\t\tNXT-rescan :".po("\t./".$curr."/files/".$cfg['groupdir_prefix']."/", $cfg['csoportnev_hossz'],1)."\t mappán.\n";}
+ }
+
+ if($curr_diakId > 0) { //Ennyi is elég // Diákról van szó /// if($curr_tanarId < 0 && $curr_diakId > 0)
+ $params['quota'] = $cfg['diak_quota']; // Alapértelmezett kvóta
+ } else {
+ $params['quota'] = $cfg['default_quota']; // Alapértelmezett kvóta
+ }
+ $params['lang'] = $cfg['default_lang']; // Nyelv
+ /*
+ if($curr_email == ""){
+ $params['email'] = $cfg['default_email']; // e-mail beállítása
+ } else {
+ $params['email'] = $curr_email; // ha van a mysql-ben e-mail, akkor azt használja
+ }
+ */
+ $params['email'] = $curr_email;
+ user_set($curr,$params); //Alapértelmezett paraméterek érvényesítése
+ if ($log['verbose'] > 3 ){ echo "* -\t\tBeállítva:\t"."Qvóta: ".$params['quota']."\tNyelv: ".$params['lang']."\tE-mail: ".$params['email']."\n";}
+ }
+
+ unset($tankorei);
+ $tankorei = array(); // új ciklus kezdődik
+ $curr = $val['userAccount']; //
+ $curr_n = $val['fullName']; //
+ $curr_tanarId = $val['tanarId'];
+ $curr_diakId = $val['diakId'];
+ if(!empty($val['email'])) {
+ $curr_email = $val['email'];
+ } else if(!empty($val['mail'])){
+ $curr_email = $val['mail'];
+ } else {
+ $curr_email = $cfg['default_email']; // e-mail beállítása
+ }
+ }
+ $tankorei[] = $val['tankorNev']; // Másodszor/Egyébként a csoportok (tankörök) gyűjtése
+ }
+
+
+// A (maradék) megszűnő felhasználónevek egyeztetése
+ if ($log['verbose'] > 0 ){ echo "\n***\tTörlendő/Letiltandó felhasználók egyeztetése.\n";}
+ $m2n_catalog = catalog_userlist($link);
+ foreach($nxt_user as $key => $val){ //Benne van a nyilvántartásban,
+ if(in_array($key, $m2n_catalog['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
+ catalog_userdel($link, $key); //A listáról is
+ if ($log['verbose'] > 1 ){ echo "-\n**-\tFelhasználó:".po("\t$val ($key)",$cfg['felhasznalo_hossz'],1)."--\ttörölve.\n"; }
+ } else {
+ user_dis($key); //Különben csak letiltja (fájlok ne vesszenek el)
+ catalog_userdis($link, $key); //Feljegyzi a nyilvántartásba
+ if ($log['verbose'] > 1 ){ echo "-\n**-\tFelhasználó:".po("\t$val ($key)",$cfg['felhasznalo_hossz'],1)."--\tletiltva.\n"; }
+ }
+ $mod_nxt_user++;
+ $mod_nxt_user_all++;
+ }
+ // 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 törli
+ // - vagy megszűnő, korábbi mayor_napló-s user --> törli, vagy letiltja
+ // ha rajta van a $catalog 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();
+ $m2n_catalog = catalog_userlist($link);
+ $m2n_forbidden = catalog_forbiddenlist($link);
+
+ foreach($m2n_catalog['account'] as $key => $val){
+ if(@$nxt_user[$val] === null ){ //Erre a nextcloud "occ" parancs hibakezelése miatt van szükség
+ if ($log['verbose'] > 4 ){ echo "-\n**-\tFelhasználónév:".po("\t($val)",$cfg['felhasznalo_hossz'],1)."--\tkivéve a nyilvántartásból.\n";}
+ catalog_userdel($link, $val);
+ }
+ }
+ foreach($m2n_forbidden as $key => $val){ //Szinkronizálja a $cfg['kihagy'] listát a nyilvántartással.
+ if(!in_array($val, $cfg['kihagy'])){
+ if ($log['verbose'] > 4 ){ echo "-\n**-\tFelhasználó:".po("\t($val)",$cfg['felhasznalo_hossz'],1)."--\tújra kezelve.\n";}
+ catalog_userena($link,$val);
+ user_ena($val);
+ }
+ }
+
+//-------------------------------------------------------------------------------------------------------------------------------
+
+//test
+//script_install($link);
+ if($log['verbose'] > 0 ){ echo "\n\nStatisztikák:\n";}
+ if($log['verbose'] > 0 ){ echo "Összes művelet: ".($mod_nxt_user + $mod_nxt_group)."db.\n";}
+ if($log['verbose'] > 0 ){ echo "Feldolgozva: ".$mod_nxt_user_all."db felhasználó.\n";}
+ if($log['verbose'] > 0 ){ echo "Változtatás: ".$mod_nxt_user."db a Nextcloud felhasználói beállításokban.\n";}
+ if($log['verbose'] > 0 ){ echo "Változtatás: ".$mod_nxt_group."db a Nextcloud csoport beállításokban.\n";}
+ if($dryrun){ echo " (( !! DRY RUN !! ))\n"; }
+
+
+ @mysqli_close($link2);
+ @mysqli_close($link);
+ $t_run = round((microtime(true) - $t_start)/60, 3);
+ if ($log['verbose'] > 0 ){ echo "\n(Runtime: ".$t_run." min.)\nkész.\n";} //endline
+
+} else {
+ echo "\n\n******** Legalább PHP5, php-mysql, php-iconv, php-ldap szükséges! ********\n\n";
+}
+
+
+
+/*
+sn:: Vezetéknév
+serialNumber:: sorozatszám2
+serialNumber:: sorozatszám1
+c: HU
+l:: Telepulés
+st:: Megyé
+street:: Utcá
+title:: Beosztás
+description:: Leirás
+postalAddress:: postaiCímx2
+postalAddress:: postaiCímX1
+postalCode:: Iranyitoszám
+postOfficeBox:: Postafiók
+physicalDeliveryOfficeName:: Irodá
+telephoneNumber:: tel0é
+facsimileTelephoneNumber:: tel_faxé0
+givenName:: Utónév
+initials:: MónoGR
+otherTelephone: 000111222333
+otherTelephone: telefon1
+info:: Megjegyzés 2.0
+memberOf: CN=suli_mail,OU=suli-mail,DC=ad,DC=suli,DC=lan
+memberOf: CN=suli_edu,OU=suli-edu,DC=ad,DC=suli,DC=lan
+memberOf: CN=suli_cloud,OU=suli-cloud,DC=ad,DC=suli,DC=lan
+otherPager: 1212
+otherPager: 2323
+otherPager: tel_szemelyhivo1
+co:: Magyarország
+department:: Ország
+company:: Cég
+streetAddress:: Utca\n Neve \n Hosszú
+otherHomePhone: 0101
+otherHomePhone: 11223344
+otherHomePhone: tel_otthon1
+wWWHomePage:: webé0
+employeeNumber:: emplNumé
+employeeType:: emltypeé
+personalTitle:: személyiCím
+homePostalAddress:: otthonicím
+name:: Teljes Név
+countryCode: 348
+employeeID:: employeIDé
+homeDirectory: C:\totalcmd
+comment:: kóómment
+sAMAccountName: ggg
+division:: diviízió
+otherFacsimileTelephoneNumber: 2323
+otherFacsimileTelephoneNumber: tel_fax1
+otherMobile: tel_mobil1
+primaryTelexNumber: Telex
+otherMailbox:: másikl1@email
+otherMailbox:: másik2@email
+ipPhone:: tel_ipí0
+otherIpPhone: 00000
+otherIpPhone: tel_ip1
+url: weblap2
+url: http://weblap1
+uid: uid2
+uid: uid1
+mail:: eméail@email.com
+roomNumber:: szobaszám2
+roomNumber:: szobaszám1
+homePhone:: tel_otthoní0
+mobile:: tel_mobiló0
+pager:: tel_szemelyhivó0
+jpegPhoto::
+departmentNumber:: departmentNumber2é
+departmentNumber:: departmentNumber1á
+middleName:: középsőNév
+thumbnailPhoto::
+preferredLanguage: nyelv
+uidNumber: 1601
+gidNumber: 1601
+unixHomeDirectory: /home/aa/bb
+loginShell: /bin/bash
+*/
+
+
+
+
+?>
+
diff --git a/egyéb/nextcloud/mayor-nextcloud.cfg.php b/egyéb/nextcloud/mayor-nextcloud.cfg.php
index 205f6714..4e1f82de 100644
--- a/egyéb/nextcloud/mayor-nextcloud.cfg.php
+++ b/egyéb/nextcloud/mayor-nextcloud.cfg.php
@@ -1,232 +1,305 @@
<?php
//////////////////////// Figyelem! Az alábbi config érvényes a Mayor-Nextcloud scripthez, nem a "mayor-nextcloud.php" fejléce!! ////////////////////////////
-
-
-$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['diak_quota'] = "2GB";
-$m2n['min_osztalyok'] = array(); //pl: array('9.a','11.a');
-$m2n['csoportnev_hossz'] = 40;
-$m2n['felhasznalo_hossz'] = 45;
-$m2n['default_lang'] = "hu";
-$m2n['manage_groupdirs'] = false;
-$m2n['groupdir_prefix'] = "Iskolai Távoktatás";
-$m2n['mindenki_csop'] = "naplós_felhasználók";
-$m2n['mindenki_tanar'] = "naplós_tanárok";
-$m2n['mindenki_diak'] = "naplós_diákok";
-$m2n['zaras_tartas'] = "2018-06-14"; // Ha nem kell, akkor állítsd át "1970-01-01"-re.
-$m2n['megfigyelo_user'] = "naplo_robot";
-$m2n['kihagy'] = array(); //pl: array('Trap.Pista', 'Ebeed.Elek', '22att')
-$m2n['verbose'] = 3 ;
+$cfg = array();
+
+$cfg['db_host'] = "localhost";
+$cfg['db_port'] = "3306";
+$cfg['db_user'] = "root";
+$cfg['db_pass'] = "";
+$cfg['db_m2n_db'] = "mayor_to_nextcloud";
+$cfg['db_m2n_prefix'] = "m2n_";
+$cfg['db_nxt_dbname'] = "Nextcloud";
+$cfg['db_nxt_prefix'] = "oc_";
+//$cfg['db_mayor_host'] = "";
+//$cfg['db_mayor_port'] = "";
+//$cfg['db_mayor_user'] = "";
+//$cfg['db_mayor_pass'] = "";
+
+$cfg['min_evfolyam'] = 7;
+$cfg['isk_rovidnev'] = "rovid";
+$cfg['csoport_prefix'] = "(tk) ";
+$cfg['default_email'] = "indulo@iskola.hu";
+$cfg['default_passw'] = "EHYmGktzrdfS7wxJR6DFqxjJ";
+$cfg['always_set_diak_quota'] = false;
+$cfg['default_quota'] = "10GB";
+$cfg['diak_quota'] = "2GB";
+$cfg['min_osztalyok'] = array(); //pl: array('9.a','11.a');
+$cfg['csoportnev_hossz'] = 40;
+$cfg['felhasznalo_hossz'] = 45;
+$cfg['default_lang'] = "hu";
+$cfg['manage_groups'] = false;
+$cfg['manage_groupdirs'] = false; //Foglalkozzon-e a script a tankörmappákkal
+$cfg['groupdir_users'] = array("naplo_robot","123abcd"); //Ha a tömb üres, akkor az összes tanárral dolgozik.
+$cfg['groupdir_prefix'] = "Iskolai Távoktatás";
+$cfg['mindenki_csop'] = "naplós_felhasználók";
+$cfg['mindenki_tanar'] = "naplós_tanárok";
+$cfg['mindenki_diak'] = "naplós_diákok";
+$cfg['allapot_tartas'] = "2018-06-14"; // Ha nem kell, akkor állítsd át "1970-01-01"-re.
+$cfg['megfigyelo_user'] = "naplo_robot";
+$cfg['kihagy'] = array(); //pl: array('Trap.Pista', 'Ebeed.Elek', '22att')
+$cfg['verbose'] = 3 ;
+
+
+$cfg['ldap_server'] = "ldaps://windows.iskola.hu:636"; //Jelszóváltoztatást csak TLS/SSL porton enged a windows!
+$cfg['ldap_reqCert'] = "allow"; // Ellenőrizze-e a certet: "true" "allow" "never"
+$cfg['ldap_baseDn'] = "DC=ad,DC=iskola,DC=hu";
+$cfg['ldap_rootBindDn'] = "CN=LDAP_ADATCSERE_ADMIN,CN=Users,DC=ad,DC=iskola,DC=hu";
+$cfg['ldap_rootBindPw'] = "<password>";
+$cfg['ldap_pageSize'] = 100;
+$cfg['ld_username'] = "sAMAccountName";
+$cfg['ld_oId'] = "serialNumber";
+$cfg['ld_employeeId'] = "employeeNumber";
+$cfg['ld_osztalyJel'] = "department";
+$cfg['ld_viseltNevElotag'] = "initials";
+$cfg['ld_viseltCsaladinev'] = "sn";
+$cfg['ld_viseltUtonev'] = "givenName";
+$cfg['ld_lakhelyOrszag'] = "co";
+$cfg['ld_lakhelyHelyseg'] = "l";
+$cfg['ld_lakhelyIrsz'] = "postalCode";
+$cfg['ld_lakHely'] = "streetAddress";
+$cfg['ld_telefon'] = "homePhone";
+$cfg['ld_mobil'] = "mobile";
+$cfg['ld_statusz'] = "company";
+$cfg['ld_beoszt'] = "title";
+$cfg['ld_nxtQuota'] = "description";
$occ_path = "/var/www/nextcloud/";
$occ_user = "www-data";
+/*
+Nextcloud(13+) - Mayor script
+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.
-$m2n['infotxt_szöveg'] = <<<EOT
-
- FONTOS INFORMÁCIÓK!
-
-Ez a mappa, és a benne lévő mappák, a távoktatás segítésére, egyszerűsítésére szolgálnak.
-
-Fontos tudni, hogy ha megosztunk egy, a mi mappánkon belüli fájlt, vagy mappát, egy másik felhasználóval a felhőben, akkor a megosztott fájl, vagy mappa, a másik felhasználónak a kezdőoldalán jelenik meg, a fájlok között.
-Egy idő után, ha az illető, már nagyon sok megosztást fogadott, a rengeteg fájl már számára egy átláthatatlan mappa-tengert fog képezni, és nagyon nehéz lesz benne eligazodnia.
+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.)
+A Nextcloud 13-mas és újabb verzióival használható.
-Ezen probléma kivédésére született ez, az alábbi megoldás:
+FONTOS!
+ Legalább "php7.0" és "Apache 2.4" kell hozzá!
+
-A tanátoknak a szerver automatikusan létrehoz egy, a távoktatásra használatos gyűjtőmappát, ebbe a mappába létrehozza a tanár által tanított (e-napló szerint) tanköröknek megfelelő mappákat automatikusan.
+Beállítása az alábbiak szerint: (egy lehetséges elrendezés)
-A használati szabályok:
-1) A tanár ezekbe a mappákba helyezi/helyezheti el a diákoknak szánt fájlokat.
-2) A tanár ezeket a mappákat osztja meg a diákcsoportokkal.
-3) A diák ezekben a mappákban helyezi el a nyilvánosan visszaküldendő fájlokat, képeket. (Ezt a mappát, a tankör összes tagja látja, amelyik tankörrel megosztottuk.)
-4) A diák, a privát módon visszaküldendő fájlokat, a tanárral való megegyezés szerint, lehetőleg ne ebbe a mappába helyezze el, azt egyszerűen ossza meg a tanárával.
-5) A Tankörmappákban a fájlok rendjét a tanár határozza/határozhatja meg.
-6) A tankörmappák gyűjtőmappájában a rendet a szerver tartja, oda egyéb fájl, nem helyezhető. Ha mégis kerülne oda egyéb fájl akkor, arról a szerver, a tanárt először értesíti, majd később a fájt automatikusan törli.
+-(I.) Először telepítsünk föl egy Nextcloud(legalább 13-mas verzió) szervert egy Debian (9-es vagy magasabb verzió) szerverre,
+ a Nextcloudnak szüksége 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 az interneten "Nextcloud Admin Manual"-ra keresve 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 védeni kell. Állítsuk be a tulajdonost, és korlátozzuk a jogosultságokat! (chown root; chmod 600)
+-(III.) Majd töltsük ki a konfigurációs fájlt (mayor-nextcloud.cfg.php) az alább felsorolt beállítások szerint!
+ (Ennek is állísunk (ugyanolyan)szigorú jogosultságokat, mint a fenti esetben! )
-Legyen egy gyakorlati példa:
-A tanár mappalistájában létrejön a gyűjtőmappa mondjuk: "Iskolai Távoktatás" névvel.
-Ezen, a "Iskolai Távoktatás" nevű mappán belül létrejön mondjuk, egy "(tk) 10.b fizika" és egy "(tk) 10.b osztályfőnöki" mappa.
+-(IV.) Ezután, a script, az első futtatásnál automatikusan telepíti magát.
+ Ez azt jelenti, hogy létrehoz egy mysql adatbázist saját magának, ahol később nyilvántartja, hogy melyek azoka felhasználók, amelyeket ő hozott létre.
+ Így később, a folyamatos nyilvántartás révén a script a saját maga által létrehozott felhasználókat veszi csak figyelembe,
+ a többi, a más által létrehozott Nextcloud felhasználókhoz alapvetően nem nyúl.
+ Ez később felülbírálható, ha a script nyilvántartási adatbázisába kézzel felvesszük az adott felhasználó nevét.
-A tanár szabadon használhatja a "(tk) 10.b fizika" és a "(tk) 10.b osztályfőnöki" mappákat, azokat szabadon megoszthatja, bele fájlokat helyezhet, belőlük fájlokat törölhet, ha engedélyezi a szerkesztést, akkor a diák is helyezhet bele fájlokat, vagy szerkesztheti*** a fájlokat.
-Ha a tankörmappát megosztja a diákkal/tankörrel, akkor a diáknak nem egy csomó fájl, és nem is az "Iskolai Távoktatás" mappa fog megjelenni a kezdőoldalán, hanem az adott tankörmappa. Tehát, ha a tanár a "(tk) 10.b fizika" mappát osztja meg, akkor a diák, a kezdőoldalán a "(tk) 10.b fizika" mappát fogja találni, és benne a tanár által hozzáadott fájlokat.
-Viszont a "Iskolai Távoktatás" nevű mappában csak! a "(tk) 10.b fizika" és a "(tk) 10.b osztályfőnöki" mappák lehetnek, más fájl, vagy mappa, nem!
-Ha mégis kerülne oda egyéb fájl, vagy mappa, akkor arról először értesíti a tanárt, majd a 3. értesítést követően, a nem odaillő fájlokat, vagy mappákat automatikusan törli.
-Ez szintén vonatkozik a korábban itt levő, de átnevezett mappákra is, tehát, ha a "(tk) 10.b fizika" mappát a tanár véletlenül átnevezné, akkor onnantól azt is "idegen" mappának fogja tekinteni.
+-(V.) 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.
-Ugyanez történik akkor is, ha a tanár, (a naplóban) kikerül a tankörből, tehát nem tanítja tovább, vagy a tankör ugrik egyet évkezdéskor, és a "(tk) 10.b fizika"-ból "(tk) 11.b fizika" lesz, ekkor a, még ottmaradó "(tk) 10.b fizika" mappát szintén idegennek fogja tekinteni.
+ 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.
-Természetesen a tanárnak lehetősége van az idegennek minősített mappákat, és azok tartalmát a "Iskolai Távoktatás" mappán kívülre, a saját mappái közé áthelyezni, vagy az idegennek minősített mappák tartalmát egy másik, már "elfogadott" tankörmappába tenni.
-(Ez utóbbit kell tenni, vagyis a tanárnak kézzel áthelyezni a fájlokat az egyik tankörmappából, az új tankörmappába, amikor évváltás van, és a tankör ugrik egyet "(tk) 10.b fizika" --> "(tk) 11.b fizika". )
+ 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ó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.)
+
+- (VI.) További Információk:
-*** Tipp:
-1)
-Ha szeretnénk biztosra menni, és elkerülni, hogy a diák, a tanár által, az egész tankörnek küldött fájlokba véletlenül beleszerkesszen, hozzunk létre egy egy "beadás", vagy hasonló nevű mappát a tankörmappán belül, és csak erre a "beadás" mappára adjuk meg a jogot a diáknak/diákcsoportnak/tankörnek szerkesztésre/módosításra.
+ 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 )
-2)
-Ha videófájlokat szeretnénk feltölteni nagy mennyiségben, akkor hozzunk létre az adott tankörhöz tartozó tankörmappában egy "Videók" nevű mappát, és abba helyezzük el a videófájlokat. A könnyebb megkülönböztethetőség végett nevezzük át a videófájlokat dátum szerinti, fájlnévre, vagy sorszámozzuk őket, és a sorszámot tüntessük föl a fájl nevében!
-EOT;
+ 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.
-
-/*
-Nextcloud(13+) - Mayor script
+ 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 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
-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.
+ 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.
-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.)
-A Nextcloud 13-mas és újabb verzióival használható.
-FONTOS!
- Legalább "php7.0" és "Apache 2.4" kell hozzá!
-
+-(VII.) További Paraméterek / Kapcsolók:
-Beállítása az alábbiak szerint: (egy lehetséges elrendezés)
+ --help : Help kiírása.
+ --debug : Ugyanaz mint a "--loglevel 100"
+ --loglevel x : A bőbeszédűséget/logolást tudjuk ezzel szabályozni, ekkor ez az érték érvényesül, nem a configban megadott.
+ --config-file : Konfig fájl elérési útvonala.
+ --config-print : A betöltött konfig kiírása.
+ --set-diak-quota : Az összes diák qvótáját átállítja az "$cfg['diak_quota'] = x" -nél megadott értékre,
+ csak kézzel futtatva működik, az automatikus, napi futtatásban nicns benne.
+ --create-groupdir <username>: A távoktatást segítő könyvtárstruktúrát csak az <username> felhasználónak hozza létre,
+ egyébként kapcsoló nélküli híváskor, (pl: automatikusan, a napi futásban éjjel), az összes tanárnak egyszerre.
+ --manage-groups <1/0> : Ha 1: A felhasználókat csoportokba rendezi a MaYor tankörök szerint, ha 0, nem foglalkozik a csoportokkal.
+ --manage-groupdirs <1/0> : Ha 1: tankörmappákat hoz létre a tankör-csoportokhoz, ha 0, nem foglalkozik vele. (kell hozzá a --manage-groups is!)
+
--(I.) Először telepítsünk föl egy Nextcloud(legalább 13-mas verzió) szervert egy Debian (9-es vagy magasabb verzió) szerverre,
- a Nextcloudnek szüksége 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 "Nextcloud Admin Manual" oldalon találunk.
+ 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!
--(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 védeni kell. Állítsuk be a tulajdonost, és korlátozzuk a jogosultságokat! (chown root; chmod 600)
- Majd töltsük ki a konfigurációs fájlt az alább felsorolt beállítások szerint!
--(III.) A "mayor-nextcloud.cfg.php" fajl elején találhatóak a konfigurációs adatok, ezeket a következőképpen módosíthatjuk:
+-(VIII.) A "mayor-nextcloud.cfg.php" 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.
+ $cfg['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
+ $cfg['db_port'] = "3306"; //nextcloud-mysql port
- $db['user'] = "root"; //nextcloud-mysql felhasználónév
+ $cfg['db_user'] = "root"; //nextcloud-mysql felhasználónév
// HA nem a root-ot használjuk, akkor, saját kezűleg kell létrehozni a script saját, nyilvántartó adatbázisát, és a fenti jogokat beállítani rá,
// valamint Ha a Nextcloud verziószáma kisebb 14-nél, 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.
// Ha a Debian-on alapértelmezett root-ot használjuk, akkor mindez automatikusan történik.
- $db['pass'] = ""; //A nextcloud-mysql jelszó (A fenti felhasználónévhez tartozó)
+ $cfg['db_pass'] = ""; //A nextcloud-mysql jelszó (A fenti 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 ekkor nem kell jelszó, más módon hitelesít, így biztonságosabb.
- $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)
+ $cfg['db_nxt_dbname'] = "nextcloud"; //A Nextcloud által használt adatbázis neve.
+ $cfg['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 mayor->nextcloud script adatbázisa (nyilvántartás).
+ $cfg['db_m2n_db'] = "mayor_to_nextcloud"; //A mayor->nextcloud script adatbázisa (nyilvántartás).
// Ennek az adatbázisnak a Nextcloud mysql szerverén kell lennie!
//
// Ebben az adatbázisban könyveli le 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ézzel létrehozott felhasználóktól, hogy azokat ne birizgálja.
- $db['m2n_prefix'] = "m2n_"; //A nyilvántartó adatbázisban használt prefix, ha van. (ha nincs, akkor "üres string"-re kell állítani ($db['m2n_prefix'] = "";))
+ $cfg['db_m2n_prefix'] = "m2n_"; //A nyilvántartó adatbázisban használt prefix, ha van. (ha nincs, akkor "üres string"-re kell állítani ($cfg['db_m2n_prefix'] = "";))
- //$db['mayor_host'] = ""; //Akkor használatos, ha a mayor alatti mysql szerver egy másik szerveren van, mint a Nextcloud által használt.
- //$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):
+ //$cfg['db_mayor_host'] = ""; //Akkor használatos, ha a mayor alatti mysql szerver egy másik szerveren van, mint a Nextcloud által használt.
+ //$cfg['db_mayor_port'] = ""; // ekkor ki kell venni kommentből, és ki kell tölteni a mayor-mysql serverre érvényes adatokkal.
+ //$cfg['db_mayor_user'] = "";
+ //$cfg['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.
+ $cfg['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.
+ $cfg['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.
+ $cfg['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 napló "intezmeny_xxx.diak", vagy az "intezmeny_xxx.tanar" táblákban nincs kitöltve az
+ $cfg['default_email'] = "rendszergazda@iskola.hu"; //Ha a mayor napló "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 Nextcloud fiókját, és ben nem állít sajátot)
- $m2n['default_passw'] = "EHYmGktzrdfS7wxJR6DF11jJ"; //Az induló jelszó a Nextcloud-ban a felhasználóknak. (érdemes erőset/hosszút megadni, a botnet-ek/hackerek miatt)
+ $cfg['default_passw'] = "EHYmGktzrdfS7wxJR6DF11jJ"; //Az induló jelszó a Nextcloud-ban a felhasználóknak. (érdemes erőset/hosszút megadni, a botnet-ek/hackerek miatt)
- $m2n['default_quota'] = "10GB"; //Az általános indulási fájl-kvóta a Nextcloud-ban. (A wbes felületen később módosítható.)
+ $cfg['default_quota'] = "10GB"; //Az általános indulási fájl-kvóta a Nextcloud-ban. (A wbes felületen később módosítható.)
// Amikor új felhasználót ad hozzá, akkor az itt megadott méretre állítja a qvótáját.
// Midel a diákoknak külön qvótát lehet beállítani, ezért ez értelemszerűen már csak a tanárokra vonatkozik.
- $m2n['diak_quota'] = "2GB"; //A diákok! indulási kvótája
+ $cfg['diak_quota'] = "2GB"; //A diákok! indulási kvótája
// amikor új diákot ad hozzá, ezt a qvótát állítja be a számára.
+ //Lehetőség van az összes diák kvótáját egyszerre, az itt beállított értékre állítani,
+ // de ez nem fut automatikusan éjjelente, ezt kézzel kell, --set-diak-qupta kapcsoló kiadásával.
- $m2n['default_lang'] = "hu"; //Az alapértelmezett nyelv (később minden felhasználó átállíthatja magának)
+ $cfg['default_lang'] = "hu"; //Az alapértelmezett nyelv (később minden felhasználó átállíthatja magának)
- $m2n['min_osztalyok'] = array( ); //Ide lehet felsorolni az osztályokat, ha konkrét osztályokat akaruni importálni,
- // ez logikai (megengedő) VAGY kapcsolatban van a $m2n['min_evfolyam'] -mal.
+ $cfg['min_osztalyok'] = array( ); //Ide lehet felsorolni az osztályokat, ha konkrét osztályokat akaruni importálni,
+ // ez logikai (megengedő) VAGY kapcsolatban van a $cfg['min_evfolyam'] -mal.
// Tehát ha beállítunk egy minimális évfolyamot, a listában felsorolt osztályok akkor is importálódnak,
// ha a min_évfolyam-nál kisebbek. //pl: array('9.a','11.a');
- $m2n['csoportnev_hossz'] = 40; // Formázott kimenet: Kiegészíti "space"-kkel a kimenetet, ha rövidebb lenne a csoport neve. (csak a script kinézete/átláthatósága végett)
+ $cfg['csoportnev_hossz'] = 40; //Formázott kimenet: Kiegészíti "space"-kkel a kimenetet, ha rövidebb lenne a csoport neve.
+ // (csak a script kinézete/átláthatósága végett)
- $m2n['felhasznalo_hossz'] = 45; // Formázott kimenet: Kiegészíti "space"-kkel a kimenetet, ha rövidebb lenne a felhasználó valódi neve. (csak a script kinézete/átláthatósága végett)
+ $cfg['felhasznalo_hossz'] = 45; //Formázott kimenet: Kiegészíti "space"-kkel a kimenetet, ha rövidebb lenne a felhasználó valódi neve.
+ // (Ssak a script szép kinézete, átláthatósága végett.)
- $m2n['mindenki_csop'] = "naplós_felhasználók"; //Legyen egy olyan csoport, amiben "mindenki benne van".
+ $cfg['mindenki_csop'] = "naplós_felhasználók"; //Legyen egy olyan csoport, amiben "mindenki benne van".
// ebbe a "mindenki" csoportba minden, a script által létrehozott felhasználó bekerül.
-
- $m2n['mindenki_tanar'] = "naplós_tanárok"; //Legyen egy olyan csoport, amiben minden tanár benne van
+
+ $cfg['mindenki_tanar'] = "naplós_tanárok"; //Legyen egy olyan csoport, amiben minden tanár benne van
// ebbe a "minden_tanár" csoportba a naplóbeli tanárok kerülnek.
-
- $m2n['mindenki_diak'] = "naplós_diákok"; //Legyen egy olyan csoport, amiben "minden diák" benne van.
+
+ $cfg['mindenki_diak'] = "naplós_diákok"; //Legyen egy olyan csoport, amiben "minden diák" benne van.
// ebbe a "minden_diák" csoportba a naplóbeli diákok kerülnek.
- $m2n['zaras_tartas'] = "2018-06-19"; //A jelölt napon befejezett, de nem lezárt tanév adatainak megtartása. (pl. szeptemberig)
- // Ha már nem kell, akkor állítsd "1970-01-01"-ra !;
+ $cfg['allapot_tartas'] = "2018-06-19"; //A jelölt nap állapotának megtartása/betöltése minden futtatáskor. (hasznos lehet a nyári szütnetben)
+ // Csak az AKTÍV vagy LEZÁRT állapotú szemeszereket nézi.
+ //A szerveren lévő legelső, vagy legutolsó, (aktív vagy lezárt) szemeszter előtti, illetve utáni nap nem állítható be.
+ //Ha már nem kell, vagy, ha mindíg az aktuális (aznapi) dátumot szeretnéd használni,
+ // akkor állítsd üresre, vagy "1970-01-01"-ra!;
+
+ $cfg['manage_groupdirs'] = false; //Ha szerenénk, hogy a script létrehozza a távoktatást segítő tankörmappákat, állítsuk "true"-re!
- $m2n['manage_groupdirs'] = false; //Ha szerenénk, hogy a script létrehozza a távoktatást segítő tankörmappákat, állítsuk "true"-re!
+ $cfg['groupdir_users'] = array("123abcd", ); //Ha csak egyes tanároknak szeretnénk bekapcsolni a tankörmappákat,
+ // ha minden tanárnak, akkor állítsuk üresre a tömböt! / = array();/
- $m2n['groupdir_prefix'] = "Iskolai Távoktatás"; //A távoktatást segítő mappák gyüjtőmappája/gyökérkönyvtára.
-
- $m2n['verbose'] = 3 //Log bőbeszédűség (A leg informatívabb(tömörebb), talán a 3-mas fokozat.)
+ $cfg['groupdir_prefix'] = "Iskolai Távoktatás"; //A távoktatást segítő mappák gyüjtőmappája/gyökérkönyvtára.
+
+ $cfg['manage_groups'] = true; //Foglalkozzon-e a tankörökkel/csoportokkal? Ha true -> igen, ha false, akkor csak a felhasználókat
+ // egyezteti a mayorral
+ $cfg['manage_groupdirs'] = false; //A tankör-cspoprt mappákat kezelje-e vagy sem.
+
+ $cfg['verbose'] = 3 //Log bőbeszédűség (A leg informatívabb(tömörebb), 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. állapot, 5: részletesebben, 6: sql query + bash parancsok kiírása is
@@ -236,101 +309,28 @@ Beállítása az alábbiak szerint: (egy lehetséges elrendezés)
$occ_user = "www-data"; //A Nextcloud-servert futtató (Apache által használt) felhasználónév
- $m2n['kihagy'] = array(); //Lehetőség van egy-egy felhasználó kezelésének letiltására, ezt felsorolásként tehetjük meg.
+ $cfg['kihagy'] = array(); //Lehetőség van egy-egy felhasználó kezelésének letiltására, ezt felsorolásként tehetjük meg.
// Ekkor a script nem fog foglalkozni, az adott felhasználóval a továbbiakban.
- //pl: array('Trap.Pista', 'Ebeed.Elek', '22att')
-
- $m2n['megfigyelo_user'] = "naplo_robot"; //Lehetőség van egy úgymond "megfigyelő" felhasználó létrehozására.
- // ez a felhasználó be lesz léptetve az összes csoportba, így az összes üzenetet megkapja,
+ //pl: array('Trap.Pista', 'Ebeed.Elek', '22att')
+
+ $cfg['megfigyelo_user'] = "naplo_robot"; //Lehetőség van egy úgymond "megfigyelő" felhasználó létrehozására.
+ // ez a felhasználó be lesz léptetve az összes csoportba, így az összes üzenetet megkapja,
// és az összes tankörben megosztott fájlt látja, amit a csoportokkal/tankörökkel megosztottak.
+ //EZ a felhasználó nem egyezik meg a MaYor "mayoradmin" felhasználójával (nem lesz automatikusan rendszergazda)!
+ // de megadható ugyanazon felhasználónév, és lejszó, mint a MaYor "mayoradmin"-nak
- CONFIG FILE: "mayor-nextcloud.cfg.php"; //Lehetőség van a konfig exportálására egy külön fájlba,
+ CONFIG FILE: "mayor-nextcloud.cfg.php"; //Lehetőség van a konfig exportálására egy külön fájlba,
// így a mayor-nextcloud scriptet nem kell szerkeszteni, ha frissítés érkezik hozzá.
// Ez alapértelmezetten a maxor-nextcloud.php -val kell egy könyvtárba legyen.
- 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 Paraméterek / Kapcsolók:
-
- --loglevel x : A scriptbőbeszédűségét, logolását tudjuk ezzel szabályozni, ekkor ez az érték érvényesül, nem a configban megadott.
-
- --set-diak-quota : Az összes diák qvótáját átállítja az "$m2n['diak_quota'] = x" -nél megadott értékre
-
- --create-groupdir <username>: A távoktatást segítő könyvtárstruktúrát csak az <username> felhasználónak hozza létre.
-
-
- További Információk:
-
- 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ő,
- 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 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
-
- 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ó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.)
-
-
-
-
** 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:
@@ -358,10 +358,220 @@ Beállítása az alábbiak szerint: (egy lehetséges elrendezés)
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. )
+*/
+
+
+
+
+
+$cfg['infotxt_szöveg'] = <<<EOT
+
+ FONTOS INFORMÁCIÓK!
+
+Ez a mappa, és a benne lévő mappák, a távoktatás segítésére,
+egyszerűsítésére szolgálnak.
+
+Fontos tudni, hogy ha megosztunk egy, a mi mappánkon belüli fájlt,
+vagy mappát, egy másik felhasználóval a felhőben, akkor a megosztott
+fájl, vagy mappa, a másik felhasználónak a kezdőoldalán jelenik meg,
+a fájlok között.
+
+Egy idő után, ha az illető, már nagyon sok megosztást fogadott,
+a rengeteg fájl már számára egy átláthatatlan mappa-tengert fog képezni,
+és nagyon nehéz lesz benne eligazodnia.
+
+
+Ezen probléma kivédésére született ez, az alábbi megoldás:
+
+A tanátoknak a szerver automatikusan létrehoz egy, a távoktatásra
+használatos gyűjtőmappát, utána ebbe a mappába létrehozza a tanár által
+tanított (e-napló szerint) tanköröknek megfelelő mappákat automatikusan.
+
+
+
+A működési szabályok:
+
+1) A tanár ezekbe a mappákba helyezheti el a diákoknak szánt fájlokat.
+ (Ha akarja, ez nem kötelező, csak segítség.)
+
+2) A tanár ezeket a mappákat osztja meg a diákcsoportokkal.
+
+3) A diák ezekben a mappákban helyezi el a nyilvánosan visszaküldendő
+ fájlokat, képeket. (Ezt a mappát, a tankör összes tagja látja,
+ amelyik tankörrel, vagy csoporttal megosztottuk.
+ A megosztást nekünk, kézzel kell elvégezni, az nem történik
+ meg automatikusan.)
+
+4) A diák, a privát módon visszaküldendő fájlokat, a tanárral való
+ megegyezés szerint, lehetőleg ne ebbe a mappába helyezze el,
+ hanem azt egyszerűen ossza meg a tanárával, vagy valamilyen
+ más módon juttassa vissza.
+
+5) A Tankörmappákban, a fájlok rendjét a tanár határozhatja meg,
+ viszont, amelyik mappára engedélyezve van a diák(ok) részére a
+ feltöltés/szerkesztés/törlés, ott már értelemszerűen nem csak a
+ tanár dönt a fájlok sorsáról.
+
+6) A tankörmappák gyűjtőmappájában a rendet a szerver tartja,
+ oda egyéb fájl, mappa nem helyezhető.
+ Ha mégis kerülne oda egyéb fájl akkor, azt a szerver, átnevezi,
+ és a tanárnak értesítést küld, egészen addig, amíg az "idegen"
+ fájlok tekintetében helyre nem áll a rend.
+ Az átnevezéskor, a szerver, a fájl nevét kiegészíti egy
+ "számsorozat.please-remove" utótaggal. Ezt az utótagot, a fájl,
+ a gyűjtőmappából történő áthelyezése után már kézzel eltávolíthatjuk,
+ így visszakapjuk az eredeti fájlunkat, mappáinkat.
+ (Az "Átnevezés" gomb segítségével. (Jobb-Egér kattintással.))
+
+7) A szerver, a tankörök egyeztetését, a naplóval, minden nap egyszer,
+ éjfél és hajnali 5 óra között végzi el. Tehát, az iskolatitkárok
+ által elvégzett módosítások, így a tankör-csoportok összerendezése,
+ a tankörök, valamint a tanárok és diákok jogviszonyában beálló
+ változás, csak másnap reggelre lép érvénybe.
+
+
+
+
+Legyen egy gyakorlati példa:
+
+A tanár mappalistájában létrejön a gyűjtőmappa mondjuk:
+"Iskolai Távoktatás" névvel.
+Ezen, a mappán belül létrejön mondjuk, egy "(tk) 10.b fizika"
+és egy "(tk) 10.b osztályfőnöki" tankörmappa.
+(Vagyis, a tanár, az e-naplóban ezen tankörök tagja.)
+
+Ezen mappák mellé létrejön még a "(tk) 10.b fizika_beadás" és a
+"(tk) 10.b osztályfőnöki_beadás" mappa is. Ezek a mappák a diákok
+által visszaküldendő fájlok gyűjtésére szolgálhatnak.
+
+
+A tanár szabadon használhatja a "(tk) 10.b fizika" és a
+"(tk) 10.b osztályfőnöki" mappákat, azokat szabadon megoszthatja,
+bele fájlokat helyezhet, belőlük fájlokat törölhet, stb.,
+ha engedélyezi a szerkesztést, akkor a diák is helyezhet bele
+fájlokat, vagy szerkesztheti*** a benne lévő fájlokat.
+
+Ha a tankörmappát megosztja a diákkal/ egész tankörrel,
+akkor a diáknak így már nem egy csomó fájl, rendezetlenül,
+és nem is az "Iskolai Távoktatás" nevű mappa fog megjelenni
+a kezdőoldalán, hanem az adott tankörmappa.
+
+Tehát, ha a tanár a "(tk) 10.b fizika" mappát osztja meg,
+akkor a diák, a kezdőoldalán a "(tk) 10.b fizika" mappát fogja
+találni, és benne a tanár által hozzáadott fájlokat.
+
+
+Viszont az "Iskolai Távoktatás" nevű mappában csak(!!) a
+"(tk) 10.b fizika" és a "(tk) 10.b osztályfőnöki" mappák lehetnek,
+valamint a beadásra szolgáló társmappák, illetve az INFO.txt.
+Más fájl, vagy mappa, nem!
+
+
+Ha mégis kerülne oda egyéb fájl, vagy mappa, akkor arról először
+értesíti a tanárt, majd, a nem odaillő fájlokat, vagy mappákat
+automatikusan eltávolításra megjelöli.
+
+Ez szintén vonatkozik a korábban itt levő, de átnevezett mappákra is,
+tehát, ha a "(tk) 10.b fizika" mappát a tanár véletlenül átnevezné,
+valami másra, akkor onnantól azt is "idegen" mappának fogja tekinteni.
+
+Ugyanez történik akkor is, ha a tanár, (a napló szerint) kikerül a
+tankörből, tehát nem tanítja tovább, vagy a tankör ugrik egyet
+évkezdéskor, és a "(tk) 10.b fizika"-ból "(tk) 11.b fizika" lesz,
+ekkor, a, még ottmaradó "(tk) 10.b fizika" mappát szintén
+idegennek fogja tekinteni.
+
+Ilyenkor a tanárnak szükséges, kézzel, az idegennek minősített mappákat
+kiüríteni, és az egész mappát, vagy csak azok tartalmát
+az "Iskolai Távoktatás" mappán kívülre, a saját mappái közé áthelyezni,
+vagy az idegennek minősített mappák tartalmát egy másik, az "elfogadott"
+tankörmappák valamelyikébe átrakni.
+Majd a kiürült, előző mappát kézzel kell törölnie!
+
+(Ez utóbbit kell tenni, vagyis a tanárnak, kézzel áthelyezni a
+fájlokat az egyik tankörmappából, az új tankörmappába, amikor
+évváltás van, és a tankör ugrik egyet:
+"(tk) 10.b fizika" --> "(tk) 11.b fizika". )
+
+
+
+
+
+*** Tippek/Megjegyzések:
+
+1)
+Ha szeretnénk biztosra menni, és elkerülni, hogy a diák,
+a tanár által, az egész tankörnek küldött fájlokba véletlenül
+beleszerkesszen, vagy esetleg töröljön belőlük, akkor vonjuk meg a
+szerkesztési/létrehozási/törlési jogokat, és ezt ellenőrizzük is
+minden megosztáskor, hogy valóban a megfelelő jogok vannak-e beállítva
+a megosztott mappán!
+
+A szerver létrehoz egy "_beadás", végződésű mappát is, a tankörmappák
+mellé, hogy ezeket használhassuk a visszaküldendő fájlok gyűjtésére, így
+csak erre a "_beadás" mappára kell jogot adnunk a diáknak/tankörnek
+a szerkesztésre/módosításra/törlésre/stb..
+
+
+
+2)
+Ha videó fájlokat szeretnénk feltölteni nagy mennyiségben,
+akkor hozzunk létre az adott tankörhöz tartozó tankörmappában egy
+"Videók" nevű mappát, és abba helyezzük el a videó fájlokat.
+A könnyebb megkülönböztethetőség végett nevezzük át a videó fájlokat
+dátum szerinti fájlnévre, vagy sorszámozzuk őket,
+és a sorszámot tüntessük föl a fájl nevében!
+
+
+3) A létrejövő mappák megosztási beállításait nekünk kell
+finomhangolnunk, mert nem jönnek automatikusan létre a
+feltöltési/szerkesztési/törlési/stb. engedélyek.
+A megosztás pillanatában, a fogadó félnek, csak az olvasási
+jogosultsága jön létre automatikusan.
+
+Tehát, minután megosztottuk egy tankörrel, kattintsunk rá a
+fektetett "V" betűhöz hasonlító ikonra, és a megosztási beállításoknál,
+a "..."-ra kattintva engedélyezzük a
+feltöltést/szerkesztést/törlést/továbbadást/stb. a csoport tagjainak,
+igényünknek megfelelően!
+
+(Magát a megosztást is nekünk, kézzel kell megtennünk,
+mert azt sem állítja be a szerver automatikusan.)
+
+Alapesetben, gyakorlatilag csak annyi a dolgunk, hogy például,
+a "(tk) 10.b fizika" mappát megosszuk a "(tk) 10.b fizika" tankörrel.
+Ha a beadást is szeretnénk itt összegyűjteni, akkor
+a "(tk) 10.b fizika_beadás" mappát is meg kell osszuk
+a "(tk) 10.b fizika" tankörrel, ügyelve arra, hogy csak
+a "(tk) 10.b fizika_beadás" mappára kerüljön a diákok számára
+létrehozási/szerkesztési/törlési jogosultság.
+
+
+
+4)
+Ha egy rossz helyen lévő fájl miatt értesítést kapunk, akkor a
+legfontosabb, hogy a fájl onnan, a távoktatás gyűjtőmappájából,
+elkerüljön, tehát ne másoljuk, hanem helyezzük át, a saját, egyéb
+mappáinkba / egyéb fájlaink közé!
+
+Utána, ha ez megtörtént, nevezzük vissza, az eredeti nevére,
+vagyis töröljük ki a nevéből a szerver által odarakott:
+"számsorozat.please-remove" utótagot, a "Átnevezés" gomb segítségével!
+
+
+5)
+Az INFO.txt, vagyis, ez a leírás, minden éjjel frissítődik, illetve újra
+létrehozódik a szerveren, hogy mindig a legfrissebb információkat
+tartalmazza, tehát nem szükséges törölni. Ám erre is igaz, hogy
+ha véletlenül átnevezzük, akkor már idegennek fogja tekinteni
+a rendszer. Ekkor, az "idegen" változatát már törölnünk szükséges!
+
+
+EOT;
+
+
-
-*/
?>
diff --git a/egyéb/nextcloud/mayor-nextcloud.php b/egyéb/nextcloud/mayor-nextcloud.php
index e08e4e50..dbf7ee1d 100644
--- a/egyéb/nextcloud/mayor-nextcloud.php
+++ b/egyéb/nextcloud/mayor-nextcloud.php
@@ -1,136 +1,204 @@
#!/usr/bin/php
<?php
-$db = array();
-$m2n = array();
+
+$cfg = array();
////////////////////////////////////////////// Figyelem! az alábbi konfig automatikusan külön fájból töltődik, ha létezik a "mayor-nextcloud.cfg.php" fájl!! /////////////////////////////////
-$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['diak_quota'] = "2GB";
-$m2n['min_osztalyok'] = array(); //pl: array('9.a','11.a');
-$m2n['csoportnev_hossz'] = 40;
-$m2n['felhasznalo_hossz'] = 45;
-$m2n['megfigyelo_user'] = "naplo_robot"; //ha nem kell, akkor állítsd üres stringre.
-$m2n['kihagy'] = array(); //pl: array('Trap.Pista', 'Ebeed.Elek', '22att')
-$m2n['default_lang'] = "hu";
-$m2n['manage_groupdirs'] = false;
-$m2n['groupdir_prefix'] = "tavsuli";
-$m2n['mindenki_csop'] = "naplós_felhasználók";
-$m2n['mindenki_tanar'] = "naplós_tanárok";
-$m2n['mindenki_diak'] = "naplós_diákok";
-$m2n['zaras_tartas'] = "2018-06-14"; //A jelölt napon befejezett, de nem lezárt tanév adatainak megtartása. (pl. szeptemberig) Ha már nem kell, akkor állítsd "1970-01-01"-ra !;
-$m2n['verbose'] = 3 ;
+$cfg['db_host'] = "localhost";
+$cfg['db_port'] = "3306";
+$cfg['db_user'] = "root";
+$cfg['db_pass'] = "";
+$cfg['db_m2n_db'] = "mayor_to_nextcloud";
+$cfg['db_m2n_prefix'] = "m2n_";
+$cfg['db_nxt_dbname'] = "Nextcloud";
+$cfg['db_nxt_prefix'] = "oc_";
+//$cfg['db_mayor_host'] = "";
+//$cfg['db_mayor_port'] = "";
+//$cfg['db_mayor_user'] = "";
+//$cfg['db_mayor_pass'] = "";
+
+$cfg['min_evfolyam'] = 1;
+$cfg['isk_rovidnev'] = "rovid";
+$cfg['csoport_prefix'] = "(tk) ";
+$cfg['default_email'] = "indulo@iskola.hu";
+//$cfg['default_passw'] = "EHYmGktzrdfS7wxJR6DFqxjJ"; //Megszűnt -> Helyette random jelszót generál
+$cfg['always_set_diak_quota'] = false;
+$cfg['default_quota'] = "10GB";
+$cfg['diak_quota'] = "2GB";
+$cfg['min_osztalyok'] = array(); //pl: array('9.a','11.a');
+$cfg['csoportnev_hossz'] = 40;
+$cfg['felhasznalo_hossz'] = 45;
+$cfg['megfigyelo_user'] = "naplo_robot"; //ha nem kell, akkor állítsd üres stringre.
+$cfg['kihagy'] = array(); //pl: array('Trap.Pista', 'Ebeed.Elek', '22att')
+$cfg['default_lang'] = "hu";
+$cfg['manage_groups'] = true;
+$cfg['manage_groupdirs'] = false; // Foglalkozzon-e a script a tankörmappákkal
+$cfg['groupdir_prefix'] = "tavsuli";
+$cfg['groupdir_users'] = array("naplo_robot","123abcd"); //Ha mindenkire -> =array(); //(legyen üres)
+$cfg['mindenki_csop'] = "naplós_felhasználók";
+$cfg['mindenki_tanar'] = "naplós_tanárok";
+$cfg['mindenki_diak'] = "naplós_diákok";
+$cfg['allapot_tartas'] = "2018-06-14"; //A jelölt napnak megfelelő állapot betöltése minden futtatáskor, ha nem kell, akkor állítsd üresre!;
+$cfg['infotxt_szöveg'] = "info.txt";
+$cfg['verbose'] = 3 ;
$occ_path = "/var/www/nextcloud/";
$occ_user = "www-data";
-$ALWAYS_SET_DIAK_QUOTA = false;
-$groupdir_user = "";
+$nxt_version = 0;
+$printhelp = false;
+$printconfig = false;
+$printpasswds = false;
+$dryrun = false;
+$debug = false;
+
$cfgfile = realpath(pathinfo($argv[0])['dirname'])."/"."mayor-nextcloud.cfg.php"; // A fenti konfig behívható config fájlból is, így a nextcloud-betöltő (ez a php) szerkesztés nélkül frissíthető.
-if( file_exists($cfgfile)===TRUE ){ include($cfgfile); }
+// 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');
+$pwchars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_?";
+for($i = 1; $i<$argc; $i++){ //Ha van külön config megadva, akkor először azt töltjük be.
+ if($argv[$i] == "--config-file" ){$cfgfile = strval($argv[$i+1]); $i++;}
+}
+if(file_exists($cfgfile) === TRUE){ $cfg_o = $cfg; include($cfgfile); $cfg_n = $cfg; $cfg = array_merge($cfg, $cfg_o, $cfg_n); } //Config betöltés
+if(!empty($m2n)){ $cfg_o = $cfg; $cfg = array_merge($cfg, $m2n, $cfg_o); } //Ha valahol még a régi config lenne
+
+
+for($i = 1; $i<$argc; $i++){ // Kézzel felülbírált config opciók
+ if($argv[$i] == "--help" ){$printhelp = true;}
+ if($argv[$i] == "--debug" ){$debug = true;}
+ if($argv[$i] == "--loglevel" and is_numeric($argv[$i+1])){$cfg['verbose'] = intval($argv[$i+1]); $i++;}
+ if($argv[$i] == "--set-diak-quota" ){ $cfg['always_set_diak_quota'] = true; }
+ if($argv[$i] == "--create-groupdir"){ $cfg['groupdir_users'] = array($argv[$i+1]); $i++;}
+ if($argv[$i] == "--manage-groupdirs" and is_string($argv[$i+1])){$cfg['manage_groupdirs'] = boolval($argv[$i+1]); $i++;}
+ if($argv[$i] == "--manage-groups" and is_string($argv[$i+1])){$cfg['manage_groups'] = boolval($argv[$i+1]); $i++;}
+ if($argv[$i] == "--allapot-tartas" and is_string($argv[$i+1])){$cfg['allapot_tartas'] = strval($argv[$i+1]); $i++;}
+ if($argv[$i] == "--print-passwords" ){ $printpasswds = true; }
+ if($argv[$i] == "--print-config" ){ $printconfig = true; }
+ if($argv[$i] == "--dry-run" ){ $dryrun = true; }
+}
+function print_help(){
+ echo "".phpv()." mayor-nextcloud.php [kapcsolók] \n";
+ echo "Kapcsolók: (felülbírálja a configot!)\n";
+ echo " --help : Help kiírása. \n";
+ echo " --debug : Ugyanaz mint a \"--loglevel 100\" \n";
+ echo " --config-file : Konfig fájl elérési útvonala.\n";
+ echo " --loglevel x : A bőbeszédűséget/logolást tudjuk ezzel szabályozni, ekkor ez az érték érvényesül, nem a configban megadott. \n";
+ echo " --set-diak-quota : Az összes diák qvótáját átállítja az \"\$cfg['diak_quota'] = x\" -nél megadott értékre, \n";
+ echo " csak kézzel futtatva működik, az automatikus, napi futtatásban nicns benne.\n";
+ echo " --create-groupdir <username>: A távoktatást segítő könyvtárstruktúrát csak az <username> felhasználónak hozza létre, \n";
+ echo " illetve kapcsoló nélküli híváskor, automatikusan, a napi futásban, esténként az összes tanárnak egyszerre.\n";
+ echo " --manage-groups <1/0> : Ha 1: A felhasználókat csoportokba rendezi a MaYor tankörök szerint, ha 0, nem foglalkozik vele.\n";
+ echo " --manage-groupdirs <1/0> : Ha 1: tankörmappákat hoz létre a tankör-csoportokhoz, ha 0, nem foglalkozik vele. (kell hozzá a --manage-groups is!)\n";
+ echo " --print-config : A betöltött konfig kiírása a konzolra.\n";
+ echo " --print-passwords : A létrehozott felhasználóknál a jelszavakat is megjeleníti a konzolon.\n";
+ echo " --dry-run : Csak megmutatja, de nem végzi el a változtatásokat.\n";
+ echo "\n\n";
+}
-// 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');
+function phpv() { //Az aktuális php verzió lekérdezése
+ $v = explode('.', phpversion());
+ return "php".$v[0].".".$v[1];
+}
+
+function rndstr($l, $chs) { //Ál-Véletlen stringet generál
+ return substr(str_shuffle($chs), 0, $l);
+}
+
+function gen_password($l = 12, $inp = array()){
+ global $pwchars;
+ return rndstr($l, $pwchars);
+}
+
+function gen_username($inp){ //Felhasználónevet generál
+ global $search, $replace;
+ $ret = str_replace($search, $replace, $inp['userAccount']); // (pl: Á->Aa, á->aa, ...)
+ return $ret;
+}
-$log['verbose'] = $m2n['verbose'];
-for($i = 1; $i<$argc; $i++){
- if($argv[$i] == "--loglevel" and is_numeric($argv[$i+1])){$log['verbose'] = intval($argv[$i+1]); $i++;}
- if($argv[$i] == "--set-diak-quota" ){ $ALWAYS_SET_DIAK_QUOTA = true; }
- if($argv[$i] == "--create-groupdir"){ $groupdir_user = $argv[$i+1]; $i++;}
+function rmnp($str){ //Remove non-printable
+ return preg_replace('/[\x00-\x1F\x7F-\xA0\xAD]/u', '', $str);
}
-if( $ALWAYS_SET_DIAK_QUOTA === true && $log['verbose'] < 4 ){ $log['verbose'] = 4; }
+function escp($str){ //Escape strings
+ $str = str_replace(array("\\","`", "\'", "\"" ),array("\\\\", "\`", "\\\'", "\\\""), $str);
+ return escapeshellarg($str);
+}
-if (function_exists('mysqli_connect') and PHP_MAJOR_VERSION >= 7) { //MySQLi (Improved) és php7 kell!
+function rnescp($str){ //Escape strings
+ $str = rmnp($str);
+ $str = escapeshellarg($str);
+ $str = str_replace(array("\\", "`", "'", "\"", "\ ", ), array("", "", "", "", "_", ), $str);
+ return $str;
+}
- 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 (function_exists('mysqli_connect') and version_compare(phpversion(), '5.0', '>=')) { //MySQLi (Improved) és php7 kell!
+
+ function db_connect($db = ""){
+ global $log,$cfg;
+ if ($log['verbose'] > 0 ){ echo "***\tAdatbázis kapcsolódás. (db='".$db."')\n"; }
+ $l = mysqli_connect($cfg['db_host'], $cfg['db_user'], $cfg['db_pass'], $db, $cfg['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 ($log['verbose'] > 0 ){ echo "*\tAdatbázis kapcsolat újrapróbálása... (db=''), info:".mysqli_connect_errno()."\n\n"; }
+ $db = "";
+ $l = mysqli_connect($cfg['db_host'], $cfg['db_user'], $cfg['db_pass'], $db, $cfg['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;
+ echo "\n**** Sikertelen kapcsolódás! **** (db='".$db."') info:".mysqli_get_host_info($l)."\n\n";
+ return null; //Hiba esetén visszatér
}
- } 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);
+ }
+ if ($log['verbose'] > 0 ){ echo "*\tSikeres kapcsolódás. (db='".$db."') info:".mysqli_get_host_info($l)."\n\n"; }
+ mysqli_set_charset($l, "utf8");
+ mysqli_query($l, "SET NAMES utf8 COLLATE utf8_general_ci;" );
+ return $l; //Egyébként a sikeressel tér vissza
+ }
+ // bezár: mysqli_close($link);
+
+ function script_install($l){
+ global $cfg,$log;
+ if(mysqli_query($l, "SELECT * FROM ".$cfg['db_m2n_db'].".".$cfg['db_m2n_prefix']."register LIMIT 10;" ) == FALSE ){ //nincs nyilvántartás
+ $q = "CREATE DATABASE IF NOT EXISTS ".$cfg['db_m2n_db']." DEFAULT COLLATE 'utf8_general_ci'; ";
+ if ($log['verbose'] > 7 ){ echo "M2N -> \t".$q."\n\n"; }
+ if(( $r = mysqli_query($l, $q)) !== FALSE ){
+ if ($log['verbose'] > 0 ){ echo "*\tAz ".$cfg['db_m2n_db']." adatbázis sikeresen létrehozva.\n"; }
+ }
+ $q = "CREATE TABLE IF NOT EXISTS ".$cfg['db_m2n_db'].".".$cfg['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'] > 7 ){ echo "M2N ->\t".$q."\n"; }
+ if(( $r = mysqli_query($l, $q)) !== FALSE ){
+ if ($log['verbose'] > 0 ){ echo "*\tAz ".$cfg['db_m2n_db'].".".$cfg['db_m2n_prefix']."register (script-katalógus) tábla sikeresen létrehozva.\n\n";}
}
- 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 (script-katalógus) tábla sikeresen létrehozva.\n";}
- }
- }
function nxt_get_version(){
- global $occ_path,$occ_user,$m2n,$log;
- // sudo -u honlap-felho php /home/honlap-felho/web/occ status --output=json
- $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" status --output=json'" ;
- if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; }
- return explode(".", json_decode(shell_exec($e),true)['version'])[0];
- echo "\n\n\n".explode(".", json_decode(shell_exec($e),true)['version'])[0]."\n\n\n";
+ global $occ_path,$occ_user,$cfg,$log;
+ $ret = array();
+ // sudo -u honlap-felho ".phpv()." /home/honlap-felho/web/occ status --output=json
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." status --output=json \"" ;
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ $ret[0] = shell_exec($e);
+ $ret[1] = intval(explode(".", json_decode($ret[0],true)['version'])[0]);
+ if ($log['verbose'] > 10 ){ print_r($ret); echo "\n\n"; }
+ return $ret;
}
function catalog_userlist($link){ //akiket a script hozott létre
- global $db,$log,$m2n;
+ global $cfg,$log,$cfg;
$ret['account'] = array();
$ret['status'] = array();
- $q = "SELECT * FROM ".$db['m2n_db'].".".$db['m2n_prefix']."register WHERE STATUS != 'forbidden'; ";
- if ($log['verbose'] > 5 ){ echo "M2N ->\t".$q."\n"; }
+ $q = "SELECT * FROM ".$cfg['db_m2n_db'].".".$cfg['db_m2n_prefix']."register WHERE STATUS != 'forbidden'; ";
+ if ($log['verbose'] > 7 ){ echo "M2N ->\t".$q."\n"; }
if(( $r = mysqli_query($link, $q)) !== FALSE ){
while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
- if(!in_array($row['account'], $m2n['kihagy'])){
+ if(!in_array($row['account'], $cfg['kihagy'])){
$ret['account'][] = $row['account'];
$ret['status'][] = $row['status'];
}
@@ -138,22 +206,23 @@ if (function_exists('mysqli_connect') and PHP_MAJOR_VERSION >= 7) { //MySQLi (Im
mysqli_free_result($r);
if ($log['verbose'] > 4 ){ echo "*\tFelhasználó m2n nyilvántartás lekérdezése.\n"; }
return $ret;
+ if ($log['verbose'] > 10 ){ print_r($ret); }
} else {
echo "\nM2N -> \t**** Adatbázislekérdezési hiba! ****\n";
}
}
function catalog_forbiddenlist($link){ //akiket a rendszergazda kitiltott
- global $log,$db,$m2n;
- $q = "SELECT * FROM ".$db['m2n_db'].".".$db['m2n_prefix']."register WHERE STATUS = 'forbidden'; ";
- if ($log['verbose'] > 5 ){ echo "M2N ->\t".$q."\n"; }
+ global $log,$cfg,$cfg;
+ $q = "SELECT * FROM ".$cfg['db_m2n_db'].".".$cfg['db_m2n_prefix']."register WHERE STATUS = 'forbidden'; ";
+ if ($log['verbose'] > 7 ){ 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);
- $ret = array_merge($ret, $m2n['kihagy']);
+ $ret = array_merge($ret, $cfg['kihagy']);
if ($log['verbose'] > 4 ){ echo "*\tFelhasználó-letiltások m2n nyilvántartás lekérdezése.\n"; }
return $ret;
} else {
@@ -162,248 +231,276 @@ if (function_exists('mysqli_connect') and PHP_MAJOR_VERSION >= 7) { //MySQLi (Im
}
function catalog_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 ){
+ global $log,$cfg,$dryrun;
+ $q = "INSERT INTO ".$cfg['db_m2n_db'].".".$cfg['db_m2n_prefix']."register (account) VALUES ('".mysqli_real_escape_string($link, $account)."')";
+ if ($log['verbose'] > 7 ){ echo "M2N -> \t".$q."\n"; }
+ if( $dryrun or (mysqli_query($link, $q)) !== FALSE ){
if ($log['verbose'] > 4 ){ echo "*\tFelhasználó-hozzáadás, m2n nyilvántartásba vétele.\n"; }
}
}
function catalog_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 ){
+ global $cfg,$log,$dryrun;
+ $q = "UPDATE ".$cfg['db_m2n_db'].".".$cfg['db_m2n_prefix']."register SET status='active' WHERE account='".mysqli_real_escape_string($link, $account)."'";
+ if ($log['verbose'] > 7 ){ echo "M2N ->\t".$q."\n"; }
+ if( $dryrun or (mysqli_query($link, $q)) !== FALSE ){
if ($log['verbose'] > 4 ){ echo "*\tFelhasználó-engedélyezés, m2n nyilvántartásba vétele.\n" ;}
}
}
function catalog_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 ){
+ global $cfg,$log,$dryrun;
+ $q = "DELETE FROM ".$cfg['db_m2n_db'].".".$cfg['db_m2n_prefix']."register WHERE account='".mysqli_real_escape_string($link, $account)."' ";
+ if ($log['verbose'] > 7 ){ echo "M2N ->\t".$q."\n"; }
+ if( $dryrun or (mysqli_query($link, $q)) !== FALSE ){
if ($log['verbose'] > 5 ){ echo "*\tFelhasználó-törlés, m2n nyilvántartásba vétele.\n"; }
}
}
function catalog_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 ){
+ global $cfg,$cfg,$log,$dryrun;
+ $q = "UPDATE ".$cfg['db_m2n_db'].".".$cfg['db_m2n_prefix']."register SET status='disabled' WHERE account='".mysqli_real_escape_string($link, $account)."'";
+ if ($log['verbose'] > 7 ){ echo "M2N ->\t".$q."\n"; }
+ if( $dryrun or (mysqli_query($link, $q)) !== FALSE ){
if ($log['verbose'] > 5 ){ echo "*\tFelhasználó-letiltás, m2n nyilvántartásba vétele.\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'
+ global $occ_path,$occ_user,$cfg,$log,$dryrun;
+ $ret = array();
+// export OC_PASS=ErősJelszó123; su -s /bin/sh www-data -c '".phpv()." 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";
+ echo "\n******** Hiba: A felahsználónév, vagy a \"teljes név\" hosszabb, mint 64 karakter! NEM hozható létre!! ********\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);
+ $pw = gen_password(16);
+ $ret[1] = $pw;
+ $e = "export OC_PASS=".escp($pw)."; su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." user:add --password-from-env --display-name=".escp($fullName)." --group=".escp($cfg['mindenki_csop'])." ".escp($userAccount)." \"" ;
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ $ret[0] = shell_exec($e); } else { $ret[0] = true; }
+ if ($log['verbose'] > 11 ){ print_r($ret); }
}
+ return $ret;
}
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"; }
+ global $occ_path,$occ_user,$log,$dryrun;
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." user:info ".escp($userAccount)." --output=json \"";
+ if($log['verbose'] > 7) { 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ő
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." user:delete ".escp($userAccount)." \""; // Ha még soha nem lépett be
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ $ret = shell_exec($e); } else { $ret = true; } // akkor törölhető
+ if ($log['verbose'] > 11 ){ print_r($ret); }
} 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
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." user:disable ".escp($userAccount)." \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ $ret = shell_exec($e); } else { $ret = true; } // különben csak letiltja
+ if ($log['verbose'] > 11 ){ print_r($ret); }
}
}
function user_info($userAccount){ // User állpot a Nextcloudban
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 (array)json_decode(shell_exec($e),true);
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." user:info ".escp($userAccount)." --output=json \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ $ret = (array)json_decode(shell_exec($e),true);
+ if ($log['verbose'] > 10 ){ print_r($ret); }
+ return $ret;
}
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);
+ global $occ_path,$occ_user,$log,$dryrun;
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." user:disable ".escp($userAccount)." \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ $ret = shell_exec($e); } else { $ret = true; }
+ if ($log['verbose'] > 11 ){ print_r($ret); }
}
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);
+ global $occ_path,$occ_user,$log,$dryrun;
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." user:enable ".escp($userAccount)." \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ $ret = shell_exec($e); } else { $ret = true; }
+ if ($log['verbose'] > 11 ){ print_r($ret); }
}
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 --limit=1000000 --output=json'"; //* Jó nagy limittel dolgozzunk
- if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; }
- return (array)json_decode(shell_exec($e),true);
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." group:list --limit=1000000 --output=json \""; //* Jó nagy limittel dolgozzunk
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ $ret = (array)json_decode(shell_exec($e),true);
+ if ($log['verbose'] > 10 ){ print_r($ret); }
+ return $ret;
}
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"; }
+ // $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." user:report | grep 'total' | sed -e 's/[^0-9]//g' | tr -d '[:blank:]\n' \"";
+ // if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
// $num = shell_exec($e);
$num = 1000000; //inkább kézi limit!
// $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);
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." user:list --limit ".escp($num)." --output=json \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ $ret = (array)json_decode(shell_exec($e),true);
+ if ($log['verbose'] > 10 ){ print_r($ret); }
+ return $ret;
}
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'] ;
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." user:info ".escp($userAccount)." --output=json \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ $ret = json_decode(shell_exec($e),true)['last_seen'];
+ if ($log['verbose'] > 10 ){ print_r($ret); }
+ return $ret;
}
function user_set($userAccount, array $params){ //beállítja az e-mailt, quota-t, nyelvet a kapott értékekre
- global $occ_path,$occ_user,$log;
+ global $occ_path,$occ_user,$log,$dryrun;
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 );
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." user:setting ".escp($userAccount)." files quota ".escp($params['quota'])." \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ 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 );
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." user:setting ".escp($userAccount)." settings email ".escp($params['email'])." \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ 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);
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." user:setting ".escp($userAccount)." core lang ".escp($params['lang'])." \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun) { shell_exec($e); }
}
- }
+ }
+
+
function group_add($groupName){ //Új csoport létrehozása a Nextcloud-ban
- global $occ_user,$occ_path,$link,$db,$log;
+ global $occ_user,$occ_path,$link,$cfg,$log,$nxt_version,$dryrun;
+ $groupName = rmnp($groupName);
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 {
- if(nxt_get_version() < 14) {
- $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";
+ if($nxt_version < 14) {
+ $q = "INSERT IGNORE INTO ".mysqli_real_escape_string($link, $cfg['db_nxt_dbname']).".".mysqli_real_escape_string($link, $cfg['db_nxt_prefix'])."groups (gid) VALUES ('".mysqli_real_escape_string($link,$groupName)."'); ";
+ if ($log['verbose'] > 7 ){ echo "NXT ->\t".$q."\n"; }
+ if(!$dryrun){
+ if( mysqli_query($link, $q) !== TRUE ) { echo "\nNXT -> \t****** Csoport létrehozási hiba. (adatbázis) ******\n"; }
+ }
} else {
- $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" group:add \"$groupName\" '";
- if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; }
- shell_exec($e);
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." group:add ".escp($groupName)." \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ $ret = shell_exec($e); } else { $ret = true; }
+ if ($log['verbose'] > 11 ){ print_r($ret); }
}
}
}
- function group_del($groupName){ // Csoport törlése a Nextcloud-ból
- global $occ_user,$occ_path,$db,$link,$log,$m2n;
- $grp = nxt_group_list();
+ function group_del($groupName, $grp){ // Csoport törlése a Nextcloud-ból
+ global $occ_user,$occ_path,$cfg,$link,$log,$cfg,$nxt_version,$dryrun;
+ $groupName = rmnp($groupName);
if(isset($grp[$groupName])){
- if(nxt_get_version() < 14){ // Mivel erre csak a Nextcloud 14-től van "occ" parancs, ezért néha közvetlenül kell...
+ if($nxt_version < 14){ // Mivel erre csak a Nextcloud 14-től van "occ" parancs, ezért néha 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".po(" ($user) a: $groupName",$m2n['csoportnev_hossz']+5,1)."\t csoportból.\n"; }
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." group:removeuser ".escp($groupName)." ".escp($user)." \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ $ret = shell_exec($e); } else { $ret = true; }
+ if ($log['verbose'] > 11 ){ print_r($ret); }
+ if ($log['verbose'] > 1 ){ echo "*--\t\tTörölve".po(" ($user) a: $groupName",$cfg['csoportnev_hossz']+5,1)."\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"; }
+ $q = "DELETE FROM ".mysqli_real_escape_string($link, $cfg['db_nxt_dbname']).".".mysqli_real_escape_string($link,$cfg['db_nxt_prefix'])."groups WHERE gid='".mysqli_real_escape_string($link, $groupName)."'; " ;
+ if ($log['verbose'] > 7 ){ echo "NXT ->\t".$q."\n"; }
if(mysqli_query($link, $q) !== TRUE ) echo "\n NXT -> \t****** csoport törlési hiba. (adatbázis) ******\n";
} else {
- $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" group:delete \"$groupName\" '";
- if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; }
- shell_exec($e);
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." group:delete ".escp($groupName)." \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ $ret = shell_exec($e);
+ if ($log['verbose'] > 11 ){ print_r($ret); }
}
}
}
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);
+ global $occ_user, $occ_path,$log,$dryrun;
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." group:adduser ".escp($groupName)." ".escp($userAccount)." \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ $ret = shell_exec($e); } else { $ret = true; }
+ if ($log['verbose'] > 11 ){ print_r($ret); }
}
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);
+ global $occ_user, $occ_path,$log,$dryrun;
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." ".escp($occ_path."/occ")." group:removeuser ".escp($groupName)." ".escp($userAccount)." \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ $ret = shell_exec($e); } else { $ret = true; }
+ if ($log['verbose'] > 11 ){ print_r($ret); }
}
function create_dir($user, $path){ // Készít egy mappát a: data/$user/files/$path alá
- global $occ_user, $occ_path,$log;
- $ret = false;
- if(!file_exists($occ_path."/data/".$user."/files/")){ // Ha Még nincs home könyvtára sem
- $ret = mkdir($occ_path."/data/".$user."/files/", 0755, true); // Akkor létrehozza
- chown($occ_path."/data/".$user, $occ_user);
- chgrp($occ_path."/data/".$user, $occ_user);
- chown($occ_path."/data/".$user."/files/", $occ_user);
- chgrp($occ_path."/data/".$user."/files/", $occ_user);
- if($log['verbose'] > 5) { echo "php ->\tDIR: \"".$occ_path."/data/".$user."/files/"."\" \t created.\n"; }
- }
- if(!file_exists($occ_path."/data/".$user."/files/".$path)){ // Ha Még mindig nen könyvtár
- $ret = mkdir($occ_path."/data/".$user."/files/".$path, 0755, true); // Akkor létrehozza
- chown($occ_path."/data/".$user."/files/".$path, $occ_user);
- chgrp($occ_path."/data/".$user."/files/".$path, $occ_user);
- if($log['verbose'] > 5) { echo "php ->\tDIR: \"".$occ_path."/data/".$user."/files/".$path."\" \t created.\n"; }
+ global $occ_user, $occ_path,$log,$dryrun;
+ $ret = null;
+ if(!file_exists($occ_path."/data/".$user."/files/".$path)){ // Ha Még nem létezik
+ if(!$dryrun){
+ $ret = @mkdir($occ_path."/data/".$user."/files/".$path, 0755, true); // Akkor létrehozza
+ chown($occ_path."/data/".$user."/files/".$path, $occ_user);
+ chgrp($occ_path."/data/".$user."/files/".$path, $occ_user);
+ } else { $ret = true; }
+ if($ret === true && $log['verbose'] > 7) { echo "php ->\tDIR: \"".$occ_path."/data/".$user."/files/".$path."\" \t created.\n"; }
+ if($ret === false && $log['verbose'] > -1) { echo "php ->\tDIR: \"".$occ_path."/data/".$user."/files/".$path."\" \t makedir failed!!\n"; } //mondjuk ilyen egyáltalán mikor lehet?
}
+ if ($log['verbose'] > 11 ){ print_r($ret); }
return $ret;
}
- function write_tofile($user, $path, $msg ){ // Fájlba írja a $msg tartalmát
- global $occ_user, $occ_path,$log;
+ function write_tofile($user, $path, $msg ){ // Fájlba írja a $msg tartalmát
+ global $occ_user, $occ_path,$log,$dryrun;
$ret = 0;
- if(is_dir(pathinfo($occ_path."/data/".$user."/files/".$path)['dirname'] )){
- $h = fopen($occ_path."/data/".$user."/files/".$path, 'w+');
- $ret = fwrite($h, $msg );
+ if( ($h = @fopen($occ_path."/data/".$user."/files/".$path, 'w+')) !== false ){
+ if(!$dryrun){
+ $ret = fwrite($h, $msg );
+ } else { $ret = strlen($msg); }
fclose($h);
- chown($occ_path."/data/".$user."/files/".$path, $occ_user);
- chgrp($occ_path."/data/".$user."/files/".$path, $occ_user);
- if($log['verbose'] > 5) { echo "php ->\tFILE: \"".$occ_path."/data/".$user."/files/".$path."\" \t created.\n"; }
+ if(!$dryrun){
+ chown($occ_path."/data/".$user."/files/".$path, $occ_user);
+ chgrp($occ_path."/data/".$user."/files/".$path, $occ_user);
+ }
+ if($log['verbose'] > 7) { echo "php ->\tFILE: \"".$occ_path."/data/".$user."/files/".$path."\" \t created.\n"; }
} else {
- if($log['verbose'] > 5) { echo "php ->\tERROR: \"".pathinfo($occ_path."/data/".$user."/files/".$path)['dirname']."\" \t dir not found.\n"; }
+ if($log['verbose'] > 5) { echo "php ->\tFILE ERROR: \"".$occ_path."/data/".$user."/files/".$path."\" \t dir not found.\n"; }
}
+ if ($log['verbose'] > 11 ){ print_r($ret); }
return $ret;
}
- function files_scan($user, $path ){ // Nextcloud files:scan
- global $occ_user, $occ_path,$log;
- $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" files:scan --path=\"".$user."/files/".$path."\" '"; // -v
- if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; }
- shell_exec($e);
+ function files_scan($user, $path ){ // Nextcloud files:scan --path=xxx
+ global $occ_user, $occ_path,$log,$dryrun;
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." '".$occ_path."/occ' files:scan --path=".escp($user."/files/".$path)." \""; // -v
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ $ret = shell_exec($e); } else { $ret = true; }
+ if ($log['verbose'] > 11 ){ print_r($ret); }
}
- function user_notify($user, $msg, $title ){ // Nextcloud files:scan
- global $occ_user, $occ_path, $log;
- $e = "su -s /bin/sh $occ_user -c 'php \"".$occ_path."/occ\" notification:generate -l \"".$msg."\" -- ".$user." \"".$title."\" '";
- if($log['verbose'] > 5) { echo "bash ->\t".$e."\n"; }
- shell_exec($e);
+ function user_notify($user, $msg, $title ){ // Nextcloud értesítés
+ global $occ_user, $occ_path, $log,$dryrun;
+ $e = "su -s /bin/sh $occ_user -c \"".phpv()." '".$occ_path."/occ' notification:generate -l ".escp($msg)." -- ".escp($user)." ".escp($title)." \"";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ $ret = shell_exec($e); } else { $ret = true; }
+ if ($log['verbose'] > 11 ){ print_r($ret); }
}
- function scan_dir($user, $path ){ // Nextcloud files:scan
+ function scan_dir($user, $path ){ // PHP mappa listázása
global $occ_user, $occ_path,$log;
$ret = array();
if(is_dir($occ_path."/data/".$user."/files/".$path)){
@@ -413,84 +510,98 @@ if (function_exists('mysqli_connect') and PHP_MAJOR_VERSION >= 7) { //MySQLi (Im
unset($ret[1]);
}
}
+ if ($log['verbose'] > 11 ){ print_r($ret); }
return $ret;
}
- function clean_dir($user, $path, $tankorei){
- global $occ_user, $occ_path, $log, $m2n;
+ function clean_dir($user, $path, $tankorei){ //Tankörmappák kitisztítása (path: mappagyökér)
+ global $occ_user, $occ_path, $log, $cfg, $dryrun;
$listdir = scan_dir($user, $path);
$ret[0] = array();
$ret[1] = array();
$ret[2] = array();
foreach($listdir as $key => $val) {
- if((!in_array($val, $tankorei) || !is_dir($occ_path."/data/".$user."/files/".$path."/".$val)) && $val != "INFO.txt"){ //Nincs a tanköreiben, akkor törölni kell (de csak ha üres)
+ if((!in_array($val, $tankorei) && !in_array(basename($val,"_beadás"), $tankorei) || !is_dir($occ_path."/data/".$user."/files/".$path."/".$val)) && $val != "INFO.txt"){ //Nincs a tanköreiben, akkor törölni kell (de csak ha üres)
if(is_dir($occ_path."/data/".$user."/files/".$path."/".$val) && empty(scan_dir($user, $path."/".$val))){ // Ha mappa, és üres -> törlés
- rmdir($occ_path."/data/".$user."/files/".$path."/".$val);
+ if(!$dryrun){ rmdir($occ_path."/data/".$user."/files/".$path."/".$val); }
$ret[0][] = $val;
- if($log['verbose'] > 5) { echo "php ->\tDIR: \"".$occ_path."/data/".$user."/files/".$path."/".$val."\" deleted.\n"; }
+ if($log['verbose'] > 7) { echo "php ->\tDIR: \"".$occ_path."/data/".$user."/files/".$path."/".$val."\" deleted.\n"; }
+
} else { //Nem mappa, vagy nem üres
- //if( @unlink($occ_path."/data/".$user."/files/".$path."/".$val.time().".please-remove") === true && $log['verbose'] > 0 ){ // Már "xxxx.please-remove" is volt...
- // echo "php ->\tFILE: \"".$occ_path."/data/".$user."/files/".$path."/".$val.time()."\" deleted!!!\n";
- // user_notify($user,"Fájl: ".$path."/".$val.".please-remove Illegális helyen, volt. Automata által törölve.", "Fájl: ".$path."/".$val.".please-remove törölve!");
- //}
if(file_exists( $occ_path."/data/".$user."/files/".$path."/".pathinfo(basename($occ_path."/data/".$user."/files/".$path."/".$val ,".please-remove"))['basename'])){ //Ha az eredeti könyvtár vagy fájl él
- rename($occ_path."/data/".$user."/files/".$path."/".$val, $occ_path."/data/".$user."/files/".$path."/".basename($val, '.please-remove').".".time().".please-remove");
+ if(!$dryrun){ rename($occ_path."/data/".$user."/files/".$path."/".$val, $occ_path."/data/".rnescp($user."/files/".$path."/".basename($val, '.please-remove').".".time().".please-remove")); }
$ret[1][] = basename($val, '.please-remove').".".time().".please-remove";
- user_notify($user,"Az ön >>".$path."/<< könyvtárában tiltott helyen lévő fájl, vagy olyan (tankör)mappa található, amely tankörnek ön továbbá már nem tagja. Kérem helyezze el kívül a >>".$path."/<< mappán, vagy törölje belőle! Később automatikusan törlésre kerül! A fájl átnevezve, új neve --> ".basename($val, '.please-remove').".".time().".please-remove", "Fájl/Mappa rossz helyen! --> ".$path."/".basename($val, '.please-remove').".".time().".please-remove" );
- if($log['verbose'] > 5) { echo "php ->\tF/D: \"".$occ_path."/data/".$user."/files/".$path."/".$val."\" \t renamed -> ".basename($val, '.please-remove').".".time().".please-remove"."\n"; }
+ user_notify($user,"Az ön >>".$path."/<< könyvtárában tiltott helyen lévő fájl, vagy olyan (tankör)mappa található, amely tankörnek ön továbbá már nem tagja. Kérem helyezze el kívül a >>".$path."/<< mappán, vagy törölje belőle! Eltávolításra megjeleölve! A fájl átnevezve, új neve --> ".rnescp(basename($val, '.please-remove').".".time().".please-remove"), "Fájl/Mappa rossz helyen! --> ".rnescp($path."/".basename($val, '.please-remove').".".time().".please-remove" ));
+ if($log['verbose'] > 7) { echo "php ->\tF/D: \"".$occ_path."/data/".$user."/files/".$path."/".$val."\" \t renamed -> ".rnescp(basename($val, '.please-remove').".".time().".please-remove")."\n"; }
} else {
- // A Hanyagul otthagyottakért figyelmeztessen:
- user_notify($user,"Az ön >>".$path."/<< könyvtárában tiltott helyen lévő fájl, vagy olyan (tankör)mappa található, amely tankörnek ön továbbá már nem tagja. Kérem helyezze el kívül a >>".$path."/<< mappán, vagy törölje belőle! Később automatikusan törlésre kerül! --> ".$val, "Fájl/Mappa rossz helyen! --> ".$path."/".$val );
+ // A Hanyagul otthagyottakért csak figyelmeztessen:
+ user_notify($user,"Az ön >>".$path."/<< könyvtárában tiltott helyen lévő fájl, vagy olyan (tankör)mappa található, amely tankörnek ön továbbá már nem tagja. Kérem helyezze el kívül a >>".$path."/<< mappán, vagy törölje belőle! Eltávolításra megjelölve! --> ".$val, "Fájl/Mappa rossz helyen! --> ".$path."/".$val );
}
}
} else {
$ret[2][] = $val;
}
}
+ if ($log['verbose'] > 12 ){ print_r($ret); }
return $ret;
}
+
-
- function groupdir_create_root($user, $oktId, $path){ //Tankörmappák gyökerét előállítja
- global $groupdir_user, $m2n, $occ_path, $occ_user,$log;
+ function groupdir_create_root($user, $oktId, $path){ //Tankörmappák gyökerét előállítja $path=tankörgyökér
+ global $cfg, $occ_path, $occ_user,$log,$dryrun;
$ret = array(false, false);
- if(($groupdir_user === "" || ($groupdir_user !== "" && $user == $groupdir_user)) && $oktId > 0 && $m2n['manage_groupdirs'] === true){ //Ha null -> mindenki, Ha "user" -> scak neki, && tanár && groupdir bekapcsolava
+ if((empty($cfg['groupdir_users']) || in_array($user, $cfg['groupdir_users'])) && $oktId > 0 && $cfg['manage_groupdirs'] === true){ //Ha null -> mindenki, Ha "user" -> scak neki, && tanár && groupdir bekapcsolava
if(is_file($occ_path."/data/".$user."/files/".$path) || is_link($occ_path."/data/".$user."/files/".$path)){ //Ha már vam ott valami ilyen fájl
- if(@unlink( $occ_path."/data/".$user."/files/".$path."backup") && $log['verbose'] > 0 ){ //Helyet csinál a backupnak (sorry)
- rename($occ_path."/data/".$user."/files/".$path, $occ_path."/data/".$user."/files/".$path."backup"); //Átnevezi, hogy azért mégse vasszen oda
- echo "php ->\tFILE: \"".$occ_path."/data/".$user."/files/".$path."\" \t \t deleted!!!\n";
- user_notify($user,"Fájl: $val \nIllegális helyen, és útban volt. \nAutomata által törölve.", "Fájl: $val törölve!");
- }
+ if(!$dryrun){ rename($occ_path."/data/".$user."/files/".$path, $occ_path."/data/".rnescp($user."/files/".$path.".".time().".please-remove")); } //Átnevezi, hogy azért mégse vasszen oda
+ echo "php ->\tFILE: \"".$occ_path."/data/".$user."/files/".$path."\" \t \t moved away!!!\n";
+ user_notify($user,"Fájl: >>".$path.".please-remove<< Illegális helyen volt. Server által eltávolítva.", "Fájl: >>".$path."<< eltávolítva!");
+ files_scan($user, "" ); //Ekkor az egész $user/files mappát szkenneli
}
-
- $ret[0] = create_dir($user, $path); // Tankörmappa gyökér létrehozása
- $ret[1] = write_tofile($user, $path."/"."INFO.txt", $m2n['infotxt_szöveg']); // Információs fájlt is
- }
+ $ret[0] = create_dir($user, rmnp($path)); // Tankörmappa gyökér létrehozása
+ $ret[1] = write_tofile($user, $path."/"."INFO.txt", $cfg['infotxt_szöveg']); // INFO.txt (Újra)Írása.
+ if($ret[0] === true){ // Ha frissen létrehozott mappa, akkor az egész userre kell jogot adni
+ $e = "/bin/chown -R ".escp($occ_user.":".$occ_user)." ".escp($occ_path."/data/".$user."/")." ";
+ if($log['verbose'] > 7) { echo "bash ->\t".$e."\n"; }
+ if(!$dryrun){ shell_exec($e); }
+ files_scan($user, $path);
+ }
+ }
+ if ($log['verbose'] > 12 ){ print_r($ret); }
return $ret;
}
- function groupdir_create_groupdir($user, $oktId, $path){
- global $groupdir_user, $m2n;
- if(($groupdir_user === "" || ($groupdir_user !== "" && $user == $groupdir_user)) && $oktId > 0 && $m2n['manage_groupdirs'] === true){
- return create_dir($user, $path); // Tankörmappa gyökér létrehozása
- }
+ function groupdir_create_groupdir($user, $oktId, $path){ // $path = tankörmappa
+ global $cfg,$log;
+ $ret = false;
+ if( basename($path,"_beadás") != $cfg['mindenki_tanar'] and basename($path,"_beadás") != $cfg['mindenki_diak'] and basename($path,"_beadás") != $cfg['mindenki_csop']){ //Ezekre a csoportokra minek?
+ if((empty($cfg['groupdir_users']) || in_array($user, $cfg['groupdir_users'])) && $oktId > 0 && $cfg['manage_groupdirs'] === true){
+ $ret = create_dir($user, rmnp($path)); // Tankörmappa létrehozása
+ if($ret === true){
+ files_scan($user, $path);
+ }
+ }
+ if ($log['verbose'] > 12 ){ print_r($ret); }
+ return $ret;
+ }
}
- function groupdir_finish($user, $oktId, $path, $tankorei){
- global $groupdir_user, $m2n;
- $ret[0] = array();
- $ret[1] = array();
- $ret[2] = array();
- $ret[3] = array();
- if(($groupdir_user === "" || ($groupdir_user !== "" && $user == $groupdir_user)) && $oktId > 0 && $m2n['manage_groupdirs'] === true){
+ function groupdir_finish($user, $oktId, $path, $tankorei ){ //$path=tankörgyökér
+ global $cfg,$log;
+ $ret = array(array(),array(),array(),false,false); //return sekelton
+ if((empty($cfg['groupdir_users']) || in_array($user, $cfg['groupdir_users'])) && $oktId > 0 && $cfg['manage_groupdirs'] === true){
if(isset($tankorei)) {
$ret = clean_dir($user, $path, $tankorei);
+ $ret[3] = false; //mert felülírja a skeleton-t
}
- files_scan($user, $path); // Tankörmappa gyökér létrehozása
- $ret[3] = true;
+ if(!empty($ret[0]) or !empty($ret[1]) ){
+ files_scan($user, $path); // Nextcloud értesítése
+ $ret[3] = true;
+ }
+ files_scan($user, $path."/INFO.txt");
}
+ if ($log['verbose'] > 12 ){ print_r($ret); }
return $ret;
}
@@ -498,6 +609,7 @@ if (function_exists('mysqli_connect') and PHP_MAJOR_VERSION >= 7) { //MySQLi (Im
function add_tk_to_users($list, $user, $tankorname){ //Naplón kívüli csoportokat adhatunk a felhasználókhoz
+ global $log;
$curr = "";
foreach($list as $key => $val){ // Csak rendezett tömbökön!
if($curr != $val['userAccount'] && ($user === null or ($user !== null && $val['userAccount'] == $user ))){ //Vagy mindenki vagy adott user + rendezett lista
@@ -508,37 +620,35 @@ if (function_exists('mysqli_connect') and PHP_MAJOR_VERSION >= 7) { //MySQLi (Im
if(!isset($val['diakId'])){ //workaround
$val['diakId'] = 0;
}
- $list = array_merge($list, array(
- array( 'userAccount' => $val['userAccount'],
- 'email' => $val['email'],
- 'tanarId' => $val['tanarId'],
- 'diakId' => $val['diakId'],
- 'tankorId' => 0,
- 'fullName' => $val['fullName'],
- 'tankorNev' => $tankorname,
- )));
-
+ $list = array_merge($list, array( $val));
+ $list[$key]['tankorNev'] = $tankorname;
+ $list[$key]['tankorId'] = 0;
+
if($user !== null && $val['userAccount'] == $user ){ // Null -> mindenkihez, "user" -> csak neki
break;
}
$curr = $val['userAccount'];
}
}
+ if ($log['verbose'] > 15 ){ print_r($list); }
return $list;
}
- function add_param_to_user($list, $user, $paramname, $param){ // Paramétert állít be a felhasználónak.
+ function set_param_to_user($list, $user, $paramname, $param){ // Paramétert állít be a felhasználónak.
+ global $log;
foreach($list as $key => $val){ // Csak rendezett tömbökön! (vagy mégsem?)
if($user === null or ($user !== null && $val['userAccount'] == $user )){ //Vagy mindenki vagy adott user
$list[$key][$paramname] = $param; // A paraméter
}
}
+ if ($log['verbose'] > 15 ){ print_r($list); }
return $list;
}
function mayor_userlistcmp($a, $b){
- return strcmp($a['userAccount'], $b['userAccount']);
+ // return strcmp($a['oId'], $b['oId']); //Ez lenne a jó, de az átfedések miatt nem működik
+ return strcmp($a['userAccount'], $b['userAccount']); //Pillanatnyilag csak az az egyedi
}
function po($inp,$ll,$dir){ // Szép kimenetet gyárt
@@ -554,230 +664,295 @@ if (function_exists('mysqli_connect') and PHP_MAJOR_VERSION >= 7) { //MySQLi (Im
return $inp;
}
+ function get_mayor_szemeszter($link, $date) {
+ global $cfg,$log;
+ $ret = array();
+ $q = "SELECT * FROM intezmeny_".$cfg['isk_rovidnev'].".szemeszter
+ WHERE (statusz = 'aktív' OR statusz = 'lezárt') AND kezdesDt <= '".$date."'
+ AND '".$date."' <= (SELECT MAX(zarasDt) FROM intezmeny_".$cfg['isk_rovidnev'].".szemeszter WHERE statusz = 'aktív' OR statusz = 'lezárt' )
+ AND '".$date."' >= (SELECT MIN(kezdesDt) FROM intezmeny_".$cfg['isk_rovidnev'].".szemeszter WHERE statusz = 'aktív' OR statusz = 'lezárt' )
+ ORDER BY zarasDt DESC
+ LIMIT 1;
+ ";
+ if ($log['verbose'] > 7 ){ echo "MAY ->\t".$q."\n"; }
+ if( ($r = mysqli_query($link, $q)) !== FALSE ){
+ $ret = mysqli_fetch_array($r, MYSQLI_ASSOC);
+ if(!empty($ret)){ $ret["reqDt"] = $date; } //szükség lehet a megkérdezett dt-re is
+ mysqli_free_result($r);
+ } else {
+ echo "\nMAY ->\t ******** Mayor_napló (szemeszter)lekérdezési hiba. (adatbázis) ********\n";
+ }
+ if ($log['verbose'] > 10 ){ print_r($ret); }
+ return $ret;
+ }
+
- function get_mayor_tankor($link){ // A tankörök neveinek lekérdezése a mayorból
- global $m2n,$log;
+
+
+ function get_mayor_tankor($link, $date){ // A tankörök neveinek lekérdezése a mayorból
+ global $cfg,$log;
$ret = array();
$req_oszt = "'#'";
- foreach($m2n['min_osztalyok'] as $key => $val){ //A megadott konkrét osztályokra
+ foreach($cfg['min_osztalyok'] as $key => $val){ //A megadott konkrét osztályokra
$req_oszt .= ",'$val'";
}
-//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 OR zarasDt = '".$m2n['zaras_tartas']."' )); ";
-*/
-//csak a megadott évfeolyamokhoz kötődő tankörök:
- $qq = "SELECT tanev FROM intezmeny_".$m2n['isk_rovidnev'].".szemeszter WHERE statusz = 'aktív' GROUP BY tanev; ";
- if ($log['verbose'] > 5 ){ echo "MAY ->\t".$qq."\n"; }
- if( ($r = mysqli_query($link, $qq)) !== 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 OR zarasDt = '".$m2n['zaras_tartas']."')) 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']." OR osztalyJel IN(".$req_oszt.")
- ORDER BY osztalyId)
- ORDER BY tankorId ) ORDER BY tankorNev;
- ";
- if ($log['verbose'] > 5 ){ echo "MAY ->\t".$q."\n"; }
+ $szm = get_mayor_szemeszter($link, $date);
+ if(!empty($szm)){
+ //Létező összes tankör:
+ /* $q = "SELECT tankorId, TRIM(BOTH ' ' FROM CONCAT('".$cfg['csoport_prefix']."',tankorNev)) AS tankorNev
+ FROM intezmeny_".$cfg['isk_rovidnev'].".tankorSzemeszter
+ WHERE tanev = '".$szm['tanev']."' AND szemeszter = '".$szm['szemeszter']."';
+ ";
+ */
+ //csak a megadott évfeolyamokhoz kötődő tankörök:
+ $q = "SELECT tankorId, TRIM(BOTH ' ' FROM CONCAT('".$cfg['csoport_prefix']."',tankorNev)) AS tankorNev
+ FROM intezmeny_".$cfg['isk_rovidnev'].".tankorSzemeszter
+ WHERE tanev = '".$szm['tanev']."' AND szemeszter = '".$szm['szemeszter']."' AND tankorId IN(
+ SELECT tankorId
+ FROM intezmeny_".$cfg['isk_rovidnev'].".tankorOsztaly
+ WHERE osztalyId IN (
+ SELECT osztalyId
+ FROM naplo_".$cfg['isk_rovidnev']."_".$szm['tanev'].".osztalyNaplo
+ WHERE evfolyamJel >= ".$cfg['min_evfolyam']." OR osztalyJel IN(".$req_oszt.")
+ ORDER BY osztalyId )
+ ORDER BY tankorId )
+ ORDER BY tankorNev;
+ ";
+ if ($log['verbose'] > 7 ){ 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";
}
+ } else {
+ echo "\nMAY ->\t ******** Mayor_napló (tankör)lekérdezési hiba. (Nincs ilyen Szemeszter: ".$date."!) ********\n";
}
+ if ($log['verbose'] > 10 ){ print_r($ret); }
+ return $ret;
}
- function get_mayor_tanar($link){ // A tanárok lekérdezése a mayorból
- global $m2n,$log;
+ function get_mayor_tanar($link, $date){ // A tanárok lekérdezése a mayorból
+ global $cfg,$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 OR tankorTanar.kiDt = '".$m2n['zaras_tartas']."' )
- 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 OR zarasDT = '".$m2n['zaras_tartas']."' ))
- 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;
+ $szm = get_mayor_szemeszter($link, $date);
+ if(!empty($szm)){
+ $q = "SELECT accounts.userAccount, accounts.mail, tanar.email, tanar.tanarId, tankorTanar.tankorId, tanar.oId, '' AS employeeId,
+ tanar.beDt, tanar.kiDt, '' AS kezdoTanev, '' AS vegzoTanev, '' AS jel, '' AS beEv, '' AS osztalyJel,
+ tanar.viseltNevElotag, tanar.viseltCsaladinev, tanar.viseltUtonev,
+ tanar.szuletesiHely,tanar.szuletesiIdo, '' as lakhelyOrszag, '' as lakhelyHelyseg, '' as lakhelyIrsz,
+ '' AS lakHely, '' AS telefon, '' AS mobil, tanar.statusz, 'Tanár' AS beoszt,
+ TRIM(BOTH ' ' FROM CONCAT_WS(' ',viseltNevElotag, viseltCsaladinev, viseltUtonev)) AS fullName,
+ TRIM(BOTH ' ' FROM CONCAT('".$cfg['csoport_prefix']."',tankorNev)) AS tankorNev
+ FROM intezmeny_".$cfg['isk_rovidnev'].".tanar, mayor_private.accounts, intezmeny_".$cfg['isk_rovidnev'].".tankorTanar, intezmeny_".$cfg['isk_rovidnev'].".tankorSzemeszter
+ WHERE accounts.studyId = tanar.oId AND statusz != 'jogviszonya lezárva'
+ AND ( (tanar.beDt <= '".$szm['reqDt']."' AND ( tanar.kiDt >= '".$szm['reqDt']."' OR tanar.kiDt IS NULL))
+ /*OR (tanar.beDt <= CURRENT_DATE() AND (CURRENT_DATE() <= tanar.kiDt OR tanar.kiDt IS NULL))*/ )
+ AND tanar.tanarId = tankorTanar.tanarId
+ AND ((tankorTanar.beDt <= '".$szm['reqDt']."' AND tankorTanar.kiDt >= '".$szm['reqDt']."' )
+ /*OR (tankorTanar.beDt <= CURRENT_DATE() AND CURRENT_DATE() <= tankorTanar.kiDt )*/ )
+ AND tankorTanar.tankorId = tankorSzemeszter.tankorId
+ AND tankorSzemeszter.tanev = '".$szm['tanev']."' AND tankorSzemeszter.szemeszter = '".$szm['szemeszter']."'
+ /* ORDER BY oId; */
+ ORDER BY userAccount ;
+ ";
+ if ($log['verbose'] > 7 ){ 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);
+ } else {
+ echo "\nMAY ->\t ******** Mayor_napló (tanár)lekérdezési hiba. (adatbázis) ********\n";
}
- mysqli_free_result($r);
- return $ret;
} else {
- echo "\nMAY ->\t ******** Mayor_napló (tanár)lekérdezési hiba. (adatbázis) ********\n";
+ echo "\nMAY ->\t ******** Mayor_napló (tanár)lekérdezési hiba. (Nincs ilyen Szemeszter: ".$date."!) ********\n";
}
+ if ($log['verbose'] > 10 ){ print_r($ret); }
+ return $ret;
}
- function get_mayor_diak($link){ // diákok lekérdezése
- global $m2n,$log;
+ function get_mayor_diak($link, $date){ // diákok lekérdezése
+ global $cfg,$log;
$ret = array();
$req_oszt = "'#'";
- foreach($m2n['min_osztalyok'] as $key => $val){ //A megadott konkrét osztályokra
+ foreach($cfg['min_osztalyok'] as $key => $val){ //A megadott konkrét osztályokra
$req_oszt .= ",'$val'";
}
- $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']." OR osztalyJel IN(".$req_oszt.")
- 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 OR tankorDiak.kiDt = '".$m2n['zaras_tartas']."' )
- 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 OR zarasDt = '".$m2n['zaras_tartas']."' ))
- ORDER BY userAccount ;
- ";
- if ($log['verbose'] > 5 ){ echo "MAY ->\t".$q."\n"; }
+ $szm = get_mayor_szemeszter($link, $date);
+ if(!empty($szm)){
+ $q = "SELECT accounts.userAccount, accounts.mail, diak.email, diak.diakId, tankorDiak.tankorId, diak.oId, diak.diakigazolvanySzam AS employeeId,
+ diak.jogviszonyKezdete AS beDt, diak.jogviszonyVege AS kiDt, osztaly.kezdoTanev, osztaly.vegzoTanev, osztaly.jel, diak.kezdoTanev AS beEv,
+ osztalyNaplo.osztalyJel, diak.viseltNevElotag, diak.viseltCsaladinev, diak.viseltUtonev,
+ diak.szuletesiHely, diak.szuletesiIdo, diak.lakhelyOrszag, diak.lakhelyHelyseg, diak.lakhelyIrsz,
+ TRIM(BOTH ' ' FROM CONCAT_WS(' ',diak.lakhelyKozteruletNev, diak.lakhelyKozteruletJelleg, diak.lakhelyHazszam, diak.lakhelyEmelet, diak.lakhelyAjto)) AS lakHely,
+ diak.telefon, diak.mobil, diak.statusz,
+ TRIM(BOTH ' ' FROM CONCAT_WS(' ',viseltNevElotag, viseltCsaladinev, viseltUtonev)) AS fullName,
+ TRIM(BOTH ' ' FROM CONCAT('".$cfg['csoport_prefix']."',tankorNev)) AS tankorNev
+ FROM intezmeny_".$cfg['isk_rovidnev'].".diak, mayor_private.accounts, intezmeny_".$cfg['isk_rovidnev'].".tankorDiak, intezmeny_".$cfg['isk_rovidnev'].".tankorSzemeszter,
+ intezmeny_".$cfg['isk_rovidnev'].".osztalyDiak, intezmeny_".$cfg['isk_rovidnev'].".osztaly, naplo_".$cfg['isk_rovidnev']."_".$szm['tanev'].".osztalyNaplo
+ WHERE diak.diakId IN (
+ SELECT diakId
+ FROM intezmeny_".$cfg['isk_rovidnev'].".osztalyDiak
+ WHERE osztalyId IN (
+ SELECT osztalyId
+ FROM naplo_".$cfg['isk_rovidnev']."_".$szm['tanev'].".osztalyNaplo
+ WHERE evfolyamJel >= ".$cfg['min_evfolyam']." OR osztalyJel IN(".$req_oszt.")
+ 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 <= '".$szm['reqDt']."' AND (tankorDiak.kiDt IS NULL OR tankorDiak.kiDt >= '".$szm['reqDt']."' ))
+ /*OR (tankorDiak.beDt <= CURRENT_DATE() AND (tankorDiak.kiDt IS NULL OR tankorDiak.kiDt >= CURRENT_DATE() ))*/ )
+ AND tankorSzemeszter.tankorId = tankorDiak.tankorId
+ AND tankorSzemeszter.tanev = '".$szm['tanev']."' AND tankorSzemeszter.szemeszter = '".$szm['szemeszter']."'
+ AND osztalyDiak.diakId = diak.diakId
+ AND (osztalyDiak.beDt <= '".$szm['reqDt']."' AND (osztalyDiak.kiDt >= '".$szm['reqDt']."' OR osztalyDiak.kiDt IS NULL))
+ AND osztaly.osztalyId = osztalyDiak.osztalyId
+ AND osztalyDiak.osztalyId = osztalyNaplo.osztalyId
+ /* ORDER BY oId ; */
+ ORDER BY userAccount ;
+ ";
+ if ($log['verbose'] > 7 ){ 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;
+ while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
+ $ret[] = $row;
+ }
+ mysqli_free_result($r);
} 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) ********";
- }
+ echo "\nMAY ->\t ******** Mayor_napló (diák)lekérdezési hiba. (Nincs ilyen Szemeszter: ".$date."!) ********";
+ }
+ if ($log['verbose'] > 10 ){ print_r($ret); }
+ return $ret;
+ }
+
+
+
+//--------------------------------------------------------------------------------------------------------------------------------------------//
+// RUN -- RUN -- RUN -- RUN -- RUN -- RUN -- RUN -- RUN -- RUN -- RUN -- RUN -- RUN -- RUN -- RUN -- RUN -- RUN //
+//--------------------------------------------------------------------------------------------------------------------------------------------//
+
+
+ if(true){ echo "\n\n###################################################\n" ;}
+ if(true){ echo "######## Mayor-Nextcloud Script ########\n"; }
+ if(true){ echo "######## Start: ".date("Y-m-d H:i:s")." ########\n"; }
+ $t_start = microtime(true);
+ if(!isset($cfg['allapot_tartas']) or empty($cfg['allapot_tartas']) or $cfg['allapot_tartas'] == "1970-01-01"){ //A jelölt nap állapotának betöltése
+ $cfg['allapot_tartas'] = date("Y-m-d");
+ }
+ if(true) { echo "######## A (".$cfg['allapot_tartas'].")-i állapot szerint. ########\n"; }
+ if(true){ echo "###################################################\n" ;}
+
+ if(true) { echo "\n*** M2N Config betöltése: ($cfgfile fájlból.) ***\n\n"; }
+ if($printconfig === true or $debug === true){
+ echo "\n Betöltött Konfig:\n";
+ $m2l = $cfg;
+ $m2l['infotxt_szöveg'] = "<-- TEXT -->"; //Túl hosszú lenne kiprintelni
+ var_export($m2l);
+ echo "\n";
}
+ $log['verbose'] = $cfg['verbose'];
+ if($debug === true) {$log['verbose'] = 1000; $printpasswds = true;}
+ if( $cfg['always_set_diak_quota'] === true && $log['verbose'] < 4 ){ $log['verbose'] = 4; }
+
+
-//-------------------------------------------------------------------------------------------------------------------------------
- if(nxt_get_version() < 13){ //Nextcloud 13-tól támogatott
+
+//-------------------------------------------------------------------------------------------------------------------------------
+ $ret = nxt_get_version();
+ $nxt_version = $ret[1];
+ if($ret[1] < 13){ //Nextcloud 13-tól támogatott
echo "\n\n******** Legalább Nextcloud 13-mas verzió szükséges! ********\n\n";
+ echo $ret[0]."\n\n";
+ die();
+ }
+ if($printhelp === true){
+ print_help();
+ die();
+ }
+ if ($cfg['manage_groupdirs'] === true && $cfg['manage_groups'] === false){
+ print_help();
die();
}
-//-------------------------------------------------------------------------------------------------------------------------------
- if($log['verbose'] > 0) { echo "\n\n######## Mayor-Nextcloud Script ########\n\n\n"; }
- if( file_exists($cfgfile)===TRUE ){
- include($cfgfile);
- if($log['verbose'] > 0) { echo "*** M2N Config betöltése: ($cfgfile fájlból.) ***\n\n"; }
- } else {
- if($log['verbose'] > 0) { echo "*** M2N Config betöltése: (".pathinfo($cfgfile)['dirname']."/mayor-nextcloud.php fejlécéből.) ***\n\n"; }
+ if(($link = db_connect($cfg['db_m2n_db'])) == FALSE){ //csatlakozás
+ echo "\n******** MySQL (general) kapcsolat hiba. ********\n";
+ echo "\n******** Script leáll... ********\n";
+ die();
}
+ script_install($link); // $link -> script, $link2 -> mayor
-
- if(($link = db_connect($db)) == FALSE){ //csatlakozás
- echo "\n******** MySQL (general) kapcsolat hiba. ********\n";
+
+ //ha a mayor egy másik szerveren lenne
+ if(!empty($cfg['db_mayor_user'])){ $cfg['db_user'] = $cfg['db_mayor_user']; }
+ if(!empty($cfg['db_mayor_pass'])){ $cfg['db_pass'] = $cfg['db_mayor_pass']; }
+ if(!empty($cfg['db_mayor_host'])){ $cfg['db_host'] = $cfg['db_mayor_host']; }
+ if(!empty($cfg['db_mayor_port'])){ $cfg['db_port'] = $cfg['db_mayor_port']; }
+
+ if(($link2 = db_connect()) == FALSE){
+ echo "\n******** MySQL (mayor) kapcsolat hiba. ********\n";
echo "\n******** Script leáll... ********\n";
die();
- }
- $link2 = $link;
-
- // group_add($m2n['mindenki_csop']); // A "mindenki" csoport hozzáadása
- // group_add($m2n['mindenki_tanar']); // A "mindenki"/tanár csoport hozzáadása
- // group_add($m2n['mindenki_diak']); // A "mindenki"/diák 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"; }
- }
+ } else {
+ if ($log['verbose'] > 0 ){ echo "***\tMayor DB connected.\n"; }
}
+ // group_add($cfg['mindenki_csop']); // A "mindenki" csoport hozzáadása (később adjuk hozzá)
+ // group_add($cfg['mindenki_tanar']); // A "mindenki"/tanár csoport hozzáadása
+ // group_add($cfg['mindenki_diak']); // A "mindenki"/diák csoport hozzáadása
//------------------------------------------------------------------------------------------------------------------------------
// Létrehozza az új coportokat a Mayor tankörök szerint
if ($log['verbose'] > 0 ){ echo "\n***\tCsoportok egyeztetése.\n";}
- $tankorok = get_mayor_tankor($link2);
- $tankorok = array_merge($tankorok, array( array("tankorId" => 0, "tankorNev" => $m2n['mindenki_csop'] )));
- $tankorok = array_merge($tankorok, array( array("tankorId" => 0, "tankorNev" => $m2n['mindenki_tanar'] )));
- $tankorok = array_merge($tankorok, array( array("tankorId" => 0, "tankorNev" => $m2n['mindenki_diak'] )));
+ $tankorok = get_mayor_tankor($link2, $cfg['allapot_tartas']);
+ $tankorok = array_merge($tankorok, array( array("tankorId" => 0, "tankorNev" => $cfg['mindenki_csop'] )));
+ $tankorok = array_merge($tankorok, array( array("tankorId" => 0, "tankorNev" => $cfg['mindenki_tanar'] )));
+ $tankorok = array_merge($tankorok, array( array("tankorId" => 0, "tankorNev" => $cfg['mindenki_diak'] )));
$nxt_csop = nxt_group_list();
+ $nxt_csop2 = nxt_group_list(); //Gyorsítási célzattal, mert lassú
$elozo_tcsop = "";
- 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:".po("\t".$val['tankorNev'],$m2n['csoportnev_hossz'],1)."-\tok.\n";}
- $elozo_tcsop = $val['tankorNev'];
- break;
+ $mod_nxt_group = 0;
+ if($cfg['manage_groups'] === true){
+ 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:".po("\t".$val['tankorNev'],$cfg['csoportnev_hossz'],1)."-\tok.\n";}
+ $elozo_tcsop = $val['tankorNev'];
+ break;
+ }
+ }
+ unset($nxt_csop[$val['tankorNev']]); //Megvizsgálva, többször már nem kell dönteni róla.
+ if( $val['tankorNev'] == $elozo_tcsop and $key2 != $val['tankorNev'] ){ //Duplikált tankör(név) a Mayorban
+ if($log['verbose'] > 2 ){ echo "* -\t Dupla tankör:".po("\t".$val['tankorNev'], $cfg['csoportnev_hossz'],1)."-\tmayor.\n";}
+ }
+ else if($key2 != $val['tankorNev']){ //Ha nincs ilyen (tankör)nevű csoport
+ group_add($val['tankorNev']); //Akkor létrehozza
+ $mod_nxt_group++;
+ if ($log['verbose'] > 2 ){ echo "* -\t Új csoport:".po("\t".$val['tankorNev'],$cfg['csoportnev_hossz'],1)."-\thozzáadva.\n";}
}
}
- unset($nxt_csop[$val['tankorNev']]); //Megvizsgálva, többször már nem kell dönteni róla.
- if( $val['tankorNev'] == $elozo_tcsop and $key2 != $val['tankorNev'] ){ //Duplikált tankör(név) a Mayorban
- if($log['verbose'] > 2 ){ echo "* -\t Dupla tankör:".po("\t".$val['tankorNev'], $m2n['csoportnev_hossz'],1)."-\tmayor.\n";}
- }
- else 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:".po("\t".$val['tankorNev'],$m2n['csoportnev_hossz'],1)."-\thozzáadva.\n";}
- }
+
+ // A megszűnt tanköröket-csoportokat kitörli
+ foreach($nxt_csop as $key => $val){
+ if(substr($key, 0, strlen($cfg['csoport_prefix'])) === $cfg['csoport_prefix'] ){ //Csak a "prefix"-el kezdődő nevűekre.
+ group_del($key, $nxt_csop2); //elvégzi a törlést
+ $mod_nxt_group++;
+ if ($log['verbose'] > 1 ){ echo "** -\t Megszűnő csop:".po("\t$key",$cfg['csoportnev_hossz'],1)."-\t eltávolítva.\n";}
+ } else {
+ if ($log['verbose'] > 3 ){ echo " ---\t Egyéb csoport:".po("\t$key",$cfg['csoportnev_hossz'],1)."-\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.
}
-// 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 Megszűnő csop:".po("\t$key",$m2n['csoportnev_hossz'],1)."-\t eltávolítva.\n";}
- } else {
- if ($log['verbose'] > 3 ){ echo " ---\t Egyéb csoport:".po("\t$key",$m2n['csoportnev_hossz'],1)."-\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.
@@ -785,41 +960,49 @@ if (function_exists('mysqli_connect') and PHP_MAJOR_VERSION >= 7) { //MySQLi (Im
// Felhasználónevek egyeztetése
if ($log['verbose'] > 0 ){ echo "\n***\tFelhasználók egyeztetése.\n";}
- $mayor_tanar = get_mayor_tanar($link2); //Rendezve jön
- $mayor_tanar = add_tk_to_users( $mayor_tanar, null, $m2n['mindenki_tanar']); //csak rendezett tömbökön!
- $mayor_tanar = add_param_to_user($mayor_tanar, null, 'quota', $m2n['default_quota']);
- $mayor_tanar = add_param_to_user($mayor_tanar, null, 'diakId', -1 );
+ $mayor_tanar = get_mayor_tanar($link2, $cfg['allapot_tartas']); //Rendezve jön
+ $mayor_tanar = add_tk_to_users( $mayor_tanar, null, $cfg['mindenki_tanar']); //csak rendezett tömbökön!
+ $mayor_tanar = set_param_to_user($mayor_tanar, null, 'quota', $cfg['default_quota']);
+ $mayor_tanar = set_param_to_user($mayor_tanar, null, 'diakId', -1 );
usort($mayor_tanar, "mayor_userlistcmp");
- $mayor_diak = get_mayor_diak($link2); //mysql rendezi
- $mayor_diak = add_tk_to_users( $mayor_diak, null, $m2n['mindenki_diak']); //csak rendezett tömbökön!
- $mayor_diak = add_param_to_user($mayor_diak, null, 'quota', $m2n['diak_quota']);
- $mayor_diak = add_param_to_user($mayor_diak, null, 'tanarId', -1 );
+ $mayor_diak = get_mayor_diak($link2, $cfg['allapot_tartas']); //mysql rendezi
+ $mayor_diak = add_tk_to_users( $mayor_diak, null, $cfg['mindenki_diak']); //csak rendezett tömbökön!
+ $mayor_diak = set_param_to_user($mayor_diak, null, 'quota', $cfg['diak_quota']);
+ $mayor_diak = set_param_to_user($mayor_diak, null, 'tanarId', -1 );
usort($mayor_diak, "mayor_userlistcmp");
$mayor_user = array();
- $mayor_user = array_merge($mayor_tanar, $mayor_diak);
- $mayor_user = add_tk_to_users( $mayor_user, null, $m2n['mindenki_csop']); //csak rendezett tömbökön //mindenki csoport
- usort($mayor_user, "mayor_userlistcmp");
-
- if(isset($m2n['megfigyelo_user']) && $m2n['megfigyelo_user'] != "" ){ //A megfigyelő felvétele a lista végére
- foreach(get_mayor_tankor($link2) as $key => $val){
+ $mayor_user = array_merge($mayor_tanar, $mayor_diak); //Tanár, és diák lista együtt
+
+ if(!empty($cfg['megfigyelo_user'])){ //A megfigyelő user felvétele a lista végére
+ $mayor_user = array_merge($mayor_user, array(
+ array( 'userAccount' => $cfg['megfigyelo_user'], //A megfigyelő user legyen egyben virtuális tanár is
+ 'tanarId' => 1, 'oId' => 70000000000, 'diakId' => 0, 'tankorId' => 0, 'fullName' => "Napló Admin Megfigyelő",
+ 'email' => $cfg['default_email'],
+ 'tankorNev' => $cfg['mindenki_tanar'],
+ )));
+ foreach(get_mayor_tankor($link2, $cfg['allapot_tartas']) as $key => $val){ //És beléptetve az összes létező csoportba
$mayor_user = array_merge($mayor_user, array(
- array( 'userAccount' => $m2n['megfigyelo_user'],
- 'email' => $m2n['default_email'],
+ array( 'userAccount' => $cfg['megfigyelo_user'],
+ 'email' => $cfg['default_email'],
'tanarId' => 1,
'diakId' => 0,
+ 'oId' => 70000000000,
'tankorId' => $val['tankorId'],
- 'fullName' => "Napló Admin",
+ 'fullName' => "Napló Admin Megfigyelő",
'tankorNev' => $val['tankorNev'],
- )));
- //if($val['tankorNev'] == "(tk) 10.b kémia" ){ break; }
-
+ )
+ )
+ );
+ //if($val['tankorNev'] == "(tk) 10.b kémia" ){ break; }
}
}
-
- usort($mayor_user, "mayor_userlistcmp"); //ha a megfigyelo helyesen van egy rendezett lista végén, nem kell ismét rendezni
+ usort($mayor_user, "mayor_userlistcmp"); //rendezés
+ $mayor_user = add_tk_to_users( $mayor_user, null, $cfg['mindenki_csop']); //csak rendezett tömbökön //mindenki csoport
+ usort($mayor_user, "mayor_userlistcmp"); //Végén ismét rendezzük az egészet
$mayor_user = array_merge($mayor_user, array(array('userAccount' => null, 'fullName' => null, 'tankorNev' => null, 'diakId' => 0, 'tanarId' => 0,)) ); //strázsa a lista végére
+
$nxt_user = nxt_user_list();
$nxt_group = nxt_group_list();
$m2n_catalog = catalog_userlist($link);
@@ -827,116 +1010,134 @@ if (function_exists('mysqli_connect') and PHP_MAJOR_VERSION >= 7) { //MySQLi (Im
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($mayor_user[$key]['userAccount'], $m2n_forbidden) ){ //És, ha a nyilvántartásban "forbidden"-ként szerepel,
+ foreach($mayor_user as $key => $val){ //Lecseréli az ékezetes betűket a felhasználónévből
+ $mayor_user[$key]['userAccount'] = gen_username($val); // lehet saját függvény is
+ if(in_array($mayor_user[$key]['userAccount'], $m2n_forbidden) ){ //És, ha a nyilvántartásban "forbidden"-ként szerepel,
unset($mayor_user[$key]); // akkor nem foglalkozik vele tovább.
}
}
$curr = "";
+ $curr_o = array();
$tankorei = array();
- foreach($mayor_user as $key => $val){ //Végignézi a mayorból kinyert lista alapján.
+ $mod_nxt_user_all = 0;
+ $mod_nxt_user = 0;
+ foreach($mayor_user as $key => $val){ //Végignézi a mayorból kinyert lista alapján.
- if($curr != $val['userAccount']){ //CSAK Rendezett tömbökön !!
+ if($curr != $val['userAccount']){ //CSAK Rendezett tömbökön !!
foreach($nxt_user as $key2 => $val2){
- if($curr == $key2){ //Már létezik a felhasználó a Nextcloud-ban
- $log['curr'] = "-\tFelhasználó:".po("\t$curr_n ($curr)",$m2n['felhasznalo_hossz'],1)."--\tok.\n";
+ if($curr == $key2){ //Már létezik a felhasználó a Nextcloud-ban
+ $log['curr'] = "-\n-\tFelhasználó:".po("\t$curr_n ($curr)",$cfg['felhasznalo_hossz'],1)."--\tlétezik.\n";
if ($log['verbose'] > 3 ){ echo " -".$log['curr']; $log['curr'] = "";}
- if( in_array($curr, $m2n_catalog['account'])){ //Benne van-e a nyilvántartásban?
- if($m2n_catalog['status'][array_keys($m2n_catalog['account'], $curr)[0]] == 'disabled' ){ // Ha le lett tiltva
- //if(user_info($curr)['enabled']!=true){ // Ez valós, de irtó lassú
- catalog_userena($link, $curr); //Ha netán le lenne tiltva, akkor engedélyezi,
- user_ena($curr); // ha a script tiltotta le.
+ if ( in_array($curr, $m2n_catalog['account'])){ //Benne van-e a nyilvántartásban?
+ if($m2n_catalog['status'][array_keys($m2n_catalog['account'], $curr)[0]] == 'disabled' ){ // Ha le lett tiltva
+ //if(user_info($curr)['enabled']!=true){ // Ez valós, de irtó lassú
+ catalog_userena($link, $curr); //Ha netán le lenne tiltva, akkor engedélyezi,
+ user_ena($curr); // ha a script tiltotta le.
+ $mod_nxt_user++;
+ $log['curr'] = "-\n-\tFelhasználó:".po("\t$curr_n ($curr)",$cfg['felhasznalo_hossz'],1)."--\tengedélyezve.\n";
+ if ($log['verbose'] > 2 ){ echo " -".$log['curr']; $log['curr'] = ""; } //Ez is változtatás
}
- } else { //Nincs a katalógusban, nincs tiltva, felvesszük
+ } else { //Nincs a katalógusban, nincs tiltva, felvesszük
catalog_useradd($link, $curr);
- if ($log['verbose'] > 1 ){ echo "-\t\tA felhasználó:".po("\t$curr",$m2n['felhasznalo_hossz'],1)."-\tnyilvántartásba véve.\n";}
+ if ($log['verbose'] > 1 ){ echo "-\t\tA felhasználó:".po("\t$curr",$cfg['felhasznalo_hossz'],1)."-\tnyilvántartásba véve.\n";}
}
//--------------------------------------- QUOTA -----------------------------------//
- if($ALWAYS_SET_DIAK_QUOTA === true && $curr_tanarId < 0 && $curr_diakId > 0 ){ //Állítsunk-e erőből (diák) qvótát?
- $params['quota'] = $m2n['diak_quota']; // Alapértelmezett diák kvóta
+ if($cfg['always_set_diak_quota'] === true && $curr_tanarId < 0 && $curr_diakId > 0 ){ //Állítsunk-e erőből (diák) qvótát?
+ $params['quota'] = $cfg['diak_quota']; // Alapértelmezett diák kvóta
user_set($curr,$params);
- if ($log['verbose'] > 3 ){ echo "* -\t\tBeállítva:\t"."Qvóta: ".$params['quota']."\t\n";}
+ $mod_nxt_user++;
+ if ($log['verbose'] > 3 ){ echo "* -\t\tBeállítva:\t"."Qvóta: ".$params['quota']."\t\n"; }
}
- //------------------------- Tankörmappa györkér + info.txt ------------------------//
- $ret = groupdir_create_root($curr, $curr_tanarId, $m2n['groupdir_prefix']);
- if ($ret[0] === true && $log['verbose'] > 2 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} echo "* -\t\tLétrehozva :".po("\t./".$curr."/files/".$m2n['groupdir_prefix'],$m2n['csoportnev_hossz'],1)."\ttankörmappa gyökér.\n";}
- if ($ret[1] > 0 && $log['verbose'] > 3 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} echo "* -\t\tLétrehozva :".po("\t./".$curr."/files/". $m2n['groupdir_prefix']."/INFO.txt",$m2n['csoportnev_hossz'],1)."\tfájl.\n";}
+
+ if($cfg['manage_groups'] === true){ //Csak, ha a acsoportokhoz is nyúlunk
+ //------------------------- Tankörmappa györkér + info.txt ------------------------//
+ $ret = groupdir_create_root($curr, $curr_tanarId, $cfg['groupdir_prefix']);
+ if ($ret[0] === true && $log['verbose'] > 2 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} echo "* -\t\tLétrehozva :".po("\t./".$curr."/files/".$cfg['groupdir_prefix'],$cfg['csoportnev_hossz'],1)."\ttankörmappa gyökér.\n";}
+ if ($ret[1] > 0 && $log['verbose'] > 3 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} echo "* -\t\tLétrehozva :".po("\t./".$curr."/files/". $cfg['groupdir_prefix']."/INFO.txt",$cfg['csoportnev_hossz'],1)."\tfájl.\n";}
- //------------------------------------------ Tankörök egyeztetése -------------------------------------------//
- foreach($nxt_group as $key3 => $val3){ //A tankörök egyeztetése
- if(in_array($key3, $tankorei) /*or $key3 == $m2n['mindenki_csop']*/){ //szerepel-e a felhasználó tankörei között a csoport, vagy a "mindenki" csoport?
- if( in_array($curr, $val3)){ //Igen, és már benne is van +++
- if ($log['verbose'] > 3 ){ echo " -\t\tBenne van a:".po("\t$key3",$m2n['csoportnev_hossz'],1)."\tcsoportban.\n";}
- } else { //Nincs, most kell beletenni
- if ($log['verbose'] > 2 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} echo "* -\t\tHozzáadva a:".po("\t$key3",$m2n['csoportnev_hossz'],1)."\tcsoporthoz.\n";}
- group_user_add($key3, $curr); //A "mindenki csoportot is ellenőrzi
- }
- //------------------------------- Tankörmappa -----------------------------// //( "_" --> mindenkinek, "username" --> csak neki ) && tanár
- if($key3 != $m2n['mindenki_tanar'] && $key3 != $m2n['mindenki_diak'] && $key3 != $m2n['mindenki_tanar']){ //Ezekre a csoportokra minek?
- $ret = groupdir_create_groupdir($curr, $curr_tanarId, $m2n['groupdir_prefix']."/".$key3);
- if ($ret === true && $log['verbose'] > 2 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} echo "* -\tÚj mappa Létrehozva:".po("\t/".$key3."/",$m2n['csoportnev_hossz'],1)."\t./".$curr."/files/".$m2n['groupdir_prefix']."/ mappába\n";}
- }
-
- //------------------------------------- Tankör (Csoportból) törlés -------------------------//
- } 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:".po("\t$key3",$m2n['csoportnev_hossz'],1)."\tcsoportból.\n";}
- group_user_del($key3, $curr); //egy korábbi tankör lehetett...
+ //------------------------------------------ Tankörök egyeztetése -------------------------------------------//
+ foreach($nxt_group as $key3 => $val3){ //A tankörök egyeztetése
+ if(in_array($key3, $tankorei) /*or $key3 == $cfg['mindenki_csop']*/){ //szerepel-e a felhasználó tankörei között a csoport, vagy a "mindenki" csoport?
+ if( in_array($curr, $val3)){ //Igen, és már benne is van +++
+ if ($log['verbose'] > 3 ){ echo " -\t\tBenne van a:".po("\t$key3",$cfg['csoportnev_hossz'],1)."\tcsoportban.\n";}
+ } else { //Nincs, most kell beletenni
+ if ($log['verbose'] > 2 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} echo "* -\t\tHozzáadva a:".po("\t$key3",$cfg['csoportnev_hossz'],1)."\tcsoporthoz.\n"; }
+ group_user_add($key3, $curr); //A "mindenki csoportot is ellenőrzi
+ $mod_nxt_user++;
+ }
+
+ //------------------------------- Tankörmappa -----------------------------// //( "_" --> mindenkinek, "username" --> csak neki ) && tanár
+ $ret = groupdir_create_groupdir($curr, $curr_tanarId, $cfg['groupdir_prefix']."/".$key3);
+ if ($ret === true && $log['verbose'] > 2 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} echo "* -\tÚj mappa Létrehozva:".po("\t/".$key3."/",$cfg['csoportnev_hossz'],1)."\t./".$curr."/files/".$cfg['groupdir_prefix']."/ mappába\n";}
+ $ret = groupdir_create_groupdir($curr, $curr_tanarId, $cfg['groupdir_prefix']."/".$key3."_beadás");
+ if ($ret === true && $log['verbose'] > 2 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} echo "* -\tÚj mappa Létrehozva:".po("\t/".$key3."_beadás/",$cfg['csoportnev_hossz'],1)."\t./".$curr."/files/".$cfg['groupdir_prefix']."/ mappába\n";}
+
+ //------------------------------------- Tankör (Csoportból) törlés -------------------------//
+ } else { //Nem szerepel a tankörei között
+ if(in_array($curr, $val3) and (substr($key3, 0, strlen($cfg['csoport_prefix'])) === $cfg['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:".po("\t$key3",$cfg['csoportnev_hossz'],1)."\tcsoportból.\n"; }
+ group_user_del($key3, $curr); //egy korábbi tankör lehetett...
+ $mod_nxt_user++;
+ }
}
}
+
+ //------------------------------------- Tankörmappa törlés + NXT-rescan ----------------------------------// //( "_" --> mindenkinek, "username" --> csak neki ) && tanár
+ $ret = groupdir_finish($curr, $curr_tanarId, $cfg['groupdir_prefix'], $tankorei);
+ if (count($ret[0]) > 0 && $log['verbose'] > 2 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} foreach($ret[0] as $retkey => $retval){ echo "* -\t Üres (Tankör)mappa:".po("\t/".$retval."/", $cfg['csoportnev_hossz'],1)."\t./".$curr."/files/".$cfg['groupdir_prefix']."/ mappából törölve.\n";}}
+ if (count($ret[1]) > 0 && $log['verbose'] > 2 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} foreach($ret[1] as $retkey => $retval){ echo "* -\tFájl/Mappa Átnevezve:".po("\t/".$retval."/", $cfg['csoportnev_hossz'],1)."\t./".$curr."/files/".$cfg['groupdir_prefix']."/ mappában.\n";}}
+ if (count($ret[2]) > 0 && $log['verbose'] > 3 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} foreach($ret[2] as $retkey => $retval){ echo "* -\t\tTankörmappa:".po("\t/".$retval."/", $cfg['csoportnev_hossz'],1)."\t./".$curr."/files/".$cfg['groupdir_prefix']."/ mappában békén hagyva.\n";}}
+ if ($ret[3] === true && $log['verbose'] > 3 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} echo "* -\t\tNXT-rescan :".po("\t./".$curr."/files/".$cfg['groupdir_prefix']."/", $cfg['csoportnev_hossz'],1)."\t mappán.\n";}
}
- //------------------------------------- Tankörmappa törlés + NXT-rescan ----------------------------------// //( "_" --> mindenkinek, "username" --> csak neki ) && tanár
-
- $ret = groupdir_finish($curr, $curr_tanarId, $m2n['groupdir_prefix'], $tankorei);
- if (count($ret[0]) > 0 && $log['verbose'] > 2 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} foreach($ret[0] as $retkey => $retval){ echo "* -\t Üres (Tankör)mappa:".po("\t/".$retval."/", $m2n['csoportnev_hossz'],1)."\t./".$curr."/files/".$m2n['groupdir_prefix']."/ mappából törölve.\n";}}
- if (count($ret[1]) > 0 && $log['verbose'] > 2 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} foreach($ret[1] as $retkey => $retval){ echo "* -\tFájl/Mappa Átnevezve:".po("\t/".$retval."/", $m2n['csoportnev_hossz'],1)."\t./".$curr."/files/".$m2n['groupdir_prefix']."/ mappában.\n";}}
- if (count($ret[2]) > 0 && $log['verbose'] > 3 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} foreach($ret[2] as $retkey => $retval){ echo "* -\t\tTankörmappa:".po("\t/".$retval."/", $m2n['csoportnev_hossz'],1)."\t./".$curr."/files/".$m2n['groupdir_prefix']."/ mappában békén hagyva.\n";}}
- if ($ret[3] === true && $log['verbose'] > 3 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} echo "* -\t\tNXT-rescan :".po("\t./".$curr."/files/".$m2n['groupdir_prefix']."/", $m2n['csoportnev_hossz'],1)."\t mappán.\n";}
-
+ $mod_nxt_user_all++;
break;
}
- }
+ }
unset($nxt_user[$curr]); //Felhasználó 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ó
- user_add($curr, $curr_n); //Akkor hozzá kell adni
+ $ret = user_add($curr, $curr_n); //Akkor hozzá kell adni
catalog_useradd($link, $curr);
- if ($log['verbose'] > 2 ){ echo "**-\tFelhasználó:".po("\t$curr_n ($curr)",$m2n['felhasznalo_hossz'],1)."--\tlétrehozva.\n";}
-
- $ret = groupdir_create_root($curr, $curr_tanarId, $m2n['groupdir_prefix']);
- if ($ret[0] === true && $log['verbose'] > 2 ){ echo "* -\t\tLétrehozva :".po("\t./".$curr."/files/".$m2n['groupdir_prefix']."/",$m2n['csoportnev_hossz'],1)."\ttankörmappa gyökér.\n";}
- if ($ret[1] > 0 && $log['verbose'] > 2 ){ echo "* -\t\tLétrehozva :".po("\t./".$curr."/files/".$m2n['groupdir_prefix']."/INFO.txt",$m2n['csoportnev_hossz'],1)."\tfájl.\n";}
-
- foreach($tankorei as $key3 => $val3){ //Hozzáadja a (tankör)csoportokhoz is egyből,
- if(array_key_exists($val3, $nxt_group)) { // de, csak akkor, ha az a csoport a Nextcloud-ban is létezik.
- group_user_add($val3, $curr);
- if ($log['verbose'] > 2 ){ echo "* -\t\tHozzáadva a:".po("\t $val3",$m2n['csoportnev_hossz'],1)."\tcsoporthoz.\n"; }
- if($val3 != $m2n['mindenki_tanar'] && $val3 != $m2n['mindenki_diak'] && $val3 != $m2n['mindenki_tanar']){ //Ezekre a csoportokra minek mappa?
- $ret = groupdir_create_groupdir($curr, $curr_tanarId, $m2n['groupdir_prefix']."/".$val3);
- if ($ret === true && $log['verbose'] > 2 ){echo "* -\tÚj mappa Létrehozva:".po("\t/".$val3."/",$m2n['csoportnev_hossz'],1)."\t./".$curr."/files/".$m2n['groupdir_prefix']."/ mappa\n";}
+ if ($printpasswds === true ){ $pw = strval($ret[1]); } else { $pw = "<password>"; }
+ if ($log['verbose'] > 2 ){ echo "-\n**-\tFelhasználó:".po("\t".po($curr_n, 25, 1)." ($curr/$pw)",$cfg['felhasznalo_hossz'],1)." --\tlétrehozva.\n"; }
+ $mod_nxt_user++;
+
+ if($cfg['manage_groups'] === true){
+ $ret = groupdir_create_root($curr, $curr_tanarId, $cfg['groupdir_prefix']);
+ if ($ret[0] === true && $log['verbose'] > 2 ){ echo "* -\t\tLétrehozva :".po("\t./".$curr."/files/".$cfg['groupdir_prefix']."/",$cfg['csoportnev_hossz'],1)."\ttankörmappa gyökér.\n";}
+ if ($ret[1] > 0 && $log['verbose'] > 2 ){ echo "* -\t\tLétrehozva :".po("\t./".$curr."/files/".$cfg['groupdir_prefix']."/INFO.txt",$cfg['csoportnev_hossz'],1)."\tfájl.\n";}
+
+ foreach($tankorei as $key3 => $val3){ //Hozzáadja a (tankör)csoportokhoz is egyből,
+ if(array_key_exists($val3, $nxt_group)) { // de, csak akkor, ha az a csoport a Nextcloud-ban is létezik.
+ group_user_add($val3, $curr);
+ if ($log['verbose'] > 2 ){ echo "* -\t\tHozzáadva a:".po("\t $val3",$cfg['csoportnev_hossz'],1)."\tcsoporthoz.\n"; }
+ $ret = groupdir_create_groupdir($curr, $curr_tanarId, $cfg['groupdir_prefix']."/".$val3);
+ if ($ret === true && $log['verbose'] > 2 ){echo "* -\tÚj mappa Létrehozva:".po("\t/".$val3."/",$cfg['csoportnev_hossz'],1)."\t./".$curr."/files/".$cfg['groupdir_prefix']."/ mappa\n";}
+ $ret = groupdir_create_groupdir($curr, $curr_tanarId, $cfg['groupdir_prefix']."/".$val3."_beadás");
+ if ($ret === true && $log['verbose'] > 2 ){echo "* -\tÚj mappa Létrehozva:".po("\t/".$val3."_beadás/",$cfg['csoportnev_hossz'],1)."\t./".$curr."/files/".$cfg['groupdir_prefix']."/ mappa\n";}
}
- }
- }
- $ret = groupdir_finish($curr, $curr_tanarId, $m2n['groupdir_prefix'], null);
- if ($ret[3] === true && $log['verbose'] > 3 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} echo "* -\t\tNXT-rescan :".po("\t./".$curr."/files/".$m2n['groupdir_prefix']."/", $m2n['csoportnev_hossz'],1)."\t mappán.\n";}
-
+ }
+ $ret = groupdir_finish($curr, $curr_tanarId, $cfg['groupdir_prefix'], null);
+ if ($ret[3] === true && $log['verbose'] > 3 ){if($log['curr'] !== ""){echo "**".$log['curr'];$log['curr'] = "";} echo "* -\t\tNXT-rescan :".po("\t./".$curr."/files/".$cfg['groupdir_prefix']."/", $cfg['csoportnev_hossz'],1)."\t mappán.\n";}
+ }
if($curr_diakId > 0) { //Ennyi is elég // Diákról van szó /// if($curr_tanarId < 0 && $curr_diakId > 0)
- $params['quota'] = $m2n['diak_quota']; // Alapértelmezett kvóta
+ $params['quota'] = $cfg['diak_quota']; // Alapértelmezett kvóta
} else {
- $params['quota'] = $m2n['default_quota']; // Alapértelmezett kvóta
+ $params['quota'] = $cfg['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
+ $params['lang'] = $cfg['default_lang']; // Nyelv
+ /*
+ if($curr_email == ""){
+ $params['email'] = $cfg['default_email']; // e-mail beállítása
} else {
- $params['email'] = $curr_e; // ha van a mysql-ben e-mail, akkor azt használja
+ $params['email'] = $curr_email; // ha van a mysql-ben e-mail, akkor azt használja
}
+ */
+ $params['email'] = $curr_email;
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";}
+ if ($log['verbose'] > 3 ){ echo "* -\t\tBeállítva:\t"."Qvóta: ".$params['quota']."\tNyelv: ".$params['lang']."\tE-mail: ".$params['email']."\n";}
}
unset($tankorei);
@@ -945,7 +1146,13 @@ if (function_exists('mysqli_connect') and PHP_MAJOR_VERSION >= 7) { //MySQLi (Im
$curr_n = $val['fullName']; //
$curr_tanarId = $val['tanarId'];
$curr_diakId = $val['diakId'];
- $curr_e = @$val['email']; //
+ if(!empty($val['email'])) {
+ $curr_email = $val['email'];
+ } else if(!empty($val['mail'])){
+ $curr_email = $val['mail'];
+ } else {
+ $curr_email = $cfg['default_email']; // e-mail beállítása
+ }
}
$tankorei[] = $val['tankorNev']; // Másodszor/Egyébként a csoportok (tankörök) gyűjtése
}
@@ -959,22 +1166,24 @@ if (function_exists('mysqli_connect') and PHP_MAJOR_VERSION >= 7) { //MySQLi (Im
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
catalog_userdel($link, $key); //A listáról is
- if ($log['verbose'] > 1 ){ echo "**-\tFelhasználó:".po("\t$val ($key)",$m2n['felhasznalo_hossz'],1)."--\ttörölve.\n";}
+ if ($log['verbose'] > 1 ){ echo "-\n**-\tFelhasználó:".po("\t$val ($key)",$cfg['felhasznalo_hossz'],1)."--\ttörölve.\n"; }
} else {
user_dis($key); //Különben csak letiltja (fájlok ne vesszenek el)
catalog_userdis($link, $key); //Feljegyzi a nyilvántartásba
- if ($log['verbose'] > 1 ){ echo "**-\tFelhasználó:".po("\t$val ($key)",$m2n['felhasznalo_hossz'],1)."--\tletiltva.\n";}
+ if ($log['verbose'] > 1 ){ echo "-\n**-\tFelhasználó:".po("\t$val ($key)",$cfg['felhasznalo_hossz'],1)."--\tletiltva.\n"; }
}
+ $mod_nxt_user++;
+ $mod_nxt_user_all++;
}
// 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 törli, ha kellene
- // - vagy megszűnő, korábbi mayor_napló-s user --> törli (vagy letiltja)
+ // - vagy más, mayor_naplón kívüli user (rendszergazda vette föl) --> nem törli
+ // - vagy megszűnő, korábbi mayor_napló-s user --> törli, vagy letiltja
// ha rajta van a $catalog 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)
+ // - 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)
}
@@ -986,13 +1195,13 @@ if (function_exists('mysqli_connect') and PHP_MAJOR_VERSION >= 7) { //MySQLi (Im
foreach($m2n_catalog['account'] as $key => $val){
if(@$nxt_user[$val] === null ){ //Erre a nextcloud "occ" parancs hibakezelése miatt van szükség
- if ($log['verbose'] > 4 ){ echo "**-\tFelhasználónév:".po("\t($val)",$m2n['felhasznalo_hossz'],1)."--\tkivéve a nyilvántartásból.\n";}
+ if ($log['verbose'] > 4 ){ echo "-\n**-\tFelhasználónév:".po("\t($val)",$cfg['felhasznalo_hossz'],1)."--\tkivéve a nyilvántartásból.\n";}
catalog_userdel($link, $val);
}
}
- foreach($m2n_forbidden as $key => $val){ //Szinkronizálja a $m2n['kihagy'] listát a nyilvántartással.
- if(!in_array($val, $m2n['kihagy'])){
- if ($log['verbose'] > 4 ){ echo "**-\tFelhasználó:".po("\t($val)",$m2n['felhasznalo_hossz'],1)."--\tújra engedélyezve.\n";}
+ foreach($m2n_forbidden as $key => $val){ //Szinkronizálja a $cfg['kihagy'] listát a nyilvántartással.
+ if(!in_array($val, $cfg['kihagy'])){
+ if ($log['verbose'] > 4 ){ echo "-\n**-\tFelhasználó:".po("\t($val)",$cfg['felhasznalo_hossz'],1)."--\tújra kezelve.\n";}
catalog_userena($link,$val);
user_ena($val);
}
@@ -1002,16 +1211,23 @@ if (function_exists('mysqli_connect') and PHP_MAJOR_VERSION >= 7) { //MySQLi (Im
//test
//script_install($link);
-
-
+ if($log['verbose'] > 0 ){ echo "\n\nStatisztikák:\n";}
+ if($log['verbose'] > 0 ){ echo "Összes művelet: ".($mod_nxt_user + $mod_nxt_group)."db.\n";}
+ if($log['verbose'] > 0 ){ echo "Feldolgozva: ".$mod_nxt_user_all."db felhasználó.\n";}
+ if($log['verbose'] > 0 ){ echo "Változtatás: ".$mod_nxt_user."db a Nextcloud felhasználói beállításokban.\n";}
+ if($log['verbose'] > 0 ){ echo "Változtatás: ".$mod_nxt_group."db a Nextcloud csoport beállításokban.\n";}
+ if($dryrun){ echo " (( !! DRY RUN !! ))\n"; }
+
+
@mysqli_close($link2);
@mysqli_close($link);
- if ($log['verbose'] > 0 ){echo "kész.\n";} //endline
-
+ $t_run = round((microtime(true) - $t_start)/60, 3);
+ if ($log['verbose'] > 0 ){ echo "\n(Runtime: ".$t_run." min.)\nkész.\n";} //endline
+
} else {
- echo "\n\n******** Legalább PHP7 és mysqli szükséges! ********\n\n";
+ echo "\n\n******** Legalább PHP5 és mysqli szükséges! ********\n\n";
}
-
+
?>