Thread Author: emblinux
Thread ID: 2402
Thread Info
Es gibt 7 Beiträge zu diesem Thema, und es wurde 4658 mal angesehen.  Es gibt auch Dateianhänge.
Wer ist hier? 1 Gäste
 Thema drucken
Shouboxeintrag nur für bestimmte Gruppen
emblinux
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.ath.cx/fusion7/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 angehängt:

shoutbox.zip [6.19kB / 369 mal Heruntergeladen]


Downloaded by:

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

www.heiseclan.de/geosig.gif
 
SC-Ad-Bot
 
bobbel
uff
coole idee
aber da trau ich mich nicht drann
ich bin nicht so versiert wie viele von euch
find es aber trotzdem supper
 
Dat Tunes
Nicht schlecht Dirk, werde es gleich mal antesten, des ganze ist echt klasse Idee mal Dickeslachen

Für welche Fusion Version hast du den Mod geschrieben ?
Bearbeitet von Dat Tunes am 19.02.2012 um 22:57
Leute ohne Macke, sind Kacke Dickeslachen
Oh Herr, schmeiss Grundwissen von Himmel !
 
emblinux
Ich glaube es war für die 1. 7er Release Version. Sollte aber auch auf die anderen anwendbar sein, mit kleinen Anpassungen würde ich sagen.
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

www.heiseclan.de/geosig.gif
 
Paramedic-94
Schade get nicht bei V7.02
Mit freundlichen Grüßen
Jean-Paul
Inhaber von www.JPPRO.de
 
Thomas
Feine sache, und klappt sogar.
 
Harlekin
Klasse Mod, allerdings kann man so auch shouten für Gruppen, in denen man selber gar nicht ist. Sinnvoller wäre da bei "Lesbar für:" eine Auswahl der Gruppen, in denen der Schreiber sich selber befindet.

Wie kann ich also die Auswahl so begrenzen?
Bearbeitet von Harlekin am 10.01.2016 um 12:52
harlekin-power.de/images/banner/HP468-1.png
 
Springe ins Forum:

 Ähnliche Themen 

TEST
Thema Forum Antworten Letzter Beitrag
bestimmte Gruppe Rate Infusionen 5 17.12.2011 um 13:48
pd Warnig - Automatische Gruppen zuweisung Allgemeine Support Fragen 3 14.01.2011 um 17:54
ScoreSystem für bestimmte User ausschließen Infusionen 8 16.11.2010 um 10:16
Member Gruppen anlegen ? Allgemeine Support Fragen 10 18.09.2010 um 01:26
bestimmte größe eines Pop Up Festers Allgemeine Support Fragen 7 08.08.2010 um 14:31
Gr@n@dE