I wrote the following code with inspiration from this mod. This is for 1.1.10, although it might work for earlier. Make sure you understand what I'm doing so you don't mess the code up, since my instructions can be a bit ambiguous.
KEEP A BACKUP. PLEASE. I'M WARNING YOU. I applied changes directly to my forum, so I'm unsure if this list of instructions is correct or complete. Use at your own risk.
Recent.template.php
Repeat the following for both the template_unread() function and the template_replies() function. They are both extremely similar, and so we are applying the same changes to both. Follow the below instructions twice for each of the two functions.
1. Find the $mark_read array and add this item to it:
'markselected' => array('text' => 'mark_selected', 'lang' => true, 'url' => 'javascript:document.quickModForm.submit();')
2. Find this right after it...
echo '
</tr>
</table>
...And add this form element:
<form action="', $scripturl, '?action=markasread;sa=unreadreplies;return=', urlencode(base64_encode(serialize($_GET))), ';sesc=', $context['session_id'], '" method="post" accept-charset="', $context['character_set'], '" name="quickModForm" id="quickModForm" style="margin: 0;">
3. For template_unread(), find:
</td><td width="24%">
<a href="', $scripturl, '?action=unread', $context['showing_all_topics'] ? ';all' : '', $context['querystring_board_limits'], ';sort=last_post', $context['sort_by'] == 'last_post' && $context['sort_direction'] == 'up' ? ';desc' : '', '">', $txt[111], $context['sort_by'] == 'last_post' ? ' <img src="' . $settings['images_url'] . '/sort_' . $context['sort_direction'] . '.gif" alt="" border="0" />' : '', '</a>
</td>
For template_replies(), find:
<td width="24%"><a href="', $scripturl, '?action=unreadreplies', $context['querystring_board_limits'], ';sort=last_post', $context['sort_by'] == 'last_post' && $context['sort_direction'] == 'up' ? ';desc' : '', '">', $txt[111], $context['sort_by'] == 'last_post' ? ' <img src="' . $settings['images_url'] . '/sort_' . $context['sort_direction'] . '.gif" alt="" border="0" />' : '', '</a></td>
Add after that:
<td class="windowbg2" valign="middle" width="4%" align="center">
<input type="checkbox" onclick="invertAll(this, this.form, \'topic_array[]\');" class="check" />
</td>
4. Find:
<td class="windowbg2" valign="middle" width="22%">
<a href="', $topic['last_post']['href'], '"><img src="', $settings['images_url'], '/icons/last_post.gif" alt="', $txt[111], '" title="', $txt[111], '" style="float: right;" /></a>
<span class="smalltext">
', $topic['last_post']['time'], '<br />
', $txt[525], ' ', $topic['last_post']['member']['link'], '
</span>
</td>
Add after:
<td class="windowbg2" valign="middle" width="4%" align="center">
<input type="checkbox" name="topic_array[]" class="check" value="', $topic['id'], '" />
</td>
5. Find:
echo '
</table>
</td></tr>
</table>
And add after:
</form>
6. Replace any...
colspan="7"
...in the function with...
colspan="8"
Modifications.english.php
Add this to it:
$txt['mark_selected'] = 'Mark Selected as Read';
Subs-Boards.php.
Find:
// Make sure all the boards are integers!
Replace the line after with:
$topics = !empty($_POST['topic_array']) ? $_POST['topic_array'] : explode('-', !empty($_REQUEST['topics']) ? $_REQUEST['topics'] : '');
Find:
if (isset($_SESSION['topicseen_cache']))
$_SESSION['topicseen_cache'] = array();
Replace the redirectexit() line with:
if (!empty($_REQUEST['return'])) {
$link = '';
foreach (unserialize(base64_decode($_REQUEST['return'])) as $i => $value)
$link .= $i . '=' . $value . ';';
} else
$link = 'action=unreadreplies';
redirectexit($link);
And that should do it. Test it.
If you understood that, then you are probably capable of writing a mod, so if you would like to distribute these edits as a mod, feel free to do so. You must link to this post, if you do though.