Hallo Community,
im Forum besteht eine/mehrere Gruppe/n, welche/n
(aus gutem Grund) keine PNs versenden darf/dürfen.
Nun soll es der/den Gruppe/n ohne PN-Recht ermöglicht werden, an die Admins mit Group-ID 4 PNs senden zu können.
In der Datei
./private.php iwird die Abfrage der PN-Berechtigung einmal in der Zeile 568 mit
PHP-Code:
if($mybb->usergroup['cansendpms'] == 0)
{
error_no_permission();
}
und einmal in der Zeile 679 mit:
PHP-Code:
if($mybb->input['action'] == "send")
{
if($mybb->usergroup['cansendpms'] == 0)
{
error_no_permission();
}
definiert
(welche Abschnitt ist für mein Anliegen zuständig?)
Es müsste doch möglich sein, dies zu ergänzen,
(ich schreib es jetzt mal Laienhaft) das zusätzli definiert wird:
Wenn GID=X and PN=0 dann PN an GUI-4 = OK.
Damit Benutzer der Gruppe/n
X, welche nicht über PN-Rechte verfügt/en, ausschließlich an die Administratoren
(nicht an andere Benutzer) PNs senden.
Kann jemand diesen Wunsch nachvollziehen und mitteilen wo was wie anzupassen wäre?
Vorab besten Dank für eine Hilfestellung.
Hi,
schau mal die Zeilen an:
ca. Zeile 2465:
ändern zu:
PHP-Code:
eval("\$composelink = \"".$templates->get("private_composelink")."\";");
ca. Zeile 568
PHP-Code:
if($mybb->usergroup['cansendpms'] == 0)
{
error_no_permission();
}
ändern zu:
PHP-Code:
if($mybb->usergroup['cansendpms'] == 0 && $mybb->get_input('to') != "admin")
{
error_no_permission();
}
Dann müsste es klappen.
Beachte aber, dass du in $mybb->get_input('to') != "admin" die Namen der Admins angeben musst bzw. des Admins, an den es erlaubt ist, Nachrichten zu senden. Ich glaube für Gruppen ist dies komplizierter - müsste ich mir dann nochmal in Ruhe angucken. Dann sollte es eigentlich klappen.
Codes ungetestet.
Grüße
Achja! Und Zeile 683 folgendes auskommentieren:
Also ändere
zu
Sorry, ich komm erst jetzt kurz vorm schlafen gehen dazu, folgendes müsste klappen (alles kann so bleiben wie in meinem Beitrag vorher)
bis auf:
Ersetze Zeile 566 - 571 mit folgendem Code:
PHP-Code:
if($mybb->input['action'] == "do_send" && $mybb->request_method == "post")
{
$touser = $mybb->get_input('to');
$query = $db->simple_select("users","uid, usergroup","username='$touser'");
$tousergo = $db->fetch_array($query);
if($mybb->usergroup['cansendpms'] == 0 && $tousergo['usergroup'] != "4")
{
error_no_permission();
}
Kurze Erklärung: Ich hole mir die ID und die Usergruppe vom eingegeben User aus der Datenbank und speicher diese in $tousergo. Wenn die Usergruppe ungleich 4 ist, wird error_no_permission() aufgerufen - ansonsten nimmt halt alles seinen geregelten Lauf..
Ich weise hier noch einmal (auch für alle anderen Besucher) ausdrücklich darauf hin, dass Bearbeitungen direkt in PHP-Dateien gut überlegt sein sollten! Beim nächsten Update/Upgrade könnten diese überschrieben werden und die Änderungen müssten manuell wieder eingefügt werden. Plugins verhindern dieses!
So, gute Nacht
JAY
Hi, funktioniert leider so nicht. Gebe zu, komme auch etwas durcheinander mit vorstehenden Änderungen.
Gegeben ist, das Gruppen, welche mit
PHP-Code:
$mybb->usergroup['canusepms'] == 0)
definiert sind, problemlos an den Admin mit ID: 2 PNs senden dürfen. In allen anderen Fällen soll wie gehabt
greifen
Vielleicht kannst Du es mir nochmals auflisten und dabei es nur auf eine ID (hier Admin mit ID=2) begrenzen. Dies hat den Vorteil dass man nur die ID (egal aus welcher Gruppe) ändern müsste, wenn ein anderer die PNs, wegen z.B. vorübergehender Zuständigkeit, erhalten soll.
Es gilt somit, den Aufruf:
Code:
https://URL/private.php?action=send&uid=2
in der
./prvate.php pauschal zu erlauben.
Anmerkung: Die Gruppe zu defnieren birgt Probleme, weil in der Gruppe auch mehr User sein können, an wen aus der Gruppe sollte dann die PN gesendet werden. Wenn man dies definiert, sind wir eh wieder beid er "uid" (hier ID 2) Also einfach nur die "uid" (hier die 2) und gut ist.
Danke vorab für Dein Engagement.
Hi Gerti,
ich habe mir nun die originale private.php runtergeladen und erkläre es anhand dieser Datei nochmals (damit wir keine Zeilennummer unterschiedlich haben). Insgesamt machen wir 3 kleine Schritte. Ich glaube du hast einen Denkfehler. In meiner Änderung wird keine Nachricht direkt an die Gruppe gesendet, sondern es wird überprüft ob
der Empfänger der privaten Nachricht in der
Usergruppe 4 ist, wenn ja wird sie versendet. Somit kann an jeden Benutzer mit der Usergruppe "4" die PN versendet werden.
Fangen wir ganz simpel an:
Schritt #1 :
Suche in Zeile 2465 nach:
und ersetze es mit:
PHP-Code:
eval("\$composelink = \"".$templates->get("private_composelink")."\";");
Dies ist notwendig, damit User, die keine PN's senden dürfen, trotzdem den Link "Nachricht verfassen" sehen.
Schritt #2:
Suche in Zeile 683 nach:
PHP-Code:
if($mybb->usergroup['cansendpms'] == 0)
{
error_no_permission();
}
und ersetze es mit:
PHP-Code:
if($mybb->usergroup['cansendpms'] == 0)
{
//error_no_permission();
}
Dies ist notwendig, damit User in der Usergruppe mit ['cansendpms'] == 0 nicht sofort eine ERROR-Meldung bekommen sobald diese eine Nachricht verfassen möchten.
Schritt #3:
Suche in Zeile 566 nach:
PHP-Code:
if($mybb->input['action'] == "do_send" && $mybb->request_method == "post")
{
if($mybb->usergroup['cansendpms'] == 0)
{
error_no_permission();
}
und ersetze es mit:
PHP-Code:
if($mybb->input['action'] == "do_send" && $mybb->request_method == "post")
{
$touser = $mybb->get_input('to');
$query = $db->simple_select("users","uid, usergroup","username='$touser'");
$tousergo = $db->fetch_array($query);
if($mybb->usergroup['cansendpms'] == 0 && $tousergo['usergroup'] != "4")
{
error_no_permission();
}
Hier wird nun überprüft, ob der Benutzer (welcher die Nachricht verfasst) die Nachricht versucht abzusenden. Wenn dies der Fall ist, wird der Empfänger in die Variable $touser geschrieben und die Usergruppe des Empfängers wird aus der Datenbank geholt. Wenn die Usergruppe des Empfängers ungleich "4" ist, wird ein ERROR ausgegeben. Ist der Empfänger in Benutzergruppe 4 (und somit Admin) wird die Nachricht normal versendet.
Grüße,
JAY
Zusatzinformation:
Wenn du deine Benutzer, welche keine PN versenden dürfen, evtl. darüber informieren möchtest, füge noch folgendes in die private.php ein:
PHP-Code:
if($mybb->usergroup['cansendpms'] == 0)
{
$blacklisted = "<div class=\"alert\">
<span class=\"closebtn\" onclick=\"this.parentElement.style.display='none';\">×</span>
<strong>Achtung!</strong> Du wurdest für private Nachrichten gesperrt und kannst private Nachrichten nur an einen Administrator versenden.
</div>";
}
Folgendes in deine global.css
Code:
/* Private Nachricht Warnung! - Start */
.alert {
padding: 20px;
background-color: #f44336;
color: white;
}
.closebtn {
margin-left: 15px;
color: white;
font-weight: bold;
float: right;
font-size: 22px;
line-height: 20px;
cursor: pointer;
transition: 0.3s;
}
.closebtn:hover {
color: black;
}
/* Private Nachricht Warnung! - Ende */
und dann kannst du in
Templates & Styles -> Private Messaging Templates -> private
die Variable
{$blacklisted} verwenden. Ich würde diese UNTER {$limitwarning} einfügen!
Siehe Screenshot.
Habe es nach Anleitung eingebaut.
Ergebnis:
Sobald der User mit Anwendergruppe welche keine PNs senden darf auf "
User eine private Nachricht senden" wird das Template von
error_no_permission angezeigt. Erkommt somit gar nicht dazu eine PN zu verfassen. Auch hat der User, da ihm das PN-Recht entzogen wurde, nicht die Möglichekit zu seinem Order "Private Nachrichten (Gesendte und erhaltene) einzusehen"
Ich habe es jetzt erst mal so gelöst, das ich das
error_no_permission in Zeile 42 auskommentiert und mit
PHP-Code:
eval("\$templatename = \"".$templates->get("templatename")."\";");
output_page($templatename);
ersetzte habe. Es funktioniert zumindest fehlerfrei.
Im aufgerufenem Template wird der User darauf hingeweisen das er keine PN versenden darf und enthält einen Link für eine E-Mail zum Admin. Dies hilft mir insoweit, da ich in einigen Textbausteinen einen direkten PN-Link
(https://URL/private.php?action=send&uid=2) eingebaut habe und der User bei Bedarf sein Anliegen zumindest an den Admin kund tun kann.
In
member_template_profile habe ich für die Usergruppen, welche keine PNs versenden dürfen die Anzeige "
User eine private Nachricht senden" mit einer IF-Bedingung auskommentiert. Verstehe ich eh nicht das User, denen die PN-Rechte entzogen wurden beim Ansehen eines Profils die Möglichkeit eine private Nachricht zu senden angezeigt wird, aber korrekterweise nicht in den benutzerdefinierten Bereich der privaten Nachrichten kommen.
Für Dein eingebrachtes Engagement einen ganz herzlichen Dank!
Hi,
wenn du willst schick mir deine private.php - ich guck mir die mal an. Ich habe mein Code 3x getestet und es funktioniert einwandfrei. Hast du denn überhaupt die private.php aufgerufen und versucht darüber die PN zu versenden oder bist du über das Benutzerprofil gegangen? Wie gesagt, bei mir funktioniert es.
Edit: Ich habs jetzt auch über das Profil versucht, klappt auch. Irgendein Fehler muss bei dir vorliegen.
(14.03.2019, 18:59)Gerti schrieb: [ -> ]Auch hat der User, da ihm das PN-Recht entzogen wurde, nicht die Möglichekit zu seinem Order "Private Nachrichten (Gesendte und erhaltene) einzusehen"
Dann darf die Usergruppe nicht nur keine PNs senden, sondern das PN System gar nicht erst benutzen. Bei "Kann das Private Nachrichten-System nutzen" muss in den Gruppeneinstellungen der Haken gesetzt sein, sonst gibt es gar keine Chance, dass es funktioniert.
-----------
Falls du nicht so viel in der private.php verändern möchtest, kannst du auch mal das angehängte Plugin ausprobieren. Einfach hochladen und aktivieren.
Es fügt für User, die sonst keine PNs senden dürfen, einen Link ein:
[
attachment=12300]
Die User-ID des Empfängers muss im Plugin festgelegt werden (hier ist es die ID 2)
PHP-Code:
// Lege die Benutzer-ID des Admins fest, an den PN's gesendet werden dürfen
define('PM_ADMIN_ID', 2);
Das stimmt natürlich. Mein Code funktioniert, solltest du die Checkbox "Kann Private Nachrichten senden" deaktiviert haben. Wenn du aber das ganze System deaktivierst, klappts natürlich nicht...
Zunächst einmal besten Dank für Euer Engagement.
An das "Kann das Private Nachrichten-System nutzen" habe ich gar nicht gedacht (*michschäm).
Die Lösung als Plugin ist natürlich die optimalere Lösung wodurch bei MyBB-Updates das "Denke auch an die Anpassung der ./private.php" erspart bleibt.