Thread Verfasser: GordenM82
Thread ID: 1284
Thread Info
Es gibt 18 Beiträge zu diesem Thema, und es wurde 3017 Mal angesehen.
 Thema drucken
User_Level hinzufügen
GordenM82
Hallo zusammen,
ich möchte gerne bei der v7.02.07 ein neues User-Level hinzufügen, KEINE in der Fusion erstellbare Gruppe. Sinn und Zweck des neuen User_levels steht hier nicht zur Diskussion ;)

Leider haben mir google und diverse andere Foren / Threads / Posts nicht wirklich weiter gebracht.

Welche Dateien (außer die maincore.php) müssten noch geändert werden, dass ich ein neues User_level hinzufügen kann und auch so dann natürlich in der DB hinterlegt und abgefragt wird, wie es bei den anderen Levels der Fall ist.

Aktuell gibts ja 4 User_level: 0 (Gast), 101 (Mitglied), 102 (Admin) und 103 (Super-Admin).

Ich habe schon verschiede Sachen NUR in der maincore.php versucht, aber wenn ich mich dann einlogge, erscheint die Admin-PW-Abfrage, obwohl es KEIN Admin ist. Die User_Level Nummer habe ich zum testen in der DB manuell geändert.
Soweit scheint es ja zu klappen, wenn nicht diese Admin-PW-Abfrage wäre.

Probiert habe ich unter anderem:
Überall wo in der maincore "iMEMBER" steht umzuschreiben auf "iXXX" und dementsprechend wo "101" steht die Nummer zu ändern, wie zum Beispiel:

--schnipp--

Code 

define("iMEMBER", $userdata['user_level'] >= 101 ? 1 : 0);
define("iXXX", $userdata['user_level'] >= 104 ? 1 : 0);


--schnapp--

--schnipp--

Code 

} elseif ($userlevel == 103) { return $locale['user3'];
} elseif ($userlevel == 104) { return $locale['user4']; }


--schnapp--

--schnipp--

Code 

} elseif (iMEMBER && ($group == "0" || $group == "101" )) { return true;
} elseif (iXXX && ($group == "0" || $group == "101" || $group == "104" )) { return true;


--schnapp--

--schnipp--

Code 

array("103", $locale['user3']),
array("104", $locale['user4'])


--schnapp--

--schnipp--

Code 

} elseif ($group_id == "103" ) { return $locale['user3']; exit; 
} elseif ($group_id == "104" ) { return $locale['user4']; exit;


--schnapp--

--schnipp--

Code 

} elseif (iMEMBER) { $res = "($field='0' OR $field='101'";
} elseif (iXXX) { $res = "($field='0' OR $field='101' OR $field='104'";


--schnapp--

So habe ich - wie bereits erwähnt - NUR die maincore geändert und dann fragt der mich nach nach erfolgreichem Einloggen nach Admin-PW.
In der "locale/german.php" habe ich "user4" hinzugefügt, also daran scheitert es nicht.

Gibts evtl. jemanden, der mir helfen kann, ein User_Level 100 oder 104 (oder welche Nummer auch immer) hinzuzufügen?

Ich hoffe ich habs nicht zu kompliziert geschrieben.
Über Hilfe würde ich mich freuen :)
Herzlichen Dank schonmal im Voraus.

Bitte BB-Codes benutzen
Bearbeitet von Dat Tunes am 20.06.2017 um 09:33
 
John Doe
Naja, die Nummer des Userlevel ist nicht wirklich egal! Sie sollte schon unter 102 liegen, sonst funktionieren die ganzen Abfragen bezüglich der Admins nicht mehr.

Soll z.B. deine XXXXX mehr Rechte haben als ein Mitglied und weniger als ein Admin, so müsste diese Nummer zwischen 101 und 102 liegen, was nicht geht. Also müssten Mitglieder die 100 bekommen und deine XXXXX die 101. Auch sind da mehrere Dateien zu ändern, die ich leider nicht alle weiß und du müsstest eine Menge Infusionen anpassen!

Es gibt bereits ein fertiges Installationspaket, welches mit Moderator und Supermoderator erweitert wurde. Das nennt sich Chrome Fusion und ist hier zu finden: http://chrome-fusion.de/downloads.php...nload_id=1
Vielleicht hilft dir das weiter, ich hab es allerdings nie getestet.

Und jetzt komme ich zu den Nebenwirkungen und doch auf den Sinn des Ganzen. Nebenwirkungen solch einer Modifikation sind klar:
1. eine Menge Arbeit mit den Anpassungen von Core und Infusionen.
2. dir kann in den meisten Foren nicht mehr geholfen werden, weil dort vom Standart ausgegangen wird!
Daher stellt sich schon die Frage, ob es Sinn macht oder man das geplante nicht doch anders umsetzen kann!
 
GordenM82
Hallo und danke für die Rückmeldung.
Sorry, hatte vergessen die BB-Codes zu benutzen, danke fürs editieren.

Im Endeffekt soll das neue user_level bei mir die gleichen Rechte haben wie ein Mitglied (101), aber quasi nur anders ausgegeben werden (XXX).
Dennoch sollen alle vorhandenen Levels erhalten bleiben, sonst wäre es ja einfach "Mitglied" in "XXX" umzubennenen.

Danke für den Link, werde ich mir in Kürze mal anschauen.

Im Prinzip gehts mir um das "Advanced Online Panel", wo man den Nutzern (Mitglied Farbe1, Admin Farbe2, Superadmin Farbe3) verschiedene Farben geben kann. Wobei ich solangsam vermute, dass im Panel was zu verändern einfacher ist, als ein komplett neues user_level hinzuzufügen.
Das Panel habe ich soweit schon abgeändert, dass XXX die Farbe4 bekommt, klappt auch soweit und wird auch in der db hinterlegt etc.
Das Problem was ich habe ist, dass ich dort den user_level 104 hinzugefügt habe und beim Einloggen mit dem entsprechendem User die Admin-PW-Info (Sie haben noch kein Admin-PW festgelegt,... usw.) kommt obwohl es kein Admin ist.

Code 


if ($data['user_level'] == 103) { $color = $online['online_superadmincolor']; }
if ($data['user_level'] == 102) { $color = $online['online_admincolor']; }
if ($data['user_level'] == 101) { $color = $online['online_usercolor']; }
if ($data['user_level'] == 104) { $color = $online['online_XXXcolor']; }



Ich kann ja schlecht 2x sagen, dass user_level 101 "usercolor" und "xxxcolor" bekommt. Würde vlt. gehen, wenn man "xxx" sagen kann, nur wenn in User-Gruppe X = xxxcolor, sonst usercolor. Da wäre dann die Frage, wie könnte man das machen?

Ich möchte mich für das Vermischen der beiden Themen entschuldigen.
Falls es hier nun falsch ist, bitte verschieben. Danke.
Herzlichen Dank auch schonmal für die Hilfe :)
mfg
GordenM82
 
John Doe
Wie Harlekin schon richtig erklärt hat...

Die 104, die Du angelegt hast, ist höher als 103 (Superadmin), daher bekommst du da auch diese Admin-Passwort Geschichte angezeigt.

Ich finds auch ehrlich gesagt ein bisschen "mit Kanonen auf Spatzen schiessen", einen komplett neuen Userlevel reinzufrickeln als evtl doch lieber dieses Panel statt mit Userleveln arbeiten zu lassen einfach auf Groups umzuschreiben.

Dazu brauchst Du auch garnicht viel umzuschreiben, sondern änderst im Grunde nur die Abfragen entsprechend:

Code 

if(iGUEST) { $color = $online['online_XXXcolor'];
if(iMEMBER) { $color = $online['online_XXXcolor'];
if(iADMIN) { $color = $online['online_XXXcolor'];
if(iSUPERADMIN) { $color = $online['online_XXXcolor'];
if(checkgroup(XX)) { $color = $online['online_XXXcolor']; }
usw usf...


Bearbeitet von John Doe am 20.06.2017 um 14:01
Dieses Mitglied wurde gelöscht!
 
GordenM82
Hallo ;)

Zitat: 

Code 


if(checkgroup(XX)) { $color = $online['online_XXXcolor']; }



will bei mir nicht funktionieren, hatte daraufhin bisschen google gequält und folgendes gefunden:

Code 


if ($data['user_level'] == 103) { $color = $online['online_superadmincolor']; }
if ($data['user_level'] == 102) { $color = $online['online_admincolor']; }
if ($data['user_level'] == 101) { $color = $online['online_usercolor']; }
if ((preg_match("/.2/", $data['user_groups'])) && ($data['user_level'] != "102") && ($data['user_level'] != "103")) { $locale['user4']; $color = $online['online_XXXcolor']; }


Das habe ich positiv gestestet, das rote habe ich abgeändert / für meine Bedürfnisse angepasst.
Ich habe vor, das "user4" aus der global-Datei (../locale/german/global.php) lesen zu lasseen, weil aktuell klappt es zwar mit der Farbe, aber es steht im Panel immer noch "Mitglied" anstatt "XXX". Ob das, was ich vorhabe klappen wird, weiss ich nicht, aber wenn XXXcolor ist soll der User auch als "user4" angezeigt werden und nicht als Mitglied (was user_level 101 entsprechen würde).

Mit Programmierung kenne ich mich soweit leider nicht aus, daher die Bitte, mir nochmal unter die Arme zu greifen.
Herzlichen Dank :)
Bearbeitet von GordenM82 am 21.06.2017 um 02:23
mfg
GordenM82
 
John Doe

Code 

if(checkgroup(XX)) { $color = $online['online_XXXcolor']; }


Das kann auch nicht gehen!

1. Legst du im Adminbereich eine Benutzergruppe an. Die Nummer der Benutzergruppe merkst du dir.
2. Fügst du deine User in diese Benutzergruppe
3. probierst du diesen Code in deinem Online Panel:

Code 

if(checkgroup(2)) { $color = $online['online_XXXcolor']; }


Die 2 muss du natürlich gegen die Nummer deiner Gruppe austauschen!
 
GordenM82
Guten Morgen,
Zitat: 

Code 


if(checkgroup(2)) { $color = $online['online_XXXcolor']; }


Hatte vergessen dazu zu schreiben, dass ich die Gruppennummer bei dem Beispiel mit "if(checkgroup(XX))" natürlich geändert hatte, funktionierte aber aus welchen Gründen auch immer trotzdem nicht, die User wurden dadurch nicht farbig, weswegen ich dann google gequält hatte und das in meinem vorherigen Post mit "if ((preg_match("/.2/", $data['user_groups']))...usw" probiert habe und es komischerweise so nun auch funktioniert, mit der Ausnahme, dass die User natürlich im user_level 101 (Mitglied) sind, aber ich eigentlich auch möchte - sofern umsetzbar, dass nur bei dieser Gruppe 2 das user_level zwar auf 101 bleibt, sich aber nur der Name ändert von Mitglied in XXX.

www.radio-black-angels.de/infusions/advanced_online_panel/images/OnlinelistRBA.jpg

Hier am Foto wahrscheinlich besser erklärbar:
Oben rechts steht der Name und darunter ja der user_level, im Beispiel durch den "preg_match"-Code klappt es mit der Farbe. Das Thema mit der Farbgebung wäre also bei mir soweit durch. Anstatt dem user_level (im Beispiel "Mitglied" soll da ja nun "XXX" stehen.
Ich möchte, dass sich nur der Name des user_levels ändert, wenn jemand in dieser Gruppe ist (wäre hier die Gruppe 2). Daher habe ich in der "locale/german/global.php einen "user4" hinzugefügt. Und genau dieser "user4" soll nun abgefragt werden, so dass halt aus "Mitglied" = "XXX" (user4) wird.
Wie gesagt: user_level 101 soll so bleiben, und nur für User in der Gruppe 2 soll sich der Name ändern.

Hoffe ich habs nicht zu kompliziert geschrieben und man kann nachvollziehen / erahnen, was ich möchte.
Herzlichen Dank schonmal ;)
mfg
GordenM82
 
Systemweb
Der checkgroup Funktion fehlt der Parameter, womit er die ID 2 prüfen soll.

checkgroup(2,xxx) bzw. checkgroup(xxx,2) sollte das sein. Weiß jetzt die Reihenfolge nicht aus dem Kopf, müsste aber ersteres sein.
Das xxx steht in diesem Fall für $data['user_groups']

Mit deinem preg_match Beispiel würde ich da nicht beginnen, denn es könnte auch mal Usergruppen im 20er Bereich geben, die dann ebenfalls diese Bedingung erfüllen würden.
 
GordenM82
Zitat: Systemweb schrieb:

Der checkgroup Funktion fehlt der Parameter, womit er die ID 2 prüfen soll.

checkgroup(2,xxx) bzw. checkgroup(xxx,2) sollte das sein. Weiß jetzt die Reihenfolge nicht aus dem Kopf, müsste aber ersteres sein.
Das xxx steht in diesem Fall für $data['user_groups']

Mit deinem preg_match Beispiel würde ich da nicht beginnen, denn es könnte auch mal Usergruppen im 20er Bereich geben, die dann ebenfalls diese Bedingung erfüllen würden.


Hallo und danke.
Nunja, ich werde definitv nicht in den 20er-Bereich bei den Gruppen kommen, aber danke für den Hinweis.

Das für mich nun eigentliche Problem (mein letzter Post) ist aber leider immer noch nicht gelöst.
mfg
GordenM82
 
Systemweb

Code 

if ((preg_match("/.2/", $data['user_groups'])) && ($data['user_level'] != "102") && ($data['user_level'] != "103")) { $locale['user4']; $color = $online['online_XXXcolor']; }

Das ändert zwar die Farbe, aber wenn du die Variable $locale['user4'] einfach nur reinschreibst ohne dem Script zu sagen, was damit geschehen soll, wird der Userlevel auch nicht wie gewollt anders dargestellt.

Gehe doch noch einmal zu der Stelle, wo du folgendes setzen wolltest:

Code 

} elseif ($userlevel == 103) { return $locale['user3'];
} elseif ($userlevel == 104) { return $locale['user4']; }

Unmittelbar davor müssen die Definitionen für Level 0, 101 und 102 sein, Level 104 hast du sicher inzwischen entfernt.
VOR der Definition für Userlevel 101 (also zwischen Level GAST und Level Mitglied) musst du abfragen, ob Guppen-ID 2 zutrifft und ein return $locale['user4'] setzen, danach erst mit elseif abfragen ob Userlevel 101 zutrifft usw.

Ein Hinweis am Rande:
Zitat: Optimiert für "Google Chrome" bei einer Auflösung von "1280x1024".
ist ein absolutes No-Go für barrierrefreies Web. Man zwingt den Benutzern weder einen bestimmten Browser auf noch legt man sich auf eine solche Auflösung fest. Niemand installiert sich extra den Chrome oder wechselt vom Netbook auf einen größeren PC-Bildschirm, nur weil eure Seite andernfalls nicht voll zur Geltung kommt.
Eine Webseite muss mit allen aktuell gängigen Browsern funktionieren und die Auflösung sollte so gewählt werden, dass zumindest der Großteil der Betrachter ohne horizontales Scrollen auskommt.
Bearbeitet von Systemweb am 24.06.2017 um 11:36
 
GordenM82
Zitat: Systemweb schrieb:

Gehe doch noch einmal zu der Stelle, wo du folgendes setzen wolltest:

Code 

} elseif ($userlevel == 103) { return $locale['user3'];
} elseif ($userlevel == 104) { return $locale['user4']; }

Unmittelbar davor müssen die Definitionen für Level 0, 101 und 102 sein, Level 104 hast du sicher inzwischen entfernt.
VOR der Definition für Userlevel 101 (also zwischen Level GAST und Level Mitglied) musst du abfragen, ob Guppen-ID 2 zutrifft und ein return $locale['user4'] setzen, danach erst mit elseif abfragen ob Userlevel 101 zutrifft usw.

Ok, und daran scheitert es bei mir, weil ich mich mit Abfragen erstellen etc. nicht auskenne bzw. nicht weiss, wie die Abfrage auszusehen hat und was dort alles stehen soll/muss.
Daher wäre es mir lieber, wenn ich einen fertigen Code hätte, den ich nur einfügen muss. Für die einen ist es ein Kinderspiel Abfragen zu schreiben / ändern, wie auch immer, für mich leider nicht.
Ja, Level 104 habe ich mittlerweile entfernt.

Zitat: Ein Hinweis am Rande:
Zitat: Optimiert für "Google Chrome" bei einer Auflösung von "1280x1024".
ist ein absolutes No-Go für barrierrefreies Web. Man zwingt den Benutzern weder einen bestimmten Browser auf noch legt man sich auf eine solche Auflösung fest. Niemand installiert sich extra den Chrome oder wechselt vom Netbook auf einen größeren PC-Bildschirm, nur weil eure Seite andernfalls nicht voll zur Geltung kommt.
Eine Webseite muss mit allen aktuell gängigen Browsern funktionieren und die Auflösung sollte so gewählt werden, dass zumindest der Großteil der Betrachter ohne horizontales Scrollen auskommt.

Danke für den Hinweis, habe ich bereits entfernt.
mfg
GordenM82
 
Systemweb
Habe mir die checkgroup Funktion nun genauer angeschaut. Die hat nur den einen Parameter mit der ID, fragt also immer nur nach der Gruppenzugehörigkeit von demjenigen, der das Script gerade aufruft. In diesem Zusammenhang also nutzlos.

In der Originaldatei "advanced_online_panel.php" hast du von Zeile 98 -100 folgendes stehen

Code 

if ($data['user_level'] == 103) { $color = $online['online_superadmincolor']; }
if ($data['user_level'] == 102) { $color = $online['online_admincolor']; }
if ($data['user_level'] == 101) { $color = $online['online_usercolor']; }

Füge mal direkt dahinter folgende neue Zeilen ein:

Code 

// Bestimmte Usergruppe in anderer Farbe:
$gruppen_id = 2; //<- ID der betreffenden Gruppe festlegen
$result = dbquery("SELECT user_name FROM ".DB_USERS." WHERE user_name = '".$data['user_name']."'
AND $data['user_level'] == 101
AND user_groups REGEXP('^\\\.{$gruppen_id}$|\\\.{$gruppen_id}\\\.|\\\.{$gruppen_id}$')
LIMIT 1");
if (dbrows($result)) {
    // Benutzer ist Mitglied der Gruppe, aber nur bei Level 101:
    $color = $online['online_XXXcolor'];
}


Ist zwar nicht getestet, müsste aber rein theoretisch zu dem von dir gewünschten Ergebnis führen.
Wichtig ist, dass $online['online_XXXcolor'] irgendwo mit dem entsprechenden Farbwert definiert wurde.
 
GordenM82
Danke dir für deine Mühe, klappt aber leider nicht. Außer die beiden Panels über "dem Advanced Online Panel" ist sonst gar nichts mehr von der HP zu sehen.
Ja, ein Farbwert ist deklariert für XXXcolor.
Funktioniert aber leider auch nicht.

Habe nun wieder zurückgesetzt wie es vorm Test war, also in:

Code 


if ($data['user_level'] == 103) { $color = $online['online_superadmincolor']; }
if ($data['user_level'] == 102) { $color = $online['online_admincolor']; }
if ($data['user_level'] == 101) { $color = $online['online_usercolor']; }
if ((preg_match("/.2/", $data['user_groups'])) && ($data['user_level'] != "102") && ($data['user_level'] != "103")) { "Moderator / DJ"; $color = $online['online_moderatorcolor']; }


mfg
GordenM82
 
Systemweb

Code 

if ((preg_match("/.2/", $data['user_groups'])) && ($data['user_level'] != "102") && ($data['user_level'] != "103")) { "Moderator / DJ"; $color = $online['online_moderatorcolor']; }

ist ziemlicher Quatsch. Mit "Moderator / DJ" kann das Script gar nichts anfangen und wird daher ignoriert. Auserdem kann man das extrem verkürzen:

Code 

if (preg_match("/.2/", $data['user_groups']) && $data['user_level'] == "101") { $color = $online['online_moderatorcolor']; }

führt zum gleichen Ergebnis.
 
GordenM82
Zitat: Systemweb schrieb:

Code 

if (preg_match("/.2/", $data['user_groups']) && $data['user_level'] == "101") { $color = $online['online_moderatorcolor']; }

führt zum gleichen Ergebnis.


Ok, wie gesagt, mit den ganzen Codes habe ich so meine Probleme, habe das lange nun durch die Kurzversion ersetzt. Die lange Version hatte ich auf irgendeiner Seite durch google gefunden.

Kann man den

Code 

if (preg_match("/.2/", $data['user_groups']) && $data['user_level'] == "101") { $color = $online['online_moderatorcolor']; }

nicht so anweisen, dass user_level == "101" ist, aber anstatt global $locale['user1'] dafür global $locale['user4'] ausgegeben wird?
Die Abfrage nach der Gruppe macht er ja (.2), level 101 ist auch da, jetzt müsste der ja nur anstatt "Mitglied (user1)" = "Moderatoren / DJs (user4)" ausgeben. Der Level bleibt ja.
mfg
GordenM82
 
Systemweb
Zitat: GordenM82 schrieb:

Zitat: Systemweb schrieb:

Code 

if (preg_match("/.2/", $data['user_groups']) && $data['user_level'] == "101") { $color = $online['online_moderatorcolor']; }

führt zum gleichen Ergebnis.


Ok, wie gesagt, mit den ganzen Codes habe ich so meine Probleme, habe das lange nun durch die Kurzversion ersetzt. Die lange Version hatte ich auf irgendeiner Seite durch google gefunden.

Kann man den

Code 

if (preg_match("/.2/", $data['user_groups']) && $data['user_level'] == "101") { $color = $online['online_moderatorcolor']; }

nicht so anweisen, dass user_level == "101" ist, aber anstatt global $locale['user1'] dafür global $locale['user4'] ausgegeben wird?
Die Abfrage nach der Gruppe macht er ja (.2), level 101 ist auch da, jetzt müsste der ja nur anstatt "Mitglied (user1)" = "Moderatoren / DJs (user4)" ausgeben. Der Level bleibt ja.


Eine Quick and Dirty Lösung wäre folgendes:

Code 

if (preg_match("/.2/", $data['user_groups']) && $data['user_level'] == "101") { $color = $online['online_moderatorcolor']; $locale['user1'] = 'DJ / Moderator'; }

Damit wird die Locale direkt geändert. Damit aber ab der ersten Übereinstimmung nicht jedes weitere Mitglied ebenfalls als Moderator angezeigt wird, musst du weiter oben die Variable wieder aufs Original setzen. Vor dieser Zeile:

Code 

if ($data['user_level'] == 103) {....... 

setzt du einfach noch folgende Zeile rein:

Code 

$locale['user1'] = 'Mitglied';


Wie gesagt nicht die sauberste Lösung, aber einfachster Weg.
 
GordenM82
Zitat: Systemweb schrieb:

Wie gesagt nicht die sauberste Lösung, aber einfachster Weg.


Solange es klappt, bin ich zufrieden, da ist mir ehrlich gesagt auch erstmal egal obs sauber ist oder "quick and dirty". Wink
Da es nun funktioniert, möchte ich mich soweit erstmal recht herzlich bei dir bedanken für die Hilfe sowie Geduld mit mir Smile
Danke.
mfg
GordenM82
 
Systemweb
Freut mich, danke für die Rückmeldung und viel Spaß damit.
 
Springe ins Forum: