*/
class syntax_plugin_lms_lms extends SyntaxPlugin
{
/** @var helper_plugin_lms */
protected $hlp;
/** @var string current user */
protected $user;
/**
* Constructor
*/
public function __construct()
{
global $INPUT;
$this->hlp = $this->loadHelper('lms');
$this->user = $INPUT->server->str('REMOTE_USER');
}
/** @inheritDoc */
public function getType()
{
return 'substition';
}
/** @inheritDoc */
public function getPType()
{
return 'normal';
}
/** @inheritDoc */
public function getSort()
{
return 150;
}
/** @inheritDoc */
public function connectTo($mode)
{
$this->Lexer->addSpecialPattern('~~LMS~~', $mode, 'plugin_lms_lms');
}
/** @inheritDoc */
public function handle($match, $state, $pos, Doku_Handler $handler)
{
$data = [];
return $data;
}
/** @inheritDoc */
public function render($mode, Doku_Renderer $renderer, $data)
{
if ($mode !== 'xhtml') {
return false;
}
$renderer->nocache();
if (!$this->user) return true;
global $INFO;
$seen = $this->hlp->getLesson($INFO['id'], $this->user);
if ($seen === false) return true; // we're not on a lesson page
$renderer->doc .= '
';
$renderer->doc .= $this->prevButton();
$renderer->doc .= $this->toggleButton($seen);
$renderer->doc .= $this->nextButton();
$renderer->doc .= '
';
return true;
}
/**
* Build a navigation link based on the given command
*
* @param string $cmd
* @return string
*/
protected function makeLink($id, $cmd)
{
$args = [
'do' => 'lms',
'lms' => $cmd,
'sectok' => getSecurityToken(),
];
$attr = [
'href' => wl($id, $args, false, '&'),
'class' => "lms-btn lms-btn-$cmd",
'title' => $this->getLang($cmd),
];
$svg = inlineSVG(__DIR__ . '/../img/' . $cmd . '.svg');
$span = '' . hsc($this->getLang($cmd)) . '';
return '' . $span . $svg . '';
}
/**
* Toggle seen status
*
* @param bool|null $seen current seen status
* @return string
*/
public function toggleButton($seen = null)
{
global $INFO;
if ($seen === null) {
$seen = $this->hlp->getLesson($INFO['id'], $this->user);
}
if ($seen) {
return $this->makeLink($INFO['id'], 'unseen');
}
return $this->makeLink($INFO['id'], 'seen');
}
/**
* Navigate to next lesson
*
* @return string
*/
public function nextButton()
{
global $INFO;
$next = $this->hlp->getNextLesson($INFO['id']);
if (!$next) return '';
return $this->makeLink($next, 'next');
}
/**
* Navigate to previous lesson
*
* @return string
*/
public function prevButton()
{
global $INFO;
$prev = $this->hlp->getPrevLesson($INFO['id']);
if (!$prev) return '';
return $this->makeLink($prev, 'prev');
}
}