Ich hasse coole Plugins, die schlecht dokumentiert sind. Selbst das kleinste Stück Code benötigt ein wenig Dokumentation. Der folgende Text ist ziemlich ausführlich. Überspringe einfach die Kapitel, die dich nicht interessieren. Wenn du Fragen zum Plugin hast, vergewissere dich, dass du die neuste Version benutzt und die Frage noch nicht auf dieser Seite oder in den Kommentaren der Plugin Homepage beantwortet sind. Dann - und nur dann - stell deine Frage hier.
Als ich 2005 auf der Suche nach einem PHP Plugin für WordPress war, gab es kein Plugin, dass es mir erlaubte, den Code so zu schreiben, wie ich es gewohnt war. Zum Beispiel verlangten einige Plugins, dass der Code in XHTML Tags wie <phpcode> </phpcode> gekapselt wurde. Das wich von der üblichen Schreibweise für PHP Code ab, bei der einfach nur <?php ?> verwendet wird. Einige Plugins führten den Code erst aus, nachdem WordPress einige Filter wie zum Beispiel 'texturize' darauf angewendet hatten. Somit wurde auch der Code mit 'texturiert', was die Plugins dann wieder für den Codeteil des Artikels rückgängig machen mussten. Für komplexeren Code kann das auf Grund von Mehrdeutigkeiten nicht korrekt ausgeführt werden, was dann zu Parse-Fehlern führt obwohl der Code syntaktisch korrekt ist.
Technisch betrachtet, führt Exec-PHP PHP Code in beliebigem Text dadurch aus, dass es den gesamten Text in ?> <?php Tags kapselt und ihn and die PHP Funktion eval() übergibt. Das setzt allerdings voraus, dass der auszuführende PHP Code wiederum innerhalb von <?php ?> Tags gekapselt ist. Durch diese Arbeitsweise muss der Text nicht vom Plugin nach vorhandenen Codestücken geparst werden.
+
+
Unterschiede zu ähnlichen Plugins
+
Es gibt jede Menge andere PHP Plugins, die alle ein wenig anders funktionieren. Die nachfolgende Liste wurde Anfang 2007 erstellt und ist nicht vollständig und vermutlich veraltet, da einige Plugins mittlerweile aktualisiert wurden. Dementsprechend ist neben dem Pluginnamen auch die Versionsnummer angegeben.
+
+
Sniplets
+
Das Sniplets Plugin von John Godley sieht nach der besten Alternative zu Exec-PHP aus. Obwohl es schwerer zu konfigurieren ist, erhältst du dadurch eine höhere Sicherheit auf Grund der Arbeitsweise des Plugins.
+
+
RunPHP 0.2.2 (Mark Somerville)
+
Das RunPHP Plugin von Mark Somerville benutzt XHTML Tag-Syntax um Code innerhalb von HTML auszuzeichnen. Es versucht mittels Konvertierung texturierten Code wieder in seine Ursprungsform zu wandeln und unterstützt nicht die Rollen und Befugnisse von WordPress 2.x.
Das PHP Exec Plugin von Priyadi Iman Nurcahyo benutzt XHTML Tag-Syntax um Code innerhalb von HTML auszuzeichnen. Es versucht mittels Konvertierung texturierten Code wieder in seine Ursprungsform zu wandeln.
Heutzutage gibt es eine unerschöpfliche Fülle ähnlicher Plugins, die ich nicht mehr alle beschreiben kann. Wenn in Exec-PHP ein Feature fehlen sollte, dann schaue dich einfach mal in einer der WordPress Plugin Datenbanken um oder frag nach, ob ich es implementiere.
+
+
Installation
+
+
Anforderungen
+
Du brauchst die folgende Software auf deinem Webserver um das Exec-PHP Plugin benutzen zu können:
Sofern nicht anders angegeben kannst du von einer früheren Version des Plugins upgraden indem du das Plugin deinstallierst und anschließend der Installationsanleitung folgst. Beachte, dass das Upgrade automatisch Einstellungen der älteren Plugin Version migriert. Aus diesem Grund ist ein Downgraden auf die vorherige Version des Plugins nicht möglich.
+
+
Upgrade von Version 2.0 oder niedriger
+
Da sich das Verzeichnislayout geändert hat, musst du die alte Datei exec-php.php aus deinem/wp-content/plugins/ Verzeichnis manuell entfernen. Folge danach der Installationsanweisung. Falls du die alternativen Tags [?php ?] oder das alte PHP-Tagformat < ?php ?> (beachte das Leerzeichen) oder <? ?> benutzt hast, must du sämtliche dieser Tags in das Format <?php ?> migrieren. Du kannst das entweder manuell machen oder du benutzt das Search and Replace Plugin. Seit Exec-PHP Version 3.1 wird eine automatische Migration nicht mehr unterstützt.
+
+
Upgrade auf Version 4.2 oder höher
+
Abhängig von deiner zuvor installierten Exec-PHP Version bekommst du nach der Migration möglicherweise eine Sicherheitswarnung im Admin Menu. Lese diesen Absatz um das Problem zu beheben.
+
+
Deaktivierung des Plugin
+
Die Deaktivierung des Plugins wird höchstwahrscheinlich sämtliche deiner Artikel und Widgets mit PHP Code fehlerhaft anzeigen und wird vermutlich deinen PHP Code im Klartext deinen Lesern zeigen. Aus diesem Grund sollte dein PHP Code keine sensiblen Inhalte wie zum Beispiel Passwörter enthalten.
+
+
Deinstallation des Plugin
+
Um das Plugin zu deinstallieren, lösche einfach das exec-php Verzeichnis aus dem /wp-content/plugins/ Verzeichnis. Du brauchst das Plugin zuvor im WordPress Admin Menu noch nicht mal zu deaktivieren. Lese diesen Absatz falls du wissen willst, was mit deinem PHP Code in diesem Fall passiert.
+
+
Exec-PHP in deiner Sprache
+
Zur Zeit sind die englische und deutsche Übersetzung im Exec-PHP Archiv enthalten. Weitere Übersetzungen für die aktuelle Version sind für folgende Sprachen verfügbar:
+
+
Englisch (Default, ist im Exec-PHP Archiv enthalten)
Falls du Exec-PHP in einer Sprache haben möchtest, die nicht hier enthalten ist, lade das Exec-PHP Archiv herunter und benutze ein Tool wie poedit um die Datei languages/exec-php.pot zu übersetzen. Wenn du ganz fleißig bist, kannst du auch noch die readme.html Datei übersetzen. Falls das zuviel ist, übersetze einfach die readme-generic.html Datei. Speichere die Readme Datei unter dem Namen readme-<locale>.html ab und packe das Ganze dann zu einem Zip Archiv exec-php-<locale>.zip zusammen. <locale> steht hierbei für die Kurzform deiner Sprache. Für die deutsche Übersetzung wäre dies 'de_DE'. Das entstehende Archiv würde dementsprechend exec-php-de_DE.zip heißen. Das Archiv sollte nicht mehr als die folgenden Dateien enthalten:
Stelle das Zip Archiv auf deiner Seite zum Download bereit und schreibe danach einen Kommentar auf die Plugin Homepage damit du in den Credits verlinkt wirst.
+
Sofern du auch noch für ältere Exec-PHP Versionen die Zip Archive zum Download anbieten möchtest, verlinke diese ebenfalls auf deiner Seite unter dem Namen exec-php-<locale>.<version>.zip. Also z.B. exec-php.de_DE.4.2.zip für die deutsche Lokalisierung von Exec-PHP 4.2.
+
+
Benutzung
+
+
Ausführen von PHP Code
+
Mit Exec-PHP kannst du PHP Code in der Kurzfassung und dem Text deiner Beiträge und Seiten (im Folgenden Artikel genannt), als auch in Text-Widgets ausführen. Um Code auszuführen, kannst du diesen wie gewohnt, in <?php ?> Tags gekapselt, eintippen.
+Um Code in Artikeln oder Text-Widgets auszuführen, musst du eventuell deine Blog- und Benutzereinstellungen ändern. Um Code in Artikeln erfolgreich auszuführen, stelle die folgenden Punkte sicher:
+
Das Plugin hat ein eigenes Konfigurationsmenu unter 'Einstellungen > Exec-PHP'. Das Konfigurationsmenu wird nur für Benutzer angezeigt, die die 'edit_plugins' Befugnis haben. Diese ist üblicherweise nur den Administratoren zugewiesen. Wenn du Javascript in deinem Browser abgeschaltet hast oder du Exec-PHP mit WordPress 2.0.x laufen lässt, so wirst du gar keine oder nur Teile des Konfigurationsmenus sehen.
Wenn die Blog- oder Benutzereinstellungen nicht korrekt sind, um PHP Code zu schreiben, so wird eine Warnung im 'Schreiben' oder 'Widgets' Menu angezeigt.
+
+
Die WYSIWYG Konvertierungswarnung kann im Menu 'Benutzer > Dein Profil' abgeschaltet werden. Dies ist allerdings nicht empfohlen, da es dazu führen kann, dass PHP Code in Artikeln beim Speichern dauerhaft zerstört wird.
+
+
Wenn du Javascript deaktiviert hast oder du Exec-PHP mit WordPress 2.0.x betreibst, so wirst du keine Warnungen angezeigt bekommen selbst wenn deine Blog- und Benutzereinstellungen nicht für den Betrieb von Exec-PHP geeignet sind.
+
+
Ein erster Test
+
Um sicherzustellen, dass das Plugin richtig funktioniert, melde dich als Administrator an, mache die oben genannten Einstellungen und schreibe einen neuen Artikel mit dem folgenden Text:
+
<?php echo "Das ist das Exec-PHP 'Hello World'"; ?>
+
Dieser Code sollte immer funktionieren. Wenn du dir diesen Artikel in deinem Blog anschaust und alles funktioniert, solltest du das hier sehen:
+
Das ist das Exec-PHP 'Hello World'
+
+
WordPress' XHTML Tag-Balancing
+
Abhängig von deinem PHP Code ist es möglicherweise notwendig WordPress' eingebautes XHTML Tag-Balancing abzuschalten sofern der Code in Artikeln ausgeführt werden soll. Die Option kann im Menu 'Einstellungen > Schreiben' durch deaktivieren der Option 'WordPress soll falsch verschachteltes XHTML automatisch korrigieren' abgeschaltet werden. Im Zweifelsfall deaktiviere diese Option am besten. Anstatt diese Option zu deaktivieren, kann alternativ das Mime Type Plugin installiert werden. In diesem Fall muss für jeden Artikel mit enthaltenem PHP Code der Mime-Typ text/html gesetzt werden.
+
+
Schreiben von PHP Code im WYSIWYG Editor
+
Um erfolgreich PHP Code in Artikel zu schreiben, muss der WYSIWYG Editor im Menu
+'Benutzer > Dein Profil' abgeschaltet werden. Es reicht nicht, den WYSIWYG
+Editor eingeschaltet zu lassen und einfach nur im 'HTML' Tab des Editors zu arbeiten. In diesem Fall wird beim Speichern dein PHP Code dauerhaft zerstört.
+
Anstatt den WYSIWYG Editor in deinem Profil abzuschalten, kannst du ihn auch nur für ausgewählte Artikel mittels des Deactivate Visual Editor Plugins abschalten. Ich habe das zwar nicht getestet, es klingt aber nach einer brauchbaren Lösung.
+
Wenn du immer noch meinst, PHP Code mit dem TinyMCE WYSIWYG Editor schreiben zu müssen, kannst du einige TinyMCE Plugins ausprobieren, die so etwas ermöglichen sollen. Solche Experimente gehören allerdings nicht mehr in den Wirkungsbereich dieses Plugins. Aus meiner Sicht besteht ein genereller Konflikt, wenn du PHP Code mit irgendeiner Art visuellem Editor schreiben willst, da das gerenderte Aussehen deines Codes für den Editor unvorhersehbar ist. Aus diesem Grund ist es nicht geplant, das Schreiben von PHP Code im WYSIWYG Editor in absehbarer Zeit zu unterstützen.
+
+
Zulassen des Schreibens von PHP Code in Artikeln
+
Bevor PHP Code ausgeführt werden kann, muss der Benutzer diesen erstmal schreiben. ;-) Beim Schreiben und anschließenden Speichern von PHP Code in Artikeln kann es zur Zerstörung des Codes durch WordPress kommen, sofern der Benutzer nicht die 'unfiltered_html' Befugnis hat.
+
Das Zuweisen von Befugnissen zu Rollen oder Benutzern gehört nicht zur Funktionalität dieses Plugins. Da es keine eingebaute WordPress Funktionalität gibt, um Befugnisse zuweisen zu können, benötigst du ein Rollenmanger Plugin wie oben in den Anforderungen beschrieben.
+
+
Zulassen des Ausführens von PHP Code in Artikeln
+
Nach der Installation des Plugins ist das das Ausführen von PHP Code nur der Administrator Rolle gestattet. Durch das Zuweisen der 'exec_php' Befugnis zu einer anderen Rolle oder Benutzer wird es diesen erlaubt ebenfalls PHP Code in Artikeln auszuführen zu können.
+
Das Zuweisen von Befugnissen zu Rollen oder Benutzern gehört nicht zur Funktionalität dieses Plugins. Da es keine eingebaute WordPress Funktionalität gibt, um Befugnisse zuweisen zu können, benötigst du ein Rollenmanger Plugin wie oben in den Anforderungen beschrieben.
+
+
Zulassen von PHP Code in Text-Widgets
+
Nach der Installation ist das Ausführen von PHP Code in Text-Widgets aktiviert. Jeder User, der die 'switch_themes' Befugnis hat, kann nun PHP Code in Text-Widgets schreiben und ausführen. Da dies eventuell ein Sicherheitsrisiko darstellt, kannst du das Ausführen von PHP Code in Text-Widgets im Konfigurationsmenu des Plugins deaktivieren.
+
+
Überblick über Tätigkeiten und ihre benötigte WordPress Konfiguration
+
Die folgende Tabelle zeigt, welche Einstellungen gesetzt sein müssen damit bestimmte Aktionen mit dem Plugin ausgeführt werden können:
Schreibe/Ändere PHP Code in der Kurzfassung von Artikeln
X
+
Führe PHP Code in der Kurzfassung von Artikeln aus
X
+
Schreibe/Ändere PHP Code in Text-Widgets
X
X
+
Führe PHP Code in Text-Widgets aus
X
+
+
Zur Klarstellung: Wenn ein Benutzer einen neuen Artikel schreiben und in diesem PHP Code ausführen will, so benötigt er sowohl die 'exec_php' als auch die 'unfiltered_html' Befugnis. Andernfalls wird der PHP Code beim Speichern des Artikels zerstört und der nackte PHP Code wird als Artikel angezeigt.
+
Um PHP Code in der Kurzfassung von Artikeln zu schreiben, benötigt der Benutzer lediglich die 'unfiltered_html' Befugnis.
+
Wenn ein Benutzer PHP Code in Text-Widgets schreiben und ausführen will, so benötigt er lediglich die 'unfiltered_html' Befugnis. Es gibt keine Befugnis, die das Ausführen von PHP Code in Text-Widgets beschränkt. Das bedeutet, dass jeder Benutzer, der Widgets schreiben darf (durch die 'switch_themes' Befugnis beschränkt) auch PHP Code ausführen kann.
+
+
Blogsicherheit
+
Durch die Installation dieses Plugins werden Benutzer in die Lage versetzt, die volle PHP API und WordPress API benutzen zu können. Es gibt keine Limitierungen nur bestimmte Teile der APIs benutzen zu können. Damit entblößt du deine WordPress- und Webserver Installation und ermöglichst es Benutzern die Kontrolle über dein Blog, deinen Server und das ganze Internet zu übernehmen (okay, das letzte war ein Spaß). Wenn du dir nicht sicher bist, erlaube es Benutzern nicht, PHP Code auszuführen. Dies kann leicht pro Benutzer konfiguriert werden.
+
+
Sicherheitsloch
+
Abhängig von deiner Konfiguration, erhältst du möglicherweise einen Sicherheitsalarm, der dich auf den 'Sicherheitsloch' Hinweis im Konfigurationsmenu des Plugins hinweist. Dies passiert dann, wenn du Benutzer in deinem Blog hast, denen es erlaubt ist, die Artikel anderer Benutzer zu ändern (üblicherweise Editoren genannt). Sofern es dem Editor selbst nicht gestattet ist PHP Code auszuführen, dem Benutzer des zu editierenden Artikels aber schon, so kann der Editor schadhaften Code in den Artikel des anderen Benutzers einfügen.
+
Um dieses Problem zu beheben, führt das Exec-PHP Plugin die Befugnis 'edit_others_php' ein. Es ist empfohlen, entweder beide oder keine der beiden Befugnisse 'exec_php' und 'edit_others_php' einem Editor zuzuweisen. Möglicherweise ist es sinnvoll, die Editoren-Rolle in zwei unterschiedliche Editoren-Rollen zu teilen. Eine, der es erlaubt ist PHP Code auszuführen und eine nicht.
+
+
Fehlerbehebung
+
+
Inkompatibilitäten mit anderen Plugins oder Themes
+
Zur Zeit sind keine Inkompatibilitäten mit anderen Plugins oder Themes bekannt.
Du kannst Fehlerreports als Kommentar auf der Plugin Homepage melden. Bevor du das tust, versichere dich, dass dein PHP Script fehlerfrei in einer separaten Datei läuft. Sofern das funktioniert, versichere dich, dass dein Code nicht vom "Globals" Fehler betroffen bist. Wenn du dann immer noch meinst dass es ein Bug im Plugin ist, dann denk beim Schreiben deines Fehlerreports daran, dass WordPress nicht dazu gedacht ist mit Code in Kommentaren umzugehen. Deshalb konvertierst du deinen Code am besten in korrektes XHTML, bevor du ihn als Kommentar auf der Plugin Homepage schreibst. Du kannst gerne auch auf deinen Code verlinken oder mit mir direkt über meine Kontaktseite in Verbindung treten.
+
+
Tests um die Funktionalität des Plugins sicherzustellen
+
Nachfolgend ist eine Liste der Tests, die gemacht wurden um die Funktionalität des Plugins sicherzustellen. Auf der linken Seite ist der PHP Code beschrieben, der im entsprechenden Test ausgeführt wird. Auf der rechten Seite ist die Live-Ausgabe des Exec-PHP Plugins für den Testcode. Sofern du dieses Dokument als statische HTML Datei ansiehst, wird der PHP Code natürlich nicht ausgeführt und sieht entsprechend kaputt aus. Auf Grund der Ausgabe der Tests wird diese Seite nicht als valides XHTML verifizieren. Wenn du denkst, dein Lieblings PHP Plugin ist besser als Exec-PHP, probiere alle nachfolgenden Tests aus und schaue ob es damit korrekt funktioniert.
Warum funktioniert Exec-PHP nicht, wie es hier beschrieben wurde?
+
Wenn das Plugin nicht funktioniert obwohl die Blog- und Benutzereinstellungen richtig konfiguriert sind, dann kollidiert das Exec-PHP Plugin sehr wahrscheinlich mit einem anderen Plugin deines Blogs. Um das Problem einzukreisen, deaktiviere alle anderen Plugins außer Exec-PHP und schaue, ob Exec-PHP nun funktioniert.
+
+
Warum zerstört mir WordPress meine <?php ?> Tags nach dem Speichern des Artikels?
Warum schlägt das Plugin mit einem eval() Fehler fehl, wenn es meinen Code ausführt?
+
Wenn du PHP Fehlermeldungen in der Art 'Some error in /home/minime/htdocs/blog/wp-content/plugins/exec-php/includes/runtime.php(42) : eval()’d code on line 666' bekommst, dann ist es an der Zeit, deinen PHP Code zu reparieren. Wenn du dir nicht sicher bist, an welcher Stelle dein Code defekt ist, lasse ihn in einer separaten Datei laufen. Entferne alle Fehler und kopiere den Code anschließend wieder in deinen Artikel oder Widget. Um die Menge an Kommentaren auf der Plugin Homepage zu begrenzen, werde ich alle Fehlerreports zu diesem Problem löschen.
+
+
Wie kann ich einfach nur PHP Code anzeigen, anstatt ihn auszuführen?
+
Wenn du lediglich Code in deinem Blog anzeigen willst, anstatt ihn auszuführen (wie es z.B. auf dieser Seite gemacht wird), dann musst du den Code in die korrekte XHTML Schreibweise überführen. Dazu müssen die folgenden Zeichen konvertiert werden: < in <, > in > und & in &. Du kannst diese Konvertierung auch automatisiert mittels des WP-Simplecode Plugin durchführen.
+
+
Warum erzeugt mein Newsfeed Parse-Fehler?
+
Nehmen wir an, dein Code funktioniert außerhalb eines Artikels. Trotzdem wirft der PHP Parser eventuell Fehler in deinem Newsfeed aus, nicht aber beim Betrachten deiner Seite. Das passiert dann, wenn du eigene Funktionen, Klassen usw. in deinem Code definiert hast. Für die Generierung deines Newsfeeds liest WordPress deine Artikel nämlich zweimal (einmal für die Zusammenfassung und einmal für den kompletten Artikel) und führt somit auch deinen Code zweimal aus. Der folgende Code würde zwar beim Betrachten deiner Seite fehlerfrei funktionieren, würde aber dazu führen, dass dein Newsfeed PHP Fehler enthält:
Als Grundregel kann ich nur empfehlen, alle Definitionen in separate Dateien zu speichern und auf diese mit require_once() zu referenzieren. Das obige Beispiel würde dann in zwei Teile geteilt werden, dem Artikel und die Datei.
Bitte beachte, dass require_once() den vollqualifizierten Pfad benötigt. Das ist notwendig, da der relative Pfad sich abhängig vom Kontext (z.B. Betrachten deiner Blog Homepage, Betrachten des Artikels, Anzeigen des Newsfeeds, usw.), in dem deine Seite dargestellt wird, ändert.
Nehmen wir an, dein includierter Code funktioniert außerhalb eines Artikels und der Pfad zur Include-Datei ist korrekt. Trotzdem wirft der PHP Parser eventuell Fehlermeldungen aus, obwohl alles korrekt aussieht. Das passiert dann, wenn der Programmierer der includierten Datei angenommen hat, dass die Datei im globalen Scope ausgeführt wird und nicht das Schlüsselwort global benutzt um globale Variablen zu deklarieren. Als Beispiel schreibe folgenden Artikel:
Obwohl die Datei example.php einwandfrei ausgeführt werden kann, sofern du sie direkt aufrufst, führt dieser Test zu undefinierten verhalten, sofern du den Artikel in WordPress ansiehst, da hier die Zuweisung des Wertes zur Variablen $g_text nicht innerhalb des globalen Scopes stattfand. Das liegt an der Art und Weise wie WordPress funktioniert und kann nicht durch einen Bugfix in Exec-PHP repariert werden. Du kannst diesen Fehler umgehen, indem du den folgenden Code in deinen Artikel vor die include Anweisung einbindest oder die includierte Datei am Anfang um folgenden Code ergänzts:
+
global $g_text;
+
Selbstverständlich musst du dass für jede globale Variable machen, bei der dies nicht schon vom Programmierer selbst gemacht wurde. Du kannst natürlich auch versuchen, den Programmierer des Codes zu kontaktieren, damit er seinen Code ändert.
+
+
Funktioniert das Plugin in WordPress MU?
+
WordPress is nicht WordPress MU. Das Plugin ist für WordPress geschrieben aber eventuell funktioniert es ja auch mit WordPress MU. Wenn du einen Patch bereitstellst, um die Kompatibilität mit WordPress MU zu verbessern, werde ich diesen gerne in die nächste Version von Exec-PHP einbauen.
+
+
Wie wird die Plugin Homepage erstellt?
+
Gut das du fragst. Das ist eine gute Gelegenheit, um zu zeigen, welche Möglichkeiten das Exec-PHP Plugin bietet. Die Plugin Homepage ist ein WordPress Beitrag, der im Wesentlichen aus einem PHP Script besteht, dass durch Exec-PHP ausgeführt wird und die in der Exec-PHP Installation enthaltene readme.html liest und parst. Dadurch muss ich bei einer neuen Version des Plugins lediglich die Plugindateien auf den Webserver hochladen. Die Dokumentation wird dann automatisch auf der Plugin Homepage aktualisiert. Der komplette Code sieht wie folgt aus:
Neue Versionen des Plugins werden von Zeit zu Zeit veröffentlicht und können neue Features und/oder Bugfixes enthalten. Du kannst dich über die neusten Entwicklungen auf dem Laufenden halten, indem du die Kommentare der Plugin-Homepage abonnierst. Seit WordPress 2.3 wirst du auch im 'Plugin' Menu von WordPress über neue Versionen informiert.
+
Neue Versionen bringen immer Änderungen am Code mit sich und erhöhen die Versionsnummer. Bestehende Versionen können trotzdem noch nach der ursprünglichen Veröffentlichung verändert werden. Dies passiert dann, wenn lediglich die Dokumentation für das Plugin aktualisiert wurde. In diesem Fall gibt es keine Benachrichtigung auf dieser Seite.
+
+
Historie alter Versionen
+
+
Version 4.9 (2009-01-07)
+
+
Download: Plugin (Englische und deutsche Übersetzung)
Change: Redesign des Sicherheitsinformationbereichs des Konfigurationsmenus
+
Feature: Anzeige eines Sicherheitsalarms im Sicherheitsinformationsbereich des Konfigurationsmenus
+
Feature: Es wird nun eine Warnung im 'Schreiben' und 'Widgets' Menu ausgegeben, falls die Blog- oder Benutzereinstellungen geschriebenen PHP Code beim Speichern zerstören würden
+
+
+
Version 4.1 (2007-10-27)
+
+
Download: Plugin (Englische und deutsche Übersetzung)
Bugfix: Die Anzeige des Konfigurationsmenus war mit einer falschen Befugnis geschützt
+
Bugfix: Das Konfigurationsmenu ist jetzt gültiges XHTML
+
Feature: Das Konfigurationsmenu zeigt nun an, welche Benutzer PHP Code schreiben und ausführen dürfen. Die Anzeige erfolgt mittels AJAX. Für WordPress Installationen mit vielen Benutzern sollte die Ladezeit der Seite trotzdem befriedigend sein
+
+
+
Version 4.0 (2007-10-25)
+
+
Download: Plugin (Englische und deutsche Übersetzung)
+
Anforderungen: WordPress 2.0 oder höher
+
Bugfix: Wenn die 'exec_php' Befugnis bei allen Rollen entfernt wird, wird die Befugnis nun automatisch wieder der Administrator Rolle zugewiesen
+
Change: Bei einer Neuinstallationen ist nur noch die Administrator Rolle berechtigt PHP Code auszuführen
+
Feature: Konfigurierbare Ausführung von PHP Code in Text-Widgets im Konfigurationsmenu. Dieses Feature funktioniert nur mit dem in WordPress 2.2 eingeführten Widget Support
Bugfix: Entfernung des Tag-Style Konverters weil er a) das WordPress Admin Menu sehr langsam machte und b) PCRE sich als fehlerhaft und unzuverlässig erwiesen hat. Interner Vermerk: Benutze niemals wieder PCRE!
Because I hate cool plugins that are badly documented. Even the smallest piece of code needs some documentation. The following text is pretty exhaustive. Feel free to skip the sections you are not interested in. If you have a question about the plugin please first make sure you refer to the latest version and the question is not answered on this page or in the comments section of the plugin homepage. Then - and only then - post your question here.
When I was in need of a PHP plugin for my WordPress blog back in 2005, there was no plugin available that allowed me to write PHP code the way I was used to. For example some plugins required the PHP code to be encapsulated in XHTML tags like <phpcode> </phpcode>. This differed from the usual way you write PHP code where you only use <?php ?>. Some of the plugins evaluated the code after WordPress applied some filters like texturize. So it also texturized the PHP code and the plugins had to undo the texturize just for the code part. For more complex code this can not be done correctly because of ambiguity and often led into parsing errors even if the code was syntactically correct.
Technically Exec-PHP executes code inside of arbitrary text by wrapping the whole text into ?> <?php tags and hand it over to the PHP eval() function. This requires that the executable code itself is encapsulated into <?php ?> tags. By that no parsing of your code needs to be done by the plugin itself.
+
+
Difference to similar plugins
+
There are a lot of PHP plugins available all doing slightly different things. The following list was gathered back in the beginning of 2007 and may not be complete and probably outdated because some of the plugins may have been updated, including more features. Therefore the names of the compared plugins are given including the version number.
+
+
Sniplets
+
The Sniplets plugin by John Godley seems to be a good alternative to Exec-PHP. Although it is harder to configure than Exec-PHP, you may gain some improvements in security due to the way the Sniplets plugin is working.
+
+
RunPHP 0.2.2 (Mark Somerville)
+
The RunPHP plugin by Mark Somerville uses XHTML tag syntax to separate code from HTML. It does strange conversions to "fix" texturized posts and does not support WordPress' 2.x roles and capabilites system.
+
+
RunPHP 2.1.1 (James Van Lommel)
+
The RunPHP plugin by James Van Lommel creates parsing errors with most of the test code below.
+
+
PHP Exec 1.7
+
The PHP Exec plugin by Priyadi Iman Nurcahyo uses XHTML tag syntax to separate code from HTML. It does strange conversions to "fix" texturized posts.
+
+
EzStatic 3
+
The EzStatic 3 plugin by Owen Winkler does not execute test #16 (see below).
+
+
Other plugins
+
Nowadays there are a lot of similar plugins around that I am simply to lazy to write some further text to. If Exec-PHPs functionality does miss some feature you are desperatly seeking, you may want to take a look on one of the various WordPress plugin databases or drop a feature request.
+
+
Installation
+
+
Requirements
+
You need the following software to be installed on your webserver in order to run the Exec-PHP plugin:
Usually if not specifically mentioned on this page you can upgrade from a previous version of this plugin by simply uninstalling the plugin and afterwards follow the installation instructions. Note that an upgrade may implicitly migrate settings of an older plugin version. Therefore you will not be able to downgrade back to an older version of the plugin.
+
+
Upgrade from version 2.0 and earlier
+
Because directory layout has changed, you have to remove your old exec-php.php file from your /wp-content/plugins/ directory manually and afterwards follow the installation instructions. If you have used the alternative styled tags [?php ?] or you have used the old PHP tag formats of < ?php ?> (notice the space) or <? ?> you have to migrate all of these into the format of <?php ?>. You can either do this manually or use the Search and Replace plugin. Since version 3.1 an automatic migration isn't supported anymore for certain reasons.
+
+
Upgrade to version 4.2 and above
+
Depending on your previously installed Exec-PHP version, you may receive an Exec-PHP security alert in your admin menu. Read this section to solve this issue.
+
+
Deactivating the plugin
+
Deactivating the plugin will most likely cause your articles and widgets that contain PHP code to display messed up and may display almost all of your PHP code to your readers. Because of that your PHP code shouldn't contain sensible data e.g. passwords.
+
+
Uninstalling the plugin
+
For uninstalling the plugin simply delete the exec-php directory from the /wp-content/plugins/ directory. You even don't need to deactivate the plugin in the WordPress admin menu. Read this topic if you want to know what happens to your written PHP code in this case.
+
+
Exec-PHP in your language
+
At the moment the english and german translation ships with the Exec-PHP archive. Further translations for the current version are available for:
+
+
English (default, ships with the Exec-PHP plugin archive)
If you like to see Exec-PHP in a language not listed above, get the Exec-PHP archive and use a tool like poedit to translate the languages/exec-php.pot file. If you are a really tough, you can also translate this readme.html file aswell. If this is to much work, just translate the readme-generic.html file. Save the readme as readme-<locale>.html and put it all into a Zip archive named exec-php-<locale>.zip. Here <locale> is the shortcut of your language. For the german translation this would be 'de_DE'. The resulting Zip archive would therefore be named exec-php-de_DE.zip. The archive must not contain more than the following files:
+Afterwards upload the archive to your site and write a comment at the comments of the plugin homepage and you will be mentioned in the credits.
+
In case you also provide translation for previous Exec-PHP versions, also link them on your page with the name exec-php-<locale>.<version>.zip. E.g. exec-php.de_DE.4.2.zip for the german translation of Exec-PHP 4.2.
+
+
Usage
+
+
Executing PHP code
+
With Exec-PHP you can execute PHP code in the excerpt and the content portion of your posts and pages (in the following called articles) as also as in text widgets. To execute code, just type in the PHP code as you usually would, encapsulated in <?php ?> tags.
+
Writing code in articles or text widgets may require some further tuning to the blog and user settings. To have the plugin work properly with PHP code in the content of a users article, do as follows:
The plugin comes with its own configuration menu that is accessible through 'Settings > Exec-PHP'. The configuration menu is only accessible for users that do have the 'edit_plugins' capability. This is usually only assigned to the Blog Administrator. If you have disabled Javascript or you are running Exec-PHP with WordPress 2.0.x you will not see or only see parts of the plugin configuration menu.
If the blog or user settings are not appropriate to write PHP code, you will get a warning on the 'Write' dialog or 'Widgets' menu respectivly.
+
+
The WYSIWYG Convesion Warning can be turned off through the 'Users > Your Profile' menu. Nevertheless, this is not the recommended way, because this can cause you to accidently render PHP code in articles permanently unuseful.
+
+
If you have disabled Javascript or you are running Exec-PHP with WordPress 2.0.x you will not receive any warnings even if your blog or user settings are not configured appropriately to run Exec-PHP.
+
+
Basic test
+
For validating, that the plugin works properly, log in as Administrator, apply the settings listed above and create a new article and write the following text:
+
<?php echo "This is the Exec-PHP 'Hello World'"; ?>
+
This should always work. When displaying the post and everything works fine, you should see:
+
This is the Exec-PHP 'Hello World'
+
+
WordPress' XHTML tag balancing
+
Depending on your PHP code it may be necessary to turn off WordPress' built in XHTML tag balancing if the code is written in the content of an article. This can be done through the setting 'WordPress should correct invalidly nested XHTML automatically' on the 'Settings > Write' menu in WordPress. If in question, better turn this option off. An alternative to turning this option off may be to install the Mime Type Plugin and use the mime type text/html individually on each article that contains PHP.
+
+
Writing PHP code with the WYSIWYG editor
+
To successfully write PHP code in the content of an article, the WYSIWYG editor needs to be turned off through the 'Users > Your Profile' menu. It is not enough to simply keep the WYSIWYG editor on, switch to the 'Code' tab of the editor in the 'Write' menu and save the article. This will render all contained PHP code permanently unuseful.
+
Instead of turining off the WYSIWYG editor in your user profile you can temporarily disable it for certain articles by using the Deactivate Visual Editor plugin. I haven't tested it but it sounds like a reasonable solution for you guys that like to use the WYSIWYG editor.
+
If you still are in need of writing PHP code with the TinyMCE WYSIWYG editor, you may want to experiment with some TinyMCE plugins that may allow to write PHP code. Such experiments are outside of the scope of this plugin. From my point of view there is a general requirements conflict when you are in need of writing PHP code with any kind of WYSIWYG editor. Therefore it is not planned to natively support writing PHP code in the WYSIWYG editor for any upcoming release of the Exec-PHP plugin.
+
+
Allowing PHP code to be written in articles
+
Before executing PHP code, the user needs to write it first. ;-) A user may experience problems in writing PHP code in the content of an article, because in the way that WordPress will rewrite the code (and therefore will break it for later execution) during saving the article. This is because the user also needs the 'unfiltered_html' capability assigned to.
+
Assigning capabilities to roles or users is out of the scope of this plugin. Because WordPress has no built-in configuration menu in the admin menu to assign roles/capabilities, you need to install one of the available role/capability manager plugins as the one mentioned in the requirements.
+
+
Allowing PHP code execution in articles
+
After installation, execution of PHP code is limited to the Administrator role by default. By assigning the 'exec_php' capability to another role or user will allow them to execute PHP code in their posts.
+
Assigning capabilities to roles or users is out of the scope of this plugin. Because WordPress has no built-in configuration menu in the admin menu to assign roles/capabilities, you need to install one of the available role/capability manager plugins as the one mentioned in the requirements.
+
+
Allowing PHP code in text widgets
+
By default execution of PHP code in widgets is activated. Any user who has the 'switch_themes' capability can write and execute PHP code in text widgets. Because this may be a security issue, you may want to disable PHP code execution in widgets through the plugin configuration menu.
+
+
Overview of tasks and their required WordPress configuration
+
The following matrix shows which settings need to be applied to perform specific tasks with the plugin:
To make things clear: If a user wants to write a new article and want to execute PHP code inside of its content, he needs to have both - the 'exec_php' and 'unfiltered_html' - capabilities assigned to. Otherwise the PHP code will get messed up during saving the article and the raw PHP code itself will be displayed instead of executing it.
+
For writing and executing code in the excerpt of an article, the user only needs the 'unfiltered_html' capability.
+
If a user wants to write PHP code inside of a text widget, he only needs the 'unfiltered_html' capability. The execution of PHP code inside of widgets is not restricted by any capability. This means that every user of your blog who can write widgets - which is restricted by the 'switch_themes' capability - can execute PHP code.
+
+
A word about security
+
By using this plugin a user can use the full PHP API and WordPress API. There are no restrictions to execute only certain subsets of functionality. Allowing your users to write and execute PHP code will expose your WordPress installation in specific and your server installation in general. By that a user can easily take over your blog, your server or the whole internet (just kidding about the last one). If in doubt, don't allow a user to execute PHP code. This can be easily adjusted on a per user base.
+
+
Security holes
+
Depending on your configuration, you may receive a security alert that will point you to the 'Security hole' Information section of the plugin configuration menu. This is because you have users defined in your blog (typically called Editors), that are allowed to edit others users articles. If the Editor is not allowed to execute PHP code but the user that the Editor is allowed to edit its articles, then the Editor can add malicious PHP code in this users article.
+
To solve this issue, the Exec-PHP plugin introduces the 'edit_others_php' capability. It is advised to either assign both or none of the 'exec_php' and 'edit_others_php' capability to your editors. You probably want to split the current Editor role into two different Editor roles, one that is allowed to execute and edit other PHP code, and the second that isn't.
+
+
Troubleshooting
+
+
Incompatibilities to other plugins or themes
+
Currently there are no known incompatibilities to other plugins or themes.
You can post bug reports to the comments. Before doing this make sure your PHP script is running properly in a separate file. If it does, assure that you did not hit the "Globals" issue. If you still think it's a bug in the plugin, during writing of the bug report keep in mind that WordPress' commenting system is not build to write unescaped code. So better convert the code to the correct XHTML entities before commenting here. Alternativly point to your code using an external link or get in contact with me by using the contact form of my author page.
+
+
Tests to assert plugins functionality
+
Following is a list of tests that were made to assert the plugins functionality. On the left side the PHP code taken directly from the tests is written. On the right side the live output generated by the Exec-PHP plugin is shown. If you view this documentation as a static HTML file obviously the PHP code isn't executed and will look messy. Because of the content of this test, this page will not verify as XHTML. If you think, your favorite PHP plugin is better than this one, try out all the tests below and see if this works correctly.
Why doesn't the Exec-PHP plugin work as described here?
+
If the plugin does not work as described on this site although you configured your blog and user settings properly then it is very likely that a different plugin is interfering with Exec-PHPs functionality. To boil things down, deactivate all other plugins beside Exec-PHP and see if the malfunction has gone away.
+
+
Why does WordPress mess' up my <?php ?> tags after saving the article?
Why does the plugin fail with an eval() error when executing my code?
+
If you experience a PHP error message like 'Some error in /home/minime/htdocs/blog/wp-content/plugins/exec-php/includes/runtime.php(42) : eval()’d code on line 666' then it's time to repair your PHP code. If you are unsure where your code breaks, first run it in a separate file to punch out all bugs and afterwards copy the code into your article or widget. To reduce the noise in the comments section of the plugin homepage I will delete all entries refering to this topic.
+
+
How can I just print out PHP code and don't execute it?
+
If you just want to print out code and don't want to execute it, e.g. like it is done here on this page, you have to make sure to convert your code to the correct XHTML representation. To do so you have to escape the following characters: < to <, > to > and & to &. You can do this conversion in a semi automated fashion by using the WP-Simplecode plugin.
+
+
Why does my newsfeed spits out parsing errors?
+
Assume your code is working outside an article. The PHP parser may still spit out error messages in your newsfeed but not if you are viewing your article even if everything seems to be correct. This will happen if you have defined your own functions, classes, etc. For the newsfeeds WordPress will read the content of each article twice (once for the summary and once for the whole article) and so causing the PHP code to be executed twice. For example the following code in your article would work if you view the article on your webpage but would cause your newsfeed to break:
As a general rule I would advise to separate all definitions into a file and reference to it by calling require_once(). So the above example would be split into two parts, your article and a file.
Please note that require_once() is using a fully qualified path. This is mandatory because depending on the context of the viewer a relative path would point to different locations e.g. for viewing your main blog page, viewing a single post, viewing the newsfeed, etc.
+
+
Why does my included PHP file causes parsing errors?
+
Assume your included code is working outside an article and the path to the include file is correct. The PHP parser may still spit out error messages even if everything seems to be correct. This can happen when your included file assumes it runs on global scope level and does not use the keyword global to declare its global variables. As example create a new article with the following code:
+
Article:
+
<?php require_once(ABSPATH. 'example.php'); ?>
+
After that copy the following code into a new file named example.php and store it in your webservers root directory:
Although the file example.php will execute fine if you just access the file directly, this test will end up in unexpected behaviour because assigning a value to the $g_text variable hasn't taken place in global scope in terms of the used WordPress hook to execute your code. This is because of how WordPress works and there is no way to handle this in the plugin. You can work around this problem by adding the following PHP code into your post before the include statement or into the file you want to include at the very beginning:
+
global $g_text;
+
No need to say, you have to do this for each global variable where this wasn't already done by the original programmer of the code. Another way would be to contact the original programmer and kindly ask him to change his code.
+
+
Does the plugin works with WordPress MU?
+
WordPress is not WordPress MU. The plugin was written for WordPress but it may probably also work with WordPress MU. If you want to provide a patch to increase compatiblity with WordPress MU, I will be happy to incooperate it in the next official plugin release.
+
+
How do you create the plugin homepage?
+
Glad you've asked. This is a great use case to show you what can be achieved by the Exec-PHP plugin. The plugin homepage is basically a WordPress post running a PHP script thru Exec-PHP that reads and parses the readme.html that comes with the Exec-PHP installation. By that, when I release a new plugin version, I only have to upload the plugin files to the webserver. The documentation will be updated automatically on the plugin homepage. The complete code is:
New versions may come out from time to time including new features or bugfixes. You can keep track of the plugins development by manually checking or subscribing to the comments. Since WordPress 2.3 you will also be noticed about plugin upgrades through the 'Plugins' menu in WordPress.
+
New releases will always justify the code and will cause the version number to be increased. Nevertheless the downloadable archive may change from time to time without having the version number to be increased. This will happen when the plugins documentation will be updated. In this case there will be no announcement on this site, because this may happen rather frequently.
Change: Remodeling the Information section of the plugin configuration menu
+
Feature: Showing security alarms in the Information section of the plugin configuration menu
+
Feature: A warning will be printed on the 'Write' and the 'Widgets' menu in case blog or user settings will screw up written PHP code during saving the article or widgets
Bugfix: Display of the Exec-PHP configuration menu was restricted by an inappropriate capability
+
Bugfix: Making Exec-PHP configuration menu valid XHTML
+
Feature: The Exec-PHP configuration menu now displays which user is allowed to write and execute PHP. Display of this list is executed with AJAX. Therefore even for large WordPress installations with many users, the time to load the Exec-PHP configuration menu will still be satisfiying
Bugfix: When the blog administrator removes the 'exec_php' capability from all roles, the plugin will not reassign the capability to the Administrator and Editor roles
+
Change: For new plugin installations only the Administrator role will be eligable to execute PHP code
+
Feature: Configurable execution of PHP code in text widgets through the Exec-PHP configuration menu. This will only work with native widgets support introduced in WordPress 2.2 or higher
Bugfix: Removing tag style converter because a) it caused a serious slow down in the WordPress admin interface and b) PCRE proved to be very buggy and unreliable. Note for myself: Never use PCRE again!
+
Feature: Adding internationalization (just to be complete)
<?php ?> code in your posts, pages and text widgets. See the local documentation for further information. The latest version of the plugin, documentation and information can be found on the official plugin homepage.', ExecPhp_PLUGIN_ID, ExecPhp_HOME_URL. '/docs/'. __s('readme.html', ExecPhp_PLUGIN_ID)); ?>
+
+= 0) : ?>
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/exec-php/includes/const.php
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/exec-php/includes/const.php Mon Feb 01 09:51:57 2010 +0000
@@ -0,0 +1,87 @@
+= 0)
+{
+ // relative path of plugin to PLUGINDIR
+ $execphp_path = str_replace('\\', '/', dirname(dirname(__FILE__)));
+ $execphp_plugin_path = str_replace('\\', '/', WP_PLUGIN_DIR);
+ define('ExecPhp_HOMEDIR', trim(str_replace($execphp_plugin_path, '', $execphp_path), '/'));
+}
+else
+{
+ // ExecPhp_PLUGINDIR only available for WP < 2.6
+ if (defined('PLUGINDIR'))
+ define('ExecPhp_PLUGINDIR', PLUGINDIR);
+ else
+ define('ExecPhp_PLUGINDIR', 'wp-content/plugins');
+
+ // relative path of plugin to PLUGINDIR
+ $execphp_path = str_replace('\\', '/', dirname(dirname(__FILE__)));
+ $execphp_offset = 0;
+ while (($execphp_n = strpos($execphp_path, ExecPhp_PLUGINDIR, $execphp_offset)) !== false)
+ $execphp_offset = $execphp_n + 1;
+ define('ExecPhp_HOMEDIR', substr($execphp_path, $execphp_offset + strlen(ExecPhp_PLUGINDIR)));
+}
+
+if (defined('WP_PLUGIN_DIR'))
+ define('ExecPhp_HOME_DIR', WP_PLUGIN_DIR. '/'. ExecPhp_HOMEDIR);
+else
+ define('ExecPhp_HOME_DIR', ABSPATH. ExecPhp_PLUGINDIR. '/'. ExecPhp_HOMEDIR);
+
+if (defined('WP_PLUGIN_URL'))
+ define('ExecPhp_HOME_URL', WP_PLUGIN_URL. '/'. ExecPhp_HOMEDIR);
+else
+ define('ExecPhp_HOME_URL', get_option('siteurl'). '/'. ExecPhp_PLUGINDIR. '/'. ExecPhp_HOMEDIR);
+
+define('ExecPhp_CAPABILITY_EXECUTE_WIDGETS', 'switch_themes');
+define('ExecPhp_CAPABILITY_EXECUTE_ARTICLES', 'exec_php');
+define('ExecPhp_CAPABILITY_WRITE_PHP', 'unfiltered_html');
+define('ExecPhp_CAPABILITY_EDIT_PLUGINS', 'edit_plugins');
+define('ExecPhp_CAPABILITY_EDIT_USERS', 'edit_users');
+define('ExecPhp_CAPABILITY_EDIT_OTHERS_POSTS', 'edit_others_posts');
+define('ExecPhp_CAPABILITY_EDIT_OTHERS_PAGES', 'edit_others_pages');
+define('ExecPhp_CAPABILITY_EDIT_OTHERS_PHP', 'edit_others_php');
+
+define('ExecPhp_STATUS_OKAY', 0);
+define('ExecPhp_STATUS_UNINITIALIZED', 1);
+define('ExecPhp_STATUS_PLUGIN_VERSION_MISMATCH', 2);
+
+define('ExecPhp_ACTION_REQUEST_USERS', 'execphp_request_users');
+define('ExecPhp_REQUEST_FEATURE_SECURITY_HOLE', 'security_hole');
+define('ExecPhp_REQUEST_FEATURE_WIDGETS', 'widgets');
+define('ExecPhp_REQUEST_FEATURE_EXECUTE_ARTICLES', 'execute_articles');
+
+define('ExecPhp_POST_WIDGET_SUPPORT', 'execphp_widget_support');
+define('ExecPhp_POST_WYSIWYG_WARNING', 'execphp_wysiwyg_warning');
+
+define('ExecPhp_ID_CONFIG_FORM', 'execphp-configuration');
+define('ExecPhp_ID_INFO_FORM', 'execphp-information');
+
+define('ExecPhp_ID_INFO_SECURITY_HOLE', 'execphp-security-hole');
+define('ExecPhp_ID_INFO_WIDGETS', 'execphp-widgets');
+define('ExecPhp_ID_INFO_EXECUTE_ARTICLES', 'execphp-execute-articles');
+define('ExecPhp_ID_MESSAGE', 'execphp-message');
+
+define('ExecPhp_ID_SCRIPT_COMMON', 'execphp_common');
+define('ExecPhp_ID_SCRIPT_ADMIN', 'execphp_admin');
+define('ExecPhp_ID_L10N_COMMON', 'execphpCommonL10n');
+define('ExecPhp_ID_L10N_ADMIN', 'execphpAdminL10n');
+define('ExecPhp_ID_STYLE_ADMIN', 'execphp_admin');
+
+class ExecPhp_Const
+{
+}
+endif;
+
+?>
\ No newline at end of file
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/exec-php/includes/l10n.php
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/exec-php/includes/l10n.php Mon Feb 01 09:51:57 2010 +0000
@@ -0,0 +1,60 @@
+translate($text);
+ } else {
+ return $text;
+ }
+}
+endif;
+
+if (!function_exists('translate_sprintf')) :
+function translate_sprintf($text, $domain = 'default')
+{
+ if (func_num_args() <= 2)
+ return translate($text, $domain);
+ $args = func_get_args();
+ array_shift($args);
+ array_shift($args);
+ array_unshift($args, translate($text, $domain));
+ return call_user_func_array('sprintf', $args);
+}
+endif;
+
+if (!function_exists('__s')) :
+function __s($text, $domain = 'default')
+{
+ $args = func_get_args();
+ return call_user_func_array('translate_sprintf', $args);
+}
+endif;
+
+if (!function_exists('_es')) :
+function _es($text, $domain = 'default')
+{
+ $args = func_get_args();
+ echo call_user_func_array('translate_sprintf', $args);
+}
+endif;
+
+if (!function_exists('escape_dquote')) :
+function escape_dquote($text)
+{
+ return str_replace('"', '\"', $text);
+}
+endif;
+
+class ExecPhp_L10n
+{
+}
+endif;
+
+?>
\ No newline at end of file
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/exec-php/includes/manager.php
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/exec-php/includes/manager.php Mon Feb 01 09:51:57 2010 +0000
@@ -0,0 +1,44 @@
+m_ajax =& new ExecPhp_Ajax($cache);
+ $this->m_runtime =& new ExecPhp_Runtime($cache);
+ $this->m_admin =& new ExecPHP_Admin($cache);
+ }
+}
+endif;
+
+?>
\ No newline at end of file
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/exec-php/includes/option.php
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/exec-php/includes/option.php Mon Feb 01 09:51:57 2010 +0000
@@ -0,0 +1,171 @@
+m_status = $this->upgrade();
+ }
+
+ // ---------------------------------------------------------------------------
+ // option handling
+ // ---------------------------------------------------------------------------
+
+ // Upgrades plugin from previous versions or even installs it
+ function upgrade()
+ {
+ $old_version = $this->detect_plugin_version();
+ while ($old_version != ExecPhp_VERSION)
+ {
+ $this->load();
+ if (version_compare($old_version, '4.0.dev') < 0)
+ {
+ $this->upgrade_to_4_0();
+ $old_version = '4.0';
+ }
+ else if (version_compare($old_version, '4.1.dev') < 0)
+ $old_version = '4.1';
+ else if (version_compare($old_version, '4.2.dev') < 0)
+ {
+ $this->upgrade_to_4_2();
+ $old_version = '4.2';
+ }
+ else if (version_compare($old_version, '4.3.dev') < 0)
+ $old_version = '4.3';
+ else if (version_compare($old_version, '4.4.dev') < 0)
+ $old_version = '4.4';
+ else if (version_compare($old_version, '4.5.dev') < 0)
+ $old_version = '4.5';
+ else if (version_compare($old_version, '4.6.dev') < 0)
+ $old_version = '4.6';
+ else if (version_compare($old_version, '4.7.dev') < 0)
+ $old_version = '4.7';
+ else if (version_compare($old_version, '4.8.dev') < 0)
+ $old_version = '4.8';
+ else if (version_compare($old_version, '4.9.dev') < 0)
+ $old_version = '4.9';
+ else
+ // we are downgrading to an older version of the plugin by
+ // resetting the version to 0 and walking up the conversion path
+ $old_version = '0';
+
+ $this->m_version = $old_version;
+ $this->save();
+ }
+ $this->load();
+ return ExecPhp_STATUS_OKAY;
+ }
+
+ function save()
+ {
+ // introduced in 4.0
+ $option[ExecPhp_OPTION_VERSION] = $this->m_version;
+
+ // introduced in 4.0
+ $option[ExecPhp_OPTION_WIDGET_SUPPORT] = $this->m_widget_support;
+
+ update_option(ExecPhp_PLUGIN_ID, $option);
+ }
+
+ function load()
+ {
+ $option = get_option(ExecPhp_PLUGIN_ID);
+
+ // introduced in 4.0
+ if (isset($option[ExecPhp_OPTION_WIDGET_SUPPORT]))
+ $this->m_widget_support = $option[ExecPhp_OPTION_WIDGET_SUPPORT];
+ else
+ $this->m_widget_support = true;
+ }
+
+ // ---------------------------------------------------------------------------
+ // tools
+ // ---------------------------------------------------------------------------
+
+ function detect_plugin_version()
+ {
+ $option = get_option(ExecPhp_PLUGIN_ID);
+ if ($option === false)
+ $version = '0';
+ else
+ $version = $option[ExecPhp_OPTION_VERSION];
+ return $version;
+ }
+
+ function upgrade_to_4_0()
+ {
+ // this is first installation of the plugin or upgrade from a version
+ // prior to 4.0;
+ // still needed for deletion from the database - these are obsolete
+ // since version 3.1
+ delete_option(ExecPhp_OPTION_HAS_OLD_STYLE);
+ delete_option(ExecPhp_OPTION_IGNORE_OLD_STYLE_WARNING);
+
+ // be sure standard roles are available, these may be deleted or
+ // renamed by the blog administrator
+ $role = get_role('administrator');
+ if ($role !== NULL)
+ $role->add_cap(ExecPhp_CAPABILITY_EXECUTE_ARTICLES);
+ }
+
+ function upgrade_to_4_2()
+ {
+ // be sure standard roles are available, these may be deleted or
+ // renamed by the blog administrator
+ $role = get_role('administrator');
+ if ($role !== NULL)
+ $role->add_cap(ExecPhp_CAPABILITY_EDIT_OTHERS_PHP);
+ }
+
+ // ---------------------------------------------------------------------------
+ // access
+ // ---------------------------------------------------------------------------
+
+ function set_from_POST()
+ {
+ $this->m_widget_support
+ = isset($_POST[ExecPhp_POST_WIDGET_SUPPORT]);
+ }
+
+ function get_status()
+ {
+ return $this->m_status;
+ }
+
+ function get_version()
+ {
+ return $this->m_version;
+ }
+
+ function get_widget_support()
+ {
+ return $this->m_widget_support;
+ }
+}
+endif;
+
+?>
\ No newline at end of file
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/exec-php/includes/runtime.php
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/exec-php/includes/runtime.php Mon Feb 01 09:51:57 2010 +0000
@@ -0,0 +1,117 @@
+m_cache =& $cache;
+
+ add_filter('the_content', array(&$this, 'filter_user_content'), 1);
+ add_filter('the_content_rss', array(&$this, 'filter_user_content'), 1);
+ add_filter('the_excerpt', array(&$this, 'filter_user_content'), 1);
+ add_filter('the_excerpt_rss', array(&$this, 'filter_user_content'), 1);
+ add_filter('widget_text', array(&$this, 'filter_widget_content'), 1);
+ add_filter('user_has_cap', array(&$this, 'filter_user_has_cap'), 10, 3);
+ }
+
+ // ---------------------------------------------------------------------------
+ // tools
+ // ---------------------------------------------------------------------------
+
+ function eval_php($content)
+ {
+ // to be compatible with older PHP4 installations
+ // don't use fancy ob_XXX shortcut functions
+ ob_start();
+ eval("?>$contentpost_author))
+ return $content;
+ $poster = new WP_User($post->post_author);
+ if (!$poster->has_cap(ExecPhp_CAPABILITY_EXECUTE_ARTICLES))
+ return $content;
+ return $this->eval_php($content);
+ }
+
+ function filter_widget_content($content)
+ {
+ // check whether the admin has configured widget support
+ $option =& $this->m_cache->get_option();
+ if (!$option->get_widget_support())
+ return $content;
+
+ return $this->eval_php($content);
+ }
+
+ function filter_user_has_cap($allcaps, $caps, $args)
+ {
+ // $allcaps = Capabilities the user currently has
+ // $caps = Primitive capabilities being tested / requested
+ // $args = array with:
+ // $args[0] = original meta capability requested
+ // $args[1] = user being tested
+ // See code for assumptions
+
+ // This handler is only set up to deal with the edit_others_pages
+ // or edit_others_posts capability. Ignore all other calls into here.
+ $pages_request = in_array('edit_others_pages', $caps);
+ $posts_request = in_array('edit_others_posts', $caps);
+ if ((!$pages_request && !$posts_request)
+ || ($pages_request && $posts_request)
+ || !$args[0] || !$args[1] || $args[1] == 0)
+ return $allcaps;
+
+ global $post;
+ if (!isset($post))
+ return $allcaps;
+ $poster = new WP_User($post->post_author);
+ if (!$poster->has_cap(ExecPhp_CAPABILITY_EXECUTE_ARTICLES))
+ return $allcaps;
+
+ $editor_has_edit_others_php = (in_array(ExecPhp_CAPABILITY_EDIT_OTHERS_PHP, $allcaps)
+ && $allcaps[ExecPhp_CAPABILITY_EDIT_OTHERS_PHP]);
+ if ($editor_has_edit_others_php)
+ return $allcaps;
+
+ // article may contain PHP code due to the original posters capabilities
+ // but the editor is not allowed to edit others PHP code, so filter out
+ // requested edit_others_xxx settings from the allowed caps
+ if ($pages_request)
+ unset($allcaps['edit_others_pages']);
+ if ($posts_request)
+ unset($allcaps['edit_others_posts']);
+ return $allcaps;
+ }
+}
+endif;
+
+?>
\ No newline at end of file
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/exec-php/includes/script.php
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/exec-php/includes/script.php Mon Feb 01 09:51:57 2010 +0000
@@ -0,0 +1,106 @@
+m_id =& $id;
+ $this->m_tab_name = $tab_name;
+ $this->m_l10n_tab = $l10n_tab;
+ $this->m_path = $path;
+ $this->m_dependency = $dependency;
+
+ if (function_exists('wp_enqueue_script'))
+ wp_enqueue_script($this->m_id, ExecPhp_HOME_URL. $this->m_path, $this->m_dependency);
+ else
+ // WP < 2.1
+ add_action('admin_head', array(&$this, 'action_admin_head_script'));
+
+ if (!$this->m_l10n_tab)
+ return;
+
+ global $wp_version;
+
+ if (version_compare($wp_version, '2.1.dev') >= 0)
+ add_action('wp_print_scripts', array(&$this, 'action_wp_print_scripts'));
+ else
+ add_action('admin_head', array(&$this, 'action_admin_head_tab'));
+ }
+
+ // ---------------------------------------------------------------------------
+ // hooks
+ // ---------------------------------------------------------------------------
+
+ function action_wp_print_scripts()
+ {
+ if (function_exists('wp_localize_script'))
+ {
+ $this->m_l10n_tab['l10n_print_after'] = 'try{convertEntities('. $this->m_tab_name. ');}catch(e){};';
+ wp_localize_script($this->m_id, $this->m_tab_name, $this->m_l10n_tab);
+ }
+ else
+ // WP < 2.2
+ add_action('admin_head', array(&$this, 'action_admin_head_tab'));
+ }
+
+ function action_admin_head_script()
+ {
+?>
+
+
+
+
+
+
\ No newline at end of file
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/exec-php/includes/style.php
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/exec-php/includes/style.php Mon Feb 01 09:51:57 2010 +0000
@@ -0,0 +1,38 @@
+
+
+
\ No newline at end of file
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/exec-php/includes/user_ui.php
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/exec-php/includes/user_ui.php Mon Feb 01 09:51:57 2010 +0000
@@ -0,0 +1,82 @@
+m_cache =& $cache;
+
+ add_action('show_user_profile', array(&$this, 'action_user_profile'));
+ add_action('edit_user_profile', array(&$this, 'action_user_profile'));
+ add_action('profile_update', array(&$this, 'action_profile_update'));
+ }
+
+ // ---------------------------------------------------------------------------
+ // hooks
+ // ---------------------------------------------------------------------------
+
+ function action_user_profile()
+ {
+ global $profileuser;
+ global $wp_version;
+
+ if ($profileuser->has_cap(ExecPhp_CAPABILITY_EXECUTE_ARTICLES))
+ {
+ $usermeta =& $this->m_cache->get_usermeta($profileuser->ID);
+?>
+= 0) : ?>
+
+
+
+
+has_cap(ExecPhp_CAPABILITY_EXECUTE_ARTICLES))
+ {
+ $usermeta =& $this->m_cache->get_usermeta($user_id);
+ $usermeta->set_from_POST();
+ $usermeta->save();
+ }
+ }
+}
+endif;
+
+?>
\ No newline at end of file
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/exec-php/includes/usermeta.php
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/exec-php/includes/usermeta.php Mon Feb 01 09:51:57 2010 +0000
@@ -0,0 +1,62 @@
+m_user_id = $user_id;
+ $this->load();
+ }
+
+ function save()
+ {
+ update_usermeta($this->m_user_id, ExecPhp_META_WYSIWYG_WARNING,
+ $this->m_hide_wysiwyg_warning);
+ }
+
+ function load()
+ {
+ if ($this->m_user_id > 0)
+ {
+ $this->m_hide_wysiwyg_warning =
+ get_usermeta($this->m_user_id, ExecPhp_META_WYSIWYG_WARNING);
+ }
+ }
+
+ // ---------------------------------------------------------------------------
+ // access
+ // ---------------------------------------------------------------------------
+
+ function set_from_POST()
+ {
+ $this->m_hide_wysiwyg_warning
+ = isset($_POST[ExecPhp_POST_WYSIWYG_WARNING]);
+ }
+
+ function hide_wysiwyg_warning()
+ {
+ return $this->m_hide_wysiwyg_warning;
+ }
+}
+endif;
+
+?>
\ No newline at end of file
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/exec-php/includes/write_ui.php
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/exec-php/includes/write_ui.php Mon Feb 01 09:51:57 2010 +0000
@@ -0,0 +1,117 @@
+m_cache =& $cache;
+ $this->m_script =& $script;
+
+ add_action('edit_form_advanced', array(&$this, 'action_edit_form'));
+ add_action('edit_page_form', array(&$this, 'action_edit_form'));
+ add_action('sidebar_admin_page', array(&$this, 'action_sidebar_admin_page'));
+ }
+
+ // ---------------------------------------------------------------------------
+ // hooks
+ // ---------------------------------------------------------------------------
+
+ function action_edit_form()
+ {
+ if ($this->rtfm_article())
+ {
+ $heading = __s('Exec-PHP WYSIWYG Conversion Warning.', ExecPhp_PLUGIN_ID);
+ $text = __s('Saving this article will render all contained PHP code permanently unuseful. Even if you are saving this article through the Code editor. You can turn off this warning in your user profile. Ignore this warning in case this article does not contain PHP code. Read the Exec-PHP documentation if you are unsure what to do next.', ExecPhp_PLUGIN_ID
+ , ExecPhp_HOME_URL. '/docs/'. __s('readme.html', ExecPhp_PLUGIN_ID). '#execute_php');
+ $this->m_script->print_message($heading, $text);
+ }
+ }
+
+ function action_sidebar_admin_page()
+ {
+ if ($this->rtfm_widget())
+ {
+ $heading = __s('Exec-PHP Widget Conversion Warning.', ExecPhp_PLUGIN_ID);
+ $text = __s('Saving the widgets will render all contained PHP code permanently unuseful. Ignore this warning in case the text widgets do not contain PHP code. Read the Exec-PHP documentation if you are unsure what to do next.', ExecPhp_PLUGIN_ID
+ , ExecPhp_HOME_URL. '/docs/'. __s('readme.html', ExecPhp_PLUGIN_ID). '#execute_php');
+ $this->m_script->print_message($heading, $text);
+ }
+ }
+
+ // ---------------------------------------------------------------------------
+ // tools
+ // ---------------------------------------------------------------------------
+
+ // checks whether the author / editor has read the documentation
+ function rtfm_article()
+ {
+ global $post;
+
+ $current_user = wp_get_current_user();
+
+ // the user turned off the wysiwyg warning in its preferences
+ $usermeta =& $this->m_cache->get_usermeta($current_user->ID);
+ if ($usermeta->hide_wysiwyg_warning())
+ return false;
+
+ if (!isset($post->author) || $post->post_author == $current_user->ID)
+ {
+ // the editor is equal to the writer of the article
+ if (!current_user_can(ExecPhp_CAPABILITY_EXECUTE_ARTICLES))
+ return false;
+ if (!current_user_can(ExecPhp_CAPABILITY_WRITE_PHP))
+ return true;
+ }
+ else
+ {
+ // the editor is different to the writer of the article
+ $poster = new WP_User($post->post_author);
+ if (!$poster->has_cap(ExecPhp_CAPABILITY_EXECUTE_ARTICLES))
+ return false;
+ // no check for posters write cap because the editor may want to
+ // insert code after the poster created the article
+ }
+ if (!current_user_can(ExecPhp_CAPABILITY_WRITE_PHP))
+ return true;
+ if (user_can_richedit())
+ return true;
+ if (get_option('use_balanceTags'))
+ return true;
+ return false;
+ }
+
+ // checks whether the admin has read the documentation
+ function rtfm_widget()
+ {
+ $option =& $this->m_cache->get_option();
+ if (!$option->get_widget_support())
+ return false;
+ if (!current_user_can(ExecPhp_CAPABILITY_WRITE_PHP))
+ return true;
+ return false;
+ }
+}
+endif;
+
+?>
\ No newline at end of file
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/exec-php/js/admin.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/exec-php/js/admin.js Mon Feb 01 09:51:57 2010 +0000
@@ -0,0 +1,97 @@
+g_execphp_ajax = new sack();
+g_execphp_error_message = "";
+g_execphp_retries = 0;
+g_execphp_max_retries = 3;
+g_execphp_feature = "";
+
+function ExecPhp_subscribeForFeature(feature)
+{
+ if (g_execphp_feature.length)
+ g_execphp_feature += ",";
+ g_execphp_feature += feature;
+}
+
+function ExecPhp_fillContainer(container_id, text)
+{
+ var container = document.getElementById(container_id);
+ try {container.innerHTML = text;}
+ catch (e) {;}
+}
+
+function ExecPhp_markContainer(container_id)
+{
+ var container = document.getElementById(container_id + "-container");
+ try {container.style.backgroundColor = "red";}
+ catch (e) {;}
+
+}
+function ExecPhp_ajaxCompletion()
+{
+ var edit_others_php = "";
+ var switch_themes = "";
+ var exec_php = "";
+
+ eval(g_execphp_ajax.response);
+
+ if (!exec_php.length)
+ exec_php = "
';
+ var parent = document.getElementById(execphpCommonL10n.messageContainer);
+ try
+ {
+ container = document.createElement("div");
+ container.className = "updated fade";
+ container.innerHTML = container.innerHTML + message;
+ parent.appendChild(container);
+ }
+ catch(e) {;}
+}
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/exec-php/languages/exec-php-de_DE.mo
Binary file web/wp-content/plugins/exec-php/languages/exec-php-de_DE.mo has changed
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/exec-php/languages/exec-php-de_DE.po
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/exec-php/languages/exec-php-de_DE.po Mon Feb 01 09:51:57 2010 +0000
@@ -0,0 +1,166 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Exec-PHP\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2009-01-07 01:11+0100\n"
+"Last-Translator: Sören Weber \n"
+"Language-Team: Sören Weber \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Basepath: ..\n"
+"X-Poedit-KeywordsList: __;_e;__s;_es\n"
+"X-Poedit-Language: German\n"
+"X-Poedit-Country: GERMANY\n"
+"X-Poedit-SearchPath-0: .\n"
+
+#: includes/admin.php:70
+msgid "No user matching the query."
+msgstr "Kein Benutzer erfüllt die Abfrage."
+
+#: includes/admin.php:71
+msgid "Exec-PHP Security Alert."
+msgstr "Exec-PHP Sicherheitsalarm."
+
+#: includes/admin.php:72
+msgid "The Exec-PHP plugin found a security hole with the configured user rights of this blog. For further information consult the plugin configuration menu or contact your blog administrator."
+msgstr "Das Exec-PHP Plugin hat ein Sicherheitsloch in der Konfiguration der Benutzerberechtigungen dieses Blogs gefunden. Für weitere Informationen konsultiere das Konfigurationsmenu des Plugins oder kontaktiere deinen Administrator."
+
+#: includes/admin.php:74
+msgid "Exec-PHP AJAX HTTP error when receiving data: "
+msgstr "Exec-PHP AJAX HTTP Fehler beim Datenempfang: "
+
+#: includes/config_ui.php:49
+#: includes/user_ui.php:46
+#: includes/user_ui.php:48
+msgid "Exec-PHP Settings"
+msgstr "Exec-PHP Einstellungen"
+
+#: includes/config_ui.php:50
+msgid "Exec-PHP"
+msgstr "Exec-PHP"
+
+#: includes/config_ui.php:61
+#: includes/config_ui.php:164
+msgid "Settings"
+msgstr "Einstellungen"
+
+#: includes/config_ui.php:70
+#: includes/config_ui.php:79
+msgid "Exec-PHP Error."
+msgstr "Exec-PHP Fehler."
+
+#: includes/config_ui.php:71
+#, php-format
+msgid "No necessary upgrade of the the Exec-PHP plugin could be performed. PHP code in your articles or widgets may be viewable to your blog readers. This is plugin version %1$s, previously there was version %2$s installed. Downgrading from a newer version to an older version of the plugin is not supported."
+msgstr "Ein notwendiges Upgrade des Exec-PHP Plugins konnte nicht ausgeführt werden. PHP Code in Artikeln oder Widgets ist u.U. für Leser sichtbar. Dies ist Plugin-Version %1$s, zuvor war Version %2$s installiert. Downgrading von einer neueren Version auf eine ältere Version des Plugins wird nicht unterstützt."
+
+#: includes/config_ui.php:80
+#, php-format
+msgid "An unknown error (%s) occured during execution of the Exec-PHP plugin. PHP code in your articles or widgets may be viewable to your blog readers. This error should never happen if you use the plugin with a compatible WordPress version and installed it as described in the documentation."
+msgstr "Es ist ein unbekannter Fehler (%s) während der Ausführung des Exec-PHP Plugins aufgetreten. PHP Code in Artikeln oder Widgets ist u.U. für Leser sichtbar. So ein Fehler sollte niemals passieren wenn das Plugin mit einer kompatiblen WordPress Version benutzt wird und wie in der Dokumentation beschrieben, installiert wurde."
+
+#: includes/config_ui.php:121
+msgid "The list can not be displayed because you may have disabled Javascript or your browser does not support Javascript."
+msgstr "Die Liste kann nicht angzeigt werden, weil Javascript deaktiviert ist oder der Browser kein Javascript unterstützt."
+
+#: includes/config_ui.php:127
+msgid "An animated icon signaling that this information is still be loaded."
+msgstr "Ein animiertes Symbol, das signalisiert, dass die Informationen noch geladen werden."
+
+#: includes/config_ui.php:127
+msgid "Loading user information..."
+msgstr "Lade Benutzer Informationen..."
+
+#: includes/config_ui.php:152
+msgid "Settings saved."
+msgstr "Einstellungen gespeichert."
+
+#: includes/config_ui.php:160
+msgid "Exec-PHP Plugin"
+msgstr "Exec-PHP Plugin"
+
+#: includes/config_ui.php:161
+#: includes/write_ui.php:46
+#: includes/write_ui.php:57
+msgid "readme.html"
+msgstr "readme-de_DE.html"
+
+#: includes/config_ui.php:161
+#, php-format
+msgid "Exec-PHP executes <?php ?> code in your posts, pages and text widgets. See the local documentation for further information. The latest version of the plugin, documentation and information can be found on the official plugin homepage."
+msgstr "Exec-PHP führt <?php ?> Code in Beiträgen, Seiten und Text Widgets aus. Für weitere Informationen lese die lokale Dokumentation. Die neuste Version des Plugins, Dokumentation und Informationen können auf der offiziellen Plugin Homepage gefunden werden."
+
+#: includes/config_ui.php:172
+msgid "Execute PHP code in text widgets"
+msgstr "Führe PHP Code in Text Widgets aus"
+
+#: includes/config_ui.php:176
+msgid "Executing PHP code in text widgets is not restricted to any user. By default users who can modify text widgets will also be able to execute PHP code in text widgets. Unselect this option to generally turn off execution of PHP code in text widgets."
+msgstr "Das Ausführen von PHP Code in Text Widgets ist nicht an bestimmte Benutzer gebunden. Benutzer, die Text Widgets modifizieren können, sind auch in der Lage, PHP Code in Text Widgets auszuführen. Deaktiviere diese Einstellung, wenn die Ausführung von PHP Code in Widgets abgeschaltet werden soll."
+
+#: includes/config_ui.php:185
+msgid "Save Changes"
+msgstr "Änderungen speichern"
+
+#: includes/config_ui.php:190
+msgid "Security Information"
+msgstr "Sicherheitsinformationen"
+
+#: includes/config_ui.php:191
+msgid "The following lists show which users are allowed to write or execute PHP code in different cases. Allowing to write or execute PHP code can be adjusted by assigning the necessary capabilities to individual users or roles by using a role manager plugin."
+msgstr "Die nachfolgenden Listen zeigen an, welche Benutzer für unterschiedliche Fälle die Berechtigung haben PHP Code auszuführen. Das Ausführen von PHP Code kann durch das Zuweisen von Berechtigungen zu einzelnen Benutzern oder Rollen mit Hilfe eines Rollen-Manager Plugins eingestellt werden."
+
+#: includes/config_ui.php:196
+msgid "Security Hole"
+msgstr "Sicherheitslücke"
+
+#: includes/config_ui.php:197
+#, php-format
+msgid "The following list shows which users have either or both of the "%1$s" or "%2$s" capability and are allowed to change others PHP code by having the "%3$s" capability but do not have the "%4$s" capability for themself. This is a security hole, because the listed users can write and execute PHP code in articles of other users although they are not supposed to execute PHP code at all."
+msgstr "Die nachfolgende Liste zeigt an, welche Benutzer eine oder beide der "%1$s" oder "%2$s" Berechtigungen besitzten und außerdem durch die Zuweisung der "%3$s" Berechtigung den PHP Code anderer Benutzer ändern können aber denen es selbst durch eine fehlende "%4$s" Berechtigung nicht erlaubt ist PHP Code auszuführen. Dies stellt eine Sicherheitslücke dar, denn die aufgelisteten Benutzer können nun PHP Code in Artikel von anderen Benutzern schreiben und ausführen, obwohl sie eigentlich überhaupt keinen PHP Code ausführen dürfen."
+
+#: includes/config_ui.php:202
+msgid "Executing PHP Code in Text Widgets"
+msgstr "PHP Code in Text Widgets ausführen"
+
+#: includes/config_ui.php:203
+#, php-format
+msgid "The following list shows which users have the "%s" capability and therefore are allowed to write and execute PHP code in text widgets. In case you have deselected the option "Execute PHP code in text widgets" from above, this list will appear empty."
+msgstr "Die folgende Liste zeigt an, welche Benutzer die "%s" Berechtigung haben und dementsprechend in der Lage sind, PHP Code in Text Widgets auszuführen. Die Liste wird keine Einträge anzeigen für den Fall, dass die Option "Führe PHP Code in Text Widgets aus" abgewählt wurde."
+
+#: includes/config_ui.php:208
+msgid "Executing PHP Code in Articles"
+msgstr "PHP Code in Artikeln ausführen"
+
+#: includes/config_ui.php:209
+#, php-format
+msgid "The following list shows which users have the "%s" capability and therefore are allowed to execute PHP code in articles."
+msgstr "Die folgende Liste zeigt an, welche Benutzer die "%s" Berechtigung haben und dementsprechend in der Lage sind, PHP Code in Artikeln auszuführen."
+
+#: includes/user_ui.php:52
+msgid "Disable WYSIWYG Conversion Warning"
+msgstr "Exec-PHP WYSIWYG Konvertierungswarnung"
+
+#: includes/user_ui.php:56
+msgid "Select this option to turn off the WYSIWYG Conversion Warning in the Write menu. Nevertheless the recommended way is to switch off the WYSIWYG editor so you can be sure not to break existing PHP code by accident."
+msgstr "Aktiviere diese Option um die WYSIWYG Konvertierungswarnung abzuschalten. Nichtsdestotrotz ist der empfohlene Weg, den WYSIWYG Editor ganz abzuschalten um sicherzustellen, dass du keinen bestehenden PHP Code ausversehen zerstörst."
+
+#: includes/write_ui.php:44
+msgid "Exec-PHP WYSIWYG Conversion Warning."
+msgstr "Exec-PHP WYSIWYG Konvertierungswarnung."
+
+#: includes/write_ui.php:45
+#, php-format
+msgid "Saving this article will render all contained PHP code permanently unuseful. Even if you are saving this article through the Code editor. You can turn off this warning in your user profile. Ignore this warning in case this article does not contain PHP code. Read the Exec-PHP documentation if you are unsure what to do next."
+msgstr "Wenn dieser Artikel gespeichert wird, wird jeglicher in ihm enthaltener PHP Code dauerhaft zerstört. Selbst wenn dieser Artikel über den Code Editor gespeichert wird. Du kannst diese Warnung in deinem Benutzerprofil abschalten. Ignoriere diese Warnung, falls dieser Artikel keinen PHP Code enthält. Lese die Exec-PHP Dokumentation, falls du nicht weißt, was diese Warnung bedeutet."
+
+#: includes/write_ui.php:55
+msgid "Exec-PHP Widget Conversion Warning."
+msgstr "Exec-PHP Widget Konvertierungswarnung."
+
+#: includes/write_ui.php:56
+#, php-format
+msgid "Saving the widgets will render all contained PHP code permanently unuseful. Ignore this warning in case the text widgets do not contain PHP code. Read the Exec-PHP documentation if you are unsure what to do next."
+msgstr "Wenn die Widgets gespeichert werden, wird jeglicher in ihnen enthaltener PHP Code dauerhaft zerstört. Ignoriere diese Warnung, falls die Text Widgets keinen PHP Code enthalten. Lese die Exec-PHP Dokumentation, falls du nicht weißt, was diese Warnung bedeutet."
+
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/exec-php/languages/exec-php.pot
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/exec-php/languages/exec-php.pot Mon Feb 01 09:51:57 2010 +0000
@@ -0,0 +1,166 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Exec-PHP\n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2009-01-07 01:11+0100\n"
+"Last-Translator: Sören Weber \n"
+"Language-Team: Sören Weber \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Basepath: ..\n"
+"X-Poedit-KeywordsList: __;_e;__s;_es\n"
+"X-Poedit-Language: German\n"
+"X-Poedit-Country: GERMANY\n"
+"X-Poedit-SearchPath-0: .\n"
+
+#: includes/admin.php:70
+msgid "No user matching the query."
+msgstr ""
+
+#: includes/admin.php:71
+msgid "Exec-PHP Security Alert."
+msgstr ""
+
+#: includes/admin.php:72
+msgid "The Exec-PHP plugin found a security hole with the configured user rights of this blog. For further information consult the plugin configuration menu or contact your blog administrator."
+msgstr ""
+
+#: includes/admin.php:74
+msgid "Exec-PHP AJAX HTTP error when receiving data: "
+msgstr ""
+
+#: includes/config_ui.php:49
+#: includes/user_ui.php:46
+#: includes/user_ui.php:48
+msgid "Exec-PHP Settings"
+msgstr ""
+
+#: includes/config_ui.php:50
+msgid "Exec-PHP"
+msgstr ""
+
+#: includes/config_ui.php:61
+#: includes/config_ui.php:164
+msgid "Settings"
+msgstr ""
+
+#: includes/config_ui.php:70
+#: includes/config_ui.php:79
+msgid "Exec-PHP Error."
+msgstr ""
+
+#: includes/config_ui.php:71
+#, php-format
+msgid "No necessary upgrade of the the Exec-PHP plugin could be performed. PHP code in your articles or widgets may be viewable to your blog readers. This is plugin version %1$s, previously there was version %2$s installed. Downgrading from a newer version to an older version of the plugin is not supported."
+msgstr ""
+
+#: includes/config_ui.php:80
+#, php-format
+msgid "An unknown error (%s) occured during execution of the Exec-PHP plugin. PHP code in your articles or widgets may be viewable to your blog readers. This error should never happen if you use the plugin with a compatible WordPress version and installed it as described in the documentation."
+msgstr ""
+
+#: includes/config_ui.php:121
+msgid "The list can not be displayed because you may have disabled Javascript or your browser does not support Javascript."
+msgstr ""
+
+#: includes/config_ui.php:127
+msgid "An animated icon signaling that this information is still be loaded."
+msgstr ""
+
+#: includes/config_ui.php:127
+msgid "Loading user information..."
+msgstr ""
+
+#: includes/config_ui.php:152
+msgid "Settings saved."
+msgstr ""
+
+#: includes/config_ui.php:160
+msgid "Exec-PHP Plugin"
+msgstr ""
+
+#: includes/config_ui.php:161
+#: includes/write_ui.php:46
+#: includes/write_ui.php:57
+msgid "readme.html"
+msgstr ""
+
+#: includes/config_ui.php:161
+#, php-format
+msgid "Exec-PHP executes <?php ?> code in your posts, pages and text widgets. See the local documentation for further information. The latest version of the plugin, documentation and information can be found on the official plugin homepage."
+msgstr ""
+
+#: includes/config_ui.php:172
+msgid "Execute PHP code in text widgets"
+msgstr ""
+
+#: includes/config_ui.php:176
+msgid "Executing PHP code in text widgets is not restricted to any user. By default users who can modify text widgets will also be able to execute PHP code in text widgets. Unselect this option to generally turn off execution of PHP code in text widgets."
+msgstr ""
+
+#: includes/config_ui.php:185
+msgid "Save Changes"
+msgstr ""
+
+#: includes/config_ui.php:190
+msgid "Security Information"
+msgstr ""
+
+#: includes/config_ui.php:191
+msgid "The following lists show which users are allowed to write or execute PHP code in different cases. Allowing to write or execute PHP code can be adjusted by assigning the necessary capabilities to individual users or roles by using a role manager plugin."
+msgstr ""
+
+#: includes/config_ui.php:196
+msgid "Security Hole"
+msgstr ""
+
+#: includes/config_ui.php:197
+#, php-format
+msgid "The following list shows which users have either or both of the "%1$s" or "%2$s" capability and are allowed to change others PHP code by having the "%3$s" capability but do not have the "%4$s" capability for themself. This is a security hole, because the listed users can write and execute PHP code in articles of other users although they are not supposed to execute PHP code at all."
+msgstr ""
+
+#: includes/config_ui.php:202
+msgid "Executing PHP Code in Text Widgets"
+msgstr ""
+
+#: includes/config_ui.php:203
+#, php-format
+msgid "The following list shows which users have the "%s" capability and therefore are allowed to write and execute PHP code in text widgets. In case you have deselected the option "Execute PHP code in text widgets" from above, this list will appear empty."
+msgstr ""
+
+#: includes/config_ui.php:208
+msgid "Executing PHP Code in Articles"
+msgstr ""
+
+#: includes/config_ui.php:209
+#, php-format
+msgid "The following list shows which users have the "%s" capability and therefore are allowed to execute PHP code in articles."
+msgstr ""
+
+#: includes/user_ui.php:52
+msgid "Disable WYSIWYG Conversion Warning"
+msgstr ""
+
+#: includes/user_ui.php:56
+msgid "Select this option to turn off the WYSIWYG Conversion Warning in the Write menu. Nevertheless the recommended way is to switch off the WYSIWYG editor so you can be sure not to break existing PHP code by accident."
+msgstr ""
+
+#: includes/write_ui.php:44
+msgid "Exec-PHP WYSIWYG Conversion Warning."
+msgstr ""
+
+#: includes/write_ui.php:45
+#, php-format
+msgid "Saving this article will render all contained PHP code permanently unuseful. Even if you are saving this article through the Code editor. You can turn off this warning in your user profile. Ignore this warning in case this article does not contain PHP code. Read the Exec-PHP documentation if you are unsure what to do next."
+msgstr ""
+
+#: includes/write_ui.php:55
+msgid "Exec-PHP Widget Conversion Warning."
+msgstr ""
+
+#: includes/write_ui.php:56
+#, php-format
+msgid "Saving the widgets will render all contained PHP code permanently unuseful. Ignore this warning in case the text widgets do not contain PHP code. Read the Exec-PHP documentation if you are unsure what to do next."
+msgstr ""
+
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/exec-php/readme.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/exec-php/readme.txt Mon Feb 01 09:51:57 2010 +0000
@@ -0,0 +1,149 @@
+=== Exec-PHP ===
+Contributors: McShelby
+Tags: code, exec, execute, eval, php, run
+Requires at least: 2.0.11
+Tested up to: 2.8
+Stable tag: 4.9
+
+The Exec-PHP plugin executes PHP code in posts, pages and text widgets.
+
+== Description ==
+
+The Exec-PHP plugin executes PHP code in posts, pages and text widgets.
+
+Features:
+
+* Executes PHP code in the excerpt and the content portion of your posts and pages
+* Configurable execution of PHP code in text widgets (for WordPress 2.2 or higher)
+* Write PHP code in familiar syntax, eg. ``
+* Works in your newsfeeds
+* Information about which users are allowed to execute PHP with the current security settings (for WordPress 2.1 or higher)
+* Configurable user warnings for inappropriate blog and user settings (for WordPress 2.1 or higher)
+* Restrict execution of PHP code in posts and pages to certain users by using roles and capabilities
+* Update notifications through the 'Plugins' menu in WordPress if a new version of the Exec-PHP plugin is available (for WordPress 2.3 or higher)
+* Internationalization support (english and german included, many more available)
+* Comes with documentation
+
+For support and further information about the Exec-PHP plugin see the plugins homepage at [http://bluesome.net/post/2005/08/18/50/](http://bluesome.net/post/2005/08/18/50/ "Link to Exec-PHPs homepage").
+
+== Installation ==
+
+If you have ever installed a WordPress plugin, then installation will be pretty easy:
+
+1. Download the Exec-PHP plugin archive and extract the files
+1. Copy the resulting exec-php directory into /wp-content/plugins/
+1. Activate the plugin through the 'Plugins' menu of WordPress
+1. Configure blog and user settings if needed
+
+For support and further information about the Exec-PHP plugin see the plugins homepage at [http://bluesome.net/post/2005/08/18/50/](http://bluesome.net/post/2005/08/18/50/ "Link to Exec-PHPs homepage").
+
+== Frequently Asked Questions ==
+
+= Where do I get support and further information =
+
+For support and further information about the Exec-PHP plugin see the plugins homepage at [http://bluesome.net/post/2005/08/18/50/](http://bluesome.net/post/2005/08/18/50/ "Link to Exec-PHPs homepage").
+
+== Screenshots ==
+
+1. The Exec-PHP configuration menu
+2. An Exec-PHP warning in the 'Write' menu
+3. Exec-PHP warning configuration in the 'Users > Your Profile' menu
+
+== Changelog ==
+
+= 4.9 (2009-01-07) =
+* Requirements: WordPress 2.0.11 or higher
+* Feature: Improved performance during loading admin interface
+* Feature: New 'Settings' link in WordPress 'Plugin' menu
+* Feature: WYSIWYG Conversion Warning now also displays for WordPress 2.0.11
+
+= 4.8 (2008-07-05) =
+* Requirements: WordPress 2.0 or higher
+* Feature: Support for WordPress 2.6 (relocation of wp-content)
+
+= 4.7 (2008-05-05) =
+* Requirements: WordPress 2.0 or higher
+* Bugfix: For PHP4 the cache instance wasn't a reference, which was a bug but did not cause any known issues
+* Bugfix: Now Javascript works with single quotes for translated text
+* Feature: Increased performance for AJAX call
+* Feature: Better localization support inside of the plugin and the readme
+
+= 4.6 (2008-04-06) =
+* Requirements: WordPress 2.0 or higher
+* Feature: In case of AJAX error retry call at most three more times
+* Bugfix: Making Exec-PHP configuration menu valid XHTML
+
+= 4.5 (2008-03-24) =
+* Requirements: WordPress 2.0 or higher
+* Bugfix: Fixing WordPress 2.1.x compatibility
+* Bugfix: WYSIWYG Conversion Warning now displays correctly for pages, too
+* Change: Performance optimization during plugin initialization
+* Change: Nonintrusive AJAX error display
+* Feature: Plugin interface support for WordPress 2.5
+
+= 4.4 (2008-01-29) =
+* Requirements: WordPress 2.0 or higher
+* Bugfix: Incompatibilites with WP-Shopping-Cart because of Javascript global variable clash
+* Change: New directory structure
+
+= 4.3 (2007-12-11) =
+* Requirements: WordPress 2.0 or higher
+* Bugfix: Requirements lowered to WordPress 2.0 or higher
+* Bugfix: Delay loading of text translations to support language switching plugins
+* Feature: The WYSIWYG Conversion Warning can now be turned off through the Profile menu of the user
+
+= 4.2 (2007-11-03) =
+* Requirements: WordPress 2.2 or higher
+* Change: Remodeling the Information section of the plugin configuration menu
+* Feature: Showing security alarms in the Information section of the plugin configuration menu
+* Feature: A warning will be printed on the 'Write' and the 'Widgets' menu in case blog or user settings will screw up written PHP code during saving the article or widgets
+
+= 4.1 (2007-10-27) =
+* Requirements: WordPress 2.2 or higher
+* Bugfix: Display of the Exec-PHP configuration menu was restricted by an inappropriate capability
+* Bugfix: Making Exec-PHP configuration menu valid XHTML
+* Feature: The Exec-PHP configuration menu now displays which user is allowed to write and execute PHP. Display of this list is executed with AJAX. Therefore even for large WordPress installations with many users, the time to load the Exec-PHP configuration menu will still be satisfiying
+
+= 4.0 (2007-10-25) =
+* Requirements: WordPress 2.0 or higher
+* Bugfix: When the blog administrator removes the 'exec_php' capability from all roles, the plugin will not reassign the capability to the Administrator and Editor roles
+* Change: For new plugin installations only the Administrator role will be eligable to execute PHP code
+* Feature: Configurable execution of PHP code in text widgets through the Exec-PHP configuration menu. This will only work with native widgets support introduced in WordPress 2.2 or higher
+
+= 3.4 (2007-10-08) =
+* Requirements: WordPress 2.0 or higher
+* Feature: Now supports execution of code in text widgets
+* Feature: Now supports plugin upgrade notification through the 'Plugins' menu of WordPress by listing it in the official WordPress plugin repository
+
+= 3.3 (2007-08-11) =
+* Bugfix: Removing spaces around PHP code
+* Bugfix: Removing obsolete plugin hooks for WordPress 1.x
+
+= 3.2 (2007-02-10) =
+* Bugfix: Removing obsolete config interface hooks
+
+= 3.1 (2007-02-09) =
+* Bugfix: Removing tag style converter because a) it caused a serious slow down in the WordPress admin interface and b) PCRE proved to be very buggy and unreliable. Note for myself: Never use PCRE again!
+* Feature: Adding internationalization (just to be complete)
+* Feature: Now works in RSS feeds
+
+= 3.0 (2006-08-06) =
+* Feature: Removing all alternative PHP tag styles like [?php ?] and < ?php ?>, because regex was buggy and to tough to support
+* Feature: Removing support for WordPress 1.x, because regex was buggy and to tough to support
+* Feature: Moving plugin files to plugins subdirectory
+* Feature: Adding tag style converter
+* Feature: Adding support for excerpt field
+* Bugfix: Because of changes to PHP tag handling, the bug reported in comment 84 is fixed
+
+= 2.0 (2005-12-22) =
+* Feature: For WordPress 2.0 execution of PHP is now restricted to Administrators or Editors
+* Feature: Supporting alternative PHP tags [?php ?]
+
+= 1.2 (2005-12-04) =
+* Bugfix: Reparing issue with reopening PHP tags (Test #16)
+
+= 1.1 (2005-08-19) =
+* Bugfix: Escaped string delimiters in PHP strings are now parsed correctly
+
+= 1.0 (2005-08-18) =
+* Feature: Allows `` tags inside your articles to execute the code inside of it
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/exec-php/screenshot-1.png
Binary file web/wp-content/plugins/exec-php/screenshot-1.png has changed
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/exec-php/screenshot-2.png
Binary file web/wp-content/plugins/exec-php/screenshot-2.png has changed
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/exec-php/screenshot-3.png
Binary file web/wp-content/plugins/exec-php/screenshot-3.png has changed
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/nice-titles/nicetitle.css
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/nice-titles/nicetitle.css Mon Feb 01 09:51:57 2010 +0000
@@ -0,0 +1,25 @@
+div.nicetitle {
+ position: absolute;
+ padding: 4px;
+ top: 0px;
+ left: 0px;
+ color: white;
+ font-size: 10px;
+ font-family: Verdana, Helvetica, Arial, sans-serif;
+ width: 25em;
+ font-weight: bold;
+ background: url(ntbg.png);
+ z-index:1;
+
+ /* Mozilla proprietary */
+ -moz-border-radius: 0px;
+}
+div.nicetitle p {
+ margin: 0; padding: 0 3px;
+}
+div.nicetitle p.destination {
+ font-size: 8px;
+ text-align: left;
+ padding-top: 3px;
+ /*visibility: hidden;*/
+}
\ No newline at end of file
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/nice-titles/nicetitle.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/nice-titles/nicetitle.js Mon Feb 01 09:51:57 2010 +0000
@@ -0,0 +1,222 @@
+addEvent(window, "load", makeNiceTitles);
+
+var XHTMLNS = "http://www.w3.org/1999/xhtml";
+var CURRENT_NICE_TITLE;
+var browser = new Browser();
+
+function makeNiceTitles() {
+ if (!document.createElement || !document.getElementsByTagName) return;
+ // add namespace methods to HTML DOM; this makes the script work in both
+ // HTML and XML contexts.
+ if(!document.createElementNS)
+ {
+ document.createElementNS = function(ns,elt) {
+ return document.createElement(elt);
+ }
+ }
+
+ if( !document.links )
+ {
+ document.links = document.getElementsByTagName("a");
+ }
+ for (var ti=0;ti STD_WIDTH) {
+ w = h_pixels;
+ } else if ((STD_WIDTH>t_pixels) && (t_pixels>h_pixels)) {
+ w = t_pixels;
+ } else if ((STD_WIDTH>t_pixels) && (h_pixels>t_pixels)) {
+ w = h_pixels;
+ } else {
+ w = STD_WIDTH;
+ }
+
+ d.style.width = w + 'px';
+
+ /*
+ mx = lnk.offsetLeft;
+ my = lnk.offsetTop;
+ */
+ mpos = findPosition(lnk);
+ mx = mpos[0];
+ my = mpos[1];
+ //xy = getMousePosition(e);
+ //mx = xy[0]; my = xy[1];
+
+ d.style.left = (mx+15) + 'px';
+ d.style.top = (my+35) + 'px';
+ if (window.innerWidth && ((mx+w) > window.innerWidth)) {
+ d.style.left = (window.innerWidth - w - 25) + "px";
+ }
+ if (document.body.scrollWidth && ((mx+w) > document.body.scrollWidth)) {
+ d.style.left = (document.body.scrollWidth - w - 25) + "px";
+ }
+
+ document.getElementsByTagName("body")[0].appendChild(d);
+
+ CURRENT_NICE_TITLE = d;
+}
+
+function hideNiceTitle(e) {
+ if (!document.getElementsByTagName) return;
+ if (CURRENT_NICE_TITLE) {
+ document.getElementsByTagName("body")[0].removeChild(CURRENT_NICE_TITLE);
+ CURRENT_NICE_TITLE = null;
+ }
+}
+
+// Add an eventListener to browsers that can do it somehow.
+// Originally by the amazing Scott Andrew.
+function addEvent(obj, evType, fn){
+ if (obj.addEventListener){
+ obj.addEventListener(evType, fn, false);
+ return true;
+ } else if (obj.attachEvent){
+ var r = obj.attachEvent("on"+evType, fn);
+ return r;
+ } else {
+ return false;
+ }
+}
+
+function getParent(el, pTagName) {
+ if (el == null) return null;
+ else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase()) // Gecko bug, supposed to be uppercase
+ return el;
+ else
+ return getParent(el.parentNode, pTagName);
+}
+
+function getMousePosition(event) {
+ if (browser.isIE) {
+ x = window.event.clientX + document.documentElement.scrollLeft
+ + document.body.scrollLeft;
+ y = window.event.clientY + document.documentElement.scrollTop
+ + document.body.scrollTop;
+ }
+ if (browser.isNS) {
+ x = event.clientX + window.scrollX;
+ y = event.clientY + window.scrollY;
+ }
+ return [x,y];
+}
+
+// Determine browser and version.
+
+function Browser() {
+// blah, browser detect, but mouse-position stuff doesn't work any other way
+ var ua, s, i;
+
+ this.isIE = false;
+ this.isNS = false;
+ this.version = null;
+
+ ua = navigator.userAgent;
+
+ s = "MSIE";
+ if ((i = ua.indexOf(s)) >= 0) {
+ this.isIE = true;
+ this.version = parseFloat(ua.substr(i + s.length));
+ return;
+ }
+
+ s = "Netscape6/";
+ if ((i = ua.indexOf(s)) >= 0) {
+ this.isNS = true;
+ this.version = parseFloat(ua.substr(i + s.length));
+ return;
+ }
+
+ // Treat any other "Gecko" browser as NS 6.1.
+
+ s = "Gecko";
+ if ((i = ua.indexOf(s)) >= 0) {
+ this.isNS = true;
+ this.version = 6.1;
+ return;
+ }
+}
+
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/nice-titles/nt.php
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/nice-titles/nt.php Mon Feb 01 09:51:57 2010 +0000
@@ -0,0 +1,31 @@
+kryogenix.org.
+Version: 1.0
+Author: Showfom
+Author URI: http://showfom.com/
+
+**********************************************************************
+Copyright (c) 2009 Showfom
+Released under the terms of the GNU GPL: http://www.gnu.org/licenses/gpl.txt
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+**********************************************************************
+
+Installation: Upload the folder "nice-titles" with its contents to "wp-content/plugins/" and activate the plugin in your admin panel.
+*/
+
+function NiceTitles() {
+ /* Path for snow */
+ $ntPath = get_option('siteurl').'/wp-content/plugins/nice-titles/';
+ $ntJS .= ''."\n";
+ $ntJS .= ''."\n";
+ $ntJS .= ''."\n";
+ print($ntJS);
+}
+add_action('wp_head', 'NiceTitles');
+?>
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/nice-titles/ntbg.png
Binary file web/wp-content/plugins/nice-titles/ntbg.png has changed
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/nice-titles/readme.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/nice-titles/readme.txt Mon Feb 01 09:51:57 2010 +0000
@@ -0,0 +1,34 @@
+=== Plugin Name ===
+Contributors: Showfom
+Donate link: http://showfom.com/sweet-titles-wordpress-plugin/
+Tags: titles, pages
+Requires at least: 2.0.2
+Tested up to: 3.0
+Stable tag: trunk
+
+Nice Titles on your Wordpress Blog based on the Nice Titles script by http://www.kryogenix.org/code/browser/nicetitle/
+
+== Description ==
+
+Nice Titles on your Wordpress Blog based on the Nice Titles script by http://www.kryogenix.org/code/browser/nicetitle/
+
+== Installation ==
+
+
+1. Upload the folder "nice-titles" with its contents to "wp-content/plugins/".
+2. Activate the plugin in your admin panel.
+
+
+== Frequently Asked Questions ==
+
+= How to use =
+
+Upload the folder "nice-titles" with its contents to "wp-content/plugins/" and activate the plugin in your admin panel.
+
+
+== Screenshots ==
+1. `/trunk/screenshot-1.png`
+
+== Arbitrary section ==
+
+== A brief Markdown Example ==
\ No newline at end of file
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/nice-titles/screenshot-1.png
Binary file web/wp-content/plugins/nice-titles/screenshot-1.png has changed
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/order-categories/category-order.php
--- a/web/wp-content/plugins/order-categories/category-order.php Tue Jan 05 09:59:49 2010 +0000
+++ b/web/wp-content/plugins/order-categories/category-order.php Mon Feb 01 09:51:57 2010 +0000
@@ -17,9 +17,13 @@
}
function wpguy_category_order_scriptaculous() {
- if($_GET['page'] == "wpguy_category_order_options"){
- wp_enqueue_script('scriptaculous');
- }
+
+ if(array_key_exists('page',$_GET)){
+
+ if($_GET['page'] == "wpguy_category_order_options"){
+ wp_enqueue_script('scriptaculous');
+ }
+ }
}
add_action('admin_head', 'wpguy_category_order_options_head');
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/posts-of-current-category/posts-of-current-category.php
--- a/web/wp-content/plugins/posts-of-current-category/posts-of-current-category.php Tue Jan 05 09:59:49 2010 +0000
+++ b/web/wp-content/plugins/posts-of-current-category/posts-of-current-category.php Mon Feb 01 09:51:57 2010 +0000
@@ -6,6 +6,7 @@
Version: 0.1
Author: Anup Raj
Author URI: http://anupraj.com.np/home/
+// modified by sam 21/01/2010
*/
class posts_cur_cat extends WP_Widget {
@@ -147,12 +148,15 @@
$posts = get_posts($query); //get posts
$postlist = '';
foreach ($posts as $post) {
- $post_title = htmlspecialchars(stripslashes($post->post_title));
- $postlist .= '
';
}
+
?>
\ No newline at end of file
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/related-posts-by-category/related_posts.php
--- a/web/wp-content/plugins/related-posts-by-category/related_posts.php Tue Jan 05 09:59:49 2010 +0000
+++ b/web/wp-content/plugins/related-posts-by-category/related_posts.php Mon Feb 01 09:51:57 2010 +0000
@@ -6,6 +6,7 @@
Author: Sergej Müller
Version: 0.4
Author URI: http://www.wpseo.org
+// modified by samuel huron 20/01/01
*/
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/ultimate-google-analytics/readme.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/ultimate-google-analytics/readme.txt Mon Feb 01 09:51:57 2010 +0000
@@ -0,0 +1,56 @@
+=== Ultimate Google Analytics ===
+Contributors: wvanderdeijl
+Donate link: http://www.oratransplant.nl/uga/
+Tags: google analytics, google, statistics, stats, tracking
+Requires at least: 1.5.1.3
+Tested up to: 2.3.2
+Stable tag: trunk
+
+Adds Google Analytics JavaScript to each page on your weblog. Can also add tracking to outbound links, downloads from your site and mail links.
+
+== Description ==
+
+Plugin to add Google Analytics JavaScript to each page on your weblog without making any changes to your template. The plugin can also add tracking to outbound links, downloads from your own site and mailto: links.
+
+The plugin is highly configurable. Read trough the list of features below to get a feeling of what this plugin can do. You can enable and disable all features individually, although the default configuration will suffice for 90% of the users.
+
+**Features**
+
+* Start with a simple configuration screen and hide more advanced/complex configuration in an Advanced Configuration mode. Most users will suffice with the simple configuration screen. If you're interested in tweaking and tuning this plugin, use the advanced settings.
+* Do not make any changes to feeds, as it is not wise to include JavaScript in those
+* Add the same JavaScript tracker code to the admin pages if you want to track those as well (switched off with the default settings)
+* When adding the JavaScript tracker code to a page, put it at the end of the body. There are quite a few WordPress plugins for Google Analytics out there. Most of them include the JavaScript in the head section. This can delay the loading of your page and is not advised by Google
+* When using a WordPress theme that does not invoke the wp_footer hook as it is supposed to do, the JavaScript tracker code will be added to the head section. This can delay the loading of your page. The only way to prevent this, is to have the theme author implement the correct plugin calls, fix the theme yourself or start using another theme
+* Automatic check-for-updates to warn you (on the UGA Options page) if your version of Ultimate Google Analytics is outdated
+* Does not add the tracker code to the pages when a logged on user of a configurable userlevel requests a page. This can be used to ignore your own page views and not skew your statistics. (Default configuration ignores page hits from users level 8 and up)
+* Add tracking to outgoing links. You can also specify hostnames which should be considered internal (e.g. www.example.com, example.com and example.org). Links to these hostnames will be considered internal and the tracking event will not be added to those links. You can also specify the prefix to append to the link when sending it to Google Analytics so your outbound links will be logged to a logical directory structure. This way, you will be able to easily identify what pages visitors clicked on to leave your site. (The default configuration is to check outgoing links in the /outgoing/ directory at Google Analytics)
+* Add tracking to download links. You can specify which file extensions should be considered downloads. Only internal links to these filetypes will be tracked. Internal links are either relative links (without a hostname) or links to the hostnames you defined as internal. You can also specify the prefix to append to the link when sending it to Google Analytics so your download links will be logged to a logical directory structure. This way, you will be able to easily identify what files your visitors downloaded. (The default configuration contains a list of common file extensions to be marked as downloads. These are tracked in the /downloads/ directory at Google Analytics by default)
+* Add tracking to mailto: links. You can also specify the prefix to append to the link when sending it to Google Analytics so your mailto: links will be logged to a logical directory structure. This way, you will be able to easily identify what mailto: links your visitors clicked. (The default configuration is to track mailto: links in the /mailto/ directory at Google Anaytics)
+* Specify if the outgoing, download and mailto: links should be tracked in the postings only, the comments, the comment author URL or any combination of these three.
+
+== Installation ==
+
+Installing is as simple as downloading the file from this site, placing it in your wp-content/plugins directory and activating the plugin. For the more detailed instructions read on.
+
+1. Get a Google Analytics account at http://analytics.google.com.
+1. Download the Ultimate Google Analytics ZIP file (see download section above)
+1. Extract the zipfile and place the PHP file in the wp-content/plugins directory of your WordPress installation
+1. Go to the administration page of your WordPress installation (normally at http://www.yourblog.com/wp-admin)
+1. Click on the Plugins tab and search for Ultimate Google Analytics in the list
+1. Activate the Ultimate Google Analytics plugin
+1. You can now find an Ultimate GA page under Options to set the options of the plug-in
+1. If you're comfortable reading HTML and feel like it, you can look at the HTML source code of your blog pages to see the included Google Analytics tracker code at the end of the page. You could also check if an onClick event is added to the outbound, download and/or mailto: links as specified in your options. Make sure that youre not checking this as a logged on user if youve enabled Ignore Logged On Users. In that case, log out of WordPress before doing these checks. Also make sure you request your blog page at least twice to give the Ultimate Google Analytics plugin the change to detect is the wp_footer hook is called by your template.
+1. Wait until Google Analytics updates your reports. Currently it seems like this can take up to 24 hours. Note that by default Google Analytics selects a week ending yesterday as its reporting period. Click on today in the lefthand calendar to see todays statistics, if theyve already been reported.
+
+== Frequently Asked Questions ==
+
+= A question that someone might have =
+
+An answer to that question.
+
+== Screenshots ==
+
+1. This screen shot description corresponds to screenshot-1.(png|jpg|jpeg|gif). Note that the screenshot is taken from
+the directory of the stable readme.txt, so in this case, `/tags/4.3/screenshot-1.png` (or jpg, jpeg, gif)
+2. This is the second screen shot
+
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php Mon Feb 01 09:51:57 2010 +0000
@@ -0,0 +1,977 @@
+http://www.oratransplant.nl/uga/#versions for version updates
+Version: 1.6.0
+Author: Wilfred van der Deijl
+Author URI: http://www.oratransplant.nl/about
+*/
+
+/* Copyright 2006-2008 Wilfred van der Deijl (email : wilfred _at_ vanderdeijl.com)
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+*/
+
+/*
+ Version History
+ + = new/improved feature
+ ! = fixed bug
+ - = removed feature
+
+ version 0.1
+ Initial version
+
+ version 0.2
+ !: Prevent two consecutive forward slashes in the virtual path for a
+ download link if the URL for the link started with a forward slash
+ (e.g. /files/picture.jps would becomde /downloads//files/picture.jpg)
+ +: Default value for internal hostnames is no longer just the hostname
+ of the current webserver. If this hostnames starts with www. the
+ name without www is also added to the internal hostnames
+ (e.g. "www.oratransplant.nl,oratransplant.nl")
+ +: Renamed track_user to uga_track_user so all functions are prefixed
+ with uga to lower the chances of a naming conflict with another
+ plugin
+ +: Small HTML comment is placed before the Google Analytics tracker
+ to show it was inserted by the Ultimate Google Analytics plugin
+ +: Debugging has been added and can be enabled/disabled from the
+ Options page. It is disabled by default. If enabled, all debugging
+ info will be added as HTML comment in the footer of the page
+
+ version 1.0
+ +: Added filter to process links in the footer of a comment showing
+ the link to an author. This enables tracking of these outbound links
+ as well
+ +: Added phps as an extension for download tracking. Existing
+ installations of Ultimate Google Analytics will not be affected.
+ This only applies to the default settings on a fresh install.
+ +: If debugging is disabled an empty dummy function is created for
+ debugging to improve performance
+ +: Added "secret" option to force debugging directly to the output
+ stream and not rely on WordPress actions being called. This can
+ be helpfull when using a WordPress theme that does not call the
+ actions as it shoud
+ +: If content filtering is enabled, also add the filter for outbound,
+ mailto and download tracking to the "the_excerpt" filter for pages
+ showing only an excerpt and not the full article
+ !: The "Enable Tracker" option was not saved to the database. Disabling
+ the checkbox had no effect
+ +: Created a new function uga_set_option to save options to the database
+ +: The plugin now detects if the wp_footer action hook is called. Some
+ WordPress themes out there do not call this hook as they should.
+ If UGA detects this action cannot be hooked, the Google Analytics
+ code is added to the section. This can delay the loading of
+ your pages (see http://www.websiteoptimization.com/speed/tweak/delay/)
+ When the tracker is in the head section the page will not be rendered
+ by your browser until the script is executed. That is why Ultimate
+ Google Analytics will place the tracker at the end of the
+ section whenever possible.
+
+ version 1.1
+ !: The first page that is requested after some other user requested a
+ feed had the tracker code in the header in stead of the footer, even
+ if the Theme does support the footer action hook.
+ !: Corrected two typing errors in debug output
+
+ version 1.2
+ !: If a page was requested that did not call both the header and the
+ footer hook, UGA would conclude that the footer hook is not implemented
+ in your template. UGA would then revert to using the header hook to
+ put the tracking javascript. On the next page request that does
+ call both the head and footer hook, UGA would detect this and switch
+ back to putting the tracking code in footer.
+ On my blog this happened with the statistics page produced by
+ wp-stattraq. That page doesn't call either the head or footer hooked.
+ Before v1.2 UGA would just look if the footer was called and draw
+ conclusions from that. Now UGA checks execution of both the
+ header and footer hook. If none of these are executed it doesn't
+ switch its behaviour. It only switches to head if a page is requested
+ that does call the wp_head but does not call wp_footer
+ !: In the admin page, there was no space between "checked" and the closing
+ /> for all checkboxes. Apparently this caused problems when using
+ Safari
+
+ version 1.3
+ !: Another bugfix for a situation where the tracker code would sometimes
+ be inserted in the header. Will I ever get this right? :-(
+ This could occur when you're using a favicon.ico in your pages that
+ does not actually exist
+ +: Added check for updates in the options page
+
+ version 1.4
+ +: Add a comment in the generated HTML to indicate the Google Analytics
+ JavaScript was suppressed because a logged on user is requesting the
+ page. This prevents misunderstanding where people would think the
+ UGA plugin isn't working
+
+ version 1.5
+ !: Minor changes to the regular expressions. The old expressions could
+ wrongfully match in some rare cases
+ +: Download links using relative URLs are now rewritten to absolute URLs
+ in the urchinTracker. This makes sure that two different relative
+ URLs leading to the same file do get counted as the same file being
+ downloaded.
+ +: Configuration now starts with a very basic/simple screen and most
+ options are tucked away behind an "Advanced" button
+
+ version 1.5.1
+ !: Removed the usage of a PHP session to store whether the advanced
+ or basic configuration should be shown. Now storing as a parameter
+ in the database
+
+ version 1.5.2
+ +: Added option to reset to factory settings. This can be used in the
+ rare case that the settings array in the MySQL database is corrupted
+
+ version 1.5.3
+ !: Call load_plugin_textdomain from the init hook, not from the main
+ code. See http://www.oratransplant.nl/uga/#comment-40300 for more
+ information. Without this fix, Ultimate Google Analytics is not
+ compatible with the Gengo plugin.
+
+ version 1.6.0
+ +: Using the new Google Analytics tracking code (ga.js not urchin.js)
+
+*/
+
+// constants
+define('uga_version', '1.6.0', true);
+
+// Uncomment the following line to force debugging regardless setting in
+// the Control Panel. With this forced debugging, the info will be written
+// directly to the HTML and the plugin will not rely on any WordPress hooks
+// This can break your HTML code
+// define('uga_force_debug', 'enabled', true);
+
+// add debugging statement to the debug info
+// function is an empty dummy function is debugging is disabled
+$uga_options = get_option('ultimate_ga_options');
+$uga_debug_enabled=$uga_options['debug'];
+if (defined('uga_force_debug')) {
+ // force debugging
+ function uga_debug($message) {
+ global $uga_debug;
+ $uga_debug .= "$message\n";
+ echo "";
+ }
+} else if ($uga_debug_enabled) {
+ // normal debugging is enabled
+ function uga_debug($message) {
+ global $uga_debug;
+ $uga_debug .= "$message\n";
+ }
+} else {
+ // no debugging
+ function uga_debug($message) {
+ }
+}
+
+// set an Ultimate GA option in the options table of WordPress
+function uga_set_option($option_name, $option_value) {
+ uga_debug ("Start uga_set_option: $option_name, $option_value");
+ // first get the existing options in the database
+ $uga_options = get_option('ultimate_ga_options');
+ // set the value
+ $uga_options[$option_name] = $option_value;
+ // write the new options to the database
+ update_option('ultimate_ga_options', $uga_options);
+ uga_debug ('End uga_set_option');
+}
+
+// get an Ultimate GA option from the WordPress options database table
+// if the option does not exist (yet), the default value is returned
+function uga_get_option($option_name) {
+ uga_debug("Start uga_get_option: $option_name");
+
+ // get options from the database
+ $uga_options = get_option('ultimate_ga_options');
+ uga_debug('uga_options: '.var_export($uga_options,true));
+
+ if (!$uga_options || !array_key_exists($option_name, $uga_options)) {
+ // no options in database yet, or not this specific option
+ // create default options array
+ uga_debug('Constructing default options array');
+ $uga_default_options=array();
+ $uga_default_options['internal_domains'] = $_SERVER['SERVER_NAME'];
+ if (preg_match('@www\.(.*)@i', $uga_default_options['internal_domains'], $parts)>=1) {
+ $uga_default_options['internal_domains'] .= ','.$parts[1];
+ }
+ $uga_default_options['account_id'] = 'UA-XXXXXX-X';
+ $uga_default_options['enable_tracker'] = true;
+ $uga_default_options['track_adm_pages'] = false;
+ $uga_default_options['ignore_users'] = true;
+ $uga_default_options['max_user_level'] = 8;
+
+ $uga_default_options['footer_hooked'] = false; // assume the worst
+ $uga_default_options['filter_content'] = true;
+ $uga_default_options['filter_comments'] = true;
+ $uga_default_options['filter_comment_authors'] = true;
+ $uga_default_options['track_ext_links'] = true;
+ $uga_default_options['prefix_ext_links'] = '/outgoing/';
+ $uga_default_options['track_files'] = true;
+ $uga_default_options['prefix_file_links'] = '/downloads/';
+ $uga_default_options['track_extensions'] = 'gif,jpg,jpeg,bmp,png,pdf,mp3,wav,phps,zip,gz,tar,rar,jar,exe,pps,ppt,xls,doc';
+ $uga_default_options['track_mail_links'] = true;
+ $uga_default_options['prefix_mail_links'] = '/mailto/';
+ $uga_default_options['debug'] = false;
+ $uga_default_options['check_updates'] = true;
+ $uga_default_options['version_sent'] = '';
+ $uga_default_options['advanced_config'] = false;
+ uga_debug('uga_default_options: '.var_export($uga_default_options,true));
+ // add default options to the database (if options already exist,
+ // add_option does nothing
+ add_option('ultimate_ga_options', $uga_default_options,
+ 'Settings for Ultimate Google Analytics plugin');
+
+ // return default option if option is not in the array in the database
+ // this can happen if a new option was added to the array in an upgrade
+ // and the options haven't been changed/saved to the database yet
+ $result = $uga_default_options[$option_name];
+
+ } else {
+ // option found in database
+ $result = $uga_options[$option_name];
+ }
+
+ uga_debug("Ending uga_get_option: $option_name ($result)");
+ return $result;
+}
+
+// function to check for updates
+function uga_check_updates($echo) {
+ // prepare for making HTTP connection
+ $crlf = "\r\n";
+ $host = 'www.oratransplant.nl';
+ if ($_SERVER['SERVER_NAME']==$host) {
+ // overrule IP address for www.oratransplant.nl server itself
+ $host = $_SERVER['SERVER_ADDR'];
+ }
+ // open socket connection to oratransplant.nl server (timeout after 3 seconds)
+ $handle = fsockopen($host, 80, $error, $err_message, 3);
+ if (!$handle) {
+ if ($echo) {
+ echo __('Unable to get latest version', 'uga')." ($err_message)";
+ }
+ } else {
+ // build HTTP/1.0 request string
+ $req = 'GET http://'.$host.'/uga_version.php?version='.urlencode(uga_version)
+ . '&siteurl='.urlencode(get_option('siteurl')).' HTTP/1.0' . $crlf
+ . 'Host: '.$host. $crlf
+ . $crlf;
+ // send request to server and receive response
+ fwrite($handle, $req);
+ while(!feof($handle))
+ $response .= fread($handle, 1024);
+ fclose($handle);
+ // remove headers from the response
+ $splitter = $crlf.$crlf.'Latest version: ';
+ $pos = strpos($response, $splitter);
+ if ($pos === false) {
+ // no split between headers and body found
+ if ($echo) {
+ _e('Invalid response from server', 'uga');
+ }
+ } else {
+ $body = substr($response, $pos + strlen($splitter));
+ if ($body==uga_version) {
+ if ($echo) {
+ echo __('You are running the latest version', 'uga'). ' ('.uga_version.')';
+ }
+ } else {
+ if ($echo) {
+ _e ('You are running version', 'uga');
+ echo ' '.uga_version.'. ';
+ echo '';
+ _e ('Version', 'uga');
+ echo " $body ";
+ _e ('is available', 'uga');
+ echo '';
+ }
+ }
+ }
+ }
+}
+
+// function that is added as an Action to ADMIN_MENU
+// it adds an option subpage to the options menu in WordPress administration
+function uga_admin() {
+ uga_debug('Start uga_admin');
+ if (function_exists('add_options_page')) {
+ uga_debug('Adding options page');
+ add_options_page('Ultimate Google Analytics' /* page title */,
+ 'Ultimate GA' /* menu title */,
+ 8 /* min. user level */,
+ basename(__FILE__) /* php file */ ,
+ 'uga_options' /* function for subpanel */);
+ }
+ uga_debug('End uga_admin');
+}
+
+// displays options subpage to set options for Ultimate GA and save any
+// changes to these options back to the database
+function uga_options() {
+ uga_debug('Start uga_options');
+ if (isset($_POST['advanced_options'])) {
+ uga_set_option('advanced_config', true);
+ }
+ if (isset($_POST['simple_options'])) {
+ uga_set_option('advanced_config', false);
+ }
+ if (isset($_POST['factory_settings'])) {
+ $uga_factory_options = array();
+ update_option('ultimate_ga_options', $uga_factory_options);
+ ?>
+
+
+
track
+ uga_debug('User not logged on');
+ $result = true;
+ } else {
+ // user logged on
+ if (uga_get_option('ignore_users') &&
+ $user_level>=uga_get_option('max_user_level')) {
+ // ignore user because of userlevel
+ uga_debug("Not tracking user with level $user_level");
+ $result = false;
+ } else {
+ uga_debug("Tracking user with level $user_level");
+ $result = true;
+ }
+ }
+ uga_debug("Ending uga_track_user: $result");
+ return $result;
+}
+
+// returns true if a URL is internal. This is the case when a URL is
+// starts with any of the defined internal hostnames
+// The input URL has to be stripped of any protocol:// before calling this
+// function
+function uga_is_url_internal($url) {
+ // check if the URL starts with any of the "internal" hostnames
+ uga_debug("Start uga_is_url_internal: $url");
+ $url=strtolower($url);
+ $internal=false;
+ $internals=explode(',', uga_get_option('internal_domains'));
+ foreach ($internals as $hostname) {
+ uga_debug("Checking hostname $hostname");
+ $hostname=strtolower($hostname);
+ if (substr($url, 0, strlen($hostname))==$hostname) {
+ // URL starts with hostname of this website
+ uga_debug('Match found, url is internal');
+ $internal=true;
+ }
+ }
+ uga_debug("Ending uga_is_url_internal: $internal");
+ return $internal;
+}
+
+// strips the hostname from the beginning of a URL. The URL already has
+// to be stripped of any "protocol://" before calling this function
+function uga_remove_hostname($url) {
+ // removes hostname (including first /) from URL
+ // result never starts with a /
+ uga_debug("Start uga_remove_hostname: $url");
+ $pos=strpos($url, '/');
+ $result='';
+ if ($pos===false) {
+ // url is only a hostname
+ uga_debug('URL just hostname, return empty string');
+ $result='';
+ } else {
+ uga_debug('Stripping everything up until and including first /');
+ $result=substr($url, $pos+1);
+ }
+ uga_debug("Ending uga_remove_hostname: $result");
+ return $result;
+}
+
+// returns the trackerString for a mailto: link
+// will return an empty string when mailto: tracking is disabled
+function uga_track_mailto($mailto) {
+ // return tracker string for mailto: link
+ uga_debug("Start uga_track_mailto: $mailto");
+ $tracker='';
+ if (uga_get_option('track_mail_links')) {
+ $tracker=uga_get_option('prefix_mail_links').$mailto;
+ }
+ uga_debug("Ending uga_track_mailto: $tracker");
+ return $tracker;
+}
+
+// returns the trackerString for an internal download link
+// will return an empty string if this feature is disabled
+function uga_track_internal_url($url, $relative) {
+ // return tracker string for internal URL
+ // absolute url starts with hostname
+ uga_debug("Start uga_track_internal_url: $url, $relative");
+ $tracker='';
+ if (uga_get_option('track_files')) {
+ // check for specific file extensions on local site
+ uga_debug('Tracking files enabled');
+ if (strpos($url,'?') !== false) {
+ // remove query parameters from URL
+ $url=substr($url, 0, strpos($url, '?'));
+ uga_debug("Removed query params from url: $url");
+ }
+ // check file extension
+ $exts=explode(',', uga_get_option('track_extensions'));
+ foreach ($exts as $ext) {
+ uga_debug("Checking file extension $ext");
+ if (substr($url, -strlen($ext)-1) == ".$ext") {
+ // file extension found
+ uga_debug('File extension found');
+ if ($relative) {
+ uga_debug('Relative URL');
+ if (substr($url, 0, 1)=='/') {
+ // relative URL starts with / (root)
+ // remove starting slash as the prexif that will be appended
+ // already ends with /
+ $url=substr($url, 1);
+ uga_debug("Removed starting slash from url: $url");
+ } else {
+ // relative URL does not start with / (root)
+ // rewrite to URL that starts from root
+ uga_debug("Rewriting relative url: $url");
+ $base_dir=$_SERVER['REQUEST_URI']; // URI of currently requested page
+ uga_debug("Request URI: $base_dir");
+ if (strpos($base_dir,'?')) {
+ // strip query parameters
+ $base_dir=substr($base_dir, 0, strpos($base_dir,'?'));
+ }
+ if ('/'!=substr($base_dir, -1, 1)) {
+ // strip file name from base-URL
+ $base_dir=substr($base_dir, 0, strrpos($base_dir,'/')+1);
+ }
+ //$url=print_r($_SERVER,true).$base_dir;
+ $url=substr($base_dir.$url, 1);
+ uga_debug("Rewrote url to absolute: $url");
+ }
+ $tracker=uga_get_option('prefix_file_links').$url;
+ } else {
+ uga_debug('Absolute URL, remove hostname from URL');
+ // remove hostname from url
+ $tracker=uga_get_option('prefix_file_links').uga_remove_hostname($url);
+ }
+ }
+ }
+ }
+
+ uga_debug("Ending uga_track_internal_url: $tracker");
+ return $tracker;
+
+}
+
+// returns the trackerString for an external link
+// will return an empty string if this feature is disabled
+function uga_track_external_url($url) {
+ // return tracker string for external URL
+ // url is everything after the protocol:// (e.g. www.host.com/dir/file?param)
+ uga_debug("Start uga_track_external_url: $url");
+ $tracker='';
+ if (uga_get_option('track_ext_links')) {
+ uga_debug('Tracking external links enabled');
+ $tracker=uga_get_option('prefix_ext_links').$url;
+ }
+ uga_debug("Ending uga_track_external_url: $url");
+ return $tracker;
+}
+
+// returns the trackerString for an internal/external link
+// will return an empy string if tracking for this type of URL is disabled
+function uga_track_full_url($url) {
+ // url is everything after the protocol:// (e.g. www.host.com/dir/file?param)
+ uga_debug("Start uga_track_full_url: $url");
+
+ // check if the URL starts with any of the "internal" hostnames
+ $tracker = '';
+ if (uga_is_url_internal($url)) {
+ uga_debug('Get tracker for internal URL');
+ $tracker = uga_track_internal_url($url, false);
+ } else {
+ uga_debug('Get tracker for external URL');
+ $tracker = uga_track_external_url($url);
+ }
+ uga_debug("Ending uga_track_full_url: $tracker");
+ return $tracker;
+}
+
+// returns a (possibly modified) ... link with onClick event
+// added if tracking for this type of link is enabled
+// this function is used as callback function in a preg_replace_callback
+function uga_preg_callback($match) {
+ uga_debug("Start uga_preg_callback: $match");
+
+ // $match[0] is the complete match
+ $before_href=1; // text between ""
+ $href_value=2; // value of the href attribute
+ $a_content=4; // text between and tags
+
+ $result = $match[0];
+
+ // determine (if any) tracker string
+ $tracker='';
+ // disect target URL (1=protocol, 2=location) to determine type of URL
+ if (preg_match('@^([a-z]+)://(.*)@i', trim($match[$href_value]), $target) > 0) {
+ // URL with protocol and :// disected
+ uga_debug('Get tracker for full url');
+ $tracker = uga_track_full_url($target[2]);
+ } else if (preg_match('@^(mailto):(.*)@i', trim($match[$href_value]), $target) > 0) {
+ // mailto: link found
+ uga_debug('Get tracker for mailto: link');
+ $tracker = uga_track_mailto($target[2]);
+ } else {
+ // relative URL
+ uga_debug('Get tracker for relative (and thus internal) url');
+ $tracker = uga_track_internal_url(trim($match[$href_value]), true);
+ }
+
+ if ($tracker) {
+ // add onClick attribute to the A tag
+ uga_debug("Adding onclick attribute for $tracker");
+ $onClick="javascript:pageTracker._trackPageview('$tracker');";
+ $result=preg_replace('@]*?)href@i', // '@]*)>(.*?)<\s*/a\s*>';
+ $pattern = ']*?)href\s*=\s*[\'"](.*?)[\'"]([^>]*)>(.*?)';
+ uga_debug("Calling preg_replace_callback: $pattern");
+ $content = preg_replace_callback('@'.$pattern.'@i', 'uga_preg_callback', $content);
+ }
+ uga_debug("Ending uga_filter: $content");
+ return $content;
+}
+
+// insert a snippet of HTML in either the header or the footer of the page
+// we prefer to put this in the footer, but if the wp_footer() hook is not
+// called by the template, we'll use the header
+function uga_insert_html_once($location, $html) {
+ uga_debug("Start uga_insert_html_once: $location, $html");
+ global $uga_header_hooked;
+ global $uga_footer_hooked;
+ global $uga_html_inserted;
+ uga_debug("Footer hooked: $uga_footer_hooked");
+ uga_debug("HTML inserted: $uga_html_inserted");
+
+ if ('head'==$location) {
+ // header
+ uga_debug('Location is HEAD');
+ // notify uga_shutdown that the header hook got executed
+ $uga_header_hooked = true;
+ if (!uga_get_option('footer_hooked')) {
+ // only insert the HTML if the footer is not hooked
+ uga_debug('Inserting HTML since footer is not hooked');
+ echo $html;
+ $uga_html_inserted=true;
+ }
+ } else if ('footer'==$location) {
+ // footer
+ uga_debug('Location is FOOTER');
+ // notify uga_shutdown that the footer hook got executed
+ $uga_footer_hooked = true;
+ if (!$uga_html_inserted) {
+ // insert the HTML if it is not yet inserted by the HEAD filter
+ uga_debug('Inserting HTML');
+ echo $html;
+ }
+ } else if ('adm_footer'==$location) {
+ // footer of admin page
+ uga_debug('Location is ADM_FOOTER');
+ if (!$uga_html_inserted) {
+ // insert the HTML if it is not yet inserted by the HEAD filter
+ uga_debug('Inserting HTML');
+ echo $html;
+ }
+ }
+ uga_debug('End uga_insert_html');
+}
+
+// return snippet of HTML to insert in the page to activate Google Analytics
+function uga_get_tracker() {
+ uga_debug('Start uga_get_tracker');
+ $result='';
+ if (!uga_in_feed()) {
+ if (uga_track_user()) {
+ // add tracker JavaScript to the page
+ $result='
+
+
+
+';
+ } else {
+ // logged on user not tracked
+ $result='
+
+
+';
+ }
+ }
+ uga_debug("Ending uga_get_tracker: $result");
+ return $result;
+}
+
+// Hook function for wp_head action to (possibly) include the GA tracker
+function uga_wp_head_track($dummy) {
+ uga_debug("Start uga_wp_head_track: $dummy");
+ uga_insert_html_once('head', uga_get_tracker());
+ uga_debug("Ending uga_wp_head_track: $dummy");
+ return $dummy;
+}
+
+// Hook function for wp_footer action to (possibly) include the GA tracker
+function uga_wp_footer_track($dummy) {
+ uga_debug("Start uga_wp_footer_track: $dummy");
+ uga_insert_html_once('footer', uga_get_tracker());
+ uga_debug("Ending uga_wp_footer_track: $dummy");
+ return $dummy;
+}
+
+// Hook function for admin_footer action to (possibly) include the GA tracker
+function uga_adm_footer_track($dummy) {
+ uga_debug("Start uga_adm_footer_track: $dummy");
+ uga_insert_html_once('adm_footer', uga_get_tracker());
+ uga_debug("Ending uga_adm_footer_track: $dummy");
+ return $dummy;
+}
+
+// Hook function for init action to do some initialization
+function uga_init() {
+ uga_debug("Start uga_init");
+ // load texts for localization
+ load_plugin_textdomain('uga');
+ uga_debug("Ending uga_init");
+}
+
+// Hook function called during shutdown (end of page)
+// this determines if the wp_footer hooks executed. If not, UGA is configured
+// to insert its HTML in the header and not the footer
+// It also adds the debug-info as HTML comments if debugging is enabled
+function uga_shutdown() {
+ uga_debug('Start uga_shutdown');
+ global $uga_header_hooked;
+ global $uga_footer_hooked;
+
+ if (is_404()) {
+ // do not set the flag when building a 404 page. This can lead to problems
+ // with a non-existing favicon.ico. In that case the header is executed
+ // but the footer is not. We do not want this to lead to flipping the flag
+ uga_debug('Building 404 page, not setting footer_hooked flag');
+ } else if (uga_in_feed()) {
+ uga_debug('Building feed, not setting footer_hooked flag');
+ } else if (!uga_track_user()) {
+ uga_debug('Not tracking this user, not setting footer_hooked flag');
+ } else {
+ // determine appropriate value of footer_hooked flag
+ if (!$uga_footer_hooked && !$uga_header_hooked) {
+ // both the header and the footer hook did not execute
+ // probably building some special page (e.g. wp-stattraq reports page)
+ // do not change the flag to indicate whether the footer is hooked
+ uga_debug('Header and footer hook were not executed');
+ } else if ($uga_footer_hooked) {
+ // footer hooks executed
+ uga_debug('Footer hook was executed');
+ if (!uga_get_option('footer_hooked')) {
+ uga_debug('Changing footer_hooked option to true');
+ uga_set_option('footer_hooked', true);
+ }
+ } else {
+ // footer hook did not execute , but header hook did
+ uga_debug('Footer hook was not executed, but header hook did');
+ if (uga_get_option('footer_hooked')) {
+ uga_debug('Changing footer_hooked option to false');
+ uga_set_option('footer_hooked', false);
+ }
+ }
+ }
+
+ // write the debug info
+ if (uga_get_option('debug')) {
+ global $uga_debug;
+ echo "\n";
+ }
+ uga_debug('End uga_shutdown');
+}
+
+// **************
+// initialization
+
+uga_debug('Ultimate Google Analytics initialization');
+
+if (uga_get_option('check_updates') && uga_get_option('version_sent')!=uga_version) {
+ // this version has not been checked yet
+ uga_debug('Phone home with version number');
+ uga_set_option('version_sent', uga_version);
+ uga_check_updates(false);
+}
+
+// assume both header and footer are not hooked
+global $uga_header_hooked;
+global $uga_footer_hooked;
+$uga_header_hooked=false;
+$uga_footer_hooked=false;
+
+// add UGA Options page to the Option menu
+add_action('admin_menu', 'uga_admin');
+
+// add filters if enabled
+if (uga_get_option('enable_tracker') && uga_get_option('filter_content')) {
+ uga_debug('Adding the_content and the_excerpt filters');
+ add_filter('the_content', 'uga_filter', 50);
+ add_filter('the_excerpt', 'uga_filter', 50);
+}
+if (uga_get_option('enable_tracker') && uga_get_option('filter_comments')) {
+ uga_debug('Adding comment_text filter');
+ add_filter('comment_text', 'uga_filter', 50);
+}
+if (uga_get_option('enable_tracker') && uga_get_option('filter_comment_authors')) {
+ uga_debug('Adding get_comment_author_link filter');
+ add_filter('get_comment_author_link', 'uga_filter', 50);
+}
+
+// add actions if enabled
+if (uga_get_option('enable_tracker')) {
+ uga_debug('Adding wp_head and wp_footer action hooks for tracker');
+ add_action('wp_head', 'uga_wp_head_track');
+ add_action('wp_footer', 'uga_wp_footer_track');
+}
+if (uga_get_option('track_adm_pages')) {
+ uga_debug('Adding admin_footer action hook for tracker');
+ add_action('admin_footer', 'uga_adm_footer_track');
+}
+uga_debug('Adding init action hook');
+add_action('init', 'uga_init');
+uga_debug('Adding shutdown action hook for debugging and notice if wp_footer is hooked');
+add_action('shutdown', 'uga_shutdown');
+
+?>
\ No newline at end of file
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/wp-cumulus/license.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/wp-cumulus/license.txt Mon Feb 01 09:51:57 2010 +0000
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C)
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ Copyright (C)
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+.
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/wp-cumulus/readme.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/wp-cumulus/readme.txt Mon Feb 01 09:51:57 2010 +0000
@@ -0,0 +1,209 @@
+=== Plugin Name ===
+Contributors: weefselkweekje, LukeMorton
+Donate link: http://www.roytanck.com/about-my-themes/donations/
+Tags: tag cloud, flash, sphere, categories, widget, tags, 3D, cloud
+Requires at least: 2.3
+Tested up to: 2.9
+Stable tag: 1.23
+
+WP-Cumulus displays your tags and/or categories in 3D by placing them on a rotating sphere.
+
+== Description ==
+
+WP-Cumulus allows you to display your site's tags, categories or both using a Flash movie that rotates them in 3D. It works just like a regular tags cloud, but is more visually exciting. Clicking the tags can be a little hard (depending on your speed setting) but does take you to the appropriate page :).
+
+The sources code for the Flash movie are available from wordpress.org.
+
+== Installation ==
+
+= Installation =
+1. Make sure you're running WordPress version 2.3 or better. It won't work with older versions.
+1. Download the zip file and extract the contents.
+1. Upload the 'wp-cumulus' folder to your plugins directory (wp-content/plugins/).
+1. Activate the plugin through the 'plugins' page in WP.
+1. See 'Options->WP Cumulus' to adjust things like display size, etc...
+
+= In order to actually display the tag cloud, you have three options. =
+1. Create a page or post and type [wp-cumulus] anywhere in the content. This 'tag' will be replaced by the flash movie when viewing the page. See [here](http://www.roytanck.com/2009/03/11/how-to-use-wp-cumulus-shortcodes/) for more info.
+1. Add the following code anywhere in your theme to display the cloud. `` This can be used to add WP Cumulus to your sidebar, although it may not actually be wide enough in many cases to keep the tags readable.
+1. The plugin adds a widget, so you can place it on your sidebar through 'Appearance'->'Widgets'. Open the widget to access it's own set of settings (background color, size, etc).
+
+== Frequently Asked Questions ==
+
+= My theme/site appears not to like this plugin. It's not displaying correctly. =
+There are a number of things that may prevent WP-Cumulus from displaying or cause it to display a short message about how it needs the Flash plugin.
+
+* In 99% of all cases where this happens the issue is caused by markup errors in the page where the plugin is used. Please validate your blog using [validator.w3.org](http://validator.w3.org) and fix any errors you may encounter.
+* Older versions had issues with PHP 5.2 (or better). This has been fixed, so please upgrade to the latest version.
+* The plugin requires Flash Player 9 or better and javascript. Please make sure you have both.
+* There have been some cases where WordPress' Automatic Plugin Upgrade feature breaks the plugin. After upgrading the plugin the Flash movie file would be corrupt for some users. If this happens to you, please try disabling and reinstalling the plugin (through FTP).
+* Please try using the 'compatibility mode' if you're using version 1.20 or better. Although it's better to fix whatever is causing the issues with the normal mode, this can be used as a workaround solution.
+
+= Hey, but what about SEO? =
+I'm not sure how beneficial tag clouds are when it comes to SEO, but just in case WP Cumulus outputs the regular tag cloud (and/or categories listing) for non-flash users. This means that search engines will see the same links. They're hidden through CSS by default, but there's an options to make them visible.
+
+= I'd like to change something in the Flash movie, will you release the .fla? =
+As of version 1.12 the source code is available from wordpress.org under the GPL license. Click "other versions" and get the developer version.
+
+= Some of my tags occasionally hit the sides of the movie and are cropped =
+If this happens you should change the aspect for the movie to make it wider. This can be done by increasing the width, but also by decreasing the height. Both will make the movie 'more landscape' giving long tags more room.
+
+= Some characters are not showing up =
+Because of the way Flash handles text, only Latin characters are supported in the current version. This is due to a limitation where in order to be able to animate text fields smoothly the glyphs need to be embedded in the movie. The Flash movie's source code is available for download through Subversion. Doing so will allow you to create a version for your language. There's a text field in the root of the movie that you can use to embed more characters. If you change to another font, you'll need to edit the Tag class as well.
+
+More info [here](http://www.roytanck.com/2008/08/04/how-to-add-more-characters-to-wp-cumulus/).
+
+= When I click on tags, nothing happens. =
+This is usually caused by a Flash security feature that affects movies served from another domain as the surrounding page. If your blog is http://yourblog.com, but you have http://www.yourblog.com listed as the 'WordPress address' under Settings -> General this issue can occur. In this case you should adjust this setting to match your blog's actual URL. If you haven't already, I recommend you decide on a single URL for your blog and redirect visitors using other options. This will increase your search engine ranking and in the process help solve this issue :).
+
+= I'm not using WordPress... =
+* Steve Springett has ported this to Movable Type. More info over on [his site](http://www.6000rpms.com/blog/2008/04/04/flash-tag-cloud-for-mt-4.html).
+* Michael Robinson has ported WP-Cumulus to RapidWeaver, see his tutorial [here](http://pagesofinterest.net/mikes/blog_of_interest_files/tag_cloud.php).
+* Amanda Fazani managed to get Cumulus working on Blogger. More info on Blogumus [here](http://www.bloggerbuster.com/2008/08/blogumus-flash-animated-label-cloud-for.html).
+* Yannick Lejeune has done a [TypePad version](http://www.yannicklejeune.com/2008/09/tumulus-wp-cumu.html) based in part on Steve's work.
+* Christian Philipp's created a [TYPO3 version](http://typo3.org/extensions/repository/view/t3m_cumulus_tagcloud/current/).
+* Rob Antonishen did a [Serendipity version](http://spartacus.s9y.org/index.php?mode=bygroups_event_en) (search for serendipity\_event\_freetag).
+* Big Bear maintains the [Joomla version](http://joomlabear.com/Joomulus/).
+* Pratul Kalia and Bjrn Jacob have ported it to [Drupal](http://drupal.org/project/cumulus).
+* Ryan Tomlinson has a [BlogEngine.NET version](http://www.99atoms.com/post/BlogCumulusNET-A-flash-based-tag-cloud.aspx).
+* Colin Seymour has created a [Habari version](http://www.lildude.co.uk/projects/hb-cumulus/).
+* Andreas Scherer uses [DasBlog](http://www.scherer.as/blog/).
+* Jean-Yves Zinsou did an [eZ version](http://ez.no/developer/contribs/applications/ezcumulus).
+* [Simple Tags](http://utilitees.silenz.org/index.php/notes/page/simple-tags-1.6.3/), an Expression Engien addon can now display tags using Cumulus. Thanks Oliver Heine.
+* Catchpen ported Cumulus to [Social Web CMS](http://forums.socialwebcms.com/index.php?topic=672.0).
+* Domi create a [PHP-Fusion](http://www.venue.nu/forum/viewthread.php?thread_id=672) port.
+* [Bysoft](http://www.bysoft.fr/) did a [Magento](http://www.magentocommerce.com/extension/925/3d-advanced-tags-clouds-based-on-wp-cumulus--admin-manager-by-bysoft) version.
+* Benjamin Anseaume created a [Sweetcron](http://www.anseaume.com/items/site/anseaume.com) version.
+* I wrote [this post](http://www.roytanck.com/2008/05/19/how-to-repurpose-my-tag-cloud-flash-movie/) on how to use the flash movie in other contexts.
+
+This list is far from complete. Chances are you'll find the port you need through search engines. If you're having trouble setting it up, please contact the author(s) of the port.
+
+== Screenshots ==
+
+1. The tag sphere. You can set colors that match your theme on the plugin's options page.
+2. The options panel.
+3. There's a separate one for the widget.
+
+== Options ==
+
+The options page allows you to change the Flash movie's dimensions, change the text color as well as the background.
+
+= Width of the Flash tag cloud =
+The movie will scale itself to fit inside whatever dimensions you decide to give it. If you make it really small, chances are people will not be able to read less-used tags that are further away. Anything up from 300 will work fine in most cases.
+
+= Height of the Flash tag cloud =
+Ideally, the height should be something like 3/4 of the width. This will make the rotating cloud fit nicely, while the extra width allows for the tags to be displayed without cropping. Western text is horizontal by nature, which is why the ideal aspect is slightly landscape even though the cloud is circular.
+
+= Color of the tags =
+Type the hexadecimal color value you'd like to use for the tags, but not the '#' that usually precedes those in HTML. Black (000000) will obviously work well with light backgrounds, white (ffffff) is recommended for use on dark backgrounds. Optionally, you can use the second input box to specify a different color. When two colors are available, each tag's color will be from a gradient between the two. This allows you to create a multi-colored tag cloud. The third input box lets you specify a mouseover highlight color.
+
+= Background color =
+The hex value for the background color you'd like to use. This options has no effect when 'Use transparent mode' is selected.
+
+= Use transparent mode =
+Turn on/off background transparency. Enabling this might cause issues with some (mostly older) browsers.
+
+= Rotation speed =
+Allows you to change the speed of the sphere. Options between 25 and 500 work best.
+
+= Distribute tags evenly on sphere =
+When enabled, the movie will attempt to distribute the tags evenly over the surface of the sphere.
+
+= Display =
+Choose whether to show tags only, categories only, or both mixed together. Choosing 'both' can result in 'duplicate tags' if you have categories and tags with the same name. These words will appear twice, with one linking to the tag and the other to the category overview.
+
+= wp tag cloud parameters =
+This setting allows you to pass parameters to the wp\_tag\_cloud function, which is used to fetch the tag cloud. Use caution with this setting. Everything you enter will be passed to the function. Be sure to read the function's manual. Please also note that these parameters affect tags only. If you've chosen to show categories or both, the category 'tags' will not be affected.
+
+
+== Changelog ==
+
+= 1.23 =
+* Patches a potential XSS vulnerability (thanks to MustLive for alerting me to this).
+* Updates the credits to reflact that WP-Cumulus is now a team effort.
+* Implements the new changelog standard in the readme file.
+
+= 1.22 =
+* Fixes some minor HTML issues in the 'compatibility mode'.
+* Patches a potential XSS vulnerability (thanks to Thomas Scholz for alerting me to this).
+
+= 1.21 =
+* Adds an option to show the regular tag cloud to non-flash users (used to be hidden through CSS).
+* The widget title is now optional.
+* Adds support for 'target' attribute to the Flash movie.
+* XML path can now be set through a flashvar.
+* Fixed markup errors in the compatibility mode.
+* Several minor fixes.
+
+= 1.20 =
+* Adds a 'compatibility mode' which uses a simpler, non-javascript, way of embedding the Flash.
+* Adds proper shortcode support (See [here](http://www.roytanck.com/2009/03/11/how-to-use-wp-cumulus-shortcodes/) for more info)
+* Adds Turkish language support to the Flash movie.
+* Improves the plugin's default settings.
+
+= 1.19 =
+* Fixed the mouse pointer not changing to a hand when hovering tags.
+* Flash code cleanup
+
+= 1.18 =
+* Adds the ability to override individual tag colors when using the movie outside of WordPress (since WordPress has no color setting for tags).
+* Improves mouse detection in transparent mode
+* Fixes a bug affecting blogs with the admin using https.
+
+= 1.17 =
+* Fixes an issue with localized style sheet point sizes (e.g. 9,55pt instead of 9.55pt)
+* Adds an optional highlight color setting
+
+= 1.16 =
+* Fixes an issue with categories being rendered black when all of them have the same number of posts.
+* Reduces the default font size (from the biggest possible to "medium") in that same situation.
+* Significantly reduces CPU load when the cloud isn't moving.
+
+= 1.15 =
+* Adds the possibility to create a multi-colored tag cloud by entering a second tag color.
+
+= 1.14 =
+* Fixes an issue where no tags are displayed when viewing the movie locally in MSIE.
+* Fixes an issue where one random tag would not be displayed.
+
+= 1.13 =
+* No longer breaks when the wp-content folder is moved to a non-standard location.
+
+= 1.12 =
+* First version hosted on WordPress.org, and released under GPL license.
+* Uses the Arial font to avoid font licensing issues.
+
+= 1.11 =
+* Restores an earlier fix for IE to force loading of the Flash movie.
+
+= 1.1 =
+* Complete rewrite of the Flash movie (Actionscript 3, requires Flash Player 9 or better).
+* Better mouse detection.
+* Adds option to distribute the tags evenly over the sphere.
+* Adds support for categories.
+* Adds the ability to pass parameters to the WordPress wp_tag_cloud function.
+* Several smaller enhancements.
+
+= 1.05 =
+* Fixes several issues with IE, including an issue where it was impossible to use the regular version and the widget on the same page. Thanks to Fadi for alerting me to these.
+
+= 1.04 =
+* Fixes the 'it kills my blog' error for people using PHP 5.2 or newer. Thanks to Mujahid for helping me debug this.
+* Speed improvements in the Flash code.
+
+= 1.03 =
+* Removes the wp_head hook in yet another attempt to fix issues with some other plugins and themes.
+* Reduces system overhead by storing less options.
+* Adds setting for speed.
+* Adds a widget with seperate options (size, colors, speeds, etc).
+* Attemps to detect when the mouse leaves the movie, reducing the 'spinning, but not out of control' effect.
+* Several minor fixes.
+
+= 1.02 =
+* Fixes issues with sites not loading after activation, reduces server load and fixes lost spaces in tags. Thanks to Dimitry for helping me debug these issues.
+
+= 1.01 =
+* Fixes an issue where the cloud would spin out of control when the browsers loses focus on OSX.
+
+= 1.00 =
+* Initial release version.
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/wp-cumulus/screenshot-1.png
Binary file web/wp-content/plugins/wp-cumulus/screenshot-1.png has changed
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/wp-cumulus/screenshot-2.png
Binary file web/wp-content/plugins/wp-cumulus/screenshot-2.png has changed
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/wp-cumulus/screenshot-3.png
Binary file web/wp-content/plugins/wp-cumulus/screenshot-3.png has changed
diff -r fb7cd02b9848 -r 561aa6d282f6 web/wp-content/plugins/wp-cumulus/swfobject.js
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/web/wp-content/plugins/wp-cumulus/swfobject.js Mon Feb 01 09:51:57 2010 +0000
@@ -0,0 +1,133 @@
+/**
+ * SWFObject v1.4: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
+ *
+ * SWFObject is (c) 2006 Geoff Stearns and is released under the MIT License:
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * **SWFObject is the SWF embed script formarly known as FlashObject. The name was changed for
+ * legal reasons.
+ */
+if(typeof deconcept=="undefined"){var deconcept=new Object();}
+if(typeof deconcept.util=="undefined"){deconcept.util=new Object();}
+if(typeof deconcept.SWFObjectUtil=="undefined"){deconcept.SWFObjectUtil=new Object();}
+deconcept.SWFObject=function(_1,id,w,h,_5,c,_7,_8,_9,_a,_b){
+if(!document.createElement||!document.getElementById){return;}
+this.DETECT_KEY=_b?_b:"detectflash";
+this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);
+this.params=new Object();
+this.variables=new Object();
+this.attributes=new Array();
+if(_1){this.setAttribute("swf",_1);}
+if(id){this.setAttribute("id",id);}
+if(w){this.setAttribute("width",w);}
+if(h){this.setAttribute("height",h);}
+if(_5){this.setAttribute("version",new deconcept.PlayerVersion(_5.toString().split(".")));}
+this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion(this.getAttribute("version"),_7);
+if(c){this.addParam("bgcolor",c);}
+var q=_8?_8:"high";
+this.addParam("quality",q);
+this.setAttribute("useExpressInstall",_7);
+this.setAttribute("doExpressInstall",false);
+var _d=(_9)?_9:window.location;
+this.setAttribute("xiRedirectUrl",_d);
+this.setAttribute("redirectUrl","");
+if(_a){this.setAttribute("redirectUrl",_a);}};
+deconcept.SWFObject.prototype={setAttribute:function(_e,_f){
+this.attributes[_e]=_f;
+},getAttribute:function(_10){
+return this.attributes[_10];
+},addParam:function(_11,_12){
+this.params[_11]=_12;
+},getParams:function(){
+return this.params;
+},addVariable:function(_13,_14){
+this.variables[_13]=_14;
+},getVariable:function(_15){
+return this.variables[_15];
+},getVariables:function(){
+return this.variables;
+},getVariablePairs:function(){
+var _16=new Array();
+var key;
+var _18=this.getVariables();
+for(key in _18){
+_16.push(key+"="+_18[key]);}
+return _16;
+},getSWFHTML:function(){
+var _19="";
+if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){
+if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","PlugIn");}
+_19="