Datum Zeit
Shoutbox
Gästen ist das Schreiben von Mitteilungen nicht erlaubt.


tele955848  Offline
Verwarnstatus: warningwarningwarningwarning
06.02.2012 09:49
moin

Jackpot  Offline
06.02.2012 00:01
Sehr geehrte Mitglieder, absofort gibt es wieder Lose in unseren Lottosystem! Der neue Jackpot liegt bei 500 Score. Alle Angaben ohne Gewähr. Wink

Datalus  Offline
04.02.2012 01:57
@ fehlerlos noch einen versuch und ich sperre beide Accounts !

Datalus  Offline
04.02.2012 01:56
@ fehlerlos , keine freischaltung da du bereits einen Account hier hast ! ( Monk )

DjMicha1985  Offline
04.02.2012 01:09
@fehlerlos keine Freischaltung, da Account bereits vorhanden (Monk)

Ähnliche Themen
Thema Forum Antworten Letzter Beitrag
bestimmte Gruppe Rate Infusionen 5 17. Dezember 2011 13:48:54
pd Warnig - Automatische Gruppen zuweisung Allgemeine Support Fragen 3 14. Januar 2011 17:54:21
ScoreSystem für bestimmte User ausschließen Infusionen 8 16. November 2010 10:16:13
Member Gruppen anlegen ? Allgemeine Support Fragen 10 18. September 2010 01:26:24
bestimmte größe eines Pop Up Festers Allgemeine Support Fragen 7 08. August 2010 14:31:57
Thread ansehen
Wer ist hier? 1 Gäste
 Drucke Thread
Shouboxeintrag nur für bestimmte Gruppen
emblinux
#1 Drucke Post
Geschrieben am 10. Februar 2010 17:17:47
User Avatar




Posts: 3662
Registriert seit: 04.10.08

Meister
Nächstes Level: 3684/5000

Scores: gesperrt
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&uuml;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&amp;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&amp;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&uuml;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 !
www.heiseclan.de/fusion/sig.gif
 top
http://www.fusion-ng.de
Springe ins Forum: