WackoWiki: Hack: Different Homepage

https://wackowiki.org/doc     Version: 24.02.2017 20:26
Dev[link4]/PatchesHacks[link5]/DifferentHomepage

Unterschiedliche Startseite für unregistrierte Besucher und angemeldete Benutzer


Idee

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

Umsetzung

Benötigte Ressourcen

Zwei modifizierte Versionen der Action "include":
  1. includestartseite[link1] -> [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[link2] -> [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[link3] -> [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

Seitenanpassungen

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
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")

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

Code der zusätzlich benötigten Actions

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>";
  };
}

?>


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>";
  };
}

?>


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());}

?>