Title: Forum Display Topic Sort v1.0

Author: John Briggs

Updated by : Ahmad

Description:
This mod will improve the ability to sort topics on each forum display page.
This mod was developed to be used with "Forum Display Icon Legend".

Copyright:  2006 John Briggs. All rights reserved.

Compatability: XMB 1.9.5

Install Note: Before adding this mod to your forum, you should back up all files related to this mod.

License Note: This mod is released under the GPL License. A copy is provided with this software.

Author Note:
You downloaded this hack from XMBMods.com, the #1 source for XMB related downloads.
Please visit http://www.xmbmods.com/ for support.

=======================================================================================================================================
=======
Step 1:
=======

================================
Edit File: lang/English.lang.php
================================

================================
Add Code At Very Bottom Of File:
================================

// Forum Display Topic Sort Mod Begin
$lang['ftopictype'] = "Type:";
$lang['ftopicdays'] = "Days:";
$lang['ftopicsby'] = "By:";
$lang['ftopicorder'] = "Order:";
$lang['fgo'] = "Go!";
$lang['factive'] = "Active";
$lang['funanswered'] = "Unanswered";
$lang['fhot'] = "Hot";
$lang['fpoll'] = "Poll";
$lang['fmoved'] = "Moved";
$lang['ftopped'] = "Topped";
$lang['fclosed'] = "Closed";
$lang['fsubject'] = "Subject";
$lang['fauthor'] = "Author";
$lang['freplies'] = "Replies";
$lang['fviews'] = "Views";
$lang['flastpost'] = "Last Post";
$lang['fascending'] = "Ascending";
$lang['fdescending'] = "Descending";
// Forum Display Topic Sort Mod End

=======================================================================================================================================
=======
Step 2:
=======

===========================
Edit File: forumdisplay.php
===========================

==========
Find Code:
==========

// Start Poll Image Processing
$p_extension = get_extension($lang['pollprefix']);
switch($p_extension) {
    case 'gif':
    case 'jpg':
    case 'jpeg':
    case 'png':
        $lang['pollprefix'] = '<img src="'.$imgdir.'/'.$lang['pollprefix'].'" alt="[P]" title="'.$lang['postpoll'].'" />';
        break;
}

===============
Add Code Below:
===============

$type = (isset($type) ? strtolower($type) : '');
$sort = (isset($sort) ? strtolower($sort) : '');
$order = (isset($order) ? strtolower($order) : '');
$days = (isset($days) ? (int) $days : 1);

$srchfrom = '';
if (isset($_POST['activitysubmit'])) {
    $srchfrom = $onlinetime - (86400 * $days);
    $srchfrom = "AND (substring_index(lastpost, '|', 1) + 1) >= '$srchfrom'";
}

$srchtype = '';
switch ($type) {
    case 'unanswered':
        $srchtype = "AND replies = '0'";
        break;
    case 'hot':
        $srchtype = "AND replies >= '$SETTINGS[hottopic]'";
        break;
    case 'closed':
        $srchtype = "AND closed = 'yes'";
        break;
    case 'moved':
        $srchtype = "AND closed LIKE '%moved%'";
        break;
    case 'topped':
        $srchtype = "AND topped = '1'";
        break;
    case 'poll':
        $srchtype = "AND pollopts != ''";
        break;
    default:
        $srchtype = '';
        break;
}

$srchsort = '';
switch ($sort) {
    case 'subject':
        $srchsort = "subject";
        break;
    case 'author':
        $srchsort = "author";
        break;
    case 'replies':
        $srchsort = "replies";
        break;
    case 'views':
        $srchsort = "views";
        break;
    case 'lastpost':
        $srchsort = "lastpost";
        break;
    default:
        $srchsort = "lastpost";
        break;
}

$srchorder = '';
switch ($order) {
    case 'asc':
        $srchorder = "ASC";
        break;
    default:
        $srchorder = "DESC";
        break;
}

==========
Find Code:
==========

if (isset($page)) {
    $start_limit = ($page-1) *$tpp;
} else {
    $start_limit = 0;
    $page = 1;
}
if (isset($cusdate) && $cusdate != 0) {
    $cusdate = time() - $cusdate;
    $cusdate = "AND (substring_index(lastpost, '|',1)+1) >= '$cusdate'";
}
else {
    $cusdate = "";
}

$ascdesc = isset($ascdesc) ? $ascdesc : '';
if (strtolower($ascdesc) != 'asc') {
    $ascdesc = "desc";
}

==================
Replace Code With:
==================

$page = (isset($page) && is_numeric($page)) ? ($page < 1 ? 1 : ((int) $page)) : 1;
$start_limit = ($page > 1) ? (($page-1) * $tpp) : 0;

==========
Find Code:
==========

$threadsInFid = array();

if ( $dotfolders == "on" && X_MEMBER ) {
    $query = $db->query("SELECT tid FROM $table_posts WHERE author='$xmbuser' AND fid='$fid'");
    while ($row = $db->fetch_array($query)) {
        array_push($threadsInFid, $row['tid']);
    }
    $db->free_result($query);
}

==================
Replace Code With:
==================

$dotadd1 = $dotadd2 = '';
if ($SETTINGS['dotfolders'] == 'on' && X_MEMBER) {
    $dotadd1 = "DISTINCT p.author AS dotauthor, ";
    $dotadd2 = "LEFT JOIN $table_posts p ON (t.tid=p.tid AND p.author='$xmbuser')";
}

==========
Find Code:
==========

$querytop = $db->query("SELECT t.* FROM $table_threads t WHERE t.fid='$fid' $cusdate ORDER BY topped $ascdesc,lastpost $ascdesc LIMIT $start_limit, $tpp");

==================
Replace Code With:
==================

$querytop = $db->query("SELECT $dotadd1 t.* FROM $table_threads t $dotadd2 WHERE t.fid='$fid' $srchfrom $srchtype ORDER BY topped $srchorder, $srchsort $srchorder LIMIT $start_limit, $tpp");

==========
Find Code:
==========

    if ( $dotfolders == "on" && X_MEMBER && (count($threadsInFid) > 0) && in_array($thread['tid'], $threadsInFid) ) {
        $folder = "dot_".$folder;
    }

==================
Replace Code With:
==================

    if ($SETTINGS['dotfolders'] == 'on' && isset($thread['dotauthor']) == $xmbuser && X_MEMBER) {
        $folder = 'dot_'.$folder;
    }

==========
Find Code:
==========

$check1 = '';
$check5 = '';
$check15 = '';
$check30 = '';
$check60 = '';
$check100 = '';
$checkyear = '';
$checkall = '';


switch($cusdate) {
    case 86400:
        $check1 = "selected=\"selected\"";
        break;
    case 432000:
        $check5 = "selected=\"selected\"";
        break;
    case 1296000:
        $check15 = "selected=\"selected\"";
        break;
    case 2592000:
        $check30 = "selected=\"selected\"";
        break;
    case 5184000:
        $check60 = "selected=\"selected\"";
        break;
    case 8640000:
        $check100 = "selected=\"selected\"";
        break;
    case 31536000:
        $checkyear = "selected=\"selected\"";
        break;
    default:
        $checkall = "selected=\"selected\"";
        break;
}

==================
Replace Code With:
==================

$type_unanswered = $type_hot = $type_closed = '';
$type_moved = $type_topped = $type_poll = $type_active = '';
switch ($type) {
    case 'unanswered':
        $type_unanswered = 'selected="selected"';
        break;
    case 'hot':
        $type_hot = 'selected="selected"';
        break;
    case 'closed':
        $type_closed = 'selected="selected"';
        break;
    case 'moved':
        $type_moved = 'selected="selected"';
        break;
    case 'topped':
        $type_topped = 'selected="selected"';
        break;
    case 'poll':
        $type_poll = 'selected="selected"';
        break;
    default:
        $type_active = 'selected="selected"';
        break;
}

$sort_subject = $sort_author = $sort_forum = '';
$sort_replies = $sort_views = $sort_lastpost = '';
switch ($sort) {
    case 'subject':
        $sort_subject = 'selected="selected"';
        break;
    case 'author':
        $sort_author = 'selected="selected"';
        break;
    case 'replies':
        $sort_replies = 'selected="selected"';
        break;
    case 'views':
        $sort_views = 'selected="selected"';
        break;
    case 'lastpost':
        $sort_lastpost = 'selected="selected"';
        break;
    default:
        $sort_lastpost = 'selected="selected"';
        break;
}

$order_asc = $order_desc = '';
switch ($order) {
    case 'asc':
        $order_asc = 'selected="selected"';
        break;
    default:
        $order_desc = 'selected="selected"';
        break;
}
$check1 = $check5 = $check15 = $check30 = $check60 = $check100 = $checkyear = $checkall = '';

==========
Find Code:
==========

$query = $db->query("SELECT count(tid) FROM $table_threads WHERE fid='$fid'");
$topicsnum = $db->result($query, 0);

==================
Replace Code With:
==================

$totalquery = $db->query("SELECT $dotadd1 t.* FROM $table_threads t $dotadd2 WHERE t.fid = '$fid' $srchfrom $srchtype");
$total = $db->num_rows($totalquery);
$db->free_result($totalquery);

==========
Find Code:
==========

$mpurl = "forumdisplay.php?fid=$fid";
if (($multipage = multi($topicsnum, $tpp, $page, $mpurl)) === false) {
    $multipage = '';
} else {
    if ( $self['status'] == "Administrator" || $status1 == "Moderator") {
        eval('$multipage = "'.template('forumdisplay_multipage_admin').'";');
    } else {
        eval('$multipage = "'.template('forumdisplay_multipage').'";');
    }
}

==================
Replace Code With:
==================

$mpurl = 'forumdisplay.php?fid='.$fid.'&amp;type='.$type.'&amp;days='.$days.'&amp;sort='.$sort.'&amp;order='.$order;
if (($multipage = multi($total, $tpp, $page, $mpurl)) === false) {
    $multipage = '';
} else {
    if ($self['status'] == "Administrator" || $status1 == "Moderator") {
        eval('$multipage = "'.template('forumdisplay_multipage_admin').'";');
    } else {
        eval('$multipage = "'.template('forumdisplay_multipage').'";');
    }
}

=======================================================================================================================================
=======
Step 3:
=======

=======================================
Go To Administration Panel -> Templates
=======================================

===========================
Edit Template: forumdisplay
===========================

==========
Find Code:
==========

$subforums

===============
Add Code Below:
===============

<form method="post" action="forumdisplay.php?fid=$fid">
<table cellspacing="0" cellpadding="0" border="0" width="$tablewidth" align="center">
<tr>
<td bgcolor="$bordercolor">
<table border="0" cellspacing="$borderwidth" cellpadding="$tablespace" width="100%">
<tr>
<td class="category"><font color="$cattext"><strong>$lang[textsortby]</strong></font></td>
</tr>
<tr>
<td class="ctrtablerow" bgcolor="$altbg2">
$lang[ftopictype]&nbsp;
<select style="font-size: 9px" name="type">
<option value="active" $type_active>$lang[factive]</option>
<option value="unanswered" $type_unanswered>$lang[funanswered]</option>
<option value="hot" $type_hot>$lang[fhot]</option>
<option value="closed" $type_closed>$lang[fclosed]</option>
<option value="moved" $type_moved>$lang[fmoved]</option>
<option value="topped" $type_topped>$lang[ftopped]</option>
<option value="poll" $type_poll>$lang[fpoll]</option>
</select>
&nbsp;&nbsp;$lang[ftopicdays]&nbsp;
<input style="font-size: 9px" type="text" name="days" size="3" value="$days" />
&nbsp;&nbsp;$lang[ftopicsby]&nbsp;
<select style="font-size: 9px" name="sort">
<option value="subject" $sort_subject>$lang[fsubject]</option>
<option value="author" $sort_author>$lang[fauthor]</option>
<option value="replies" $sort_replies>$lang[freplies]</option>
<option value="views" $sort_views>$lang[fviews]</option>
<option value="lastpost" $sort_lastpost>$lang[flastpost]</option>
</select>
&nbsp;&nbsp;$lang[ftopicorder]&nbsp;
<select style="font-size: 9px" name="order">
<option value="asc" $order_asc>$lang[fascending]</option>
<option value="desc" $order_desc>$lang[fdescending]</option>
</select>
&nbsp;&nbsp;
<input style="font-size: 9px" type="submit" name="activitysubmit" value="$lang[fgo]" />
</td>
</tr>
</table>
</td>
</tr>
</table>
</form>
<br />

=====================
Find Code And Delete:
=====================

<br />
<table border="0" cellspacing="0" cellpadding="0" width="$tablewidth" bgcolor="$bordercolor" align="center">
<tr>
<td><table border="0" cellspacing="$borderwidth" cellpadding="$tablespace" width="100%">
<tr class="header">
<td colspan="6">
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td align="center" class="header"><form method="post" action="forumdisplay.php?fid=$fid">
<span class="smalltxt">$lang[showtopics]</span>
<select name="cusdate">
<option value="86400" $check1>$lang[day1]</option>
<option value="432000" $check5>$lang[day5]</option>
<option value="1296000" $check15>$lang[day15]</option>
<option value="2592000" $check30>$lang[day30]</option>
<option value="5184000" $check60>$lang[day60]</option>
<option value="8640000" $check100>$lang[day100]</option>
<option value="31536000" $checkyear>$lang[lastyear]</option>
<option value="0" $checkall>$lang[beginning]</option>
</select>
<span class="smalltxt">$lang[sortby]</span>
<select name="ascdesc">
<option value="ASC">$lang[asc]</option>
<option value="DESC" selected="selected">$lang[desc]</option>
</select>&nbsp;&nbsp;&nbsp;&nbsp;<input type="submit" class="submit" value="$lang[textgo]" /></form></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>

=======================================================================================================================================
=======
Step 4:
=======

=======================================
Go To Administration Panel -> Templates
=======================================

=================================
Edit Template: forumdisplay_admin
=================================

==========
Find Code:
==========

$subforums

===============
Add Code Below:
===============

<form method="post" action="forumdisplay.php?fid=$fid">
<table cellspacing="0" cellpadding="0" border="0" width="$tablewidth" align="center">
<tr>
<td bgcolor="$bordercolor">
<table border="0" cellspacing="$borderwidth" cellpadding="$tablespace" width="100%">
<tr>
<td class="category"><font color="$cattext"><strong>$lang[textsortby]</strong></font></td>
</tr>
<tr>
<td class="ctrtablerow" bgcolor="$altbg2">
$lang[ftopictype]&nbsp;
<select style="font-size: 9px" name="type">
<option value="active" $type_active>$lang[factive]</option>
<option value="unanswered" $type_unanswered>$lang[funanswered]</option>
<option value="hot" $type_hot>$lang[fhot]</option>
<option value="closed" $type_closed>$lang[fclosed]</option>
<option value="moved" $type_moved>$lang[fmoved]</option>
<option value="topped" $type_topped>$lang[ftopped]</option>
<option value="poll" $type_poll>$lang[fpoll]</option>
</select>
&nbsp;&nbsp;$lang[ftopicdays]&nbsp;
<input style="font-size: 9px" type="text" name="days" size="3" value="$days" />
&nbsp;&nbsp;$lang[ftopicsby]&nbsp;
<select style="font-size: 9px" name="sort">
<option value="subject" $sort_subject>$lang[fsubject]</option>
<option value="author" $sort_author>$lang[fauthor]</option>
<option value="replies" $sort_replies>$lang[freplies]</option>
<option value="views" $sort_views>$lang[fviews]</option>
<option value="lastpost" $sort_lastpost>$lang[flastpost]</option>
</select>
&nbsp;&nbsp;$lang[ftopicorder]&nbsp;
<select style="font-size: 9px" name="order">
<option value="asc" $order_asc>$lang[fascending]</option>
<option value="desc" $order_desc>$lang[fdescending]</option>
</select>
&nbsp;&nbsp;
<input style="font-size: 9px" type="submit" name="activitysubmit" value="$lang[fgo]" />
</td>
</tr>
</table>
</td>
</tr>
</table>
</form>
<br />

=====================
Find Code And Delete:
=====================

<br />
<table border="0" cellspacing="0" cellpadding="0" width="$tablewidth" bgcolor="$bordercolor" align="center">
<tr>
<td>
<table border="0" cellspacing="$borderwidth" cellpadding="$tablespace" width="100%">
<tr class="header">
<td colspan="6">
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td align="center" class="header">
<form method="post" action="forumdisplay.php?fid=$fid">
<span class="smalltxt">$lang[showtopics]</span>
<select name="cusdate">
<option value="86400" $check1>$lang[day1]</option>
<option value="432000" $check5>$lang[day5]</option>
<option value="1296000" $check15>$lang[day15]</option>
<option value="2592000" $check30>$lang[day30]</option>
<option value="5184000" $check60>$lang[day60]</option>
<option value="8640000" $check100>$lang[day100]</option>
<option value="31536000" $checkyear>$lang[lastyear]</option>
<option value="0" $checkall>$lang[beginning]</option>
</select>
<span class="smalltxt">$lang[sortby]</span>
<select name="ascdesc">
<option value="ASC">$lang[asc]</option>
<option value="DESC" selected="selected">$lang[desc]</option>
</select>&nbsp;&nbsp;&nbsp;&nbsp;<input type="submit" class="submit" value="$lang[textgo]" /></form>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>

=======================================================================================================================================