DokuWiki

It's better when it's simple

User Tools

Site Tools


plugin:wikindx

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
plugin:wikindx [2009-10-06 10:40] – tag cleanup layneeplugin:wikindx [2024-02-20 02:17] (current) – +Kaos compatibility 2001:41d0:fe9d:6700:dd5:214c:9e49:4aee
Line 2: Line 2:
  
 ---- plugin ---- ---- plugin ----
-description: interact with a wikindx site (see wikindx.sf.net) +description: interact with a wikindx site 
-author     : Andreas Wagner +author     : Andreas Wagner, Stéphane Aulery 
-email      : Andreas.Wagner@em.uni-frankfurt.de+email      : Andreas.Wagner@em.uni-frankfurt.de, lkppo@users.sourceforge.net
 type       : Syntax type       : Syntax
-lastupdate : 2008-11-26 +lastupdate : 2024-01-27 
-compatible : +compatible : Hogfather, Igor, Jack Jackrum, Kaos+
 depends    :  depends    : 
 conflicts  conflicts 
 similar    : refworks similar    : refworks
-tags       : citationreference, bibliography, wikindx+tags       : quotes,references,bibliography,wikindx 
 +downloadurl: https://sourceforge.net/projects/wikindx/files/third_party/dokuwiki_plugin_wikindx_v2.zip/download 
 +bugtracker : https://sourceforge.net/p/wikindx/v5bugs/ 
 +sourcerepo : https://sourceforge.net/p/wikindx/svn/HEAD/tree/third_party_plugins/dokuwiki_plugin/ 
 +donationurl: https://sourceforge.net/donate/index.php?group_id=94435
 ---- ----
  
-=== usage === +This plugin allows you to call a website made with [[https://wikindx.sourceforge.io/|WIKINDX]] to embed nice referencesdisplay quotes and provide the list of references accessed in this way.
-you can call on the wikindx site to give you a nice reference by putting %%{{wikindx>id}}%% in your textwhere id is the resource id from the wikindx database (okay, these are not very intuitive, but you need not much digging to find them).+
  
-You can specify particular sections in that resource like this: %%{{wikindx>12345:place}}%%, where place can be a page number, a range of pages, a roman number, etc. just anything except for %%}}%% and %%;%%.+===== Compatibility =====
  
-You can specify several resources by separating them with ;: %%{{wikindx>1234:1-4;5678:chapter 5}}%%.+This plugin is compliant with WIKINDX 6.6.0 and higher.
  
-Now you can also use a tag %%{{wikindxbib}}%% to have it output a list of all references used on this page.+===== Usage =====
  
-Update 2008-11-26: With the version at the bottom, now you can use %%{{wxbib}}%% and %%{{wxcite>id}}%% instead of %%{{wikindxbib}}%% and %%{{wikindx>id}}%% respectively. Also, you can now use %%{{wxnote>id}}%% to display the note of the resource with the id "id". On the other hand, this only works if you make some modifications wo wikindx's cmsprint.php and core/cms/CMS.php...+=== References ===
  
 +By putting things like ''%%{{wxcite>rid}}%%'' in your text (where rid is the resource id from the wikindx database), a reference to this work is displayed.
  
-=== syntax.php === +You can specify particular sections in that resource like this: ''%%{{wxcite>12345:place}}%%'', where place can be a page number, a range of pages, a roman number, etcjust anything except for %%}}%% and %%;%%.
-You have to specify the wikindx site in the WKX_URL variable in the class syntax_plugin_wikindx. Citation formatting is done by the configuration of the wikindx site...+
  
-Old version:+You can specify several resources by separating them with a semicolon (';') like this:
  
-<code php> +''%%{{wxcite>1234:1-4;5678:chapter 5}}%%'' 
-<?php + 
-/** +Which can give for example: 
-* Wikindx Citation Module + 
-* Derived from: Refworks Plugin by Daniel Terry, Amazon Plugin by Andreas Gohr +<code> 
-+(1-4 Du Mesnil Du Buisson 1958, chapter 5 de La Hylais 1895–1990)
-* @license    GPL (http://www.gnu.org/licenses/gpl.html) +
-* @author     Andreas Wagner <Andreas.Wagner@em.uni-frankfurt.de> +
-+
-* TODO: SECURITY checking!!! +
-*       Provide switch to not insert a citation into the tracking array +
-*       Also directly access notes, quotes, musings etc., authors, categories, lists etc. +
-+
-*/ +
-  +
-if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); +
-if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); +
-require_once(DOKU_PLUGIN.'syntax.php'); +
-  +
-/* have an array ready to keep track of all cited works on the page */ +
-global $WKX_USED_IDS; +
-  +
-/** +
-* All DokuWiki plugins to extend the parser/rendering mechanism +
-* need to inherit from this class +
-*/ +
-class syntax_plugin_wikindx extends DokuWiki_Syntax_Plugin +
-{ +
-    var $WKX_URL = 'http://my-wikindx.site/'; +
-  +
-    //Report module information +
-    function getInfo() +
-    { +
-        return array( +
-                'author' ='Andreas Wagner', +
-                'email'  => 'Andreas.Wagner@em.uni-frankfurt.de', +
-                'date'   => '2008-05-27', +
-                'name'   => 'Wikindx Citation Module', +
-                'desc'   => 'Insert citations as links to a Wikindx wiki (and have that format the text used as link)', +
-                'url'    => 'http://www.dokuwiki.org/plugin:wikindx', +
-        ); +
-    } +
-  +
-    function getType()  { return 'substition';+
-  +
-    // Just after build in links +
-    function getSort()  { return 217; } +
-  +
-    // Grab everything between {{wikindx> and }}  (resp. grab {{wikindxbib}}) +
-    function connectTo($mode) +
-    { +
-        $this->Lexer->addSpecialPattern('\{\{(?:wikindxbib|wikindx>[^}]*?)\}\}',$mode,'plugin_wikindx'); +
-    } +
-  +
-    /** +
-     * Handle the match +
-     */ +
-    function handle($match, $state, $pos, &$handler) +
-    { +
-        global $WKX_USED_IDS; +
-        if($match=='{{wikindxbib}}'+
-        { +
-                $callingmodus="bib"; +
-                $ids=array_unique($WKX_USED_IDS); +
-        } +
-        else +
-        { +
-                $callingmodus="cite"; +
-                $data = trim(substr($match,10,-2));     // strip '{{wikindx>' from start and '}}' from end +
-                $data = trim($data,";");               //remove trailing ; +
-                $ids = split(";",$data); +
-        } +
-  +
-        //Error checking?? +
-        //if (!$data) { +
-        //    trigger_error('Bad Things happening'.htmlspecialchars($match), E_USER_WARNING); +
-        //    return FALSE; +
-        //} +
-  +
-        //Lookup data +
-        $http = new DokuHTTPClient(); +
-        foreach($ids as $id) +
-        { +
-                list($resId,$page) = explode(':',$id); +
-                if($callingmodus!="bib"+
-                        $WKX_USED_IDS[] = $resId; +
-                $callmode[] = $callingmodus; +
-                $resourceId[] = $resId; +
-                $pages[] = $page; +
-                $linkUrl[] = $this->WKX_URL . "index.php?action=resourceView&id=" . $resId; +
-                $queryUrl  = $this->WKX_URL . "cmsprint.php?action=getResource&id=" . $resId; +
-                $html  = $http->get($queryUrl); +
-                if(!empty($html)) +
-                { +
-                        $array = unserialize(base64_decode($html)); +
-                        foreach($array as $rid => $item) +
-                        { +
-                                $resourceHtml[] = $item; +
-                        } +
-                } +
-        } +
-        return array($resourceId, $resourceHtml, $pages, $linkUrl, $callmode); +
-    } +
-  +
-    /** +
-     * Create output +
-     */ +
-    function render($mode, &$renderer, $data) +
-    { +
-        if($mode != 'xhtml')  { return false; } +
-  +
-        global $WKX_USED_IDS; +
-        $output = ""; +
-  +
-        for($i=0;$i<count($data[0]);$i++) +
-        { +
-                $output .= "<a href=\"" . $data[3][$i] . "\">" . trim($data[1][$i],"."); +
-                if($data[2][$i]) +
-                        $output .= ", " . $data[2][$i]; +
-                $output .= "</a>"; +
-                if(($data[4][$i]=="cite") AND ($i < count($data[0]) -1)) +
-                        $output .= "; "; +
-                if($data[4][$i]=="bib") +
-                        $output .= "<br />"; +
-        } +
-        $renderer->doc .= $output; +
-        return true; +
-    } +
-+
-  +
-//Setup VIM: ex: et ts=4 enc=utf-8 :+
 </code> </code>
  
 +=== Bibliography ===
  
-New Version 2008-11-26: +To create list of all references used on this page, use the tag ''%%{{wxbib}}%%'' at the end of the page (i.eafter all the works that you want included have been cited).
-<code php> +
-<?php +
-/** +
-* Wikindx Citation Module +
-* Derived from: Refworks Plugin by Daniel Terry, Amazon Plugin by Andreas Gohr +
-+
-* @license    GPL (http://www.gnu.org/licenses/gpl.html) +
-* @author     Andreas Wagner <Andreas.Wagner@em.uni-frankfurt.de> +
-+
-* TODO:  +
-* SECURITY checking!!! +
-*       Provide switch to not insert citation into the tracking array +
-* Provide switch to only insert a short citation +
-* Allow inclusion of quotes/musings etc. +
-* Allow to put bibliography before all the citations?  +
-+
-*/ +
-  +
-if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); +
-if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); +
-require_once(DOKU_PLUGIN.'syntax.php'); +
-  +
-/* have an array ready to keep track of all cited works on the page */ +
-global $WKX_USED_IDS; +
-  +
-/** +
-* All DokuWiki plugins to extend the parser/rendering mechanism +
-* need to inherit from this class +
-*/ +
-class syntax_plugin_wikindx extends DokuWiki_Syntax_Plugin +
-+
-    var $WKX_URL = 'http://my-wikindx.site/'; +
-  +
-    //Report module information +
-    function getInfo() +
-    { +
-        return array( +
-                'author' => 'Andreas Wagner', +
-                'email'  => 'Andreas.Wagner@em.uni-frankfurt.de', +
-                'date'   => '2008-11-26', +
-                'name'   => 'Wikindx Citation Module', +
-                'desc'   => 'Insert citations as links to a Wikindx wiki (and have that format the text used as link)'+
-                'url'    => 'http://wiki.splitbrain.org/plugin:wikindx', +
-        ); +
-    } +
-  +
-    function getType()  return 'substition';+
-  +
-    // Just after build in links +
-    function getSort()  return 217; } +
-  +
-    // Grab everything between {{wikindx> and }}  (resp. grab {{wikindxbib}}) +
-    function connectTo($mode) +
-    { +
-//        $this->Lexer->addSpecialPattern('\{\{(?:wikindxbib|wikindx>[^}]*?)\}\}',$mode,'plugin_wikindx'); +
-        $this->Lexer->addSpecialPattern('\{\{(?:wikindxbib|wxbib|wikindx>[^}]*?|wxcite>[^}]*?|wxnote>[^}]*?)\}\}',$mode,'plugin_wikindx'); +
-    } +
-  +
-    /** +
-     * Handle the match +
-     */ +
-    function handle($match, $state, $pos, &$handler) +
-    { +
-        global $WKX_USED_IDS; +
- if ($match=='{{wikindxbib}}' || $match=='{{wxbib}}') { +
- $callingmodus="bib"; +
- $ids=array_unique($WKX_USED_IDS); +
-+
- else { +
-     switch(substr($match, 0, strpos($match, '>')+1)) { +
- case '{{wxcite>': +
-     $callingmodus="cite"; +
-     $data = trim(substr($match,9,-2));     // strip '{{wikindx>' from start and '}}' from end +
-     break; +
- case '{{wikindx>': +
-     $callingmodus="cite"; +
-     $data = trim(substr($match,10,-2));     // strip '{{wikindx>' from start and '}}' from end +
-     break; +
- case '{{wxnote>': +
-     $callingmodus="note"; +
-     $data = trim(substr($match,9,-2));     // strip '{{wikindx>' from start and '}}' from end +
-     break; +
-     } +
-     $data = trim($data,";");               //remove trailing ; +
-     $ids = split(";",$data); +
-+
-       //Error checking?? +
-        //if (!$data) { +
-        //    trigger_error('Bad Things happening: '.htmlspecialchars($match), E_USER_WARNING); +
-        //    return FALSE; +
-        //} +
-  +
-        //Lookup data +
-        $http = new DokuHTTPClient(); +
-        foreach($ids as $id) +
-        { +
-                list($resId,$page) = explode(':',$id); +
-                if($callingmodus!="bib"+
-                        $WKX_USED_IDS[] = $resId; +
-                $callmode[] = $callingmodus; +
-                $resourceId[] = $resId; +
-                $pages[] = $page; +
-                $linkUrl[] = $this->WKX_URL "index.php?action=resourceView&id=" . $resId; +
- switch($callingmodus+
-     case 'note': +
- $queryUrl  = $this->WKX_URL "cmsprint.php?action=getNote&id=" . $resId; +
- $htmlIsCoded = FALSE; +
- $htmlIsArray = FALSE; +
- break; +
-     case 'cite': +
-     default: +
- $queryUrl  = $this->WKX_URL . "cmsprint.php?action=getResource&id=" . $resId; +
- $htmlIsCoded = TRUE; +
- $htmlIsArray = TRUE; +
-+
-                $html = $http->get($queryUrl); +
-                if(!empty($html)) +
-                { +
- if($htmlIsCoded) +
-     $html = base64_decode($html); +
-                        if(!$htmlIsArray) +
-     $resourceHtml[] = $html; +
- else { +
-     $array = unserialize($html); +
-     foreach($array as $rid => $item) +
- $resourceHtml[] = $item; +
-+
-                } +
-        } +
-        return array($resourceId, $resourceHtml, $pages, $linkUrl, $callmode); +
-    } +
-  +
-    /** +
-     * Create output +
-     */ +
-    function render($mode, &$renderer, $data) +
-    { +
-        if($mode != 'xhtml' { return false; } +
-  +
-        global $WKX_USED_IDS; +
-        $output = "";+
  
-        for($i=0;$i<count($data[0]);$i++) +=== Abstract, Notes === 
-        { + 
-                $output .= "<href=\"" $data[3][$i] "\">" trim($data[1][$i],"."); +You can use ''%%{{wxnotes>rid}}%%'' and ''%%{{wxabstract>rid}}%%'' to display the notes and abstract fields of the resource with the id "rid". 
-                if($data[2][$i]) + 
-                        $output .= ", " . $data[2][$i]+ 
-                $output ."</a>"; +=== Quotes, Musings, Paraphrases === 
-                if(($data[4][$i]=="cite") AND ($i < count($data[0]) -1)+ 
-                        $output .= "; "; +You can display quotes and such like this: ''%%{{wxquote>rid:number}}%%'', ''%%{{wxmusing>rid:number}}%%'', ''%%{{wxparaphrase>rid:number}}%%''. Here rid is the id resource and number the index of a public quoted/paraphrased work again of that resource. It provides the possibility to select one of several quotes/musings. 
-                if($data[4][$i]=="bib") + 
-                        $output .= "<br />"; +===== Configuration ===== 
-        } + 
-        $renderer->doc .= $output; +You have to use the Configuration Manager to set the **base_url** of your WIKINDX website and you preferred **bibliography style**. 
-        return true; + 
-    } +If the main page of your personal WIKINDX website is [[https://mywikindx.fr/index.php]] you have to set the //wikindx url// parameter as [[https://mywikindx.fr/]]. That is, without the name of the index.php page, and keeping the "/" terminal. 
-} + 
-  +===== Limitation ===== 
-//Setup VIMex: et ts=4 enc=utf-8 : + 
-</code>+  * Depending on your installation, the rendering may be very slow or buggy (skipped formattingif the web server of the WIKINDX site does not respond in time.  
 +  * Only officials styles are supported
 +  * The plugin is design for a single user WIKINDX / Dokuwiki installation. 
 +  * Footnote styles are not rendering as footnotes in v1 of the plugin. 
 +  * This plugin is still experimental. 
 +  * Unimplemented Hooks: getAll, getCategory, getCollection, getCreator, getKeyword, getMetadataWithId, getPublisher, getRecent, getResource, getSubcategory. 
 + 
 +===== License ===== 
 + 
 +This plugin is licensed under the terms of the GNU General Public License version 2. 
 + 
 + 
 +===== Changes ====
 + 
 +  * //2024-01-27// --  Finish v2 of the plugin for WIKINDX 6.6.0 and higher (for Hogfather, Igor, Jack Jackrum+) 
 +  * //2021-10-12// --  v1 of the official plugin for WIKINDX 6.6.0 and higher (for Hogfather) based on the plugin of Andreas Wagner for WIKINDX 4. 
 +   
 +  * //2013-01-21// -- The wikindx4 developer has included some of the modifications suggested by this plugin into the development version. (Thanks a lot for this!)  So instead of patching the released version, it is recommended to check out and use the svn version of wikindx4. 
 +  //2013-01-16// -- Update for dokuwiki Release 2012-10-13 "Adora Belle" and wikindx v4.1. Also, there's new functionalityI have added the actions getAbstract, getNotes, getQuote, getParaphr, getMusing. 
 + 
 + 
 +===== To Do ===== 
 + 
 +  * Provide switch to not insert a citation into the tracking array 
 +  * Allow to put bibliography before all the citations?
  
-wikindx3 diff in order to get the new Version 2008-11-26 to work: 
-<code> 
---- cmsprint.php.old 2008-04-15 10:42:00.000000000 +0200 
-+++ cmsprint.php 2008-11-26 23:33:09.000000000 +0100 
-@@ -38,7 +38,7 @@ 
- include_once("core/sql/SQL.php"); 
- $db = new SQL(); 
-  
--// Check if request is to parse text for [cite]...[/cite tags 
-+// Check if request is to parse text for [cite]...[/cite] tags 
- if(($_GET['action'] == 'parseText') && (!array_key_exists('address', $_GET) || !$_GET['address'])) 
-  die('Missing or incorrect queryString'); 
- else if($_GET['action'] == 'parseText') 
-@@ -55,7 +55,21 @@ 
- list($sql, $limit) = CMS::getSql($db); 
- // Force HTTP to UTF-8 charset overriding any AddDefaultCharset set in Apache. 
- @header('Content-type: text/html; charset=utf-8'); 
--print CMS::queryDb($db, $sql, $WIKINDX_CMS_BIBSTYLE, $limit); 
-+// old: print CMS::queryDb($db, $sql, $WIKINDX_CMS_BIBSTYLE, $limit); 
-+ 
-+if($_GET['action']=='getNote') { 
-+    include_once("core/html/HTML.php"); 
-+    $html = new HTML(); 
-+    $resultset = $db->query($sql); 
-+    $resultrow = $db->fetchrow($resultset); 
-+    print "Note: " . $html->dbToHtmlTidy($resultrow['text']); 
-+} 
-+else 
-+//if(array_key_exists('mode', $_GET) && $_GET['mode'] == 'bib') 
-+ print CMS::queryDb($db, $sql, $WIKINDX_CMS_BIBSTYLE, $limit, "bib"); 
-+//elseif(array_key_exists('mode', $_GET) && $_GET['mode'] == 'cite') 
-+// print CMS::queryDb($db, $sql, $WIKINDX_CMS_BIBSTYLE, $limit, "cite"); 
-+ 
- die; 
-  
- /** 
---- core/cms/CMS.php.bak 2008-11-26 14:42:00.000000000 +0100 
-+++ core/cms/CMS.php 2008-11-26 23:19:07.000000000 +0100 
-@@ -269,14 +269,15 @@ 
-  include_once("core/sql/STATEMENTS.php"); 
-  $stmt = new STATEMENTS($db); 
-  $join = $condition = FALSE; 
-- if($_GET['action'] == 'getResource') 
-- { 
-+ $sql = ""; 
-+ 
-+ switch($_GET['action']) { 
-+     case 'getResource': 
-  $condition = ' WHERE WKX_resource.id=' . join(' OR WKX_resource.id=', $ids); 
- // Ignore limit in this case 
-  unset($_GET['limit']); 
-- } 
-- else if($_GET['action'] == 'getCategory') 
-- { 
-+ break; 
-+     case 'getCategory': 
-  $join = " LEFT JOIN " .  
-  $db->formatTable("WKX_resource_category") . " ON " .  
-  $db->formatField("WKX_resource.id") . "=" 
-@@ -285,9 +286,17 @@ 
-  foreach($ids as $id) 
-  $set[] = "FIND_IN_SET(" . $id . ", CONCAT(" . $db->formatField('categories') . ", ',')" . ")"; 
-  $condition = " WHERE (" . join(')' . $sqlMethod . '(', $set) . ')'; 
-- } 
-- else if($_GET['action'] == 'getKeyword') 
-- { 
-+ break; 
-+     case 'getNote': 
-+ $sql = $db->selectNoExecute(array("WKX_resource_note"), array("text"), "WHERE id=" . $_GET['id']); 
-+// $db->formatField("WKX_resource_note.id"); 
-+// NB MySQL bug: http://bugs.mysql.com/bug.php?id=2047 -- append comma temporarily 
-+// foreach($ids as $id) 
-+// $set[] = "FIND_IN_SET(" . $id . ", CONCAT(" . $db->formatField('text') . ", ',')" . ")"; 
-+// $condition = " WHERE (" . join(')' . $sqlMethod . '(', $set) . ')'; 
-+ break; 
-+// die('bailing out - but correct case'); 
-+     case 'getKeyword': 
-  $join = " LEFT JOIN " .  
-  $db->formatTable("WKX_resource_keyword") . " ON " .  
-  $db->formatField("WKX_resource.id") . "=" 
-@@ -296,9 +305,8 @@ 
-  foreach($ids as $id) 
-  $set[] = "FIND_IN_SET(" . $id . ", CONCAT(" . $db->formatField('keywords') . ", ',')" . ")"; 
-  $condition = " WHERE (" . join(')' . $sqlMethod . '(', $set) . ')'; 
-- } 
-- else if($_GET['action'] == 'getCreator') 
-- { 
-+ break; 
-+     case 'getCreator': 
- // NB MySQL bug: http://bugs.mysql.com/bug.php?id=2047 -- append comma temporarily 
-  foreach($ids as $id) 
-  $set[] = " 
-@@ -313,9 +321,8 @@ 
-  FIND_IN_SET(" . $id . ", CONCAT(" 
-  $db->formatField('creator5') . ", ','))"; 
-  $condition = " WHERE (" . join(')' . $sqlMethod . '(' , $set) . ')'; 
-- } 
-- else if($_GET['action'] == 'getPublisher') 
-- { 
-+ break; 
-+     case 'getPublisher': 
- // 'proceedings_article' resource type has publisher in 'miscField1' (if publisher exists) 
-  foreach($ids as $id) 
-  $set[] = "IF(" 
-@@ -324,12 +331,12 @@ 
-  $db->formatField('miscField1') . '=' . $id . ',' 
-  $db->formatField('publisher') . '=' . $id . ')'; 
-  $condition = " WHERE " . join(' OR ' , $set); 
-- } 
-- else if($_GET['action'] == 'getCollection') 
-+ break; 
-+     case 'getCollection': 
-  $condition = ' WHERE ' . $db->formatField('collection') . '=' 
-  join(' OR ' . $db->formatField('collection') . '=', $ids); 
-- else if($_GET['action'] == 'getRecent') 
-- { 
-+ break; 
-+     case 'getRecent': 
-  if(array_key_exists('days', $_GET)) 
-  { 
-  $days = $_GET['days']; 
-@@ -340,9 +347,11 @@ 
-  $condition = FALSE; 
-  $order = 'timestampAdd'; 
-  $stmt->ascDesc = 'DESC'; 
-- } 
-- else 
-+ break; 
-+     default: 
-  die('Missing or incorrect queryString'); 
-+ } 
-+ 
-  if(!isset($order)) 
-  { 
- // 'creator' is order default 
-@@ -352,6 +361,7 @@ 
-  else 
-  $order = 'creator'; 
-  } 
-+ if(!$sql) 
-  $sql = $db->selectNoExecute(array("WKX_resource"),   
-  $stmt->listFields($order), $stmt->listJoin($order, $join . $condition)); 
- //print "$sql<P>"; 
-</code> 
plugin/wikindx.1254818448.txt.gz · Last modified: 2009-10-06 10:40 by laynee

Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki