/4.8/mambots/content/mospaging.php
PHP | 237 lines | 152 code | 42 blank | 43 comment | 26 complexity | 4ccebcb4f495a27453d3a66401431ba2 MD5 | raw file
Possible License(s): LGPL-2.1, GPL-2.0, LGPL-2.0
- <?php
- /**
- * @package MiaCMS
- * @author MiaCMS see README.php
- * @copyright see README.php
- * See COPYRIGHT.php for copyright notices and details.
- * @license GNU/GPL Version 2, see LICENSE.php
- * MiaCMS is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; version 2 of the License.
- */
- /** ensure this file is being included by a parent file */
- defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );
- $this->registerFunction( 'onPrepareContent', 'botMosPaging' );
- /**
- * Page break mambot
- *
- * <strong>Usage:</strong>
- * <code>{mospagebreak}</code>
- * <code>{mospagebreak title=The page title}</code>
- * or
- * <code>{mospagebreak heading=The first page}</code>
- * or
- * <code>{mospagebreak title=The page title&heading=The first page}</code>
- * or
- * <code>{mospagebreak heading=The first page&title=The page title}</code>
- *
- */
- function botMosPaging( $published, &$row, &$cparams, $page=0, $params ) {
- global $mainframe, $Itemid, $database, $configuration;
- if (strtolower(get_class($row)) != 'mosextendedcontent') return;
- // expression to search for
- $regex = '/{(mospagebreak)\s*(.*?)}/i';
- if (!$published || $cparams->get( 'intro_only' )|| $cparams->get( 'popup' )) {
- $row->text = preg_replace( $regex, '', $row->text );
- return;
- }
- // find all instances of mambot and put in $matches
- $matches = array();
- preg_match_all( $regex, $row->text, $matches, PREG_SET_ORDER );
- // split the text around the mambot
- $text = preg_split( $regex, $row->text );
- $matches[0][2] = @html_entity_decode ( $matches[0][2], ENT_QUOTES, strtoupper($configuration->current_language->charset) );
- // count the number of pages
- $n = count( $text );
- // we have found at least one mambot, therefore at least 2 pages
- if ($n > 1) {
- // load mambot params info
- $title = $params->def( 'title', 1 );
- // adds heading or title to <site> Title
- if ( $title ) {
- $page_text = $page + 1;
- $row->page_title = T_('Page') .' '. $page_text;
- if ( !$page ) {
- // processing for first page
- parse_str( $matches[0][2], $args );
- if ( @$args['heading'] ) {
- $row->page_title = $args['heading'];
- } else {
- $row->page_title = '';
- }
- } else if ( $matches[$page-1][2] ) {
- parse_str( $matches[$page-1][2], $args );
- if ( @$args['title'] ) {
- $row->page_title = $args['title'];
- }
- }
- }
- // reset the text, we already hold it in the $text array
- $row->text = '';
- $hasToc = $mainframe->getCfg( 'multipage_toc' );
- if ( $hasToc ) {
- // display TOC
- createTOC( $row, $matches, $page );
- } else {
- $row->toc = '';
- }
- // traditional mos page navigation
- require_once( $GLOBALS['mosConfig_absolute_path'] . '/includes/pageNavigation.php' );
- $pageNav = new mosPageNav( $n, $page, 1 );
- // page counter
- $row->text .= '<div class="pagenavcounter">';
- $row->text .= $pageNav->writeLeafsCounter();
- $row->text .= '</div>';
- // page text
- $row->text .= $text[$page];
- $row->text .= '<br />';
- $row->text .= '<div class="pagenavbar">';
- // adds navigation between pages to bottom of text
- if ( $hasToc ) {
- createNavigation( $row, $page, $n );
- }
- // page links shown at bottom of page if TOC disabled
- if (!$hasToc) {
- $row->text .= $pageNav->writePagesLinks( 'index.php?option=com_content&task=view&id='. $row->id .'&Itemid='. $Itemid );
- }
- $row->text .= '</div><br />';
- }
- return true;
- }
- function createTOC( &$row, &$matches, &$page ) {
- global $Itemid;
- $nonseflink = 'index.php?option=com_content&task=view&id='. $row->id .'&Itemid='. $Itemid;
- $link = 'index.php?option=com_content&task=view&id='. $row->id .'&Itemid='. $Itemid;
- $link = sefRelToAbs( $link );
- $heading = $row->title;
- // allows customization of first page title by checking for `heading` attribute in first bot
- if ( @$matches[0][2] ) {
- parse_str( $matches[0][2], $args );
- if ( @$args['heading'] ) {
- $heading = $args['heading'];
- }
- }
- // TOC Header
- $row->toc = '
- <table cellpadding="0" cellspacing="0" class="contenttoc" align="right">
- <tr>
- <th>'
- . T_('Article Index') .
- '</th>
- </tr>
- ';
- // TOC First Page link
- $row->toc .= '
- <tr>
- <td>
- <a href="'. $link .'" class="toclink">'
- . $heading .
- '</a>
- </td>
- </tr>
- ';
- $i = 2;
- $args2 = array();
- foreach ( $matches as $bot ) {
- $link = $nonseflink .'&limit=1&limitstart='. ($i-1);
- $link = sefRelToAbs( $link );
- if ( @$bot[2] ) {
- parse_str( str_replace( '&', '&', $bot[2] ), $args2 );
- if ( @$args2['title'] ) {
- $row->toc .= '
- <tr>
- <td>
- <a href="'. $link .'" class="toclink">'
- . $args2['title'] .
- '</a>
- </td>
- </tr>
- ';
- } else {
- $row->toc .= '
- <tr>
- <td>
- <a href="'. $link .'" class="toclink">'
- . T_('Page') .' '. $i .
- '</a>
- </td>
- </tr>
- ';
- }
- } else {
- $row->toc .= '
- <tr>
- <td>
- <a href="'. $link .'" class="toclink">'
- . T_('Page') .' '. $i .
- '</a>
- </td>
- </tr>
- ';
- }
- $i++;
- }
- $row->toc .= '</table>';
- }
- function createNavigation( &$row, $page, $n ) {
- global $Itemid;
- $link = 'index.php?option=com_content&task=view&id='. $row->id .'&Itemid='. $Itemid;
- if ( $page < $n-1 ) {
- $link_next = $link .'&limit=1&limitstart='. ( $page + 1 );
- $link_next = sefRelToAbs( $link_next );
- $next = '<a href="'. $link_next .'">' .T_('Next').' »</a>';
- } else {
- $next = T_('Next');
- }
- if ( $page > 0 ) {
- $link_prev = $link .'&limit=1&limitstart='. ( $page - 1 );
- $link_prev = sefRelToAbs( $link_prev );
- $prev = '<a href="'. $link_prev .'">« '. T_('Previous') .'</a>';
- } else {
- $prev = T_('Previous');
- }
- $row->text .= '<div>' . $prev . ' - ' . $next .'</div>';
- }
- ?>