+ Antworten
Seite 1 von 4 1 2 3 4 LetzteLetzte
Ergebnis 1 bis 10 von 34

Thema: [CB/e] Buddylist-Erweiterung - User blocken/ignorieren

  1. #1
    videoandfun
    Gast

    Standard [CB/e] Buddylist-Erweiterung - User blocken/ignorieren

    Da in letzter Zeit immer wieder gefragt wurde, ob es nicht eine Funktion für den CBE oder CB gibt, wo User andere ignorieren können (Profil, Gästebuch, Fotos, Private Nachrichten, usw), bin ich beim Überlegen die normale cb.connections-Funktion zu erweitern mit eurer Hilfe

    Ziel ist es (für mich vorerst)...
    dass man bestimmte User blockieren kann... einfach über mySQL zu lösen
    und dann im CB/e im Core nen Hack macht bzw Plugin, wo dann per IF-ELSE abgefragt wird, ob der User das Profil sehen darf oder nicht

    wird wohl garnicht so schwer werden, der Anfang

    dann als nächstes wäre es gut, wenn amn einfach aus einer xml-Datei auslesen kann (nur Server, nicht besucher -> also htaccess geschützt), welche Freunde/Ignorierte ein User hat.

    Also wenn man dann diese Seite www.example.org/friends?id=62 aufruft, dass dann per GET aus der SQL-Datenbank abgefragt wird, wen der User blockiert oder auf seiner Freundesliste hat.

    Sieht dann so Ungefähr aus:
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <api>
       <friends>
          <user id="79">Tine19</user>
          <user id="65">Miglo</user>
          <user id="138">Chatter23</user>
       </friends>
       <blacklist>
          <user id="92">Phobius</user>
          <user id="104">LizardKing</user>
       </blacklist>
    </api>
    brauche das mit der XML-Datei nämlich für nen externen Service (toksta*). Weiß jemand wie man mit einer XML-Datei auf ne Datenbank zugreifen kann? Oder ist es möglich so eine XML-Datei in ne PHP zu stopfen?

    wenn dann der Anfang gemacht ist, sollen dann noch etliche Hacks für uddeIM, PonyGallery, etc folgen...


    Mit freundlichen Grüßen,
    videoandfun

  2. #2
    videoandfun
    Gast

    Standard

    okay... hab jetzt doch noch nen tollen Link im Internet gefunden, der mir zeigte wie man über PHP eine XML ausgeben kann.

    Hier das Script-Beispiel:
    PHP-Code:
    <?php

    header
    ("Content-type: text/xml");

    echo
    '<?xml version="1.0" encoding="UTF-8"?>
    <api>
       <friends>
          <user id="79">Tine19</user>
          <user id="65">Miglo</user>
          <user id="138">Chatter23</user>
       </friends>
       <blacklist>
          <user id="92">Phobius</user>
          <user id="104">LizardKing</user>
       </blacklist>
    </api>'
    ;
    ?>
    dann werde ich mich mal an die Arbeit machen

  3. #3
    videoandfun
    Gast

    Standard

    so... nach 2 Stunden Arbeit habe ich jetzt bisher folgendes Ergebnis und brauche noch HILFE.

    In der Datenbank habe ich eine Tabelle angelegt mit dem Namen `jos_comprofiler_blacklist` und dazu noch 3 Felder `userid`, `ignoredid` und `description`.

    `userid` ist die ID von dem User, der einen anderen ignoriert. `ignoredid` ist der Ignorierte und `description` ist die Begründung wieso.

    Bis jetzt habe ich mal folgende Daten eingetragen
    Code:
    INSERT INTO `jos_comprofiler_blacklist`
    ( `userid`, `ignoredid`, `description`) VALUES ( '100', '200', ''),
    ( `userid`, `ignoredid`, `description`) VALUES ( '100', '201', '');
    Das heißt der User mit der ID ignoriert die beiden User mit der ID 200 und 201.


    So nun komme ich zu dem Problem. Und zwar möchte ich die Geblockten User der Reihe nach aufzählen/anzeigen lassen in der XML. Eine ID kann ich ja anzeigen lassen, aber nicht alles hintereinander. Kann mir jemanden sagen, wie ich das per SQL-Abfrage regeln kann, dass mir alle geblockten User der Reihe nach angezeigt werden können?

    Meine bisherige Datei kann man sich hier anschauen:
    http://www.straubing-live.de/friends.php?id=100 bzw. http://www.straubing-live.de/friends.php

    Und das ist der Code dazu:

    PHP-Code:
    <?php

    // powered by videoandfun on Straubing-Live //
    //      and the German Joomlaportal         //

    if (!isset ($_GET['id'])) {
    die(
    "Jaja... schleich die aber schnell!!!");
    }


    else {


    header("Content-type: text/xml"); //für XML-Anzeige
    error_reporting(E_ALL); //Fehler anzeigen

    include("./configuration.php");
    // Konfigurationsdatei laden

    @mysql_connect($mosConfig_host$mosConfig_user$mosConfig_password);
    mysql_select_db($mosConfig_db);

      
    $abfrage "SELECT ignoredid, description FROM " $mosConfig_dbprefix "comprofiler_blacklist WHERE userid = " $_GET['id'];
      
    $ergebnis mysql_query($abfrage);
      
    $row mysql_fetch_object($ergebnis);


     
    // folgt später noch...

            
    echo'<?xml version="1.0" encoding="UTF-8"?>
                   <api>
                        <friends>
                                 <user id="100">Username 100</user>
                                 <user id="101">Username 101</user>
                                 <user id="102">Username 102</user>
                        </friends>
                        <blacklist>
                                 <user id="'
    $row->ignoredid .'">Username '$row->ignoredid .'</user>
                        </blacklist>
                   </api>'
    ;
    }
    ?>
    Auf Deutsch gesagt: Die Zeile <user id="'. $row->ignoredid .'">Username '. $row->ignoredid .'</user> soll sich mit den verschiedenen IDs solange wiederholen, bis alle aufgezählt sind. Nur wie geht das?


    Mit freundlichen Grüßen,
    videoandfun

  4. #4
    Verbringt hier viel Zeit Avatar von caro84
    Registriert seit
    20.03.2008
    Alter
    34
    Beiträge
    599
    Bedankte sich
    82
    Erhielt 205 Danksagungen
    in 162 Beiträgen

    Standard

    machst du das für jeden user einzelnd?
    dann einfach eine schleife erstellen...

    weiß nicht, ob das so hinhaut, musste mal ausprobieren...

    PHP-Code:
            echo'<?xml version="1.0" encoding="UTF-8"?> 
                   <api> 
                        <friends> 
                                 <user id="100">Username 100</user> 
                                 <user id="101">Username 101</user> 
                                 <user id="102">Username 102</user> 
                        </friends> 
                        <blacklist> ';
                        for ($i=0, $n=count( $row->ignoredid ); $i < $n; $i++)
                        {
                         echo ' <user id="'. $row->ignoredid .'">Username '. $row->ignoredid .'</user>';
                        }
                        echo '</blacklist> 
                   </api>';
    if you don´t eat cheese, you´re letting the terrorist win!
    Web Developer Kit Tutorial

  5. Erhielt Danksagungen von:


  6. #5
    videoandfun
    Gast

    Standard

    mhm... danke schonmal, nur leider hat das nichts gebracht... es wird immer noch das gleiche wie zuvor angezeigt.

    hast du noch nen andern Vorschlag, oder wer anders?

    mfg, videoandfun

  7. #6
    Verbringt hier viel Zeit Avatar von caro84
    Registriert seit
    20.03.2008
    Alter
    34
    Beiträge
    599
    Bedankte sich
    82
    Erhielt 205 Danksagungen
    in 162 Beiträgen

    Standard

    achso, ersetz mal die zeile
    PHP-Code:
    $row mysql_fetch_object($ergebnis); 
    durch
    PHP-Code:
    while ($row mysql_fetch_assoc ($ergebnis))
      {  
          
    $list[] = $row;
      } 
    PHP-Code:
            echo'<?xml version="1.0" encoding="UTF-8"?> 
                   <api> 
                        <friends> 
                                 <user id="100">Username 100</user> 
                                 <user id="101">Username 101</user> 
                                 <user id="102">Username 102</user> 
                        </friends> 
                        <blacklist>';
                        for ($i=0, $n=count( $list); $i < $n; $i++)
                        {
                        
                         echo ' <user id="'. $list[$i]['ignoredid'] .'">Username '. $list[$i]['ignoredid'] .'</user>';
                        }
                        echo '</blacklist> 
                   </api>';
    if you don´t eat cheese, you´re letting the terrorist win!
    Web Developer Kit Tutorial

  8. Erhielt Danksagungen von:


  9. #7
    videoandfun
    Gast

    Standard

    boa... du bist genial. DANKE DIR

    dann gucke ich mal weiter, wie die "<friends>" in der Datenbank gespeichert werden

  10. #8
    videoandfun
    Gast

    Standard

    Dank der tollen Hilfe von caro84 konnte ich jetzt die XML schon so gut wie fertig stellen.
    Freunde werden auch vom CB aus übernommen, sowie auch die Namen.

    Also hier mal die tolle Datei
    PHP-Code:
    <?php

    // powered by videoandfun on Straubing-Live //
    //      and the German Joomlaportal         //

    if (!isset ($_GET['id'])) {
    die(
    "Jaja... schleich die aber schnell!!!");
    }


    else {


    header("Content-type: text/xml"); //für XML-Anzeige
    //error_reporting(E_ALL); //Fehler anzeigen

    include("./configuration.php");
    // Konfigurationsdatei laden

    @mysql_connect($mosConfig_host$mosConfig_user$mosConfig_password);
    mysql_select_db($mosConfig_db);

      
    $abfrage  "SELECT ignoredid, description FROM " $mosConfig_dbprefix "comprofiler_blacklist WHERE userid = " $_GET['id']; //Blacklist
      
    $abfrage2 "SELECT referenceid, description FROM " $mosConfig_dbprefix "comprofiler_members WHERE memberid = " $_GET['id']; //Friends
      
    $ergebnis  mysql_query($abfrage);
      
    $ergebnis2 mysql_query($abfrage2);
      while (
    $row mysql_fetch_assoc ($ergebnis))
      {  
          
    $list[] = $row;
      }  
      while (
    $row2 mysql_fetch_assoc ($ergebnis2))
      {  
          
    $list2[] = $row2;
      }  

    echo
    '<?xml version="1.0" encoding="ISO-8859-1"?> 
                   <api>
                        <friends>'
    ;
                        if(
    $list2) {
                        for (
    $i=0$n=count$list2); $i $n$i++)
                        {
      
    $abfrage "SELECT name, username FROM " $mosConfig_dbprefix "users WHERE id = " $list2[$i]['referenceid'];
      
    $ergebnis mysql_query($abfrage);
      
    $row mysql_fetch_object($ergebnis);

                        echo 
    ' <user id="'$list2[$i]['referenceid'] .'">'$row->name .'</user>';
                        }
                        }
                  echo 
    '</friends>';
                  echo 
    '<blacklist>';
                        if(
    $list) {
                        for (
    $i=0$n=count$list); $i $n$i++)
                        {
      
    $abfrage "SELECT name, username FROM " $mosConfig_dbprefix "users WHERE id = " $list[$i]['ignoredid'];
      
    $ergebnis mysql_query($abfrage);
      
    $row mysql_fetch_object($ergebnis);

                        echo 
    ' <user id="'$list[$i]['ignoredid'] .'">'$row->name .'</user>';
                        }
                        }
                  echo 
    '</blacklist> 
                   </api>'
    ;
    }
    ?>
    Jetzt werde ich dann mal mich ans CB-Plugin schreiben machen

  11. #9
    videoandfun
    Gast

    Standard

    mhm... bin gerade dabei das Plugin für den CB zu schreiben, wo der User einen anderen User per Klick absofort ignoriert oder nicht mehr ignoriert...

    leider bin ich noch nicht weitgekommen, da mich schon wieder das MySQL stört. Bin halt noch ein Anfänger, sry

    Also die Datei sieht bisher so aus:
    PHP-Code:
    <?php





    /** ensure this file is being included by a parent file */

    defined'_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );





    class 
    getblacklistTab extends cbTabHandler {

        
    /**

         * Construnctor

         */

        
    function getblacklistTab() {

            
    $this->cbTabHandler();

        }

        



        function 
    getDisplayTab($tab,$user,$ui) {

              global 
    $my$database$mosConfig_live_site$mosConfig_absolute_path$mosConfig_lang$mainframe;



            
    $return null;

            
    $params $this->params// get parameters (plugin and related tab)

            

            
    $is_blacklist_plug_enabled $params->get('blacklistPlugEnabled'"1");



            

            if (
    $is_blacklist_plug_enabled != "0") {



    if(!
    $my->id) { // Nicht eingeloggt
    }
    elseif(
    $user->id!=$my->id) { // Nicht-ICH
                         
    $database->setQuery("SELECT * FROM " $mosConfig_dbprefix "comprofiler_blacklist WHERE ignoredid = " $user->id );
    $rows $database->loadObjectList(); /* Übergibt nun das Ergebnis der Variable $rows */

    if ($rows->userid == $my->id) {

    $return 'Du ignorierst diesen User momentan. Nicht mehr ignorieren?<input type="button" value="Nicht mehr ignorieren!">';

    }



    if (!
    $rows->userid == $my->id) {


    $return 'Willst du diesen User ignorieren?<br/>Begründung: <input type="text" size="20" id="description">
    <input type="button" value="Ignorieren!">'
    ;  


    }
    } else { 
    // Mein Profil
    }

    }

            }

            return 
    $return;

        } 
    // end or getDisplayTab function

    // end of class

    ?>
    Wie bekomme ich jetzt hin, dass per Klick, was in der Datenbank gespeichert wird? Könnte mir wieder jemand ein Codeschnipsel zeigen? Wenn bisher im Code i.wo Fehler drinnen sind bezügl. der SQL-Abfrage, dann meldet es mir auch bitte.

    Also wenn ein User den andern ignorieren möchte, würde der Code aussehen:
    PHP-Code:
    $eintrag "INSERT INTO `#__comprofiler_blacklist`
    (userid, ignoredid, description)
    VALUES
    ('" 
    $my->id "', '" $user->id "', '" $description "')";
    $eintragen mysql_query($eintrag);
    if(
    $eintragen == true)
       {
       echo 
    "User wird absofort ignoriert!";
       }
    else
       {
       echo 
    "Fehler beim Speichern";
       } 
    und nicht mehr ignoriern möchte, dann:
    PHP-Code:
    $loeschen "DELETE FROM `#__comprofiler_blacklist`
    WHERE ignoredid= '" 
    $user->id "' AND userid='" $my->id "' ";
    $loesch mysql_query($loeschen);
    if(
    $loesch == true)
       {
       echo 
    "User wird absofort nicht mehr ignoriert!";
       }
    else
       {
       echo 
    "Fehler beim Speichern";
       } 
    mhm, wie mache ich das jetzt, damit es auch klappt? per function ...() oder GET?

    Bin um jeden Tipp dankbar


    Mit freundlichen Grüßen,
    videoandfun

  12. #10
    videoandfun
    Gast

    Standard

    so hab mal wieder weitergearbeitet (<- gebe ja nie auf )...

    und hab die Datei jetzt voram gebracht. Daten sollen eigentlich per POST übergeben werden. Aber leider gibts noch nen Fehler... kann mal jemand schaun woran es liegt?

    Testen könnt ihr das Plugin schonmal auf meiner Page (http://www.straubing-live.de) Login mit folgenden Daten: demouser / demouser

    Falls die Übertragung in die Datenbank wirklich klappen sollte, müsste dann hier (http://www.straubing-live.de/friends.php?id=189) stehen, dass ihr einen User ignoriert (Blackliste)... i.wie haberts noch i.wo


    Das ist mal die bisherige Datei:
    PHP-Code:
    <?php





    /** ensure this file is being included by a parent file */

    defined'_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );





    class 
    getblacklistTab extends cbTabHandler {

        
    /**

         * Construnctor

         */

        
    function getblacklistTab() {

            
    $this->cbTabHandler();

        }

        



        function 
    getDisplayTab($tab,$user,$ui) {

              global 
    $my$database$mosConfig_live_site$mosConfig_absolute_path$mosConfig_lang$mainframe;



            
    $return null;

            
    $params $this->params// get parameters (plugin and related tab)

            

            
    $is_blacklist_plug_enabled $params->get('blacklistPlugEnabled'"1");



            

            if (
    $is_blacklist_plug_enabled != "0") {

    if (isset(
    $_GET['black']) && $_GET['black'] == "delete") {
         if (isset(
    $_POST['ignoredid']) && $_POST['userid']) {

    $userid $_POST['userid'];
    $ignoredid $_POST['ignoredid'];

    $loeschen "DELETE FROM `#__comprofiler_blacklist`
    WHERE ignoredid= '" 
    $ignoredid "' AND userid='" $userid "' ";
    $loesch mysql_query($loeschen);
    if(
    $loesch == true)
       {
       
    $return "User wird absofort nicht mehr ignoriert!";
       }
    else
       {
       
    $return "Fehler beim Speichern";
       }
         }
    }



    elseif (isset(
    $_GET['black']) && $_GET['black'] == "add") {
         if (isset(
    $_POST['ignoredid']) && $_POST['userid'] && $_POST['description'])  {

    $userid $_POST['userid'];
    $ignoredid $_POST['ignoredid'];
    $description $_POST['description'];

    $eintrag "INSERT INTO `#__comprofiler_blacklist`
    (userid, ignoredid, description)
    VALUES
    ('" 
    $userid "', '" $ignoredid "', '" $description "')";
    $eintragen mysql_query($eintrag);
    if(
    $eintragen == true)
       {
       
    $return "User wird absofort ignoriert!";
       }
    else
       {
       
    $return "Fehler beim Speichern";
       }
    }
    }





    else {


    if(!
    $my->id) { // Nicht eingeloggt
    }
    elseif(
    $user->id!=$my->id) { // Nicht-ICH
                         
    $database->setQuery("SELECT * FROM " $mosConfig_dbprefix "comprofiler_blacklist WHERE ignoredid = " $user->id );
    $rows $database->loadObjectList(); /* Übergibt nun das Ergebnis der Variable $rows */

    if ($rows->userid == $my->id) {
    $return '<form action="index.php?option=com_comprofiler&task=userProfile&user=' $user->id '&black=delete" method="post">
      <fieldset>
        <legend>Ignorierfunktion</legend>
        <input id="userid" type="hidden" name="userid" value="' 
    $my->id '" />
        <input id="ignoredid" type="hidden" name="ignoredid" value="' 
    $user->id '" />
        <label for="senden">Du ignorierst diesen User momentan.</label><br />
        <input id="senden" type="submit" name="senden" value="Nicht mehr ignorieren" />
      </fieldset>
    </form>'
    ;
    }



    if (!
    $rows->userid == $my->id) {
    $return '<form action="index.php?option=com_comprofiler&task=userProfile&user=' $user->id '&black=add" method="post">
      <fieldset>
        <legend>Ignorierfunktion</legend>
        <input id="userid" type="hidden" name="userid" value="' 
    $my->id '" />
        <input id="ignoredid" type="hidden" name="ignoredid" value="' 
    $user->id '" />
        <label for="description">Begr&uuml;ndung (wird User angezeigt)</label><br />
        <textarea id="description" name="description" cols="50" rows="10">Ich ignoriere dich, weil...</textarea><br />
        <label for="senden">Du ignorierst diesen User momentan nicht.</label><br />
        <input id="senden" type="submit" name="senden" value="Ab jetzt ignorieren" />
      </fieldset>
    </form>'



    }
    } else { 
    // ICH
    }

    }

            }

            return 
    $return;

        } 
    // end or getDisplayTab function

    // end of class

    ?>
    kann das sein das ich die Variablen per POST falsch übergebe?


    Hier schonmal ein Pic, wie es momentan aussieht:


    Mit freundlichen Grüßen,
    videoandfun

+ Antworten
Seite 1 von 4 1 2 3 4 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein