Hallo ins Forum,
gibt es ein Plugin oder eine Alternative, das/die es ermöglicht, das Versenden von PNs an bestimmte Benutzergruppen auszuschließen – z. B. an "Admins/Mods" ("Support im Forum ... nicht per PN ... "
)?
Es soll ausgeschlossen werden, dass z. B. von Benutzer(-gruppe) "Mitglieder" an Benutzergruppe "Admins/Mods" PNs geschrieben werden können. Andererseits soll der PN-Versand innerhalb einer Benutzergruppe möglich sein, dass z. B. von "Mitglieder" an "Mitglieder".
Im Benutzer-Profil kann ich nur einstellen, ob PNs empfangen werden. Damit werden jedoch (bei "nein") alle Benutzer(-gruppen) für PNs ausgeschlossen (z. B. "Mod" an "Admin" = nein).
In der Benutzer(-gruppen-)verwaltung kann ich nur generell das Senden von PN (ja/nein) einstellen.
Ich habe diese Plugins getestet:
"Additional User Settings v1.0.1"
- lässt nur zu, dass einzelne Benutzer generell keine PNs schreiben dürfen.
"Restricted private messages 1.0.2"
- lässt nur zu, dass alle Benutzer ab min. "X Beiträge" PNs schreiben dürfen.
"Keine PNs an sich selbst 1.0.0"
- selbsterklärend
Habe ich irgendetwas bei der Suche und Auswahl der Möglichkeiten übersehen? Dann würde ich mich über einen Link freuen!
Oder hat jemand hierzu eine Idee oder Lösung? Kann ich irgendwie irgendetwas anpassen?
Ich bitte um Hilfe.
Danke für die Antwort(en) und...
Ein solches Plugin ist mir leider nicht bekannt, sollte sich aber mit Grundkenntnissen in PHP/MySQL relativ einfach realisieren lassen. Vor dem Versand müssen ja nur die Benutzergruppen von Sender und Empfänger verglichen und ggf. eine Fehlermeldung ausgegeben werden.
Noch einmal Hallo ins Forum,
Michael schrieb:Ein solches Plugin ist mir leider nicht bekannt, sollte sich aber mit Grundkenntnissen in PHP/MySQL relativ einfach realisieren lassen. Vor dem Versand müssen ja nur die Benutzergruppen von Sender und Empfänger verglichen und ggf. eine Fehlermeldung ausgegeben werden.
Schade
- leider fehlen mir genau diese Grundkenntnisse in PHP/MySQL.
Kann mir jemand bitte einen Ansatz für eine Lösung geben?
Ich bitte noch einmal um Hilfe und danke für die Antwort(en).
Ich bin nun einen (ersten, kleinen) Schritt weiter:
mein Ansatz ist es, zunächst mit
PHP-Code:
$query = "SELECT username, usergroup FROM mybb_users WHERE usergroup = 2";
$result = mysql_query($query);
eine Tabelle zu erstellen, die mir den Benutzer und die entsprechende Gruppe (Members) liefert. =>> Das Ergebnis ist auch ok.
Doch nun stehe ich vor der nächsten Hürde. Wie schaffe ich nun einen Vergleich, ob Sender und Empfänger der selben Gruppe zugeordnet sind, um das "OK" für das Senden zu geben?
- Muss ich (evtl.) eine zweite Tabelle
PHP-Code:
$query2 = "SELECT username, usergroup FROM mybb_users WHERE usergroup >= 3";
$result2 = mysql_query($query2);
für die Gruppen "Admin/Super-Mods/Mods" erstellen und dann die Inhalte der Tabellen ab- bzw. vergleichen?
Wenn ja, wie erreiche ich dies? Sicherlich mit einer "if()"-Abfrage; aber wie?
- Und muss ich evtl. (auch) die Datei "private.php" in
PHP-Code:
$pm = array(
"subject" => $mybb->input['subject'],
"message" => $mybb->input['message'],
"icon" => $mybb->input['icon'],
"fromid" => $mybb->user['uid'],
"username" => $mybb->input['to'],
"do" => $mybb->input['do'],
"pmid" => $mybb->input['pmid']
);
umPHP-Code:
"usergroup" => $mybb->user['usergroup']
(o. ä.) erweitern oder ändern?
Oder bin ich absolut auf dem Holzweg?
Ich danke für jede kleine Hilfestellung.
Du kannst die Benutzergruppe des aktuellen Benutzers (also für deinen Fall die des Senders) einfach mit $mybb->user['usergroup'] abfragen. Den Wert vergleichst du dann einfach mit dem Ergbenis aus deinem Query.
Hallo ins Forum,
...und wieder einen Schritt weiter.
Nachdem ich zunächst einmal die in Beitrag #1 aufgeführte Prüfung mit Erfolg erstellt habe (s. Anhang - "query_01.php" und "query_01.JPG"), habe ich daraus folgend den Code als "Plugin" in eine Datei "nopmtoadmin.php" eingebunden:
PHP-Code:
<?php
$plugins->add_hook("private_send_do_send", "nopmtoadmin_run");
function nopmtoadmin_info() {
return array(
"name" => "Keine PNs an Admin-/Mod-Gruppe",
"description" => "Das Plugin verhindert, Private Nachrichten' an Admin-/Mod-Gruppe zu senden.",
"website" => "",
"author" => "linwinman",
"authorsite" => "",
"version" => "1.0-beta",
);
}
function nopmtoadmin_activate() {
}
function nopmtoadmin_deactivate() {
}
function nopmtoadmin_run() {
global $mybb;
// Gruppeneinschränkung = Grp. '2' nicht an Grp. '3/4'
$grp = 2;
// Abfrage für Absender
$query_abs = "SELECT username, usergroup FROM `mybb_users` WHERE (username = '$pm[fromuser]')";
$res_abs = mysql_query($query_abs);
while($row_abs = mysql_fetch_object($res_abs)) {
$absender = $row_abs->username;
$absender_grp = $row_abs->usergroup;
}
// Abfrage für Empfänger
$query_emp = "SELECT username, usergroup FROM `mybb_users` WHERE (username = '$pm[username]')";
$res_emp = mysql_query($query_emp);
while($row_emp = mysql_fetch_object($res_emp)) {
$empfaenger = $row_emp->username;
$empfaenger_grp = $row_emp->usergroup;
}
// Aktion 'PN senden'
if ($absender_grp == 2) {
if ($empfaenger_grp > 2) {
error("Das Versenden an die Gruppe ist nicht möglich!");
}
}
/*
alternativ (?): Aktion 'PN senden'
if (($absender_grp == 2) && ($empfaenger_grp > 2)) {
error("Das Versenden an die Gruppe ist nicht möglich!");
}
*/
}
?>
DIe Variable >
"fromuser" => $mybb->user['username'], < habe ich in der Datei "private.php" im array "$pm" ergänzt:
PHP-Code:
$pm = array(
"subject" => $mybb->input['subject'],
"message" => $mybb->input['message'],
"icon" => $mybb->input['icon'],
"fromid" => $mybb->user['uid'],
"fromuser" => $mybb->user['username'],
"username" => $mybb->input['to'],
"do" => $mybb->input['do'],
"pmid" => $mybb->input['pmid']
);
Die Datei "nopmtoadmin.php" wird vom/im "Plugin-Manager" fehlerfrei erkannt und kann aktiviert werden.
Allerdings fehlt mir der Abschluss; das Ergebnis ist, dass der Aufruf "
error" nicht richtig bzw. gar nicht abgehandelt wird.
Das Senden von "Grp. 2" an "Grp. 3" oder an "Grp. 4" wird nicht unterbunden.
Was ist bzw. was mache ich falsch? Muss evtl. die Datei "private.php" oder die Datei ".../inc/datahandlers/pm.php" angepasst werden?
Oder ist der Ansatz in dieser Art nicht zu realisieren?
Das Thema "
Wie ist ein Plugin aufgebaut?" habe ich gelesen, jedoch aufgrund unzureichender php-/MySQL-Kenntnisse nur teilweise verstanden; deshalb bitte ich noch einmal um Hilfe.
Schon jetzt vielen Dank und...
Ich meine, dass die Funktionen mysql_query() usw. nicht funktionieren. Stattdessen musst du die Funktionen des MyBB verwenden, also $db->query() bzw. $db->fetch_array(). Denke daran $db in die Globals in der Funktion aufzunehmen.
Vielen Dank für die Tipps.
Die Funktionen
$db->query() und
$db->fetch_array() habe ich ersetzt und die Variable
$db zu "global" hinzugefügt.
Die akt. Version der
"nopmtoadmin.php"
PHP-Code:
<?php
$plugins->add_hook("private_send_do_send", "nopmtoadmin_run");
function nopmtoadmin_info() {
return array(
"name" => "Keine PNs an Admin-Gruppe",
"description" => "Das Plugin verhindert, Private Nachrichten an Admin-/Mod-Gruppe zu senden.",
"website" => "",
"author" => "linwinman",
"authorsite" => "",
"version" => "1.0.1-beta",
);
}
function nopmtoadmin_activate() {
}
function nopmtoadmin_deactivate() {
}
function nopmtoadmin_run() {
global $db, $mybb;
// Abfrage für Absender
$query_abs = $db->query("SELECT username, usergroup FROM mybb_users WHERE username = '$pm[fromuser]'");
$res_abs = $db->fetch_array($query_abs);
while($row_abs = $db->fetch_array($res_abs)) {
$absender = $row_abs->username;
$absender_grp = $row_abs->usergroup;
}
var_dump($res_abs); // nur temp. zur
echo $query_abs; // Fehlerausgabe
// Abfrage für Empfänger
$query_emp = $db->query("SELECT username, usergroup FROM mybb_users WHERE username = '$pm[username]'");
$res_emp = $db->fetch_array($query_emp);
while($row_emp = $db->fetch_array($res_emp)) {
$empfaenger = $row_emp->username;
$empfaenger_grp = $row_emp->usergroup;
}
var_dump($res_emp); // nur temp. zur
echo $query_emp; // Fehlerausgabe
// Aktion 'PN senden'
if ($absender_grp == 2) {
if ($empfaenger_grp > 2) {
error("Das Versenden an die Gruppe ist nicht möglich!");
}
}
}
?>
bringt nun für beide Abfragen den 1. Hinweis:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /.../inc/db_mysql.php on line 230
>>> Hierbei ergeben
var_dump($res_xxx) = "bool(false)" bzw.
echo $query_xxx = "Resource id #45 / #46"
>>> Die Datei "db_mysql.php" enthält für/zur Zeile 230 den Block
PHP-Code:
/**
* Return a result array for a query.
*
* @param resource The query ID.
* @param constant The type of array to return.
* @return array The array of results.
*/
function fetch_array($query)
{
$array = mysql_fetch_assoc($query); // Zeile 230
return $array;
}
und den 2. Hinweis:
Warning: Cannot modify header information - headers already sent by (output started at /.../inc/db_mysql.php:230) in /.../inc/functions.php on line 78
Dazu die Zeile 78:
PHP-Code:
header("Content-type: text/html; charset={$lang->settings['charset']}");
Die Suche zu letztem Hinweis bringt mich nicht viel weiter. Außer, dass ich sagen kann, dass sich am Ende der Datei ".../inc/functions.php" nach dem "
?>"-TAG nichts weiter befindet (weder Absätze noch Leerzeichen o. ä.).
Somit sind meine Fragen:
- was muss/kann ich (im ersten Schritt) an den Abfragen ändern bzw. was ist an den Abfragen (immer noch) falsch?
- was muss/kann ich (im zweiten Schritt) in der Datei ".../inc/functions.php" ändern?
Es ist ein Fehler in den Queries vorhanden. Woher nimmst du das Array $pm? Ggf. musst du $pm auch bei den Globals hinzufügen.
Warum führst du bei jedem Query 2mal $db->fetch_array() aus?
PHP-Code:
$res_abs = $db->fetch_array($query_abs);
while($row_abs = $db->fetch_array($res_abs)) {
Das kann natürlich nicht funktionieren, da $res_abs kein Query ist. Der Code müsste so lauten:
PHP-Code:
while($row_abs = $db->fetch_array($query_abs)) {
Bei dem anderen Query ist genau das gleiche Problem.