e107inc/e107

View on GitHub
e107_plugins/forum/forum_viewforum.php

Summary

Maintainability
A
0 mins
Test Coverage
F
19%
<?php
    /*
    * e107 website system
    *
    * Copyright (C) 2008-2013 e107 Inc (e107.org)
    * Released under the terms and conditions of the
    * GNU General Public License (http://www.gnu.org/licenses/gpl.txt)
    *
    * View specific forums
    *
    */

if(!defined('e107_INIT'))
{
    require_once(__DIR__ . '/../../class2.php');
}
$e107 = e107::getInstance();
if(!e107::isInstalled('forum'))
{
    e107::redirect();
    exit;
}
e107::lan('forum', "front", true);

if(!deftrue('BOOTSTRAP'))
{
    $bcDefs = array(
        'FORLAN_11' => 'LAN_FORUM_0039',
        'FORLAN_12' => 'LAN_FORUM_0040',
        'FORLAN_13' => 'LAN_FORUM_0040',
        'FORLAN_14' => 'LAN_FORUM_0040',
        'FORLAN_16' => 'LAN_FORUM_1012',
        'FORLAN_17' => 'LAN_FORUM_1013',
        'FORLAN_18' => 'LAN_FORUM_1014',
        'LAN_435'   => 'LAN_DELETE',
        'LAN_401'   => 'LAN_FORUM_4011',
        'LAN_398'   => 'LAN_FORUM_4012',
        'LAN_399'   => 'LAN_FORUM_4013',
        'LAN_400'   => 'LAN_FORUM_4014',
        'LAN_402'   => 'LAN_FORUM_5019',

    );

    e107::getLanguage()->bcDefs($bcDefs);
}

define('NAVIGATION_ACTIVE', 'forum');


class forum_viewforum_front
{

    function __construct()
    {

        $this->init();

    }

/**
 * @param $FORUM_VIEW_START
 * @param $urlparms
 * @param $doNothing
 * @return array
 */
function init()
{
    // todo - remove all these globals.
    global $FORUM_VIEW_START, $urlparms, $doNothing;
    global $sc, $FORUM_VIEW_FORUM, $FORUM_VIEW_FORUM_STICKY, $FORUM_VIEW_FORUM_ANNOUNCE;
    global    $FORUM_VIEW_FORUM,
        $FORUM_VIEW_FORUM_STICKY,
        $FORUM_VIEW_FORUM_ANNOUNCE,
        $FORUM_VIEW_END,
        $FORUM_VIEW_END_CONTAINER,
        $FORUM_VIEW_SUB_START,
        $FORUM_VIEW_SUB,
        $FORUM_VIEW_SUB_END,
        $FORUM_IMPORTANT_ROW,
        $FORUM_NORMAL_ROW;

    global $forum_info, $FORUM_CRUMB, $forumInfo, $forumId;
    global $forum;

    $sql = e107::getDb();
    $tp = e107::getParser();
    $ns = e107::getRender();
    $pref = e107::getPref();


    if(!e_QUERY && empty($_GET))
    {
        if(E107_DEBUG_LEVEL > 0)
        {
            echo __FILE__ . ' Line: ' . __LINE__;
            return null;
        }


        $url = e107::url('forum', 'index', null, ['mode' => 'full']);
        e107::getRedirect()->go($url);
        //header('Location:'.e107::getUrl()->create('forum/forum/main', array(), 'full=1&encode=0'));
        return null;
    }

    if(!empty($_GET['sef']))
    {
        if($newID = $sql->retrieve('forum', 'forum_id', "forum_sef= '" . $tp->toDB($_GET['sef']) . "' LIMIT 1"))
        {
            $_REQUEST['id'] = $newID;
        }
    }

    require_once(e_PLUGIN . 'forum/forum_class.php');
    $forum = new e107forum;

//$view = 25;
    $view = $forum->prefs->get('threadspage', 25);
    if(!$view)
    {
        $view = 25;
    }
    $page = (varset($_GET['p']) ? $_GET['p'] : 1);
    $threadFrom = ($page - 1) * $view;



    $sc = e107::getScBatch('viewforum', 'forum');

    $forumId = (int) varset($_REQUEST['id']);

    if(!$forumId && e_QUERY) // BC Fix for old links.
    {
        list($id, $from) = explode(".", e_QUERY);
        $forumId = intval($id);
        $threadFrom = intval($from);
        unset($id, $from);
    }

    if(!$forum->checkPerm($forumId, 'view'))
    {
        $url = e107::url('forum', 'index', null, ['mode' => 'full']);
        /*
                if(E107_DEBUG_LEVEL > 0)
                {
                    print_a($_REQUEST);
                    print_a($_GET);
                    echo __FILE__ . ' Line: ' . __LINE__;
                    echo "   forumId: " . $forumId;
                    exit;
                }
        */

        e107::getRedirect()->go($url);

        return null;
    }

    $forumInfo = $forum->forumGet($forumId);
    e107::canonical('forum', 'forum', $forumInfo);

    $forumSCvars = array();
//----$threadsViewed = $forum->threadGetUserViewed();

    if(empty($FORUM_VIEW_START))
    {
        if(THEME_LEGACY !== true)
        {
            $FORUM_VIEWFORUM_TEMPLATE = e107::getTemplate('forum', 'forum_viewforum');
            $GLOBALS['FORUM_VIEWFORUM_TEMPLATE'] = $FORUM_VIEWFORUM_TEMPLATE;
        }
        else
        {
            if(file_exists(THEME . 'templates/forum/forum_viewforum_template.php'))
            {
                require_once(THEME . 'templates/forum/forum_viewforum_template.php');
            }
            elseif(file_exists(THEME . 'forum_viewforum_template.php')) //v1.x
            {
                require_once(THEME . 'forum_viewforum_template.php');
            }
            elseif(file_exists(THEME . 'forum_template.php'))  //v1.x
            {
                require_once(THEME . 'forum_template.php');
            }
            else
            {
                require_once(e_PLUGIN . 'forum/templates/forum_viewforum_template.php');
            }

        }


    }


    if(!empty($FORUM_VIEWFORUM_TEMPLATE) && is_array($FORUM_VIEWFORUM_TEMPLATE) && THEME_LEGACY !== true) // New v2.x bootstrap Template.
    {

        $FORUM_VIEW_CAPTION = $FORUM_VIEWFORUM_TEMPLATE['caption'];
        $FORUM_VIEW_START_CONTAINER = $FORUM_VIEWFORUM_TEMPLATE['start'];
        $FORUM_VIEW_START = $FORUM_VIEWFORUM_TEMPLATE['header'];
        $FORUM_VIEW_FORUM = $FORUM_VIEWFORUM_TEMPLATE['item'];
        $FORUM_VIEW_FORUM_STICKY = $FORUM_VIEWFORUM_TEMPLATE['item-sticky'];
        $FORUM_VIEW_FORUM_ANNOUNCE = $FORUM_VIEWFORUM_TEMPLATE['item-announce'];
        $FORUM_VIEW_END = $FORUM_VIEWFORUM_TEMPLATE['footer'];
        $FORUM_VIEW_END_CONTAINER = $FORUM_VIEWFORUM_TEMPLATE['end'];
        $FORUM_VIEW_SUB_START = $FORUM_VIEWFORUM_TEMPLATE['sub-header'];
        $FORUM_VIEW_SUB = $FORUM_VIEWFORUM_TEMPLATE['sub-item'];
        $FORUM_VIEW_SUB_END = $FORUM_VIEWFORUM_TEMPLATE['sub-footer'];
        $FORUM_IMPORTANT_ROW = $FORUM_VIEWFORUM_TEMPLATE['divider-important'];
        $FORUM_NORMAL_ROW = $FORUM_VIEWFORUM_TEMPLATE['divider-normal'];

        $FORUM_CRUMB = $FORUM_VIEWFORUM_TEMPLATE['forum-crumb'];

    }

    $forumInfo['forum_name'] = $tp->toHTML($forumInfo['forum_name'], true, 'no_hook, emotes_off');
    $forumInfo['forum_description'] = $tp->toHTML($forumInfo['forum_description'], true, 'no_hook');

    $_forum_name = (substr($forumInfo['forum_name'], 0, 1) == '*' ? substr($forumInfo['forum_name'], 1) : $forumInfo['forum_name']);

    e107::title($_forum_name . ' / ' . LAN_FORUM_1001);
    // define('e_PAGETITLE', $_forum_name . ' / ' . LAN_FORUM_1001);

// SEO - meta description (auto)
    if(!empty($forumInfo['forum_description']))
    {
        define("META_DESCRIPTION", $tp->text_truncate(
            str_replace(
            //array('"', "'"), '', strip_tags($tp->toHTML($forumInfo['forum_description']))
                array('"', "'"), '', $tp->toText($forumInfo['forum_description'])
            ), 250, '...'));
    }

    $moderatorUserIds = $forum->getModeratorUserIdsByForumId($forumId);
    define('MODERATOR', (USER && in_array(USERID, $moderatorUserIds) || getperms('0')));

    if(MODERATOR)
    {
        if($_POST)
        {
            require_once(e_PLUGIN . 'forum/forum_mod.php');
            $forumSCvars['message'] = forum_thread_moderate($_POST);
        }
    }

    if(e_AJAX_REQUEST && MODERATOR) // see javascript above.
    {
        $forum->ajaxModerate();
    }

    if(varset($pref['track_online']))
    {
        $member_users = $sql->count('online', '(*)', "WHERE online_location LIKE('" . $tp->filter(e_REQUEST_URI, 'url') . "%') AND online_user_id != 0");
        $guest_users = $sql->count('online', '(*)', "WHERE online_location LIKE('" . $tp->filter(e_REQUEST_URI, 'url') . "%') AND online_user_id = 0");
        $users = $member_users + $guest_users;

    }
    else
    {
        $users = 0;
        $member_users = 0;
        $guest_users = 0;


    }

    require_once(HEADERF);


    $text = '';
// TODO - message batch shortcode
    /*--
    if ($message)
    {
        //$ns->tablerender('', $message, array('forum_viewforum', 'msg'));
        //e107::getMessage()->add($thread->message);
        $fVars->MESSAGE = $message;
    }
    --*/

    $threadCount = (int) $forumInfo['forum_threads'];

    if($threadCount > $view)
    {
        $pages = ceil($threadCount / $view);
    }
    else
    {
        $pages = false;
    }


    if($pages)
    {
        if(strpos($FORUM_VIEW_START, 'THREADPAGES') !== false || strpos($FORUM_VIEW_END, 'THREADPAGES') !== false)
        {
            // issue #3087 url need to be decoded first (because the [FROM] get's encoded in url())
            // and to encode the full url to not loose the id param when being used in the $forumSCvars['parms']
            $url = rawurlencode(rawurldecode(e107::url('forum', 'forum', $forumInfo, array('query' => array('p' => '[FROM]')))));
            $forumSCvars['parms'] = "total={$pages}&type=page&current={$page}&url=" . $url . "&caption=off";

            unset($urlparms);
        }
    }

    if($forum->checkPerm($forumId, 'thread')) //new thread access only.
    {
        $forumSCvars['ntUrl'] = e107::url('forum', 'post') . "?f=nt&amp;id=" . $forumId;
    }

//XXX  What is this?
    if(!empty($forumInfo['forum_name']) && (substr($forumInfo['forum_name'], 0, 1) == '*'))
    {
        $forum_info['forum_name'] = substr($forum_info['forum_name'], 1);
        $container_only = true;
    }
    else
    {
        $container_only = false;
    }

    if(!empty($forum_info['sub_parent']) && (substr($forum_info['sub_parent'], 0, 1) == '*'))
    {
        $forum_info['sub_parent'] = substr($forum_info['sub_parent'], 1);
    }

//----$forum->set_crumb(true, '', $fVars); // set $BREADCRUMB (and $BACKLINK)

//-- Function eventually to be reworked (move full function to shortcode file, or make a new breadcrumb function, like in downloads, maybe?)
    $forum->set_crumb(true, '', $forumSCvars); // set $BREADCRUMB (and $BACKLINK)

    $modUser = array();
    $modArray = $forum->forumGetMods();
    foreach($modArray as $user)
    {
        $modUser[] = "<a href='" . e107::getUrl()->create('user/profile/view', $user) . "'>" . $user['user_name'] . "</a>";
    }


    $forumSCvars['forum_name'] = $forumInfo['forum_name'];
    $forumSCvars['forum_description'] = $forumInfo['forum_description'];
    $forumSCvars['forum_image'] = $forumInfo['forum_image'];
    $forumSCvars['modUser'] = $modUser;
    $forumSCvars['track_online'] = varset($pref['track_online']);


    $sticky_threads = 0;
    $stuck = false;
    $reg_threads = 0;
    $unstuck = false;

    $threadFilter = null;

    if(!empty($_GET['srch']))
    {
        $threadFilter = "t.thread_name LIKE '%" . $tp->filter($_GET['srch'], 'w') . "%'";
    }

    $threadList = $forum->forumGetThreads($forumId, $threadFrom, $view, $threadFilter);
    $forumSCvars['forum_parent'] = $forumInfo['forum_parent'];

    $forum_view_forum = '';

    if(count($threadList))
    {
        foreach($threadList as $thread_info)
        {
            if($thread_info['thread_options'])
            {
                $thread_info['thread_options'] = unserialize($thread_info['thread_options']);
            }
            else
            {
                $thread_info['thread_options'] = array();
            }

            if($thread_info['thread_sticky'])
            {
                $sticky_threads++;
            }

            if($sticky_threads > 0 && !$stuck && $forum->prefs->get('hilightsticky'))
            {
                if(!empty($FORUM_IMPORTANT_ROW))
                {
                    $forum_view_forum .= $FORUM_IMPORTANT_ROW;
                }
                else
                {
                    $forum_view_forum .= "<tr><td class='forumheader'>&nbsp;</td><td colspan='5'  class='forumheader'><span class='mediumtext'><b>" . LAN_FORUM_1006 . "</b></span></td></tr>";
                }

                $stuck = true;
            }

            if(!$thread_info['thread_sticky'])
            {
                $reg_threads++;
            }

            if($reg_threads === 1) //  Removed as not needed in new template. && !$unstuck && $stuck
            {
                if(THEME_LEGACY === true && ($stuck === false || $unstuck === true))
                {
                    $doNothing; // do nothing.
                }
                elseif(!empty($FORUM_NORMAL_ROW))
                {
                    $forum_view_forum .= $FORUM_NORMAL_ROW;
                }
                else
                {
                    $forum_view_forum .= "<tr><td class='forumheader'>&nbsp;</td><td colspan='5'  class='forumheader'><span class='mediumtext'><b>" . LAN_FORUM_1007 . "</b></span></td></tr>";
                }

                $unstuck = true;
            }

            $forum_view_forum .= $this->parse_thread($thread_info);
        }
    }
    else
    {
        $forum_view_forum .= deftrue('BOOTSTRAP') ? "<div class='alert alert-warning'>" . LAN_FORUM_1008 . "</div>" :
            "<tr><td class='forumheader alert alert-warning alert-block' colspan='6'>" . LAN_FORUM_1008 . "</td></tr>";
    }

//--$fVars->FORUMJUMP = forumjump();
//--$fVars->TOPLINK = "<a href='".e_SELF.'?'.e_QUERY."#top' onclick=\"window.scrollTo(0,0);\">".LAN_GO.'</a>'; // FIXME - TOPLINK not used anymore?

    if($container_only)
    {
        $FORUM_VIEW_START = ($FORUM_VIEW_START_CONTAINER ? $FORUM_VIEW_START_CONTAINER : $FORUM_VIEW_START);
        $FORUM_VIEW_END = ($FORUM_VIEW_END_CONTAINER ? $FORUM_VIEW_END_CONTAINER : $FORUM_VIEW_END);
        $forum_view_forum = '';
    }


    $sc->setVars($forumSCvars);

    $forum_view_start = $tp->parseTemplate($FORUM_VIEW_START_CONTAINER . $FORUM_VIEW_START, true, $sc);
    $forum_view_forum = $tp->parseTemplate($forum_view_forum, true, $sc);
    $forum_view_end = $tp->parseTemplate($FORUM_VIEW_END . $FORUM_VIEW_END_CONTAINER, true, $sc);


    if($forum->prefs->get('enclose'))
    {
// $forum_view_subs????
        $caption = varset($FORUM_VIEW_CAPTION) ? $tp->parseTemplate($FORUM_VIEW_CAPTION, true, $sc) : $forum->prefs->get('title');

        $ns->tablerender($caption, $forum_view_start . /*$forum_view_subs.*/ $forum_view_forum . $forum_view_end, 'forum-viewforum');
    }
    else
    {
        echo $forum_view_start . $forum_view_forum . $forum_view_end;
    }

    echo "<script>
    function confirm_(thread_id)
    {
        return confirm(" . $tp->toJSON(LAN_JSCONFIRM) . ");
    }
    </script>";

    return array($forum_info, $FORUM_CRUMB, $forumSCvars, $FORUM_VIEW_CAPTION);
}



    function parse_thread($thread_info)
    {

        // TODO Remove globals.
        global $sc, $FORUM_VIEW_FORUM, $FORUM_VIEW_FORUM_STICKY, $FORUM_VIEW_FORUM_ANNOUNCE;
        $tp = e107::getParser();

        $sc->setVars($thread_info);

        switch($thread_info['thread_sticky'])
        {
            case 1:
                $_TEMPLATE = ($FORUM_VIEW_FORUM_STICKY ? $FORUM_VIEW_FORUM_STICKY : $FORUM_VIEW_FORUM);
                break;

            case 2:
                $_TEMPLATE = ($FORUM_VIEW_FORUM_ANNOUNCE ? $FORUM_VIEW_FORUM_ANNOUNCE : $FORUM_VIEW_FORUM);
                break;

            default:
                $_TEMPLATE = $FORUM_VIEW_FORUM;
                break;
        }


        if(substr($_TEMPLATE, 0, 4) == '<tr>') // Inject id into table row. //XXX Find a better way to do this without placing in template. .
        {

            $threadId = $thread_info['thread_id'];

            $_TEMPLATE = "<tr id='thread-{$threadId}'>" . substr($_TEMPLATE, 4);
        }

        return $tp->parseTemplate($_TEMPLATE, true, $sc);

    }

/*
    function forumjump()
    {

        global $forum;
        $jumpList = $forum->forumGetAllowed('view');
        $text = "<form method='post' action='" . e_SELF . "'><p>" . LAN_FORUM_1017 . ": <select name='forumjump' class='tbox'>";
        foreach($jumpList as $key => $val)
        {
            $text .= "\n<option value='" . e107::url('forum', 'forum', $val, 'full') . "'>" . $val['forum_name'] . "</option>";
        }
        $text .= "</select> <input class='btn btn-default btn-secondary button' type='submit' name='fjsubmit' value='" . LAN_GO . "' /></form>";

        return $text;
    }
*/




/*

    function newthreadjump($url)
    {

        global $forum;
        $jumpList = $forum->forumGetAllowed('view');

        $text = '<div class="btn-group">
        <a href="' . $url . '" class="btn btn-primary">' . LAN_FORUM_1018 . '</a>
        <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown" data-bs-toggle="dropdown">
        <span class="caret"></span>
        </button>
        <ul class="dropdown-menu pull-right float-right">
        ';

            foreach($jumpList as $key => $val)
            {
                $text .= '<li><a href="' . e107::url('forum', 'forum', $val) . '">' . LAN_FORUM_1017 . ': ' . $val['forum_name'] . '</a></li>';
            }

            $text .= '
        </ul>
        </div>';

        return $text;
    }
*/


}



//list($forum_info, $FORUM_CRUMB, $forumSCvars, $FORUM_VIEW_CAPTION) = init();

new forum_viewforum_front();

require_once(FOOTERF);