xref: /plugin/mikioplugin/carousel.php (revision 093bf8ab7854dde79958e764bfd1399659428c0a)
184838f32Snomadjimbob<?php
23a0ad8d3SJames Collinsif (!defined('DOKU_INC')) define('DOKU_INC', __DIR__ . '/../../../');
384838f32Snomadjimbobrequire_once(DOKU_INC . 'inc/init.php');
484838f32Snomadjimbob
584838f32Snomadjimbob$core = new syntax_plugin_mikioplugin_core();
684838f32Snomadjimbob$renderer = new Doku_Renderer_xhtml();
784838f32Snomadjimbob
884838f32Snomadjimbobif (isset($_GET['id'])) {
9*093bf8abSJames Collins    $id = cleanID($_GET['id']);
10*093bf8abSJames Collins    if (auth_quickaclcheck($id) < AUTH_READ) {
11*093bf8abSJames Collins        http_response_code(403);
12*093bf8abSJames Collins        die('Permission denied');
13*093bf8abSJames Collins    }
14*093bf8abSJames Collins
15*093bf8abSJames Collins    $content = rawWiki($id);
1684838f32Snomadjimbob    preg_match_all('/<carousel[^-item].*?>.*?<\/carousel>/s', $content, $matches);
1784838f32Snomadjimbob
1884838f32Snomadjimbob    $carousel_index = 0;
1984838f32Snomadjimbob    if (isset($_GET['carousel'])) {
20*093bf8abSJames Collins        $carousel_index = (int) $_GET['carousel'];
21*093bf8abSJames Collins        if ($carousel_index < 1 || $carousel_index > count($matches[0])) {
2284838f32Snomadjimbob            die('The page does not have ' . $carousel_index . ' carousels');
2384838f32Snomadjimbob        }
2484838f32Snomadjimbob
2584838f32Snomadjimbob        $carousel_index--;
2684838f32Snomadjimbob    } else {
2784838f32Snomadjimbob        if (count($matches[0]) <= 0) {
2884838f32Snomadjimbob            die('No carousels where found on the page');
2984838f32Snomadjimbob        }
3084838f32Snomadjimbob    }
3184838f32Snomadjimbob
3284838f32Snomadjimbob    preg_match_all('/<[^\/].*?>/s', $matches[0][$carousel_index], $tags);
3384838f32Snomadjimbob    foreach ($tags[0] as $tag) {
3484838f32Snomadjimbob        preg_match_all('/([^\r\n\t\f\v<>= \'"]+)(?:=(["\'])?((?:.(?!\2?\s+(?:\S+)=|\2))+[^>])\2?)?/', $tag, $attributes);
3584838f32Snomadjimbob
3684838f32Snomadjimbob        if (count($attributes) > 0) {
3784838f32Snomadjimbob            $tagName = $attributes[1][0];
3884838f32Snomadjimbob            $tagAttribs = array();
39f51f4f12SJames Collins            $count = count($attributes[1]);
4084838f32Snomadjimbob
41f51f4f12SJames Collins            for ($i = 1; $i < $count; $i++) {
4284838f32Snomadjimbob                $value = $attributes[3][$i];
4384838f32Snomadjimbob                if (strlen($value) == 0) {
4484838f32Snomadjimbob                    $value = true;
4584838f32Snomadjimbob                }
4684838f32Snomadjimbob
4784838f32Snomadjimbob                $tagAttribs[$attributes[1][$i]] = $value;
4884838f32Snomadjimbob            }
4984838f32Snomadjimbob
5084838f32Snomadjimbob            if (strcasecmp($tagName, 'carousel') == 0) {
5184838f32Snomadjimbob                $core->syntaxRender($renderer, $tagName, '', $tagAttribs, MIKIO_LEXER_ENTER);
5284838f32Snomadjimbob            } else if (strcasecmp($tagName, 'carousel-item') == 0) {
5384838f32Snomadjimbob                $core->syntaxRender($renderer, $tagName, '', $tagAttribs, MIKIO_LEXER_SPECIAL);
5484838f32Snomadjimbob            }
5584838f32Snomadjimbob        }
5684838f32Snomadjimbob    }
5784838f32Snomadjimbob
5884838f32Snomadjimbob    $core->syntaxRender($renderer, 'carousel', '', $tagAttribs, MIKIO_LEXER_EXIT);
5984838f32Snomadjimbob
6084838f32Snomadjimbob    echo '<html lang=en><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><link type="text/css" rel="stylesheet" href="assets/external.css"/><link type="text/css" rel="stylesheet" href="css.php?css=/assets/variables.less,/assets/styles.less"/></head><body id="dokuwiki__content">';
6184838f32Snomadjimbob    echo $renderer->doc;
6284838f32Snomadjimbob    echo '<script src="../../scripts/jquery/jquery.min.js"></script><script src="script.js"></script>';
6384838f32Snomadjimbob    echo '</body></html>';
6484838f32Snomadjimbob} else {
6584838f32Snomadjimbob    die('No page id was set in the url');
6684838f32Snomadjimbob}
67