Hack: Different Homepage

Unterschiedliche Startseite für unregistrierte Besucher und angemeldete Benutzer

1. Idee

Unregistrierte Besucher und angemeldete Benutzer meines Wikis sollen auf Startseiten mit grundsätzlich unterschiedlichem Inhalt geführt werden.

2. Umsetzung

2.1. Benötigte Ressourcen

Zwei modifizierte Versionen der Action "include":

  1. includestartseite -> [Die bereits vorhandene Action "include" wurde lediglich so abgeändert, dass der Hinweis "Du bist nicht berechtigt, diese Seite zu lesen" nicht angezeigt wird]
  2. includeup -> [Die bereits vorhandene Action "include" wurde so abgeändert, dass automatisch der Inhalt der persönlichen Startseite eines angemeldeten Benutzers angezeigt wird -> deshalb der Name: includeup = includeu(ser)p(age)]
  3. user -> [Diese kleine Action ermöglicht es, dass angemeldete Benutzer auf der Startseite mit ihrem Benutzernamen begrüsst werden können]

Drei Wiki-Seiten:

  1. Die (bereits vorhandene) Startseite des Wikis
  2. Eine Seite mit dem Inhalt für unregistrierte Besucher des Wikis, wir können sie zum Beispiel Visitors nennen
  3. Eine Seite mit dem Inhalt für angemeldete Benutzer des Wikis, wir können sie zum Beispiel Members nennen

2.2. Seitenanpassungen

2.2.1. Seite "Startseite"

Die (bereits vorhandene) Startseite des Wikis erhält folgenden Inhalt:
Kopiervorlage

{{includestartseite page="Members" nomark=1}}
{{includestartseite page="Visitors" nomark=1}}


Hier als Screenshot:


Berechtigungen:


Lesen: * (alle)
Schreiben: admins (nur Administratoren)
Kommentare: nach Bedarf
2.2.2. Seite "Visitors"

Die neu erstellte Seite Visitors füllen wir mit allgemeinen Informationen zu Inhalt, Sinn und Zweck unseres Wikis.


Entscheidend ist die Vergabe der Berechtigungen:

Lesen: * (alle ...)
!$ (... ausser den Registrierten)
admins (... leseberechtigt soll sicher auch der Administrator sein)
Schreiben: admins (nur Administratoren)
Kommentare: nach Bedarf

Hier ein Screenshot (im Beispiel heisst die Seite "UnRegistrierte" und nicht "Visitors")


2.2.3. Seite "Members"

Auf dieser Seite bauen wir eine namentliche Begrüssung des angemeldeten Benutzers ein (Action {{user}}). Vielleicht fügen wir noch die wichtigsten Links hinzu. Am Ende bauen wir die Action {{includeup}} ein, nun erscheint der Inhalt der persönlichen Startseite des Benützers.


Beispielinhalt (Kopiervorlage)

====Hallo {{user}}, willkommen im «Beispielwiki»-Benutzerbereich==

======Nützliche Seiten:====
  * Meine Startseite: {{user}}
  * ((MeineSeiten Alle meine bisher erstellten Seiten))
  * ((LetzteAenderungen Letzte Änderungen))
----
======Aktuelle Version meiner Startseite [Benutzername: {{user}}]==
{{includeup}}


Hier erneut als Screenshot:


Berechtigungen:

Lesen: $ (nur angemeldete Benutzer)
Schreiben: admins (nur Administratoren)
Kommentare:
nach Bedarf

Auch hier zum Schluss ein Screenshot (die Seite heisst "Registrierte" und nicht "Members"):


Über Feedback freue ich mich! Danke

3. Code der zusätzlich benötigten Actions

3.1. Action: includestartseite

{{includestartseite}}


/actions/includestartseite.php


<?php
$vars
[0] = $this->unwrap_link($vars[0]);

if (
$_SESSION['linktracking'] && $track)
        
$this->track_link_to($vars[0]);

if (
in_array($vars[0],$this->context)) return;
if (
$vars[0] == $this->tag) return;

if (! 
$this->has_access('read'$vars[0])){
  if (
$nowarning != 1) echo "";
}else{
  if (!
$inc_page $this->load_page($vars[0], $_GET['time'])){
    echo 
"<em> " $this->_t('SourcePageDoesntExist') . "(" $this->link('/' $vars[0]) . ")</em>";
  }else{
    if (
$inc_page['body_r']) $strings $inc_page['body_r'];
    else 
$strings $this->format($inc_page['body'], 'wacko');
    
$strings preg_replace("/\°\°toc[^\°]*\°\°/i","",$strings);
    
$strings preg_replace("/\°\°tableofcontents[^\°]*\°\°/i","",$strings);
    
$strings preg_replace("/\°\°p[^\°]*\°\°/i","",$strings);
    
$strings preg_replace("/\°\°showparagraphs[^\°]*\°\°/i","",$strings);
    
$strings preg_replace("/\°\°redirect[^\°]*\°\°/i","",$strings);
    
$strings preg_replace("/.*\°\°a name=\"?$first_anchor\"?\°\°(.*)\°\°a name=\"?$last_anchor\"?\°\°.*$/is","\$1",$strings);

    if ((
$nomark!=1) && ($nomark!=|| $this->has_access('write'$vars[0])))
      print 
"<div class=\"include\">"."<div class=\"name\">" $this->link('/' $vars[0]) . "  :: ".
                          
"<a href=\"" $this->href('edit'$vars[0]) . "\">" $this->_t('EditIcon') . "</a></div>";
    
    
$this->context[++$this->current_context] = $vars[0];
    print 
$this->format($strings'post_wacko');
    
$this->current_context--;
    
    if ((
$nomark!=1) && ($nomark != || $this->has_access('write'$vars[0])))
      print 
"<div class=\"name\">".$this->link('/' $vars[0]) . "  :: ".
                          
"<a href=\"" $this->href('edit'$vars[0]) . "\">" $this->_t('EditIcon') . "</a></div></div>";
  };
}

?>


3.2. Action: includeup

{{includeup}}


/actions/includeup.php


<?php

$vars
[0] = $this->db->users_page '/' $this->get_user_name();
$nomark=1;

if (
$_SESSION['linktracking'] && $track)
        
$this->track_link_to($vars[0]);

if (
in_array($vars[0],$this->context)) return;
if (
$vars[0] == $this->tag) return;

if (! 
$this->has_access('read'$vars[0])){
  if (
$nowarning!=1) echo $this->_t('NoAccessToSourcePage');
}else{
  if (!
$inc_page $this->load_page($vars[0], $_GET["time"])){
    echo 
"<em>Du hast deine Startseite noch nicht eingerichtet. Klicke auf das Fragezeichen neben deinem Benutzernamen, um dies nachzuholen: </em><strong>".$this->link('/' $vars[0]) . "</strong>";
  }else{
    if (
$inc_page['body_r']) $strings $inc_page['body_r'];
    else 
$strings $this->format($inc_page['body'], 'wacko');
    
$strings preg_replace("/\°\°toc[^\°]*\°\°/i","",$strings);
    
$strings preg_replace("/\°\°tableofcontents[^\°]*\°\°/i","",$strings);
    
$strings preg_replace("/\°\°p[^\°]*\°\°/i","",$strings);
    
$strings preg_replace("/\°\°showparagraphs[^\°]*\°\°/i","",$strings);
    
$strings preg_replace("/\°\°redirect[^\°]*\°\°/i","",$strings);
    
$strings preg_replace("/.*\°\°a name=\"?$first_anchor\"?\°\°(.*)\°\°a name=\"?$last_anchor\"?\°\°.*$/is","\$1",$strings);

    if ((
$nomark!=1) && ($nomark!=|| $this->has_access('write'$vars[0])))
      print 
"<div class=\"include\">"."<div class=\"name\">".$this->link('/' $vars[0]) . "  :: ".
                          
"<a href=\"".$this->href('edit'$vars[0])."\">".$this->_t('EditIcon')."</a></div>";
    
    
$this->context[++$this->current_context] = $vars[0];
    print 
$this->format($strings'post_wacko');
    
$this->current_context--;
    
    if ((
$nomark!=1) && ($nomark!=|| $this->has_access('write'$vars[0])))
      print 
"<div class=\"name\">".$this->link("/".$vars[0])."  :: ".
                          
"<a href=\"" $this->href('edit'$vars[0]) . "\">".$this->_t('EditIcon')."</a></div></div>";
  };
}

?>


3.3. Action: user

{{user}}


/actions/user.php


<?php

if ($this->get_user()) { echo $this->link($this->db->users_page '/' $this->get_user_name(), ''$this->get_user_name());}

?>