Mir ist da gestern so eine Idee durch den Kopf gegangen. Ich möchte gerne eine Shout-Nachricht schreiben, die soll aber nicht jeder sehen, sondern nur bestimmte Leute. Und vielleicht möchte ein Mitglied nicht unbedingt, dass seine Nachrichten öffentlich sind, sondern nur von Mitgliedern gelesen werden kann.
Also habe ich mir da einen kleinen Mod/Hack zusammengebastelt, den ich euch nicht vorenthalten möchte. Vielleicht findet es ja der eine oder andere ja für seine Seite sinnvoll.
Als 1. muss ein Tabellenfeld der Tabelle fusion_shoutbox hinzugefügt werden. Das macht ihr am besten mit phpMyAdmin. Ihr nennt das Feld shout_read_access mit dem Datentyp SMALLINT und einer Länge von 3 und dem Attribute UNSIGNED. Wer kein phpMyAdmin zu Hand hat, kann das auch über ein Panel machen. Dazu einfach im Adminbereich zum Panel-Management gehen und auf Panel hinzufügen klicken. Dort gebt ihr einen Panel Namen ein und beim Panel Content kommt folgendes rein.
Code dbquery("ALTER TABLE ".DB_SHOUTBOX." ADD shout_read_access SMALLINT( 3 ) UNSIGNED NOT NULL");
Dann noch das Admin-Passwort eingeben und auf Vorschau (NICHT SPEICHERN !!!) klicken. Wenn keine Fehlermeldung kommt, sollte das Feld angelegt worden sein.
jetzt müssen die Dateien shoutbox_panel.php und shoutbox_archive.php angepasst werden.
Zuerst die shoutbox_panel.php, diese öffnen und die Zeile
Code if (!defined("IN_FUSION")) { die("Access Denied"); }
suchen und dahinter folgendes einfügen:
Code $shout_access_control = true;
Das dient lediglich dazu, um das ganze variabel zu gestalten.
Dann suchen wir die Zeile:
Code $shout_message = trim(stripinput(censorwords($shout_message)));
und fügen danach folgendes ein:
Code $shout_read_access = ( (isset($_POST['shout_read_access']) && isNum($_POST['shout_read_access']) ) ? $_POST['shout_read_access'] : 0 );
Dann suchen wir die Stelle
Code $result = dbquery("UPDATE ".DB_SHOUTBOX." SET shout_message='".$shout_message."' WHERE shout_id='".$_GET['shout_id']."'".(iADMIN ? "" : " AND shout_name='".$userdata['user_id']."'"));
und ändern diese in
Code $result = dbquery("UPDATE ".DB_SHOUTBOX." SET shout_message='".$shout_message."', shout_read_access='".$shout_read_access."' WHERE shout_id='".$_GET['shout_id']."'".(iADMIN ? "" : " AND shout_name='".$userdata['user_id']."'"));
Die nächste Zeile lautet
Code $result = dbquery("INSERT INTO ".DB_SHOUTBOX." (shout_name, shout_message, shout_datestamp, shout_ip, shout_read_access) VALUES ('$shout_name', '$shout_message', '".time()."', '".USER_IP."')");
und muss wie folgt abgeändert werden:
Code $result = dbquery("INSERT INTO ".DB_SHOUTBOX." (shout_name, shout_message, shout_datestamp, shout_ip, shout_read_access) VALUES ('$shout_name', '$shout_message', '".time()."', '".USER_IP."','".$shout_read_access."')");
Der nächste Abschnitt ist etwas größer. Sucht nach:
Code if (iMEMBER && (isset($_GET['s_action']) && $_GET['s_action'] == "edit") && (isset($_GET['shout_id']) && isnum($_GET['shout_id']))){
$esresult = dbquery(
"SELECT ts.*, tu.user_id, tu.user_name FROM ".DB_SHOUTBOX." ts
LEFT JOIN ".DB_USERS." tu ON ts.shout_name=tu.user_id
WHERE ts.shout_id='".$_GET['shout_id']."'"
);
if (dbrows($esresult)) {
$esdata = dbarray($esresult);
if ((iADMIN && checkrights("S")) || (iMEMBER && $esdata['shout_name'] == $userdata['user_id'] && isset($esdata['user_name']))) {
if ((isset($_GET['s_action']) && $_GET['s_action'] == "edit") && (isset($_GET['shout_id']) && isnum($_GET['shout_id']))) {
$edit_url = $sep."s_action=edit&shout_id=".$esdata['shout_id'];
} else {
$edit_url = "";
}
$shout_link = $link.$edit_url;
$shout_message = $esdata['shout_message'];
}
} else {
$shout_link = $link;
$shout_message = "";
}
} else {
$shout_link = $link;
$shout_message = "";
}
und ändert ihn um in:
Code
if (iMEMBER && (isset($_GET['s_action']) && $_GET['s_action'] == "edit") && (isset($_GET['shout_id']) && isnum($_GET['shout_id']))){
$esresult = dbquery(
"SELECT ts.*, tu.user_id, tu.user_name FROM ".DB_SHOUTBOX." ts
LEFT JOIN ".DB_USERS." tu ON ts.shout_name=tu.user_id
WHERE ts.shout_id='".$_GET['shout_id']."'"
);
if (dbrows($esresult)) {
$esdata = dbarray($esresult);
if ((iADMIN && checkrights("S")) || (iMEMBER && $esdata['shout_name'] == $userdata['user_id'] && isset($esdata['user_name']))) {
if ((isset($_GET['s_action']) && $_GET['s_action'] == "edit") && (isset($_GET['shout_id']) && isnum($_GET['shout_id']))) {
$edit_url = $sep."s_action=edit&shout_id=".$esdata['shout_id'];
} else {
$edit_url = "";
}
$shout_link = $link.$edit_url;
$shout_message = $esdata['shout_message'];
$shout_read_access = $esdata['shout_read_access'];
}
} else {
$shout_link = $link;
$shout_message = "";
$shout_read_access = 0;
}
} else {
$shout_link = $link;
$shout_message = "";
$shout_read_access = 0;
}
Jetzt sind wir mit dieser datei auch schon fast fertig. Sucht nach
Code echo "<br /><input type='submit' name='post_shout' value='".$locale['global_153']."' class='button' />\n";
Und fügt davor folgendes ein:
Code if ( iMEMBER && $shout_access_control )
{
echo "Lesbar für: ";
echo "<select name='shout_read_access'>";
if ( !iADMIN )
{
$hide = array(102,103);
}
else
{
$hide = array();
}
$option_list = "";
$options = getusergroups();
while(list($key, $option) = each($options))
{
if (!in_array($option['0'], $hide))
{
$sel = ($shout_read_access == $option['0'] ? " selected='selected'" : "");
$option_list .= "<option value='".$option['0']."' ".$sel.">".$option['1']."</option>\n";
}
}
// echo create_options($shout_read_access,$h,false);
echo $option_list;
echo "</select>";
}
Damit jetzt im Panel die Nachrichten auch für die richtigen Gruppen angezeigt werden, muss man natürlich auch die Select-Anweisung anpassen. Also sucht nach:
Code $result = dbquery(
"SELECT ts.*, tu.user_id, tu.user_name FROM ".DB_SHOUTBOX." ts
LEFT JOIN ".DB_USERS." tu ON ts.shout_name=tu.user_id
ORDER BY ts.shout_datestamp DESC LIMIT 0,".$settings['numofshouts']
);
und ändert diese um in:
Code $result = dbquery(
"SELECT ts.*, tu.user_id, tu.user_name FROM ".DB_SHOUTBOX." ts
LEFT JOIN ".DB_USERS." tu ON ts.shout_name=tu.user_id
WHERE ".groupaccess('shout_read_access')."
ORDER BY ts.shout_datestamp DESC LIMIT 0,".$settings['numofshouts']
);
Damit sind wir mit dieser Datei fertig und widmen uns der Archiv-Datei shoutbox_archive.php.
Sucht dort nach:
Code require_once THEMES."templates/header.php";
und fügt danach folgendes ein:
Code $shout_access_control = true;
Jetzt sucht ihr nach:
Code $archive_shout_message = trim(stripinput(censorwords($archive_shout_message)));
und fügt danach folgendes ein:
Code $archive_shout_read_access = ( (isset($_POST['archive_shout_read_access']) && isNum($_POST['archive_shout_read_access']) ) ? $_POST['archive_shout_read_access'] : 0 );
Dann sucht nach:
Code $result = dbquery("UPDATE ".DB_SHOUTBOX." SET shout_message='".$archive_shout_message."' WHERE shout_id='".$_GET['shout_id']."'".(iADMIN ? "" : " AND shout_name='".$userdata['user_id']."'"));
und ändert es um in:
Code $result = dbquery("UPDATE ".DB_SHOUTBOX." SET shout_message='".$archive_shout_message."', shout_read_access='".$archive_shout_read_access."' WHERE shout_id='".$_GET['shout_id']."'".(iADMIN ? "" : " AND shout_name='".$userdata['user_id']."'"));
Sucht dann weiter nach:
Code $result = dbquery("INSERT INTO ".DB_SHOUTBOX." (shout_name, shout_message, shout_datestamp, shout_ip) VALUES ('$archive_shout_name', '$archive_shout_message', '".time()."', '".USER_IP."')");
und ändert es um in:
Code $result = dbquery("INSERT INTO ".DB_SHOUTBOX." (shout_name, shout_message, shout_datestamp, shout_ip,shout_read_access) VALUES ('$archive_shout_name', '$archive_shout_message', '".time()."', '".USER_IP."','".$archive_shout_read_access."')");
Jetzt kommt wieder ein etwas größerer Teil. Sucht nach:
Code if (iMEMBER && (isset($_GET['action']) && $_GET['action'] == "edit") && (isset($_GET['shout_id']) && isnum($_GET['shout_id']))) {
$esresult = dbquery(
"SELECT ts.*, tu.user_id, tu.user_name FROM ".DB_SHOUTBOX." ts
LEFT JOIN ".DB_USERS." tu ON ts.shout_name=tu.user_id
WHERE ts.shout_id='".$_GET['shout_id']."'"
);
if (dbrows($esresult)) {
$esdata = dbarray($esresult);
if ((iADMIN && checkrights("S")) || (iMEMBER && $esdata['shout_name'] == $userdata['user_id'] && isset($esdata['user_name']))) {
if ((isset($_GET['action']) && $_GET['action'] == "edit") && (isset($_GET['shout_id']) && isnum($_GET['shout_id']))) {
$edit_url = "?action=edit&shout_id=".$esdata['shout_id'];
} else {
$edit_url = "";
}
$archive_shout_link = FUSION_SELF.$edit_url;
$archive_shout_message = $esdata['shout_message'];
}
} else {
$archive_shout_link = FUSION_SELF;
$archive_shout_message = "";
}
} else {
$archive_shout_link = FUSION_SELF;
$archive_shout_message = "";
}
und ersetzt es durch:
Code if (iMEMBER && (isset($_GET['action']) && $_GET['action'] == "edit") && (isset($_GET['shout_id']) && isnum($_GET['shout_id']))) {
$esresult = dbquery(
"SELECT ts.*, tu.user_id, tu.user_name FROM ".DB_SHOUTBOX." ts
LEFT JOIN ".DB_USERS." tu ON ts.shout_name=tu.user_id
WHERE ts.shout_id='".$_GET['shout_id']."'"
);
if (dbrows($esresult)) {
$esdata = dbarray($esresult);
if ((iADMIN && checkrights("S")) || (iMEMBER && $esdata['shout_name'] == $userdata['user_id'] && isset($esdata['user_name']))) {
if ((isset($_GET['action']) && $_GET['action'] == "edit") && (isset($_GET['shout_id']) && isnum($_GET['shout_id']))) {
$edit_url = "?action=edit&shout_id=".$esdata['shout_id'];
} else {
$edit_url = "";
}
$archive_shout_link = FUSION_SELF.$edit_url;
$archive_shout_message = $esdata['shout_message'];
$archive_shout_read_access = $esdata['shout_read_access'];
}
} else {
$archive_shout_link = FUSION_SELF;
$archive_shout_message = "";
$archive_shout_read_access = 0;
}
} else {
$archive_shout_link = FUSION_SELF;
$archive_shout_message = "";
$archive_shout_read_access = 0;
}
Dann sucht ihr nach:
Code echo "<br /><input type='submit' name='post_archive_shout' value='".$locale['global_153']."' class='button' />\n";
und fügt davor folgendes ein:
Code if ( iMEMBER && $shout_access_control )
{
echo "Lesbar für: ";
echo "<select name='archive_shout_read_access'>";
if ( !iADMIN )
{
$hide = array(102,103);
}
else
{
$hide = array();
}
$option_list = "";
$options = getusergroups();
while(list($key, $option) = each($options))
{
if (!in_array($option['0'], $hide))
{
$sel = ($archive_shout_read_access == $option['0'] ? " selected='selected'" : "");
$option_list .= "<option value='".$option['0']."' ".$sel.">".$option['1']."</option>\n";
}
}
echo $option_list;
echo "</select>";
}
zuguterletzt muss auch hier noch die Select-Anweisung angepasst werden. Sucht dazu nach:
Code $result = dbquery(
"SELECT * FROM ".DB_SHOUTBOX." LEFT JOIN ".DB_USERS."
ON ".DB_SHOUTBOX.".shout_name=".DB_USERS.".user_id
ORDER BY shout_datestamp DESC LIMIT ".$_GET['rowstart'].",20"
);
und ersetzt es durch:
Code $result = dbquery(
"SELECT * FROM ".DB_SHOUTBOX." LEFT JOIN ".DB_USERS."
ON ".DB_SHOUTBOX.".shout_name=".DB_USERS.".user_id
WHERE ".groupaccess('shout_read_access')."
ORDER BY shout_datestamp DESC LIMIT ".$_GET['rowstart'].",20"
);
Damit sollte alles erledigt sein. Bitte macht vor den Anpassungen ein Backup der Dateien. Ich übernehme auch keine Haftung für evtl. auftauchende Schäden.
Man kann das ganze noch weiter Anpassen, in dem man noch die Sprachdatei für die Shoubox anpasst, damit Ausgaben wie "Lesbar für" nicht in der Paneldatei selber auftauchen. Und man könnte auch den Schalter shout_access_control per Einstellungen im Adminbereich machen. Das kann aber jeder für sich machen.
Für Lob und konstruktiver Kritik bin ich selbstverständlich empfänglich. Sollte ich also keinen Fehler bei der Dokumentation hier gemacht haben, sollte alles auf Anhieb funktionieren.
PS: Ich werde noch meine angepassten Dateien hier später anhängen. Diese beziehen sich aber immer auf die Standard Shoutbox.
Wer es gerne mal testen möchte, der kann sich auf meiner Testseite einloggen und das mal ausprobieren.
http://emblinux.a...7/news.php
User: tester
PW: 123456
erreichbar nur solange der Rechner an ist.
Habe mal die Dateien von mir dran gehangen. Wie gesagt, es handelt sich dabei um angepasste Dateien der original Shoutbox. Habe auch gleich noch einen kleinen Fehler behoben in der Anleitung und demzufolge auch in der Datei (shoutbox_archive.php)
emblinux hat folgende Datei hinzugefügt:
shoutbox.zip [6.19Kb - 39 mal heruntergeladen]
Das Lernen ist wie ein Meer ohne Ufer. Konfuzius
Alles wird Gut!
KEIN Support per Mail, ICQ oder PN !
 |