/** * 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; }
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')); }