*
* 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" . trim($data[1][$i],".");
if($data[2][$i])
$output .= ", " . $data[2][$i];
$output .= "";
if(($data[4][$i]=="cite") AND ($i < count($data[0]) -1))
$output .= "; ";
if($data[4][$i]=="bib")
$output .= "
";
}
$renderer->doc .= $output;
return true;
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
New Version 2008-11-26:
*
* TODO:
* SECURITY checking!!!
* Provide switch to not insert a 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" . trim($data[1][$i],".");
if($data[2][$i])
$output .= ", " . $data[2][$i];
$output .= "";
if(($data[4][$i]=="cite") AND ($i < count($data[0]) -1))
$output .= "; ";
if($data[4][$i]=="bib")
$output .= "
";
}
$renderer->doc .= $output;
return true;
}
}
//Setup VIM: ex: et ts=4 enc=utf-8 :
wikindx3 diff in order to get the new Version 2008-11-26 to work:
--- 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";