XoopsModules25x/news

View on GitHub
print.php

Summary

Maintainability
B
6 hrs
Test Coverage
<?php declare(strict_types=1);
/*
 * You may not change or alter any portion of this comment or credits
 * of supporting developers from this source code or any supporting source code
 * which is considered copyrighted (c) material of the original comment or credit authors.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 */

/**
 * @copyright      {@link https://xoops.org/ XOOPS Project}
 * @license        {@link https://www.gnu.org/licenses/gpl-2.0.html GNU GPL 2 or later}
 * @author         XOOPS Development Team
 */

/**
 * Print an article
 *
 * This page is used to print an article. The advantage of this script is that you
 * only see the article and nothing else.
 *
 * @author                Xoops Modules Dev Team
 * @copyright    (c)      XOOPS Project (https://xoops.org)
 *
 * Parameters received by this page :
 * @page_param            int        storyid                    Id of news to print
 *
 * @page_title            Story's title - Printer Friendly Page - Topic's title - Site's name
 *
 * @template_name         This page does not use any template
 */

use Xmf\Request;
use XoopsModules\News;
use XoopsModules\News\NewsStory;

require_once \dirname(__DIR__, 2) . '/mainfile.php';
// require_once XOOPS_ROOT_PATH . '/modules/news/class/class.newsstory.php';
$storyid = Request::getInt('storyid', 0, 'GET');
if (empty($storyid)) {
    redirect_header(XOOPS_URL . '/modules/news/index.php', 2, _NW_NOSTORY);
}

// Verify that the article is published
$story = new NewsStory($storyid);
// Not yet published
if (0 == $story->published() || $story->published() > time()) {
    redirect_header(XOOPS_URL . '/modules/news/index.php', 2, _NW_NOSTORY);
}

// Expired
if (0 != $story->expired() && $story->expired() < time()) {
    redirect_header(XOOPS_URL . '/modules/news/index.php', 2, _NW_NOSTORY);
}

// Verify permissions
/** @var \XoopsGroupPermHandler $grouppermHandler */
$grouppermHandler = xoops_getHandler('groupperm');
if (is_object($xoopsUser)) {
    $groups = $xoopsUser->getGroups();
} else {
    $groups = XOOPS_GROUP_ANONYMOUS;
}
if (!$grouppermHandler->checkRight('news_view', $story->topicid(), $groups, $xoopsModule->getVar('mid'))) {
    redirect_header(XOOPS_URL . '/modules/news/index.php', 3, _NOPERM);
}

$xoops_meta_keywords    = '';
$xoops_meta_description = '';

if ('' !== trim($story->keywords())) {
    $xoops_meta_keywords = $story->keywords();
} else {
    $xoops_meta_keywords = News\Utility::createMetaKeywords($story->hometext() . ' ' . $story->bodytext());
}

if ('' !== trim($story->description())) {
    $xoops_meta_description = $story->description();
} else {
    $xoops_meta_description = strip_tags($story->title());
}

function PrintPage(): void
{
    global $xoopsConfig, $xoopsModule, $story, $xoops_meta_keywords, $xoops_meta_description;
    $myts     = \MyTextSanitizer::getInstance();
    $datetime = formatTimestamp($story->published(), News\Utility::getModuleOption('dateformat')); ?>
    <!DOCTYPE html>
<html xml:lang="<?php echo _LANGCODE; ?>" lang="<?php echo _LANGCODE; ?>">
    <?php
    echo "<head>\n";
    echo '<title>' . htmlspecialchars($story->title(), ENT_QUOTES | ENT_HTML5) . ' - ' . _NW_PRINTER . ' - ' . htmlspecialchars($story->topic_title(), ENT_QUOTES | ENT_HTML5) . ' - ' . $xoopsConfig['sitename'] . '</title>';
    echo '<meta http-equiv="Content-Type" content="text/html; charset=' . _CHARSET . '">';
    echo '<meta name="author" content="XOOPS">';
    echo '<meta name="keywords" content="' . $xoops_meta_keywords . '">';
    echo '<meta name="COPYRIGHT" content="Copyright (c) 2014 by ' . $xoopsConfig['sitename'] . '">';
    echo '<meta name="DESCRIPTION" content="' . $xoops_meta_description . '">';
    echo '<meta name="generator" content="XOOPS">';
    echo '<meta name="robots" content="noindex,nofollow">';
    if (file_exists(XOOPS_ROOT_PATH . '/language/' . $GLOBALS['xoopsConfig']['language'] . '/style.css')) {
        echo '<link rel="stylesheet" type="text/css" media="all" title="Style sheet" href="' . XOOPS_URL . '/language/' . $GLOBALS['xoopsConfig']['language'] . '/style.css">';
    } else {
        echo '<link rel="stylesheet" type="text/css" media="all" title="Style sheet" href="' . XOOPS_URL . '/language/english/style.css">';
    }
    echo '<link rel="stylesheet" type="text/css" media="all" title="Style sheet" href="' . XOOPS_URL . '/modules/news/assets/css/print.css">';
    $supplemental = '';
    if (News\Utility::getModuleOption('footNoteLinks')) {
        $supplemental = "footnoteLinks('content','content'); "; ?>
        <script type="text/javascript">
            // <![CDATA[
            /*------------------------------------------------------------------------------
             Function:       footnoteLinks()
             Author:         Aaron Gustafson (aaron at easy-designs dot net)
             Creation Date:  8 May 2005
             Version:        1.3
             Homepage:       https://www.easy-designs.net/code/footnoteLinks/
             License:        Creative Commons Attribution-ShareAlike 2.0 License
             https://creativecommons.org/licenses/by-sa/2.0/
             Note:           This version has reduced functionality as it is a demo of
             the script's development
             ------------------------------------------------------------------------------*/
            function footnoteLinks(containerID, targetID) {
                if (!document.getElementById || !document.getElementsByTagName || !document.createElement) return false;
                if (!document.getElementById(containerID) || !document.getElementById(targetID)) return false;
                var container = document.getElementById(containerID);
                var target = document.getElementById(targetID);
                var h2 = document.createElement('h2');
                addClass.apply(h2, ['printOnly']);
                var h2_txt = document.createTextNode('<?php echo _NW_LINKS; ?>');
                h2.appendChild(h2_txt);
                var coll = container.getElementsByTagName('*');
                var ol = document.createElement('ol');
                addClass.apply(ol, ['printOnly']);
                var myArr = [];
                var thisLink;
                var num = 1;
                for (var i = 0; i < coll.length; i++) {
                    if (coll[i].getAttribute('href') ||
                        coll[i].getAttribute('cite')) {
                        thisLink = coll[i].getAttribute('href') ? coll[i].href : coll[i].cite;
                        var note = document.createElement('sup');
                        addClass.apply(note, ['printOnly']);
                        var note_txt;
                        var j = inArray.apply(myArr, [thisLink]);
                        if (j || j === 0) { // if a duplicate
                            // get the corresponding number from
                            // the array of used links
                            note_txt = document.createTextNode(j + 1);
                        } else { // if not a duplicate
                            var li = document.createElement('li');
                            var li_txt = document.createTextNode(thisLink);
                            li.appendChild(li_txt);
                            ol.appendChild(li);
                            myArr.push(thisLink);
                            note_txt = document.createTextNode(num);
                            num++;
                        }
                        note.appendChild(note_txt);
                        if (coll[i].tagName.toLowerCase() === 'blockquote') {
                            var lastChild = lastChildContainingText.apply(coll[i]);
                            lastChild.appendChild(note);
                        } else {
                            coll[i].parentNode.insertBefore(note, coll[i].nextSibling);
                        }
                    }
                }
                target.appendChild(h2);
                target.appendChild(ol);

                return true;
            }

            // ]]>
        </script>
        <script type="text/javascript">
            // <![CDATA[
            /*------------------------------------------------------------------------------
             Excerpts from the jsUtilities Library
             Version:        2.1
             Homepage:       https://www.easy-designs.net/code/jsUtilities/
             License:        Creative Commons Attribution-ShareAlike 2.0 License
             https://creativecommons.org/licenses/by-sa/2.0/
             Note:           If you change or improve on this script, please let us know.
             ------------------------------------------------------------------------------*/
            if (Array.prototype.push === null) {
                Array.prototype.push = function (item) {
                    this[this.length] = item;

                    return this.length;
                };
            }
            // ---------------------------------------------------------------------
            //                  function.apply (if unsupported)
            //           Courtesy of Aaron Boodman - https://youngpup.net
            // ---------------------------------------------------------------------
            if (!Function.prototype.apply) {
                Function.prototype.apply = function (oScope, args) {
                    var sarg = [];
                    var rtrn, call;
                    if (!oScope) oScope = window;
                    if (!args) args = [];
                    for (var i = 0; i < args.length; i++) {
                        sarg[i] = "args[" + i + "]";
                    }
                    call = "oScope.__applyTemp__(" + sarg.join(",") + ");";
                    oScope.__applyTemp__ = this;
                    rtrn = eval(call);
                    oScope.__applyTemp__ = null;

                    return rtrn;
                };
            }

            function inArray(needle) {
                for (var i = 0; i < this.length; i++) {
                    if (this[i] === needle) {
                        return i;
                    }
                }

                return false;
            }

            function addClass(theClass) {
                if (this.className !== '') {
                    this.className += ' ' + theClass;
                } else {
                    this.className = theClass;
                }
            }

            function lastChildContainingText() {
                var testChild = this.lastChild;
                var contentCntnr = ['p', 'li', 'dd'];
                while (testChild.nodeType != 1) {
                    testChild = testChild.previousSibling;
                }
                var tag = testChild.tagName.toLowerCase();
                var tagInArr = inArray.apply(contentCntnr, [tag]);
                if (!tagInArr && tagInArr !== 0) {
                    testChild = lastChildContainingText.apply(testChild);
                }

                return testChild;
            }

            // ]]>
        </script>
        <style type="text/css" media="screen">
            .printOnly {
                display: none;
            }
        </style>
        <?php
    }
    echo '</head>';
    echo '<body bgcolor="#ffffff" text="#000000" onload="' . $supplemental . ' window.print()">
        <div id="content">
        <table border="0"><tr><td align="center">
        <table border="0" width="100%" cellpadding="0" cellspacing="1" bgcolor="#000000"><tr><td>
        <table border="0" width="100%" cellpadding="20" cellspacing="1" bgcolor="#ffffff"><tr><td align="center">
        <img src="' . XOOPS_URL . '/images/logo.png" border="0" alt=""><br><br>
        <h3>' . $story->title() . '</h3>
        <small><b>' . _NW_DATE . '</b>&nbsp;' . $datetime . ' | <b>' . _NW_TOPICC . '</b>&nbsp;' . htmlspecialchars($story->topic_title(), ENT_QUOTES | ENT_HTML5) . '</small><br><br></td></tr>';
    echo '<tr valign="top" style="font:12px;"><td>' . $story->hometext() . '<br>';
    $bodytext = $story->bodytext();
    $bodytext = str_replace('[pagebreak]', '<br style="page-break-after:always;">', $bodytext);
    if ('' !== $bodytext) {
        echo $bodytext . '<br><br>';
    }
    echo '</td></tr></table></td></tr></table>
    <br><br>';
    printf(_NW_THISCOMESFROM, htmlspecialchars($xoopsConfig['sitename'], ENT_QUOTES));
    echo '<br><a href="' . XOOPS_URL . '/">' . XOOPS_URL . '</a><br><br>
        ' . _NW_URLFORSTORY . ' <!-- Tag below can be used to display Permalink image --><!--img src="' . XOOPS_URL . '/modules/' . $xoopsModule->dirname() . '/assets/images/x.gif" /--><br>
        <a class="ignore" href="' . XOOPS_URL . '/modules/' . $xoopsModule->dirname() . '/article.php?storyid=' . $story->storyid() . '">' . XOOPS_URL . '/modules/news/article.php?storyid=' . $story->storyid() . '</a>
        </td></tr></table></div>
        </body>
        </html>
        ';
}

PrintPage();