PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : WikiStyle


Nammalakuru
17.03.2006, 13:50
Kann sich mal jemand dran machen den wikistyle zu ändern?
Hab keinen Plan ob man dazu ftp passes braucht, oder ob man das über die administration machen kann.
Auf jeden Fall muss der neue header eingebunden werden und das Teil muss sich zumindest vom Standardlayout entfernen:

Hier ein paar fertige Themes:
http://meta.wikimedia.org/wiki/Gallery_of_user_styles

Meine Favoriten: FratMan, FraternalRelief

... ich hab da keinen Plan von :(
Nam

Melanie
22.03.2006, 19:16
FTP-Zugang brauchts dazu.

Und ich ersaufe leider gerade in Arbeit.

Melanie

Melanie
22.03.2006, 19:16
FTP-Zugang brauchts dazu.

Und ich ersaufe leider gerade in Arbeit.

Melanie

Friedjoff
22.03.2006, 20:22
Lust hätte ich ja schon, aber mir gehts grad ähnlich wie Melanie. Wenn ich wieder Zeit hab werde ich mir das mal näher anschauen...

Gruß Friedjoff

Friedjoff
22.03.2006, 20:22
Lust hätte ich ja schon, aber mir gehts grad ähnlich wie Melanie. Wenn ich wieder Zeit hab werde ich mir das mal näher anschauen...

Gruß Friedjoff

jasper
29.03.2006, 17:12
So,

alle die Zeit und Lust haben, können hierzu (http://jaspernet.jl-aka-karahara.net/wiki) mal Lob, Kritik, Anschuldigungen, Huldigungen, Kommentare, Verbesserungsvorschläge und vieles Mehr beitragen. :bg:

So soll unser Wiki in nächster Zeit ausschauen. Wem das nicht passt, der soll es selber besser machen. :wink:

Die Kleinigkeiten wie Sprache und html-Layout werden dann geregelt, wenn das Teil online steht. Die neuen Verbesserungen können wir gleich hier schon mal einfließen lassen.

MfG,

Jasper

Friedjoff
29.03.2006, 17:36
Hi,

sehr schön! Hätte ich kaum besser mach können :wink:

Der Link "[bearbeiten]" auf der Hauptseite wirkt bie mir (FF 1.5) noch etwas deplaziert. Meiner Ansicht nach kann man diese Links auch weg lassen, ich benutze die eigentlich nie. Mehr als Lob fällt mir sonst nicht ein.

Friedjoff

Werner Hohn
29.03.2006, 19:40
Nicht schlecht.
Was genau soll später noch geändert werden?

- Im Augenblick sehe ich keine Bilder
- Umlaute werden nicht dargestellt
- links neben dem Punkt in der Kategorieauflistung sehe ich ein großes Â
- Schriftbild zu klein
- fehlende interne Links in grün - kommt bei Sonnenlicht nicht rüber
- Text unterhalb der letzten Linie schlecht lesbar (zu hell)
- teilweise orange Links (Bearbeiten, zurück zu ......)
- ändert bitte den Outdoorhaendler in Outdoorhändler

IE 6.0

EDIT:
Verbesserungsvorschlag:

Die rechte Box "Wichtige Seiten" könnte geändert werden. Das meiste davon steht schon in der Box "Navigation" oder ist unwichtig.

Etwa so wie im scout-o-wiki (http://www.scout-o-wiki.de/index.php/Hauptseite). Dort wird in wenigen Sätzen erklärt um was es im Wiki geht; und was nicht gemacht werden soll.
Natürlich in einem kleineren Schriftbild- :wink:

Nochmals EDIT:

Die verständlichen Lizensbestimmungen dieses Wikis könnten ein Anfang sein .....

Gruß, Werner - der wenn man es genau nimmt, nicht meckern darf.

derMac
29.03.2006, 21:32
Finde es sehr gelungen, bis auf das Grün. Das passt nicht zu den restlichen Farben. Und, wie auch schon gesagt, könnte die Schrift ein klein wenig größer sein. Kann gern am WE mal schauen, ob ich es besser machen kann. :wink:
Zur Navigationsbox: Eigentlich gefällt mir die rechte besser als die linke, aber die linke bekommt man nicht so einfach weg.

Mac

Werner Hohn
29.03.2006, 23:34
Die linke Box ist ein Stück Heimat. Findet man so (oder fast so) in jedem Wiki.

Werner - bereit für die Linke zu kämpfen :gosche:

jasper
30.03.2006, 08:14
Was genau soll später noch geändert werden?

[ ] Übersetzungsmängel, die noch bestehen
[ ] kleine Layoutmängel bzw. Verbesserungen
[ ] HTML Programmierung der Hauptseite

Das sollte nämlich alles in unserem Wiki gemacht werden, sobald er hochgeladen ist und nicht in meinem. Allerdings kann sich jeder dran versuchen und das in meinem ausprobieren, dass es dann beim relaunch schon zur Verfügung steht.

- Im Augenblick sehe ich keine Bilder

[x] sind im Outdoorseiten Wiki vorhanden.
Der Inhalt der Datenbank wird ja nicht geändert. Somit sollte aller Text und auch alle Bilder gleich sein. Wenn neue Bilder, bzw. ein neues Layout gewünscht werden, einfach mal auf meiner Seite ausprobieren.

- Umlaute werden nicht dargestellt

Ich hab keine Ahnung, warum die ausgerechnet auf der Hauptseite nicht dargestellt werden. Auf allen anderen Seiten geht es komischerweise. Vielleicht weiß jemand Hilfe.

- links neben dem Punkt in der Kategorieauflistung sehe ich ein großes Â

Selbes Problem wie bei den Umlauten

- Schriftbild zu klein

[ ] werde die selbe Größe wie die des Menüs verwenden. Ist das OK?

- fehlende interne Links in grün - kommt bei Sonnenlicht nicht rüber

[ ] die werde ich dann schwarz machen, wie in der aktuellen Version. OK?

- Text unterhalb der letzten Linie schlecht lesbar (zu hell)

Können wir ändern, ich finde es aber ganz ok so. Die Schriftgröße passt aber auf jeden Fall, oder?

- teilweise orange Links (Bearbeiten, zurück zu ......)

Besuchte Links sind im Moment orange!

- ändert bitte den Outdoorhaendler in Outdoorhändler

Das sollte kein Problem sein! :wink:

Die rechte Box "Wichtige Seiten" könnte geändert werden. Das meiste davon steht schon in der Box "Navigation" oder ist unwichtig.

Finde ich auch! Wer machts?

So, ich hoffe, das waren verständliche Erläuterungen. Wenn ihr was ausprobieren wollt, nur zu. Könnt auf meiner Seite einfach einen Artikel erstellen bzw. die Hauptseite umbauen.

Vielen Dank für eure Mithilfe,

Jasper!

Werner Hohn
30.03.2006, 10:12
Die rechte Box "Wichtige Seiten" könnte geändert werden. Das meiste davon steht schon in der Box "Navigation" oder ist unwichtig.

Finde ich auch! Wer machts?
Kann ich machen. Diese Infobox wird dann so ähnlich aussehen wie die Box "Regeln und Hinweise" im scout-o-wiki. Das senkt vielleicht die Hemmschwelle.

Bis ich damit anfangen kann wird es jedoch Ende Arpil. Dieses Wochenende haben wird eine Hochzeit (nicht ich). Und Mitte nächster Woche geht es für 2 1/2 Wochen in die Bretagne.

Also Geduld. Wenn zwischenzeitlich jemand die Änderungen machen will oder bessere Ideen hat - keine Hemmungen.

Gruß, Werner

derMac
30.03.2006, 19:31
- fehlende interne Links in grün - kommt bei Sonnenlicht nicht rüber

[ ] die werde ich dann schwarz machen, wie in der aktuellen Version. OK?
Nee, das ist ja im jetzigen Wiki das Problem, dass man die nicht von normalem Text unterscheiden kann. Werd mir in ner Musezeit mal Gedanken über die Textfarben machen, aber frühestens am Sa.

Mac

Werner Hohn
30.03.2006, 19:54
Die fehlenden Links sind in den anderen Wikis immer in ROT. ORANGE werden die besuchten Seiten schon angezeigt. Beides geht nicht.

@Jasper

Erst jetzt habe ich DIE grundlegende Änderung bemerkt:

Ich wollte deine Seite bearbeiten :shock: :shock: :shock: da fehlt doch was: Die Reiter "Artikel" Diskussion" "Bearbeiten" usw.

Kurz bevor meine Frau den Notarzt rufen wollte, fällt mein Blick an den linken Rand (nein, nicht der Gesellschaft) - leichtes Aufatmen. Da ist ja alles unter "Views". Wenn's sein soll. Ist zwar nicht mein Ding, aber ....
Ich habe mich inzwischen an die Reiter oberhalb des Artikels oder des Editfensters gewöhnt.

Deine Seite wird mit allen Zeichen auch bei mir richtig dargestellt. Erst wenn ich auf "bearbeiten" geklickt habe kommt der Schrott. Dann aber für länger. Also auch bei einem neuen Besuch. Erst bei einem Besuch nach mehreren Stunden bekomme ich wieder die normale Ansicht. ???????????

EDIT:

Ich habe den falschen Text der Hauptseite kopiert und als Wikiartikel "Sonderzeichen" abgespeichert. Natürlich auf deiner Seite!

Gruß, Werner

derMac
31.03.2006, 00:10
Die fehlenden Links sind in den anderen Wikis immer in ROT. ORANGE werden die besuchten Seiten schon angezeigt. Beides geht nicht.
Rot find ich etwas aufdringlich, aber für dich Wikimaniac ist die Tradition sicher wichtig. :wink:


[/quote]Kurz bevor meine Frau den Notarzt rufen wollte, fällt mein Blick an den linken Rand (nein, nicht der Gesellschaft) - leichtes Aufatmen. Da ist ja alles unter "Views". Wenn's sein soll. Ist zwar nicht mein Ding, aber ....
Ich habe mich inzwischen an die Reiter oberhalb des Artikels oder des Editfensters gewöhnt.[/quote]
Ja, aber die neue Version gefällt mir richtig gut, zumal die Reiter in einigen Browsern richtig Probleme gemacht haben. Find es so aber übersichtlicher und optisch entspannter (im Banner gibt es ja schon genug Spielereien :wink: )

Mac

Werner Hohn
31.03.2006, 09:48
Naja, rot müssen die fehlenden Links nicht unbedingt sein. Die Farben sollten sich nur etwas stärker unterscheiden.

Tradition ... dann hätte ich jetzt einen Block vor mir liegen. Jedoch wenn ich es mir recht überlege, ich hänge an Rot. :wink:

Wenn unterhalb der "Views" alles bleibt wie es jetzt ist, kann ich auch mit dem neuen Design leben. Gott und die Welt haben sich in den letzten Jahren bei allen Anwendungen daran gewöhnt, dass oben gearbeitet wird. Nannte man mal SAA-kompatibel - System Application Architecture. Die feiert im nächsten Jahr runden Geburtstag. Zwanzig. Auch ne' Tradition.

Werner

derMac
31.03.2006, 17:52
Nannte man mal SAA-kompatibel - System Application Architecture. Die feiert im nächsten Jahr runden Geburtstag. Zwanzig. Auch ne' Tradition.
leicht Wenns ja wenigsten oben gewesen wäre. Aber es war eher mittendrin und auch noch alles wichtige über den ganzen Bildschirm verstreut. :wink:

Mac, der eigentlich sehr für einheitliche Bedienkonzepte ist, wenn der übliche Weg sinnvoll erscheint.

jasper
31.03.2006, 17:56
[x] Schriftgröße

Hab versucht, das Schriftbild etwas anzugleichen und auch die Schrift etwas größter gemacht.

Wie immer Feedback bitte umgehend hier posten! :bg:

[ ] Umlaute

Wegen den Umlauten hab ich keine Ahnung. Das ist nur auf der Hauptseite so. Aller anderen Seiten funktionieren einwandfrei. Und im Firefox gibt es gar keine Probleme.

[ ] Neue Vorschläge etc

Ausprobieren oder einfach an mich!!!

MfG,

Jasper

giraffe
31.03.2006, 18:49
bzgl. Umlaute:
Gibts eigentlich einen Grund, warum Du den Zeichensatz auf ISO-8859-1 eingestellt hast und nicht auf UTF-8 wie im Original-Wiki?

jasper
31.03.2006, 19:08
[x] Umlaute

@ Giraffe: Danke für deinen Tipp!

Hab mich irgendwie vertippt! 8)

charset=iso-8859-1" anstatt von charset="iso-8859-1"

Dann geht das alles nicht so wie ich das wollte! :bash:

@ Nam: Überprüf mal deine restlichen Header, ob da der Fehler auch ist!

MfG,

Jasper

jasper
31.03.2006, 20:20
[ ] Englische Wörter/Sätze.

Ich hab zwar Kleinigkeiten wie 'Persönliche Werkzeuge Views (opens in new window) in der Sprachdatei geändert, es will aber irgendwie nicht erscheinen.

Kann mir vielleicht einer mit Adminrechten den Inhalt der http://wiki.outdoorseiten.net/languages/LanguageDe.php Datei geben? Da könnte das Problem gelöst sein!

Kann mir da irgendjemand weiterhelfen? Hatten wir das Problem im alten Wiki nicht auch?

MfG,

Jasper

jasper
31.03.2006, 21:30
[x] "bearbeiten"-Link im Firefox.

Nach einigen Differenzen mit den .css Dateien ist es mir gelungen, im Firefox und im IE 6.0 die "bearbeiten"-Felder auf die selbe Höhe zu bringen!

Bitte noch mit anderen Browsern testen!

MfG,

Jasper

derMac
31.03.2006, 21:44
Nach einigen Differenzen mit den .css Dateien ist es mir gelungen, im Firefox und im IE 6.0 die "bearbeiten"-Felder auf die selbe Höhe zu bringen!
Ich scheitere momentan schon daran herauszufinden, welche css-Datei die Seite überhaupt nimmt. :(

Mac

jasper
31.03.2006, 21:50
Ich scheitere momentan schon daran herauszufinden, welche css-Datei die Seite überhaupt nimmt.

Das lässt sich so pauschal auch nicht beantworten! :bg:

Was willst du denn ändern, dann kann ich dir evt. weiterhelfen! Versuchs mal mit der main.css wenn es was am Layout sein soll!

MfG,

Jasper

cd
31.03.2006, 23:17
Mit Opera 8.52 funktionierts. Zumindest glaub ich, dass es so aussehen soll :bg:
Hier der Screenshot:
http://img76.imageshack.us/img76/1961/unbenannt18iy.th.jpg (http://img76.imageshack.us/my.php?image=unbenannt18iy.jpg)

Was ich für ein Wiki etwas ungewohnt finde, ist, dass die Views links in dem Menü angeordnet sind. Ist halt nicht "klassisch wiki"... :roll:

Ansonsten gefällt mir der Style aber gut, angenehm modern, sehr gut passend zum Forumsdesign. An die neue Position der Views würde ich mich schnell gewöhnen können :wink:

chris

Werner Hohn
02.04.2006, 14:18
Follow your dreams - nicht in meinen Wiki! Ich habe nach wenigen Tagen wieder den alten Header (forum.outdoorseiten.net). Darunter das neue Design. Warum? (IE 6.0)

1 - bearbeiten bitte in Bearbeiten ändern
2 - Bei vielen Artikel werden die Bilder nicht angezeigt.
3- Das Inhaltsverzeichnis befindet sich zwischen Bild und Text. Schrott! E4
4 - Blaue Linie nur noch gestrichelt und in schwarz?
5 - Die Suche ist sehr weit unten.
6 - Der Apostroph vor Persönliche Werkzeuge kann weg
7 - Im Inhaltsverzeichnis werden die Unterkapitel in einer anderen Farbe (blau) dargestellt Via gebennensis
8 - fette und große Schrift der Überschriften ausgefranst
9 - hellgraue Schrift des Inhaltsverzeichnis bei Sonnenlicht nicht lesbar
10 - Die senkrechte Linie am linken Rand der Artikel fehlt. Der Text beginnt irgendwie im leeren Raum.
11 - Die Artikel sollten wieder auf die alte Breite gebracht werden. Bei einigen alten Artikel stimmt die mühevoll angepasst Zeilenlänge nicht mehr. Europäischer Fernwanderweg Zwischen E4 und E5.

Gruß, Werner - der sich noch vor der Abstimmung drückt

Nammalakuru
02.04.2006, 15:11
können die Kästen auf der linken Seite weg?
Ohne die Umrandung und die andere Hintergrundfarbe sähe es imho besser aus :roll:

Werner Hohn
02.04.2006, 16:22
Hallo Nam,

meinst du die Views-, Navi-, Suchen-Boxen auf der linken Seite. Wenn ja - NEIN! Die sollten bleiben. Wenn diese Boxen nicht mehr sind, werden die Textzeilen in den Artikeln im länger, damit auch immer schlechter lesbar. Im Wiki ist Spaltensatz ja nicht möglich.

Welche andere Hintergrundfarbe? Bei mir ist alles weiß.

Meinst du die alte Umrandung? Klar ohne sieht's nicht schlecht aus. Wenn du aber bei einem langen Text nach unten scrollen musst, verschwinden die Boxen, und am linken Rand bleibt ein breiter leerer Streifen.

Zum Design: Den alten Header habe ich nur auf der Haupteite. Sobald ich diese verlasse, ist alles neu. Auf Jaspers Testseite ist alles durchgängig neu.

Werner

jasper
02.04.2006, 16:26
Zum Design: Den alten Header habe ich nur auf der Haupteite. Sobald ich diese verlasse, ist alles neu. Auf Jaspers Testseite ist alles durchgängig neu.

Auch hier nochmal! Bitte Cache leeren. Sonst wird das alles gemixt und schaut dementsprechend blöd aus! :bg:

MfG,

Jasper

Nammalakuru
02.04.2006, 16:32
@ Werner:
Nein .. ich meine die boxen des Inhaltsverzeichnisses und des Textes für die Hauptseite. Außerdem hat der gesamte "main-div" (?) bei mir ne graue Hintergrundfarbe. Ich würde nur die Boxen für "wichtige Seiten" und ggf. für "aktuelles" machen.

Nam

Werner Hohn
02.04.2006, 17:02
@Jasper Danke für den Tipp. Ich berufe mich jetzt auf die Gnade der frühen Geburt. :old:

1 - bearbeiten bitte in Bearbeiten ändern
2 - Bei vielen Artikel werden die Bilder nicht angezeigt. Erledigt.
3- Das Inhaltsverzeichnis befindet sich zwischen Bild und Text. Schrott! E4 Erledigt.
4 - Blaue Linie nur noch gestrichelt und in schwarz?
5 - Die Suche ist sehr weit unten.
6 - Der Apostroph vor Persönliche Werkzeuge kann weg
7 - Im Inhaltsverzeichnis werden die Unterkapitel in einer anderen Farbe (blau) dargestellt Via gebennensis Erledigt.
8 - fette und große Schrift der Überschriften ausgefranst Kann an meinem Monitor liegen.
9 - hellgraue Schrift des Inhaltsverzeichnis bei Sonnenlicht nicht lesbar
10 - Die senkrechte Linie am linken Rand der Artikel fehlt. Der Text beginnt irgendwie im leeren Raum.
11 - Die Artikel sollten wieder auf die alte Breite gebracht werden. Bei einigen alten Artikel stimmt die mühevoll angepasst Zeilenlänge nicht mehr. Europäischer Fernwanderweg Zwischen E4 und E5.

@Nam bei mir ist nix grau (bis auf die wenigen Haare).

EDIT:
Halt! Wenn ich den Monitor ganz nach hinten (unten) klappe, sehe ich dass die Box "Wichtige Seiten" gaaanz schwach grau hinterlegt ist.

So jetzt bilden Monitor und Tastatur eine Linie! Nun kommt - für mich beinahe nicht mehr sichtbar - ein ganz schwacher Grauschimmer in die anderen Boxen. Ist das immer schon so gewesen?

Werner, der auf den grauen Star wartet.

Nammalakuru
02.04.2006, 17:08
<table style="background-color:#f8f8ff">
<div style="margin:0; border:2px solid #dfdfdf; padding: 0em 1em 1em 1em; background-color:#F8F8FF;">

Auf der Hauptseite ist es sowas von grau ... vielleicht liegts an deinem TFT, vielleicht mal ein wenig den Blickwinkel ändern.

... aber eigentlich ist es nicht zu übersehen :roll:

Werner Hohn
02.04.2006, 17:19
Ja, wie in der Wikipedia. Nur kommt das da bei mir besser raus. Vielleicht unterdrücken die kräftigen Farben im Outdoorwiki den grauen Hintergrund.

Die grauen Rahmen war auch für mich schon immer sichtbar. :lol:

Vielleicht sollte ich das Geld für den Urlaub in der Bretagne besser in einen guten Monitor inverstieren.

jasper
02.04.2006, 19:00
Nein .. ich meine die boxen des Inhaltsverzeichnisses und des Textes für die Hauptseite. Außerdem hat der gesamte "main-div" (?) bei mir ne graue Hintergrundfarbe. Ich würde nur die Boxen für "wichtige Seiten" und ggf. für "aktuelles" machen.

Soll ich das jetzt also weiß machen? Alle damit Einverstanden? :wink:

Geht aber erst, wenn ich mich anmelden kann. Das ist nämlich die Hauptseite selber, die da so programmiert ist. Da hab ich über das Skin gar keinen Einfluss drauf!

[ ] Englische Wörter/Sätze.

Ich hab zwar Kleinigkeiten wie
'Persönliche Werkzeuge
Views
(opens in new window)
in der Sprachdatei geändert, es will aber irgendwie nicht erscheinen.

Weiß da jemand was?

MfG,

Jasper

Nammalakuru
02.04.2006, 19:05
weiss ist gut ... auch für die Rahmen. :wink:

Werner Hohn
04.04.2006, 22:06
Aha, man kann wieder im Wiki arbeiten.

Kann man das Inhaltsverzeichnis auch noch an die Artikel anpassen? E2

Die Schrift haut mich nicht vom Hocker. Längere Texte sind mit diesem Schrifttyp schlecht lesbar. Nach meiner Meinung ist der Wechsel zu einem Schrifttyp mit Serifen (http://de.wikipedia.org/wiki/Serifen) erforderlich.

Werner - der die nächsten zwei Wochen nicht mehr meckert :old:

Nammalakuru
07.04.2006, 21:17
REMINDER
Denkt noch mal jemand an die Farben? Hintergrund weiss und die Kästen (bis auf "wichtige Seiten") weg.

THX, Nam :roll:

jasper
08.04.2006, 11:58
Da ich anscheinend so ziemlich alleine bin, dauert das eben auch ein bisschen länger. :-?

Außerdem ist das Wetter heute ausnahmsweise schön. Und da werde ich bestimmt nicht vor dem Computer hocken bleiben. Auch wenn alle ohne mich klettern gefahren sind! :grrr:

MfG,

Jasper

Nammalakuru
08.04.2006, 12:10
...wofür haben wir eigentlich so viele wiki Leute wenn Jasper es am Ende doch alles alleine machen muss ? :ignore:

Dann bleibt mir natürlich nix anderes übrig als zu warten :(

jasper
08.04.2006, 12:18
Nun ja, mittlerweile sollte es ja deinen Vorstellungen entsprechen!

MfG,

Jasper

Nammalakuru
08.04.2006, 12:50
Subba Jasper, lass dich drücken http://www.my-smileys.de/smileys2/knuddelz.gif :bg:
... nun isses perfekt. Vielen Dank.


:wohoo:

Werner Hohn
28.04.2006, 17:23
Ja Jasper ich würd' dich ja auch gerne drücken. :bg:

Aber ich kann keine Text erstellen. Jedenfalls nicht auf vernünftige Art und Weise. Steht alles in der Spielwiese. Spielwiese.

Cookies, Dateien, Cache usw alles geleert und gelöscht. Dabei auch keinen bösen Gedanken an Bill gehabt.

Die Breite stimmt nicht mehr mit dem alten Wiki überein.

Gruß, Werner der gerne mal wieder so richtig will und nicht zu Mozilla und Konsorten wechseln will.

jasper
29.04.2006, 11:35
:shock:

Werner Hohn
01.05.2006, 11:27
Bin auf Mozilla umgestiegen. Damit gibt es keine Probleme. Das ist aber kein Dauerzustand. Der große Rest der Welt und vor allen Dingen meine Frau, benutzen nun mal den IE.

Werner

jasper
01.05.2006, 19:26
Ich kümmer mich nächstes WE mal drum. Ist bestimmt ein Problem mit dem Stylesheet! Und das ist echt nervig. :ill:

MfG,

Jasper

Werner Hohn
01.05.2006, 19:31
Hat Zeit. Die Familie wechselt je nach Bedarf den Browser. :bg:

Werner

jasper
09.05.2006, 20:42
Kann mal jemand etwas recherchieren? Bin im Moment ziemlich im Stress.

Mfg,

Jasper

jasper
20.06.2006, 21:25
<?php
/**
* Contain the EditPage class
* @package MediaWiki
*/

/**
* Splitting edit page/HTML interface from Article...
* The actual database and text munging is still in Article,
* but it should get easier to call those from alternate
* interfaces.
*
* @package MediaWiki
*/

class EditPage {
var $mArticle;
var $mTitle;
var $mMetaData = '';

# Form values
var $save = false, $preview = false, $diff = false;
var $minoredit = false, $watchthis = false;
var $textbox1 = '', $textbox2 = '', $summary = '';
var $edittime = '', $section = '';
var $oldid = 0;

/**
* @todo document
* @param $article
*/
function EditPage( $article ) {
$this->mArticle =& $article;
global $wgTitle;
$this->mTitle =& $wgTitle;
}

/**
* This is the function that extracts metadata from the article body on the first view.
* To turn the feature on, set $wgUseMetadataEdit = true ; in LocalSettings
* and set $wgMetadataWhitelist to the *full* title of the template whitelist
*/
function extractMetaDataFromArticle () {
global $wgUseMetadataEdit , $wgMetadataWhitelist , $wgLang ;
$this->mMetaData = '' ;
if ( !$wgUseMetadataEdit ) return ;
if ( $wgMetadataWhitelist == '' ) return ;
$s = '' ;
$t = $this->mArticle->getContent ( true ) ;

# MISSING : <nowiki> filtering

# Categories and language links
$t = explode ( "\n" , $t ) ;
$catlow = strtolower ( $wgLang->getNsText ( NS_CATEGORY ) ) ;
$cat = $ll = array() ;
foreach ( $t AS $key => $x )
{
$y = trim ( strtolower ( $x ) ) ;
while ( substr ( $y , 0 , 2 ) == '[[' )
{
$y = explode ( ']]' , trim ( $x ) ) ;
$first = array_shift ( $y ) ;
$first = explode ( ':' , $first ) ;
$ns = array_shift ( $first ) ;
$ns = trim ( str_replace ( '[' , '' , $ns ) ) ;
if ( strlen ( $ns ) == 2 OR strtolower ( $ns ) == $catlow )
{
$add = '[[' . $ns . ':' . implode ( ':' , $first ) . ']]' ;
if ( strtolower ( $ns ) == $catlow ) $cat[] = $add ;
else $ll[] = $add ;
$x = implode ( ']]' , $y ) ;
$t[$key] = $x ;
$y = trim ( strtolower ( $x ) ) ;
}
}
}
if ( count ( $cat ) ) $s .= implode ( ' ' , $cat ) . "\n" ;
if ( count ( $ll ) ) $s .= implode ( ' ' , $ll ) . "\n" ;
$t = implode ( "\n" , $t ) ;

# Load whitelist
$sat = array () ; # stand-alone-templates; must be lowercase
$wl_title = Title::newFromText ( $wgMetadataWhitelist ) ;
$wl_article = new Article ( $wl_title ) ;
$wl = explode ( "\n" , $wl_article->getContent(true) ) ;
foreach ( $wl AS $x )
{
$isentry = false ;
$x = trim ( $x ) ;
while ( substr ( $x , 0 , 1 ) == '*' )
{
$isentry = true ;
$x = trim ( substr ( $x , 1 ) ) ;
}
if ( $isentry )
{
$sat[] = strtolower ( $x ) ;
}

}

# Templates, but only some
$t = explode ( '{{' , $t ) ;
$tl = array () ;
foreach ( $t AS $key => $x )
{
$y = explode ( '}}' , $x , 2 ) ;
if ( count ( $y ) == 2 )
{
$z = $y[0] ;
$z = explode ( '|' , $z ) ;
$tn = array_shift ( $z ) ;
if ( in_array ( strtolower ( $tn ) , $sat ) )
{
$tl[] = '{{' . $y[0] . '}}' ;
$t[$key] = $y[1] ;
$y = explode ( '}}' , $y[1] , 2 ) ;
}
else $t[$key] = '{{' . $x ;
}
else if ( $key != 0 ) $t[$key] = '{{' . $x ;
else $t[$key] = $x ;
}
if ( count ( $tl ) ) $s .= implode ( ' ' , $tl ) ;
$t = implode ( '' , $t ) ;

$t = str_replace ( "\n\n\n" , "\n" , $t ) ;
$this->mArticle->mContent = $t ;
$this->mMetaData = $s ;
}

/**
* This is the function that gets called for "action=edit".
*/
function edit() {
global $wgOut, $wgUser, $wgRequest;
// this is not an article
$wgOut->setArticleFlag(false);

$this->importFormData( $wgRequest );

if( $this->live ) {
$this->livePreview();
return;
}

if ( ! $this->mTitle->userCanEdit() ) {
$wgOut->readOnlyPage( $this->mArticle->getContent( true ), true );
return;
}
if ( !$this->preview && !$this->diff && $wgUser->isBlockedFrom( $this->mTitle, !$this->save ) ) {
# When previewing, don't check blocked state - will get caught at save time.
# Also, check when starting edition is done against slave to improve performance.
$this->blockedIPpage();
return;
}
if ( !$wgUser->isAllowed('edit') ) {
if ( $wgUser->isAnon() ) {
$this->userNotLoggedInPage();
return;
} else {
$wgOut->readOnlyPage( $this->mArticle->getContent( true ), true );
return;
}
}
if ( wfReadOnly() ) {
if( $this->save || $this->preview ) {
$this->editForm( 'preview' );
} else if ( $this->diff ) {
$this->editForm( 'diff' );
} else {
$wgOut->readOnlyPage( $this->mArticle->getContent( true ) );
}
return;
}
if ( $this->save ) {
$this->editForm( 'save' );
} else if ( $this->preview ) {
$this->editForm( 'preview' );
} else if ( $this->diff ) {
$this->editForm( 'diff' );
} else { # First time through
if( $this->previewOnOpen() ) {
$this->editForm( 'preview', true );
} else {
$this->extractMetaDataFromArticle () ;
$this->editForm( 'initial', true );
}
}
}

/**
* Return true if this page should be previewed when the edit form
* is initially opened.
* @return bool
* @access private
*/
function previewOnOpen() {
global $wgUser;
return $wgUser->getOption( 'previewonfirst' ) ||
( $this->mTitle->getNamespace() == NS_CATEGORY &&
!$this->mTitle->exists() );
}

/**
* @todo document
*/
function importFormData( &$request ) {
if( $request->wasPosted() ) {
# These fields need to be checked for encoding.
# Also remove trailing whitespace, but don't remove _initial_
# whitespace from the text boxes. This may be significant formatting.
$this->textbox1 = $this->safeUnicodeInput( $request, 'wpTextbox1' );
$this->textbox2 = $this->safeUnicodeInput( $request, 'wpTextbox2' );
$this->mMetaData = rtrim( $request->getText( 'metadata' ) );
$this->summary = $request->getText( 'wpSummary' );

$this->edittime = $request->getVal( 'wpEdittime' );
if( is_null( $this->edittime ) ) {
# If the form is incomplete, force to preview.
$this->preview = true;
} else {
if( $this->tokenOk( $request ) ) {
# Some browsers will not report any submit button
# if the user hits enter in the comment box.
# The unmarked state will be assumed to be a save,
# if the form seems otherwise complete.
$this->preview = $request->getCheck( 'wpPreview' );
$this->diff = $request->getCheck( 'wpDiff' );
} else {
# Page might be a hack attempt posted from
# an external site. Preview instead of saving.
$this->preview = true;
}
}
$this->save = ! ( $this->preview OR $this->diff );
if( !preg_match( '/^\d{14}$/', $this->edittime )) {
$this->edittime = null;
}

$this->minoredit = $request->getCheck( 'wpMinoredit' );
$this->watchthis = $request->getCheck( 'wpWatchthis' );
} else {
# Not a posted form? Start with nothing.
$this->textbox1 = '';
$this->textbox2 = '';
$this->mMetaData = '';
$this->summary = '';
$this->edittime = '';
$this->preview = false;
$this->save = false;
$this->diff = false;
$this->minoredit = false;
$this->watchthis = false;
}

$this->oldid = $request->getInt( 'oldid' );

# Section edit can come from either the form or a link
$this->section = $request->getVal( 'wpSection', $request->getVal( 'section' ) );

$this->live = $request->getCheck( 'live' );
}

/**
* Make sure the form isn't faking a user's credentials.
*
* @param WebRequest $request
* @return bool
* @access private
*/
function tokenOk( &$request ) {
global $wgUser;
if( $wgUser->isAnon() ) {
# Anonymous users may not have a session
# open. Don't tokenize.
return true;
} else {
return $wgUser->matchEditToken( $request->getVal( 'wpEditToken' ) );
}
}

function submit() {
$this->edit();
}

/**
* The edit form is self-submitting, so that when things like
* preview and edit conflicts occur, we get the same form back
* with the extra stuff added. Only when the final submission
* is made and all is well do we actually save and redirect to
* the newly-edited page.
*
* @param string $formtype Type of form either : save, initial, diff or preview
* @param bool $firsttime True to load form data from db
*/
function editForm( $formtype, $firsttime = false ) {
global $wgOut, $wgUser;
global $wgLang, $wgContLang, $wgParser, $wgTitle;
global $wgAllowAnonymousMinor, $wgRequest;
global $wgSpamRegex, $wgFilterCallback;

$sk = $wgUser->getSkin();
$isConflict = false;
// css / js subpages of user pages get a special treatment
$isCssJsSubpage = $wgTitle->isCssJsSubpage();

if(!$this->mTitle->getArticleID()) { # new article
$editintro = $wgRequest->getText( 'editintro' );
$addstandardintro=true;
if($editintro) {
$introtitle=Title::newFromText($editintro);
if(isset($introtitle) && $introtitle->userCanRead()) {
$rev=Revision::newFromTitle($introtitle);
if($rev) {
$wgOut->addWikiText($rev->getText());
$addstandardintro=false;
}
}
}
if($addstandardintro) {
$wgOut->addWikiText(wfmsg('newarticletext'));
}
}

if( $this->mTitle->isTalkPage() ) {
$wgOut->addWikiText(wfmsg('talkpagetext'));
}

# Attempt submission here. This will check for edit conflicts,
# and redundantly check for locked database, blocked IPs, etc.
# that edit() already checked just in case someone tries to sneak
# in the back door with a hand-edited submission URL.

if ( 'save' == $formtype ) {
# Reintegrate metadata
if ( $this->mMetaData != '' ) $this->textbox1 .= "\n" . $this->mMetaData ;
$this->mMetaData = '' ;

# Check for spam
if ( $wgSpamRegex && preg_match( $wgSpamRegex, $this->textbox1, $matches ) ) {
$this->spamPage ( $matches[0] );
return;
}
if ( $wgFilterCallback && $wgFilterCallback( $this->mTitle, $this->textbox1, $this->section ) ) {
# Error messages or other handling should be performed by the filter function
return;
}
if ( $wgUser->isBlockedFrom( $this->mTitle, false ) ) {
# Check block state against master, thus 'false'.
$this->blockedIPpage();
return;
}

if ( !$wgUser->isAllowed('edit') ) {
if ( $wgUser->isAnon() ) {
$this->userNotLoggedInPage();
return;
}
else {
$wgOut->readOnlyPage();
return;
}
}

if ( wfReadOnly() ) {
$wgOut->readOnlyPage();
return;
}
if ( $wgUser->pingLimiter() ) {
$wgOut->rateLimited();
return;
}

# If article is new, insert it.
$aid = $this->mTitle->getArticleID( GAID_FOR_UPDATE );
if ( 0 == $aid ) {
# Don't save a new article if it's blank.
if ( ( '' == $this->textbox1 ) ||
( wfMsg( 'newarticletext' ) == $this->textbox1 ) ) {
$wgOut->redirect( $this->mTitle->getFullURL() );
return;
}
if (wfRunHooks('ArticleSave', array(&$this->mArticle, &$wgUser, &$this->textbox1,
&$this->summary, &$this->minoredit, &$this->watchthis, NULL)))
{

$isComment=($this->section=='new');
$this->mArticle->insertNewArticle( $this->textbox1, $this->summary,
$this->minoredit, $this->watchthis, false, $isComment);
wfRunHooks('ArticleSaveComplete', array(&$this->mArticle, &$wgUser, $this->textbox1,
$this->summary, $this->minoredit,
$this->watchthis, NULL));
}
return;
}

# Article exists. Check for edit conflict.

$this->mArticle->clear(); # Force reload of dates, etc.
$this->mArticle->forUpdate( true ); # Lock the article

if( ( $this->section != 'new' ) &&
($this->mArticle->getTimestamp() != $this->edittime ) ) {
$isConflict = true;
}
$userid = $wgUser->getID();

if ( $isConflict) {
wfDebug( "EditPage::editForm conflict! getting section '$this->section' for time '$this->edittime' (article time '" .
$this->mArticle->getTimestamp() . "'\n" );
$text = $this->mArticle->getTextOfLastEditWithSectionReplacedOrAdded(
$this->section, $this->textbox1, $this->summary, $this->edittime);
}
else {
wfDebug( "EditPage::editForm getting section '$this->section'\n" );
$text = $this->mArticle->getTextOfLastEditWithSectionReplacedOrAdded(
$this->section, $this->textbox1, $this->summary);
}
# Suppress edit conflict with self

if ( ( 0 != $userid ) && ( $this->mArticle->getUser() == $userid ) ) {
wfDebug( "Suppressing edit conflict, same user.\n" );
$isConflict = false;
} else {
# switch from section editing to normal editing in edit conflict
if($isConflict) {
# Attempt merge
if( $this->mergeChangesInto( $text ) ){
// Successful merge! Maybe we should tell the user the good news?
$isConflict = false;
wfDebug( "Suppressing edit conflict, successful merge.\n" );
} else {
$this->section = '';
$this->textbox1 = $text;
wfDebug( "Keeping edit conflict, failed merge.\n" );
}
}
}
if ( ! $isConflict ) {
# All's well
$sectionanchor = '';
if( $this->section == 'new' ) {
if( $this->summary != '' ) {
$sectionanchor = $this->sectionAnchor( $this->summary );
}
} elseif( $this->section != '' ) {
# Try to get a section anchor from the section source, redirect to edited section if header found
# XXX: might be better to integrate this into Article::getTextOfLastEditWithSectionReplacedOrAdded
# for duplicate heading checking and maybe parsing
$hasmatch = preg_match( "/^ *([=]{1,6})(.*?)(\\1) *\\n/i", $this->textbox1, $matches );
# we can't deal with anchors, includes, html etc in the header for now,
# headline would need to be parsed to improve this
#if($hasmatch and strlen($matches[2]) > 0 and !preg_match( "/[\\['{<>]/", $matches[2])) {
if($hasmatch and strlen($matches[2]) > 0) {
$sectionanchor = $this->sectionAnchor( $matches[2] );
}
}

// Save errors may fall down to the edit form, but we've now
// merged the section into full text. Clear the section field
// so that later submission of conflict forms won't try to
// replace that into a duplicated mess.
$this->textbox1 = $text;
$this->section = '';

if (wfRunHooks('ArticleSave', array(&$this->mArticle, &$wgUser, &$text,
&$this->summary, &$this->minoredit,
&$this->watchthis, &$sectionanchor)))
{
# update the article here
if($this->mArticle->updateArticle( $text, $this->summary, $this->minoredit,
$this->watchthis, '', $sectionanchor ))
{
wfRunHooks('ArticleSaveComplete', array(&$this->mArticle, &$wgUser, $text,
$this->summary, $this->minoredit,
$this->watchthis, $sectionanchor));
return;
} else {
$isConflict = true;
}
}
}
}
# First time through: get contents, set time for conflict
# checking, etc.

if ( 'initial' == $formtype || $firsttime ) {
$this->edittime = $this->mArticle->getTimestamp();
$this->textbox1 = $this->mArticle->getContent( true );
$this->summary = '';
$this->proxyCheck();
}
$wgOut->setRobotpolicy( 'noindex,nofollow' );

# Enabled article-related sidebar, toplinks, etc.
$wgOut->setArticleRelated( true );

if ( $isConflict ) {
$s = wfMsg( 'editconflict', $this->mTitle->getPrefixedText() );
$wgOut->setPageTitle( $s );
$wgOut->addWikiText( wfMsg( 'explainconflict' ) );

$this->textbox2 = $this->textbox1;
$this->textbox1 = $this->mArticle->getContent( true );
$this->edittime = $this->mArticle->getTimestamp();
} else {

if( $this->section != '' ) {
if( $this->section == 'new' ) {
$s = wfMsg('editingcomment', $this->mTitle->getPrefixedText() );
} else {
$s = wfMsg('editingsection', $this->mTitle->getPrefixedText() );
if( !$this->preview && !$this->diff ) {
preg_match( "/^(=+)(.+)\\1/mi",
$this->textbox1,
$matches );
if( !empty( $matches[2] ) ) {
$this->summary = "/* ". trim($matches[2])." */ ";
}
}
}
} else {
$s = wfMsg( 'editing', $this->mTitle->getPrefixedText() );
}
$wgOut->setPageTitle( $s );
if ( !$this->checkUnicodeCompliantBrowser() ) {
$wgOut->addWikiText( wfMsg( 'nonunicodebrowser') );
}
if ( isset( $this->mArticle )
&& isset( $this->mArticle->mRevision )
&& !$this->mArticle->mRevision->isCurrent() ) {
$this->mArticle->setOldSubtitle( $this->mArticle->mRevision->getId() );
$wgOut->addWikiText( wfMsg( 'editingold' ) );
}
}

if( wfReadOnly() ) {
$wgOut->addWikiText( wfMsg( 'readonlywarning' ) );
} else if ( $isCssJsSubpage and 'preview' != $formtype) {
$wgOut->addWikiText( wfMsg( 'usercssjsyoucanpreview' ));
}
if( $this->mTitle->isProtected('edit') ) {
$wgOut->addWikiText( wfMsg( 'protectedpagewarning' ) );
}

$kblength = (int)(strlen( $this->textbox1 ) / 1024);
if( $kblength > 29 ) {
$wgOut->addWikiText( wfMsg( 'longpagewarning', $wgLang->formatNum( $kblength ) ) );
}

$rows = $wgUser->getOption( 'rows' );
$cols = $wgUser->getOption( 'cols' );

$ew = $wgUser->getOption( 'editwidth' );
if ( $ew ) $ew = " style=\"width:100%\"";
else $ew = '';

$q = 'action=submit';
#if ( "no" == $redirect ) { $q .= "&redirect=no"; }
$action = $this->mTitle->escapeLocalURL( $q );

$summary = wfMsg('summary');
$subject = wfMsg('subject');
$minor = wfMsg('minoredit');
$watchthis = wfMsg ('watchthis');
$save = wfMsg('savearticle');
$prev = wfMsg('showpreview');
$diff = wfMsg('showdiff');

$cancel = $sk->makeKnownLink( $this->mTitle->getPrefixedText(),
wfMsg('cancel') );
$edithelpurl = $sk->makeInternalOrExternalUrl( wfMsg( 'edithelppage' ));
$edithelp = '<a target="helpwindow" href="'.$edithelpurl.'">'.
htmlspecialchars( wfMsg( 'edithelp' ) ).'</a> '.
htmlspecialchars( wfMsg( 'newwindow' ) );

global $wgRightsText;
$copywarn = "<div id=\"editpage-copywarn\">\n" .
wfMsg( $wgRightsText ? 'copyrightwarning' : 'copyrightwarning2',
'[[' . wfMsgForContent( 'copyrightpage' ) . ']]',
$wgRightsText ) . "\n</div>";

if( $wgUser->getOption('showtoolbar') and !$isCssJsSubpage ) {
# prepare toolbar for edit buttons
$toolbar = $this->getEditToolbar();
} else {
$toolbar = '';
}

// activate checkboxes if user wants them to be always active
if( !$this->preview && !$this->diff ) {
if( $wgUser->getOption( 'watchdefault' ) ) $this->watchthis = true;
if( $wgUser->getOption( 'minordefault' ) ) $this->minoredit = true;

// activate checkbox also if user is already watching the page,
// require wpWatchthis to be unset so that second condition is not
// checked unnecessarily
if( !$this->watchthis && $this->mTitle->userIsWatching() ) $this->watchthis = true;
}

$minoredithtml = '';

if ( $wgUser->isLoggedIn() || $wgAllowAnonymousMinor ) {
$minoredithtml =
"<input tabindex='3' type='checkbox' value='1' name='wpMinoredit'".($this->minoredit?" checked='checked'":"").
" accesskey='".wfMsg('accesskey-minoredit')."' id='wpMinoredit' />".
"<label for='wpMinoredit' title='".wfMsg('tooltip-minoredit')."'>{$minor}</label>";
}

$watchhtml = '';

if ( $wgUser->isLoggedIn() ) {
$watchhtml = "<input tabindex='4' type='checkbox' name='wpWatchthis'".($this->watchthis?" checked='checked'":"").
" accesskey='".wfMsg('accesskey-watch')."' id='wpWatchthis' />".
"<label for='wpWatchthis' title='".wfMsg('tooltip-watch')."'>{$watchthis}</label>";
}

$checkboxhtml = $minoredithtml . $watchhtml . '
';

$wgOut->addHTML( '<div id="wikiPreview">' );
if ( 'preview' == $formtype) {
$previewOutput = $this->getPreviewText( $isConflict, $isCssJsSubpage );
if ( $wgUser->getOption('previewontop' ) ) {
$wgOut->addHTML( $previewOutput );
if($this->mTitle->getNamespace() == NS_CATEGORY) {
$this->mArticle->closeShowCategory();
}
$wgOut->addHTML( "<br style=\"clear:both;\" />\n" );
}
}
$wgOut->addHTML( '</div>' );
if ( 'diff' == $formtype ) {
if ( $wgUser->getOption('previewontop' ) ) {
$wgOut->addHTML( $this->getDiff() );
}
}


# if this is a comment, show a subject line at the top, which is also the edit summary.
# Otherwise, show a summary field at the bottom
$summarytext = htmlspecialchars( $wgContLang->recodeForEdit( $this->summary ) ); # FIXME
if( $this->section == 'new' ) {
$commentsubject="{$subject}: <input tabindex='1' type='text' value=\"$summarytext\" name=\"wpSummary\" maxlength='200' size='60' />
";
$editsummary = '';
} else {
$commentsubject = '';
$editsummary="{$summary}: <input tabindex='2' type='text' value=\"$summarytext\" name=\"wpSummary\" maxlength='200' size='60' />
";
}

if( !$this->preview && !$this->diff ) {
# Don't select the edit box on preview; this interferes with seeing what's going on.
$wgOut->setOnloadHandler( 'document.editform.wpTextbox1.focus()' );
}
# Prepare a list of templates used by this page
$templates = '';
$articleTemplates = $this->mArticle->getUsedTemplates();
if ( count( $articleTemplates ) > 0 ) {
$templates = '
'. wfMsg( 'templatesused' ) . '<ul>';
foreach ( $articleTemplates as $tpl ) {
if ( $titleObj = Title::makeTitle( NS_TEMPLATE, $tpl ) ) {
$templates .= ' ' . $sk->makeLinkObj( $titleObj ) . '';
}
}
$templates .= '[/list]';
}

global $wgLivePreview, $wgStylePath;
/**
* Live Preview lets us fetch rendered preview page content and
* add it to the page without refreshing the whole page.
* Set up the button for it; if not supported by the browser
* it will fall through to the normal form submission method.
*/
if( $wgLivePreview ) {
global $wgJsMimeType;
$wgOut->addHTML( '<script type="'.$wgJsMimeType.'" src="' .
htmlspecialchars( $wgStylePath . '/common/preview.js' ) .
'"></script>' . "\n" );
$liveAction = $wgTitle->getLocalUrl( 'action=submit&wpPreview=true&live=true' );
$liveOnclick = 'onclick="return !livePreview('.
'getElementById(\'wikiPreview\'),' .
'editform.wpTextbox1.value,' .
htmlspecialchars( '"' . $liveAction . '"' ) . ')"';
} else {
$liveOnclick = '';
}

global $wgUseMetadataEdit ;
if ( $wgUseMetadataEdit )
{
$metadata = $this->mMetaData ;
$metadata = htmlspecialchars( $wgContLang->recodeForEdit( $metadata ) ) ;
$helppage = Title::newFromText ( wfmsg("metadata_page") ) ;
$top = str_replace ( "$1" , $helppage->getInternalURL() , wfmsg("metadata") ) ;
$metadata = $top . "<textarea name='metadata' rows='3' cols='{$cols}'{$ew}>{$metadata}</textarea>" ;
}
else $metadata = "" ;

$safemodehtml = $this->checkUnicodeCompliantBrowser()
? ""
: "<input type='hidden' name=\"safemode\" value='1' />\n";

$wgOut->addHTML( <<<END
{$toolbar}
<form id="editform" name="editform" method="post" action="$action"
enctype="multipart/form-data">
{$commentsubject}
<textarea tabindex='1' accesskey="," name="wpTextbox1" rows='{$rows}'
cols='{$cols}'{$ew}>
END
. htmlspecialchars( $this->safeUnicodeOutput( $this->textbox1 ) ) .
"
</textarea>
{$metadata}

{$editsummary}
{$checkboxhtml}
{$safemodehtml}
<input tabindex='5' id='wpSave' type='submit' value=\"{$save}\" name=\"wpSave\" accesskey=\"".wfMsg('accesskey-save')."\"".
" title=\"".wfMsg('tooltip-save')."\"/>
<input tabindex='6' id='wpPreview' type='submit' $liveOnclick value=\"{$prev}\" name=\"wpPreview\" accesskey=\"".wfMsg('accesskey-preview')."\"".
" title=\"".wfMsg('tooltip-preview')."\"/>
<input tabindex='7' id='wpDiff' type='submit' value=\"{$diff}\" name=\"wpDiff\" accesskey=\"".wfMsg('accesskey-diff')."\"".
" title=\"".wfMsg('tooltip-diff')."\"/>
{$cancel} | {$edithelp}{$templates}" );
$wgOut->addWikiText( $copywarn );
$wgOut->addHTML( "
<input type='hidden' value=\"" . htmlspecialchars( $this->section ) . "\" name=\"wpSection\" />
<input type='hidden' value=\"{$this->edittime}\" name=\"wpEdittime\" />\n" );

if ( $wgUser->isLoggedIn() ) {
/**
* To make it harder for someone to slip a user a page
* which submits an edit form to the wiki without their
* knowledge, a random token is associated with the login
* session. If it's not passed back with the submission,
* we won't save the page, or render user JavaScript and
* CSS previews.
*/
$token = htmlspecialchars( $wgUser->editToken() );
$wgOut->addHTML( "
<input type='hidden' value=\"$token\" name=\"wpEditToken\" />\n" );
}


if ( $isConflict ) {
require_once( "DifferenceEngine.php" );
$wgOut->addWikiText( '==' . wfMsg( "yourdiff" ) . '==' );
DifferenceEngine::showDiff( $this->textbox2, $this->textbox1,
wfMsg( "yourtext" ), wfMsg( "storedversion" ) );

$wgOut->addWikiText( '==' . wfMsg( "yourtext" ) . '==' );
$wgOut->addHTML( "<textarea tabindex=6 id='wpTextbox2' name=\"wpTextbox2\" rows='{$rows}' cols='{$cols}' wrap='virtual'>"
. htmlspecialchars( $this->safeUnicodeOutput( $this->textbox2 ) ) .
"
</textarea>" );
}
$wgOut->addHTML( "</form>\n" );
if ( $formtype == 'preview' && !$wgUser->getOption( 'previewontop' ) ) {
$wgOut->addHTML( '<div id="wikiPreview">' . $previewOutput . '</div>' );
}
if ( $formtype == 'diff' && !$wgUser->getOption( 'previewontop' ) ) {
#$wgOut->addHTML( '<div id="wikiPreview">' . $difftext . '</div>' );
$wgOut->addHTML( $this->getDiff() );
}
}

/**
* @todo document
*/
function getPreviewText( $isConflict, $isCssJsSubpage ) {
global $wgOut, $wgUser, $wgTitle, $wgParser, $wgAllowDiffPreview, $wgEnableDiffPreviewPreference;
$previewhead = '<h2>' . htmlspecialchars( wfMsg( 'preview' ) ) . "</h2>\n" .
"<p class='previewnote'>" . htmlspecialchars( wfMsg( 'previewnote' ) ) . "</p>\n";
if ( $isConflict ) {
$previewhead.='<h2>' . htmlspecialchars( wfMsg( 'previewconflict' ) ) .
"</h2>\n";
}

$parserOptions = ParserOptions::newFromUser( $wgUser );
$parserOptions->setEditSection( false );

# don't parse user css/js, show message about preview
# XXX: stupid php bug won't let us use $wgTitle->isCssJsSubpage() here

if ( $isCssJsSubpage ) {
if(preg_match("/\\.css$/", $wgTitle->getText() ) ) {
$previewtext = wfMsg('usercsspreview');
} else if(preg_match("/\\.js$/", $wgTitle->getText() ) ) {
$previewtext = wfMsg('userjspreview');
}
$parserOutput = $wgParser->parse( $previewtext , $wgTitle, $parserOptions );
$wgOut->addHTML( $parserOutput->mText );
return $previewhead;
} else {
# if user want to see preview when he edit an article
if( $wgUser->getOption('previewonfirst') and ($this->textbox1 == '')) {
$this->textbox1 = $this->mArticle->getContent(true);
}

$toparse = $this->textbox1;

# If we're adding a comment, we need to show the
# summary as the headline
if($this->section=="new" && $this->summary!="") {
$toparse="== {$this->summary} ==\n\n".$toparse;
}

if ( $this->mMetaData != "" ) $toparse .= "\n" . $this->mMetaData ;

$parserOutput = $wgParser->parse( $this->mArticle->preSaveTransform( $toparse ) ."\n\n",
$wgTitle, $parserOptions );

$previewHTML = $parserOutput->mText;

$wgOut->addCategoryLinks($parserOutput->getCategoryLinks());
$wgOut->addLanguageLinks($parserOutput->getLanguageLinks());
return $previewhead . $previewHTML;
}
}

/**
* @todo document
*/
function blockedIPpage() {
global $wgOut, $wgUser, $wgContLang, $wgIP;

$wgOut->setPageTitle( wfMsg( 'blockedtitle' ) );
$wgOut->setRobotpolicy( 'noindex,nofollow' );
$wgOut->setArticleRelated( false );

$id = $wgUser->blockedBy();
$reason = $wgUser->blockedFor();
$ip = $wgIP;

if ( is_numeric( $id ) ) {
$name = User::whoIs( $id );
} else {
$name = $id;
}
$link = '[[' . $wgContLang->getNsText( NS_USER ) .
":{$name}|{$name}]]";

$wgOut->addWikiText( wfMsg( 'blockedtext', $link, $reason, $ip, $name ) );
$wgOut->returnToMain( false );
}

/**
* @todo document
*/
function userNotLoggedInPage() {
global $wgOut;

$wgOut->setPageTitle( wfMsg( 'whitelistedittitle' ) );
$wgOut->setRobotpolicy( 'noindex,nofollow' );
$wgOut->setArticleRelated( false );

$wgOut->addWikiText( wfMsg( 'whitelistedittext' ) );
$wgOut->returnToMain( false );
}

/**
* @todo document
*/
function spamPage ( $match = false )
{
global $wgOut;
$wgOut->setPageTitle( wfMsg( 'spamprotectiontitle' ) );
$wgOut->setRobotpolicy( 'noindex,nofollow' );
$wgOut->setArticleRelated( false );

$wgOut->addWikiText( wfMsg( 'spamprotectiontext' ) );
if ( $match ) {
$wgOut->addWikiText( wfMsg( 'spamprotectionmatch', "<nowiki>{$match}</nowiki>" ) );
}
$wgOut->returnToMain( false );
}

/**
* Forks processes to scan the originating IP for an open proxy server
* MemCached can be used to skip IPs that have already been scanned
*/
function proxyCheck() {
global $wgBlockOpenProxies, $wgProxyPorts, $wgProxyScriptPath;
global $wgIP, $wgUseMemCached, $wgMemc, $wgDBname, $wgProxyMemcExpiry;

if ( !$wgBlockOpenProxies ) {
return;
}

# Get MemCached key
$skip = false;
if ( $wgUseMemCached ) {
$mcKey = $wgDBname.':proxy:ip:'.$wgIP;
$mcValue = $wgMemc->get( $mcKey );
if ( $mcValue ) {
$skip = true;
}
}

# Fork the processes
if ( !$skip ) {
$title = Title::makeTitle( NS_SPECIAL, 'Blockme' );
$iphash = md5( $wgIP . $wgProxyKey );
$url = $title->getFullURL( 'ip='.$iphash );

foreach ( $wgProxyPorts as $port ) {
$params = implode( ' ', array(
escapeshellarg( $wgProxyScriptPath ),
escapeshellarg( $wgIP ),
escapeshellarg( $port ),
escapeshellarg( $url )
));
exec( "php $params &>/dev/null &" );
}
# Set MemCached key
if ( $wgUseMemCached ) {
$wgMemc->set( $mcKey, 1, $wgProxyMemcExpiry );
}
}
}

/**
* @access private
* @todo document
*/
function mergeChangesInto( &$editText ){
$fname = 'EditPage::mergeChangesInto';
wfProfileIn( $fname );

$db =& wfGetDB( DB_MASTER );

// This is the revision the editor started from
$baseRevision = Revision::loadFromTimestamp(
$db, $this->mArticle->mTitle, $this->edittime );
if( is_null( $baseRevision ) ) {
wfProfileOut( $fname );
return false;
}
$baseText = $baseRevision->getText();

// The current state, we want to merge updates into it
$currentRevision = Revision::loadFromTitle(
$db, $this->mArticle->mTitle );
if( is_null( $currentRevision ) ) {
wfProfileOut( $fname );
return false;
}
$currentText = $currentRevision->getText();

if( wfMerge( $baseText, $editText, $currentText, $result ) ){
$editText = $result;
wfProfileOut( $fname );
return true;
} else {
wfProfileOut( $fname );
return false;
}
}

/**
* Check if the browser is on a blacklist of user-agents known to
* mangle UTF-8 data on form submission. Returns true if Unicode
* should make it through, false if it's known to be a problem.
* @return bool
* @access private
*/
function checkUnicodeCompliantBrowser() {
global $wgBrowserBlackList;
if( empty( $_SERVER["HTTP_USER_AGENT"] ) ) {
// No User-Agent header sent? Trust it by default...
return true;
}
$currentbrowser = $_SERVER["HTTP_USER_AGENT"];
foreach ( $wgBrowserBlackList as $browser ) {
if ( preg_match($browser, $currentbrowser) ) {
return false;
}
}
return true;
}

/**
* Format an anchor fragment as it would appear for a given section name
* @param string $text
* @return string
* @access private
*/
function sectionAnchor( $text ) {
$headline = Sanitizer::decodeCharReferences( $text );
# strip out HTML
$headline = preg_replace( '/<.*?' . '>/', '', $headline );
$headline = trim( $headline );
$sectionanchor = '#' . urlencode( str_replace( ' ', '_', $headline ) );
$replacearray = array(
'%3A' => ':',
'%' => '.'
);
return str_replace(
array_keys( $replacearray ),
array_values( $replacearray ),
$sectionanchor );
}

/**
* Shows a bulletin board style toolbar for common editing functions.
* It can be disabled in the user preferences.
* The necessary JavaScript code can be found in style/wikibits.js.
*/
function getEditToolbar() {
global $wgStylePath, $wgContLang, $wgMimeType, $wgJsMimeType;

/**
* toolarray an array of arrays which each include the filename of
* the button image (without path), the opening tag, the closing tag,
* and optionally a sample text that is inserted between the two when no
* selection is highlighted.
* The tip text is shown when the user moves the mouse over the button.
*
* Already here are accesskeys (key), which are not used yet until someone
* can figure out a way to make them work in IE. However, we should make
* sure these keys are not defined on the edit page.
*/
$toolarray=array(
array( 'image'=>'button_bold.png',
'open' => "\'\'\'",
'close' => "\'\'\'",
'sample'=> wfMsg('bold_sample'),
'tip' => wfMsg('bold_tip'),
'key' => 'B'
),
array( 'image'=>'button_italic.png',
'open' => "\'\'",
'close' => "\'\'",
'sample'=> wfMsg('italic_sample'),
'tip' => wfMsg('italic_tip'),
'key' => 'I'
),
array( 'image'=>'button_link.png',
'open' => '[[',
'close' => ']]',
'sample'=> wfMsg('link_sample'),
'tip' => wfMsg('link_tip'),
'key' => 'L'
),
array( 'image'=>'button_extlink.png',
'open' => '[',
'close' => ']',
'sample'=> wfMsg('extlink_sample'),
'tip' => wfMsg('extlink_tip'),
'key' => 'X'
),
array( 'image'=>'button_headline.png',
'open' => "\\n== ",
'close' => " ==\\n",
'sample'=> wfMsg('headline_sample'),
'tip' => wfMsg('headline_tip'),
'key' => 'H'
),
array( 'image'=>'button_image.png',
'open' => '[['.$wgContLang->getNsText(NS_IMAGE).":",
'close' => ']]',
'sample'=> wfMsg('image_sample'),
'tip' => wfMsg('image_tip'),
'key' => 'D'
),
array( 'image' =>'button_media.png',
'open' => '[['.$wgContLang->getNsText(NS_MEDIA).':',
'close' => ']]',
'sample'=> wfMsg('media_sample'),
'tip' => wfMsg('media_tip'),
'key' => 'M'
),
array( 'image' =>'button_math.png',
'open' => "\\<math\\>",
'close' => "\\</math\\>",
'sample'=> wfMsg('math_sample'),
'tip' => wfMsg('math_tip'),
'key' => 'C'
),
array( 'image' =>'button_nowiki.png',
'open' => "\\<nowiki\\>",
'close' => "\\</nowiki\\>",
'sample'=> wfMsg('nowiki_sample'),
'tip' => wfMsg('nowiki_tip'),
'key' => 'N'
),
array( 'image' =>'button_sig.png',
'open' => '--~~~~',
'close' => '',
'sample'=> '',
'tip' => wfMsg('sig_tip'),
'key' => 'Y'
),
array( 'image' =>'button_hr.png',
'open' => "\\n----\\n",
'close' => '',
'sample'=> '',
'tip' => wfMsg('hr_tip'),
'key' => 'R'
)
);
$toolbar ="<script type='$wgJsMimeType'>\n/*<![CDATA[*/\n";

$toolbar.="document.writeln(\"<div id='toolbar'>\");\n";
foreach($toolarray as $tool) {

$image=$wgStylePath.'/common/images/'.$tool['image'];
$open=$tool['open'];
$close=$tool['close'];
$sample = wfEscapeJsString( $tool['sample'] );

// Note that we use the tip both for the ALT tag and the TITLE tag of the image.
// Older browsers show a "speedtip" type message only for ALT.
// Ideally these should be different, realistically they
// probably don't need to be.
$tip = wfEscapeJsString( $tool['tip'] );

#$key = $tool["key"];

$toolbar.="addButton('$image','$tip','$open','$close','$sample');\n";
}

$toolbar.="addInfobox('" . wfEscapeJsString( wfMsg( "infobox" ) ) .
"','" . wfEscapeJsString( wfMsg( "infobox_alert" ) ) . "');\n";
$toolbar.="document.writeln(\"</div>\");\n";

$toolbar.="/*]]>*/\n</script>";
return $toolbar;
}

/**
* Output preview text only. This can be sucked into the edit page
* via JavaScript, and saves the server time rendering the skin as
* well as theoretically being more robust on the client (doesn't
* disturb the edit box's undo history, won't eat your text on
* failure, etc).
*
* @todo This doesn't include category or interlanguage links.
* Would need to enhance it a bit, maybe wrap them in XML
* or something... that might also require more skin
* initialization, so check whether that's a problem.
*/
function livePreview() {
global $wgOut;
$wgOut->disable();
header( 'Content-type: text/xml' );
header( 'Cache-control: no-cache' );
# FIXME
echo $this->getPreviewText( false, false );
}


/**
* Get a diff between the current contents of the edit box and the
* version of the page we're editing from.
*
* If this is a section edit, we'll replace the section as for final
* save and then make a comparison.
*
* @return string HTML
*/
function getDiff() {
require_once( 'DifferenceEngine.php' );
$oldtext = $this->mArticle->fetchContent();
$newtext = $this->mArticle->getTextOfLastEditWithSectionReplacedOrAdded(
$this->section, $this->textbox1, $this->summary, $this->edittime );
$oldtitle = wfMsg( 'currentrev' );
$newtitle = wfMsg( 'yourtext' );
if ( $oldtext != wfMsg( 'noarticletext' ) || $newtext != '' ) {
$difftext = DifferenceEngine::getDiff( $oldtext, $newtext, $oldtitle, $newtitle );
}

return '<div id="wikiDiff">' . $difftext . '</div>';
}

/**
* Filter an input field through a Unicode de-armoring process if it
* came from an old browser with known broken Unicode editing issues.
*
* @param WebRequest $request
* @param string $field
* @return string
* @access private
*/
function safeUnicodeInput( $request, $field ) {
$text = rtrim( $request->getText( $field ) );
return $request->getBool( 'safemode' )
? $this->unmakesafe( $text )
: $text;
}

/**
* Filter an output field through a Unicode armoring process if it is
* going to an old browser with known broken Unicode editing issues.
*
* @param string $text
* @return string
* @access private
*/
function safeUnicodeOutput( $text ) {
global $wgContLang;
$codedText = $wgContLang->recodeForEdit( $text );
return $this->checkUnicodeCompliantBrowser()
? $codedText
: $this->makesafe( $codedText );
}

/**
* A number of web browsers are known to corrupt non-ASCII characters
* in a UTF-8 text editing environment. To protect against this,
* detected browsers will be served an armored version of the text,
* with non-ASCII chars converted to numeric HTML character references.
*
* Preexisting such character references will have a 0 added to them
* to ensure that round-trips do not alter the original data.
*
* @param string $invalue
* @return string
* @access private
*/
function makesafe( $invalue ) {
// Armor existing references for reversability.
$invalue = strtr( $invalue, array( "&#x" => "&#x0" ) );

$bytesleft = 0;
$result = "";
$working = 0;
for( $i = 0; $i < strlen( $invalue ); $i++ ) {
$bytevalue = ord( $invalue{$i} );
if( $bytevalue <= 0x7F ) { //0xxx xxxx
$result .= chr( $bytevalue );
$bytesleft = 0;
} elseif( $bytevalue <= 0xBF ) { //10xx xxxx
$working = $working << 6;
$working += ($bytevalue & 0x3F);
$bytesleft--;
if( $bytesleft <= 0 ) {
$result .= "&#x" . strtoupper( dechex( $working ) ) . ";";
}
} elseif( $bytevalue <= 0xDF ) { //110x xxxx
$working = $bytevalue & 0x1F;
$bytesleft = 1;
} elseif( $bytevalue <= 0xEF ) { //1110 xxxx
$working = $bytevalue & 0x0F;
$bytesleft = 2;
} else { //1111 0xxx
$working = $bytevalue & 0x07;
$bytesleft = 3;
}
}
return $result;
}

/**
* Reverse the previously applied transliteration of non-ASCII characters
* back to UTF-8. Used to protect data from corruption by broken web browsers
* as listed in $wgBrowserBlackList.
*
* @param string $invalue
* @return string
* @access private
*/
function unmakesafe( $invalue ) {
$result = "";
for( $i = 0; $i < strlen( $invalue ); $i++ ) {
if( ( substr( $invalue, $i, 3 ) == "&#x" ) && ( $invalue{$i+3} != '0' ) ) {
$i += 3;
$hexstring = "";
do {
$hexstring .= $invalue{$i};
$i++;
} while( ctype_xdigit( $invalue{$i} ) && ( $i < strlen( $invalue ) ) );

// Do some sanity checks. These aren't needed for reversability,
// but should help keep the breakage down if the editor
// breaks one of the entities whilst editing.
if ((substr($invalue,$i,1)==";") and (strlen($hexstring) <= 6)) {
$codepoint = hexdec($hexstring);
$result .= codepointToUtf8( $codepoint );
} else {
$result .= "&#x" . $hexstring . substr( $invalue, $i, 1 );
}
} else {
$result .= substr( $invalue, $i, 1 );
}
}
// reverse the transform that we made for reversability reasons.
return strtr( $result, array( "&#x0" => "&#x" ) );
}


}

?>

Hier sollte irgendwo der Fehler liegen!

MfG,

Jasper

derMac
20.06.2006, 22:04
Das ist Ressourcenverschwendung. :grrr: :wink:

Ich würde ja mal testweise

<textarea tabindex='1' accesskey="," name="wpTextbox1" rows='{$rows}'
cols='{$cols}'{$ew}>

durch

<textarea tabindex='1' accesskey="," name="wpTextbox1" rows='{$rows}'
cols='{$cols}'{$ew} WRAP=Physical>

(oder so ähnlich, weiß grad nicht, was das {$ew} tut) ersetzen.

Mac, für nix garantierend