*/
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');
/**
* All DokuWiki plugins to extend the parser/rendering mechanism
* need to inherit from this class
*/
class syntax_plugin_jalbum_jalbum extends DokuWiki_Syntax_Plugin {
/**
* default parameters of the jalbum tag
*/
var $dflt = array(
'width' => 20,
'height' => 20,
'align' => 'top',
'albumid' => 'off',
'albumdir' => 'off',
'albumtitle' => 'off',
'albumshow' => 'off',
'jpgtohtml' => 'on'
);
/**
* return some info
*/
function getInfo(){
return array(
'author' => 'Juergen A.Lamers',
'email' => 'jaloma.ac@googlemail.com',
'date' => @file_get_contents(DOKU_PLUGIN . 'jalbum/VERSION'),
'name' => 'jalbum',
'desc' => 'Einfacher Zugriff auf Alben und Thumbs von JAlbum',
'url' => 'http://wiki.dokuwiki.org/plugin:jalbum'
);
}
/**
* What kind of syntax are we?
*/
function getType(){
return 'substition';
}
function getSort(){ return 305; }
function connectTo($mode) {
$this->Lexer->addSpecialPattern('\n]*>.*?',$mode,'plugin_jalbum_jalbum');
}
/**
* Handle the match
*/
function handle($match, $state, $pos, &$handler){
list($str_params,$str_images) = explode('>',substr($match,7,-9),2);
$thumb = $this->_extract_params($str_params);
$imgs = $this->_extract_images($str_images);
return array($thumb,$imgs);
}
/**
* Create output
*/
function render($mode, &$renderer, $data) {
global $conf;
if ($mode == 'xhtml') {
list($param,$imgs) = $data;
if (isset($param['albumid']) && $param['albumid'] != 'off') {
$txt = '';
$url = 'http://jalbum.net/browse/user/album/'.$param['albumid'];
$target = "target='extern' ";
$fullview .= '';
$fullview .= $param['albumtitle'];
$fullview .= '';
if (isset($param['albumshow']) && $param['albumshow'] != 'off') {
$width = $param['width'];
if ($width == 20) {
$width = 800;
}
$height = $param['height'];
if ($height == 20) {
$height = '640';
}
$txt .= '
';
$txt .= '' ;
$txt .= '
Fullview: '.$fullview;
$txt .= '
';
} else {
$txt .= $fullview;
}
$renderer->doc .= $txt;
} elseif (isset($param['albumdir']) && $param['albumdir'] != 'off') {
$url = $this->getConf('baseurl').$param['albumdir'];
if (isset($this->getConf['target'])) {
$target = 'target="'.$this->getConf['target'].'" ';
} else {
$target = '';
}
$txt .= '';
$txt .= $param['albumtitle'];
$txt .= '';
$renderer->doc .= $txt;
} else {
foreach($imgs as $img) {
list($image_path,$image_name,$alttxt) = $img;
// $img_href = str_ireplace('jpg','html',$image_name);
$alttxt = strip_tags($alttxt);
$img_href = str_replace('JPG','html',$image_name);
$txt = "";
if (isset($this->getConf['target'])) {
$target = 'target="'.$this->getConf['target'].'" ';
} else {
$target = '';
}
if ($param['jpgtohtml'] == 'on') {
$txt .= '';
}
$txt .= 'dflt['align'].'"';
}
if (isset($param['height'])) {
$txt .= ' height="'.$param['height'].'"';
} else {
$txt .= ' height="'.$this->dflt['height'].'"';
}
$txt .= '/>';//IMG
if ($param['jpgtohtml'] == 'on') {
$txt .= '';
}
$renderer->doc .= $txt;
}
}
return true;
}
return false;
}
/**
* extract parameters for jalbum from the parameter string
*
* @param string $str_params string of key="value" or key='value' pairs
* @return array associative array of parameters key=>value
*/
function _extract_params($str_params) {
$param = array();
preg_match_all('/(\w*)="(.*?)"/us',$str_params,$param,PREG_SET_ORDER);
if (sizeof($param) == 0) {
preg_match_all("/(\w*)='(.*?)'/us",$str_params,$param,PREG_SET_ORDER);
}
// parse match for instructions, break into key value pairs
$thumb = $this->dflt;
foreach($param as $kvpair) {
list($match,$key,$val) = $kvpair;
// $key = strtolower($key);
if (isset($thumb[$key])) $thumb[$key] = $val;
}
return $thumb;
}
/**
* extract images from the wiki syntax data
*
* @param string $str_images multi-line string of imagepath,imagename,description triplets
* @return array multi-dimensional array of imagepath,imagename,description triplets
*/
function _extract_images($str_images) {
$image = array();
preg_match_all('/^(.*),(.*),(.*?)$/um',$str_images,$image,PREG_SET_ORDER);
$overlay = array();
foreach ($image as $pt) {
list($match,$imgpath,$img,$text) = $pt;
$text = addslashes(str_replace("\n","",p_render("xhtml",p_get_instructions($text),$info)));
$overlay[] = array($imgpath,$img,$text);
}
return $overlay;
}
} // class