Example #1
0
 /**
  * Renders the included page(s)
  *
  * @author Michael Hamann <*****@*****.**>
  */
 function render($format, Doku_Renderer &$renderer, $data)
 {
     global $ID;
     // static stack that records all ancestors of the child pages
     static $page_stack = array();
     // when there is no id just assume the global $ID is the current id
     if (empty($page_stack)) {
         $page_stack[] = $ID;
     }
     $parent_id = $page_stack[count($page_stack) - 1];
     $root_id = $page_stack[0];
     list($mode, $page, $sect, $flags, $level, $pos) = $data;
     if (!$this->helper) {
         $this->helper = plugin_load('helper', 'include');
     }
     $flags = $this->helper->get_flags($flags);
     $pages = $this->helper->_get_included_pages($mode, $page, $sect, $parent_id, $flags);
     if ($format == 'metadata') {
         /** @var Doku_Renderer_metadata $renderer */
         // remove old persistent metadata of previous versions of the include plugin
         if (isset($renderer->persistent['plugin_include'])) {
             unset($renderer->persistent['plugin_include']);
             unset($renderer->meta['plugin_include']);
         }
         $renderer->meta['plugin_include']['instructions'][] = compact('mode', 'page', 'sect', 'parent_id', $flags);
         if (!isset($renderer->meta['plugin_include']['pages'])) {
             $renderer->meta['plugin_include']['pages'] = array();
         }
         // add an array for array_merge
         $renderer->meta['plugin_include']['pages'] = array_merge($renderer->meta['plugin_include']['pages'], $pages);
         $renderer->meta['plugin_include']['include_content'] = isset($_REQUEST['include_content']);
     }
     $secids = array();
     if ($format == 'xhtml') {
         $secids = p_get_metadata($ID, 'plugin_include secids');
     }
     foreach ($pages as $page) {
         extract($page);
         $id = $page['id'];
         $exists = $page['exists'];
         if (in_array($id, $page_stack)) {
             continue;
         }
         array_push($page_stack, $id);
         // add references for backlink
         if ($format == 'metadata') {
             $renderer->meta['relation']['references'][$id] = $exists;
             $renderer->meta['relation']['haspart'][$id] = $exists;
             if (!$sect && !$flags['firstsec'] && !$flags['linkonly'] && !isset($renderer->meta['plugin_include']['secids'][$id])) {
                 $renderer->meta['plugin_include']['secids'][$id] = array('hid' => 'plugin_include__' . str_replace(':', '__', $id), 'pos' => $pos);
             }
         }
         if (isset($secids[$id]) && $pos === $secids[$id]['pos']) {
             $flags['include_secid'] = $secids[$id]['hid'];
         } else {
             unset($flags['include_secid']);
         }
         $instructions = $this->helper->_get_instructions($id, $sect, $mode, $level, $flags, $root_id, $secids);
         $renderer->nest($instructions);
         array_pop($page_stack);
     }
     // When all includes have been handled remove the current id
     // in order to allow the rendering of other pages
     if (count($page_stack) == 1) {
         array_pop($page_stack);
     }
     return true;
 }
Example #2
0
 function render($mode, Doku_Renderer $renderer, $data)
 {
     list($ns, $num, $flags, $refine) = $data;
     $first = $_REQUEST['first'];
     if (!is_numeric($first)) {
         $first = 0;
     }
     // get the blog entries for our namespace
     /** @var helper_plugin_blog $my */
     if ($my =& plugin_load('helper', 'blog')) {
         $entries = $my->getBlog($ns);
     } else {
         return false;
     }
     // use tag refinements?
     if ($refine) {
         /** @var helper_plugin_tag $tag */
         if (plugin_isdisabled('tag') || !($tag =& plugin_load('helper', 'tag'))) {
             msg($this->getLang('missing_tagplugin'), -1);
         } else {
             $entries = $tag->tagRefine($entries, $refine);
         }
     }
     // Normalise flags
     $blog_flags = $my->getFlags($flags);
     $formpos = $blog_flags['formpos'];
     $newentrytitle = $blog_flags['newentrytitle'];
     if ($mode == 'xhtml') {
         // prevent caching to ensure the included pages are always fresh
         $renderer->info['cache'] = false;
     }
     if (!$entries) {
         if (auth_quickaclcheck($ns . ':*') >= AUTH_CREATE && $mode == 'xhtml') {
             if ($formpos != 'none') {
                 $renderer->doc .= $this->_newEntryForm($ns, $newentrytitle);
             }
         }
         return true;
         // nothing to display
     }
     // slice the needed chunk of pages
     $more = count($entries) > $first + $num ? true : false;
     $entries = array_slice($entries, $first, $num);
     // load the include helper plugin
     /** @var helper_plugin_include $include */
     if (plugin_isdisabled('include') || !($include =& plugin_load('helper', 'include'))) {
         msg($this->getLang('missing_includeplugin'), -1);
         return false;
     }
     // current section level
     $clevel = 0;
     $perm_create = auth_quickaclcheck($ns . ':*') >= AUTH_CREATE;
     $include_flags = $include->get_flags($flags);
     if ($mode == 'xhtml') {
         // show new entry form
         if ($perm_create && $formpos == 'top') {
             $renderer->doc .= $this->_newEntryForm($ns, $newentrytitle);
         }
         // get current section level
         preg_match_all('|<div class="level(\\d)">|i', $renderer->doc, $matches, PREG_SET_ORDER);
         $n = count($matches) - 1;
         if ($n > -1) {
             $clevel = $matches[$n][1];
         }
         // close current section
         if ($clevel && !$include_flags['inline']) {
             $renderer->doc .= '</div>' . DOKU_LF;
         }
         $renderer->doc .= '<div class="hfeed">' . DOKU_LF;
     }
     // now include the blog entries
     foreach ($entries as $entry) {
         if ($mode == 'xhtml') {
             if (auth_quickaclcheck($entry['id']) >= AUTH_READ) {
                 // prevent blog include loops
                 if (!$include->includes[$entry['id']]) {
                     $include->includes[$entry['id']] = true;
                     $renderer->nest($include->_get_instructions($entry['id'], '', 'page', $clevel, $include_flags));
                 }
             }
         } elseif ($mode == 'metadata') {
             /** @var Doku_Renderer_metadata $renderer */
             $renderer->meta['relation']['haspart'][$entry['id']] = true;
         }
     }
     if ($mode == 'xhtml') {
         // resume the section
         $renderer->doc .= '</div>' . DOKU_LF;
         if ($clevel && !$include_flags['inline']) {
             $renderer->doc .= '<div class="level' . $clevel . '">' . DOKU_LF;
         }
         // show older / newer entries links
         $renderer->doc .= $this->_browseEntriesLinks($more, $first, $num);
         // show new entry form
         if ($perm_create && $formpos == 'bottom') {
             $renderer->doc .= $this->_newEntryForm($ns, $newentrytitle);
         }
     }
     return in_array($mode, array('xhtml', 'metadata'));
 }