diff forum/Sources/Subs-Recent.php @ 76:e3e11437ecea website

Add forum code
author Chris Cannam
date Sun, 07 Jul 2013 11:25:48 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/forum/Sources/Subs-Recent.php	Sun Jul 07 11:25:48 2013 +0200
@@ -0,0 +1,107 @@
+<?php
+
+/**
+ * Simple Machines Forum (SMF)
+ *
+ * @package SMF
+ * @author Simple Machines http://www.simplemachines.org
+ * @copyright 2011 Simple Machines
+ * @license http://www.simplemachines.org/about/smf/license.php BSD
+ *
+ * @version 2.0
+ */
+
+if (!defined('SMF'))
+	die('Hacking attempt...');
+
+/*	!!!
+
+*/
+
+// Get the latest posts of a forum.
+function getLastPosts($latestPostOptions)
+{
+	global $scripturl, $txt, $user_info, $modSettings, $smcFunc, $context;
+
+	// Find all the posts.  Newer ones will have higher IDs.  (assuming the last 20 * number are accessable...)
+	// !!!SLOW This query is now slow, NEEDS to be fixed.  Maybe break into two?
+	$request = $smcFunc['db_query']('substring', '
+		SELECT
+			m.poster_time, m.subject, m.id_topic, m.id_member, m.id_msg,
+			IFNULL(mem.real_name, m.poster_name) AS poster_name, t.id_board, b.name AS board_name,
+			SUBSTRING(m.body, 1, 385) AS body, m.smileys_enabled
+		FROM {db_prefix}messages AS m
+			INNER JOIN {db_prefix}topics AS t ON (t.id_topic = m.id_topic)
+			INNER JOIN {db_prefix}boards AS b ON (b.id_board = t.id_board)
+			LEFT JOIN {db_prefix}members AS mem ON (mem.id_member = m.id_member)
+		WHERE m.id_msg >= {int:likely_max_msg}' .
+			(!empty($modSettings['recycle_enable']) && $modSettings['recycle_board'] > 0 ? '
+			AND b.id_board != {int:recycle_board}' : '') . '
+			AND {query_wanna_see_board}' . ($modSettings['postmod_active'] ? '
+			AND t.approved = {int:is_approved}
+			AND m.approved = {int:is_approved}' : '') . '
+		ORDER BY m.id_msg DESC
+		LIMIT ' . $latestPostOptions['number_posts'],
+		array(
+			'likely_max_msg' => max(0, $modSettings['maxMsgID'] - 50 * $latestPostOptions['number_posts']),
+			'recycle_board' => $modSettings['recycle_board'],
+			'is_approved' => 1,
+		)
+	);
+	$posts = array();
+	while ($row = $smcFunc['db_fetch_assoc']($request))
+	{
+		// Censor the subject and post for the preview ;).
+		censorText($row['subject']);
+		censorText($row['body']);
+
+		$row['body'] = strip_tags(strtr(parse_bbc($row['body'], $row['smileys_enabled'], $row['id_msg']), array('<br />' => '&#10;')));
+		if ($smcFunc['strlen']($row['body']) > 128)
+			$row['body'] = $smcFunc['substr']($row['body'], 0, 128) . '...';
+
+		// Build the array.
+		$posts[] = array(
+			'board' => array(
+				'id' => $row['id_board'],
+				'name' => $row['board_name'],
+				'href' => $scripturl . '?board=' . $row['id_board'] . '.0',
+				'link' => '<a href="' . $scripturl . '?board=' . $row['id_board'] . '.0">' . $row['board_name'] . '</a>'
+			),
+			'topic' => $row['id_topic'],
+			'poster' => array(
+				'id' => $row['id_member'],
+				'name' => $row['poster_name'],
+				'href' => empty($row['id_member']) ? '' : $scripturl . '?action=profile;u=' . $row['id_member'],
+				'link' => empty($row['id_member']) ? $row['poster_name'] : '<a href="' . $scripturl . '?action=profile;u=' . $row['id_member'] . '">' . $row['poster_name'] . '</a>'
+			),
+			'subject' => $row['subject'],
+			'short_subject' => shorten_subject($row['subject'], 24),
+			'preview' => $row['body'],
+			'time' => timeformat($row['poster_time']),
+			'timestamp' => forum_time(true, $row['poster_time']),
+			'raw_timestamp' => $row['poster_time'],
+			'href' => $scripturl . '?topic=' . $row['id_topic'] . '.msg' . $row['id_msg'] . ';topicseen#msg' . $row['id_msg'],
+			'link' => '<a href="' . $scripturl . '?topic=' . $row['id_topic'] . '.msg' . $row['id_msg'] . ';topicseen#msg' . $row['id_msg'] . '" rel="nofollow">' . $row['subject'] . '</a>'
+		);
+	}
+	$smcFunc['db_free_result']($request);
+
+	return $posts;
+}
+
+// Callback-function for the cache for getLastPosts().
+function cache_getLastPosts($latestPostOptions)
+{
+	return array(
+		'data' => getLastPosts($latestPostOptions),
+		'expires' => time() + 60,
+		'post_retri_eval' => '
+			foreach ($cache_block[\'data\'] as $k => $post)
+			{
+				$cache_block[\'data\'][$k][\'time\'] = timeformat($post[\'raw_timestamp\']);
+				$cache_block[\'data\'][$k][\'timestamp\'] = forum_time(true, $post[\'raw_timestamp\']);
+			}',
+	);
+}
+
+?>
\ No newline at end of file