faecher:informatik:oberstufe:datenbanken:projekt:dokuwiki_plugin:microblogging:step02:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
faecher:informatik:oberstufe:datenbanken:projekt:dokuwiki_plugin:microblogging:step02:start [21.06.2021 15:28] – [Benutzer] sbelfaecher:informatik:oberstufe:datenbanken:projekt:dokuwiki_plugin:microblogging:step02:start [24.06.2021 09:42] (aktuell) sbel
Zeile 93: Zeile 93:
 </code> </code>
  
 +Das ganze kann man dann etwa so in der ''syntax.php'' einbinden:
  
 +<code php>
 +[...]
 +public function render($mode, Doku_Renderer $renderer, $data)
 +    {
 +        // Wir rendern nur HTML, sonst nix!
 +        if ($mode !== 'xhtml') {
 +            return false;
 +        }
  
 +        // Breche die Verarbeitung ab, wenn der Benutzer nicht angemeldet ist.
 +        if ( ! isset($_SERVER['REMOTE_USER']) ) {
 +            $renderer->doc .= "Um das Blog zu benutzen, müssen Sie sich anmelden";
 +            return true;
 +        }
 +        // get settings
 +        $dbusername = $this->getConf('dbusername'); 
 +        $dbname = $this->getConf('dbname');
 +        $dbhost = $this->getConf('dbhost');
 +        $dbpasswd = $this->getConf('dbpasswd');
 +        // Create bloguser Object
 +        $bloguser = new bloguser($dbusername, $dbpasswd, $dbname, $dbhost);
 +        // Prüfe, ob es den angemeldeten Benutzer schon in der DB gibt, lege ihn an wenn
 +        // nicht.
 +        $bloguser->checkBlogUser($_SERVER['REMOTE_USER']);
 +
 +[...]
 +</code>
 +
 +==== Aufgaben ====
 + 
 +
 +{{:aufgabe.png?nolink  |}}
 +=== (A1) ===
 +
 +Füge die Codebestandteile von oben so in dein Projekt ein, dass diese dort funktionieren. Als angemeldeter Benutzer solltest du also die Ausgabe erhalten, dass es den Benutzer noch nicht gibt und dieser angelegt werden sollte.
 +
 +
 +----
 +{{:aufgabe.png?nolink  |}}
 +=== (A2) ===
 +
 +Ergänze die Klasse ''bloguser'' um zwei private Felder/Attribute für die ID und den Namen des Benutzers.
 +
 +Implementiere in der Methode ''checkBlogUser'' die Funktionalität, dass der Benutzer angelegt wird, wenn er noch nicht existiert.  
 +
 +++++ Hilfe Stufe 1 |
 +<code php>
 +public function checkBlogUser ($dwusername) {
 +        print "Überprüfe, ob der Dokuwiki-Benutzer " . $_SERVER['REMOTE_USER'] . " schon in der Datenbank angelegt ist.";
 +
 +        // Datenbankabfrage wie bisher, das DBO Handle ist in $this->db vorhanden
 +        // $statement= $this->db->prepare("SELECT * FROM ... WHERE ... = :dwusername ...");
 +        // $statement->execute(array('dwusername' => "$dwusername")); 
 +        // $treffer = $statement->fetch()[0];
 +        // (Erklärung: fetch liefert ein Array, wir holen das nullte Element und 
 +        /  versuchen es zu speichern. Wenn es das nullte Element nicht gibt, ist 
 +        // $treffer nicht gesetzt, das kann man mit 'isset' prüfen - s.u.
 +        
 +        // TODO: Abfrage ergänzen, um zu prüfen obs den Benutzer gibt
 +        
 +        if ( ! isset($treffer) ) {
 +            print "Nein, nicht gefunden, muss angelegt werden.";
 +            // TODO: Abfrage, die den User anlegt.
 +        } 
 +
 +        // Wert der Felder setzen
 +        $this->id = $treffer;
 +        $this->name = $dwusername;
 +    }
 +</code>
 +++++
 +
 +++++ Hilfe Stufe 2 |
 +<code php>
 +public function checkBlogUser ($dwusername) {
 +        print "Überprüfe, ob der Dokuwiki-Benutzer " . $_SERVER['REMOTE_USER'] . " schon in der Datenbank angelegt ist.";
 +
 +        $statement= $this->db->prepare("SELECT id FROM blogusers WHERE dwusername=:dwusername");
 +        $statement->execute(array('dwusername' => "$dwusername")); 
 +        $treffer = $statement->fetch()[0];
 +        
 +        if ( ! isset($treffer) ) {
 +            print "Nein, nicht gefunden, muss angelegt werden.";
 +            // TODO: Insert Statement vorbereiten und ausführen
 +            // $statement= $this->db->prepare("INSERT INTO .... ");
 +            // $statement->execute(array('dwusername' => "$dwusername"));
 +
 +            // TODO: Nochmal die ID abfragen (die es jetzt hoffentlich gibt)
 +            // ....
 +            $treffer = $statement->fetch()[0];
 +        } 
 +
 +        // Wert der Felder setzen
 +        $this->id = $treffer;
 +        $this->name = $dwusername;
 +    }
 +
 +</code>
 +++++
 +
 +Ergänze eine Getter-Methode, um das ID Feld des eines bloguser-Objekts zu erhalten.
 +
 +
 +---- 
 +{{:aufgabe.png?nolink  |}}
 +=== (A3) ===
 +
 +Verifiziere, dass dein Plugin sich wie gewünscht verhält, indem du in der Datenbank nachschaust, ob der Benutzer erstellt wurde. 
 +
 +Lege weitere Benutzer in DokuWiki an und prüfe, ob diese ebenfalls angelegt werden.
  
  
  • faecher/informatik/oberstufe/datenbanken/projekt/dokuwiki_plugin/microblogging/step02/start.1624289317.txt.gz
  • Zuletzt geändert: 21.06.2021 15:28
  • von sbel