*/
// must be run within DokuWiki
if(!defined('DOKU_INC')) die();
/**
* Class syntax_plugin_currentlyreading
*/
class syntax_plugin_currentlyreading extends \dokuwiki\Extension\SyntaxPlugin {
public function getType() { return 'substition'; }
public function getSort() { return 302; }
public function getPType(){ return 'block'; }
/**
* regex pattern for lexer to seek
*/
public function connectTo($mode) {
// Looking to match {{reading>[pageid]}}
$pattern = '\{\{reading\b>[[:blank:]]??[[:alnum:]]{1}(?:[[:alnum:]]|[[:blank:]]|\.|,|-|_|:)+?[[:alnum:]]{1}(?:\?[0-9]+?)*?[[:blank:]]??\}\}';
$this->Lexer->addSpecialPattern($pattern, $mode, 'plugin_currentlyreading');
}
/**
* handle matches from lexer
*
* @param string $match Match from lexer
* @return string $html HTML string to render
*/
public function handle($match, $state, $pos, Doku_Handler $handler) {
// Let's get the $pagename through its first phase.
$pagename = substr($match, 10, -2); // Remove the markup to reveal the pagename.
$pagename = hsc($pagename); // Clean up html entities.
$pagename = preg_replace('/\s\s+/', ' ', $pagename); // Eliminate excessive spaces to single space, but keep leading and trailing.
// What is the float?
$left = $right = $center = false;
if (substr($pagename, 0, 1) == ' ') $left = true;
if (substr($pagename, -1, 1) == ' ') $right = true;
if (($left == false) && ($right == false)) {
$float = '';
} elseif ($left && $right) {
$float = ' mediacenter';
} else {
if ($left) $float = ' mediaright';
if ($right) $float = ' medialeft';
}
// What will be the width?
$width = null;
if ($spos = strpos($pagename, '?')) {
$width = intval(substr($pagename, $spos+1)); // The user specified a width in the markup.
$pagename = substr($pagename, 0, -(strlen($pagename)-$spos)); // Strip the width declaration off of the $pagename.
} else {
$width = $this->getConf('width'); // Get the width from the configuration settings.
}
// $pagename's second phase: create a pagename ID that we can look up.
$title = trim($pagename); // Save the original for a possible $title.
$pagename = trim($pagename);
$pagename = strtolower($pagename);
$pagename = strtr($pagename, ' ', '');
// Enquiring minds want to know: does the page exist?
$pageexists = false;
if (page_exists($pagename)) $pageexists = true;
// Is there a preferred title from a wiki page or do we use the input.
if ($pageexists) {
$title = p_get_metadata($pagename, 'title', METADATA_DONT_RENDER);
} else {
$title = strtr(noNS($title), '_', ' ');
}
// Create the link.
$link = wl($pagename);
// Get the image if it exists and create the image tag.
$image = (p_get_metadata($pagename, 'relation firstimage', METADATA_DONT_RENDER));
if ($image) {
$imagetag = '';
} else {
$imagetag = null;
}
// What heading to use?
if ($this->getConf('alternative')) { // Use an alternative heading from the config settings or from the language files.
$heading = hsc($this->getConf('alternative'));
} else $heading = $this->getLang('currentlyreading');
// Putting HTML altogether.
$html = '