/*
Block: Recent posts with post preview
Author: Blue @ Simple Portal.net
Version: 1.9
*/
/* [SETUP WHAT YOU WANT HERE] */
$topics_posts = 1; // TOPICS - 1 | MESSAGES - 2
$limit = 5; // How many recent posts do you want to output?
$number = 70; // How many characters do you want to output?
$exclude_boards = null; // IF null guests can see all boards | IF you want to hide some boards use: array( ID1, ID2, ID3) where ID is the board's ID
$htmlspecialcharacters = false; // Do you need to show html special characters like Greek characters?
// Scroll Enable? Height and Speed?
$scrolling = 0; // ENABLE - 1 | DISABLE - 2
$speed = 3; // SLOW - 1 | MEDIUM - 10 | FAST - 20
$height = "150px";
$scrollbar = 0; // ENABLE - 1 | DISABLE - 2
// Do you want to translate it to your own language? :P
$text['sportal_false'] = 'Simple Portal not found';
/* [STOP!] - THIS IS THE END OF SETUP */
//Only code from now on ;)
global $smcFunc, $scripturl, $sourcedir, $modSettings, $user_info, $settings, $context, $txt;
// Lets see if you are using Simple Portal. If not...well...go get them :D
if (!file_exists($sourcedir . '/PortalBlocks.php')) {
echo $text['sportal_false'];
return;
}
// Let's grab some database results
if ($topics_posts == 1) {
if (is_array($exclude_boards) || (int) $exclude_boards === $exclude_boards) {
$exclude_boards = is_array($exclude_boards) ? $exclude_boards : array($exclude_boards);
} elseif ($exclude_boards != null) {
$output_method = $exclude_boards;
$exclude_boards = array();
}
$posts_result = $smcFunc['db_query'](
'',
'
SELECT m.poster_time, m.id_msg, t.id_member_updated, m.subject, m.body, m.id_topic, b.name, t.id_last_msg, IFNULL(u.real_name, m.poster_name) AS poster_name, u.avatar, g.online_color,' . ($user_info['is_guest'] ? '1 AS is_read, 0 AS new_from' : '
(IFNULL(lb.id_msg, 0) >= b.id_msg_updated) AS is_read,
IFNULL(lb.id_msg, -1) + 1 AS new_from') . '
FROM {db_prefix}topics AS t
LEFT JOIN {db_prefix}boards AS b ON (t.id_board = b.id_board)
LEFT JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_last_msg)
LEFT JOIN {db_prefix}members AS u ON (t.id_member_updated = u.id_member)' . ($user_info['is_guest'] ? '' : '
LEFT JOIN {db_prefix}log_boards AS lb ON (lb.id_board = b.id_board AND lb.id_member = {int:current_member})') . '
LEFT JOIN {db_prefix}membergroups AS g ON (g.id_group = CASE WHEN u.id_group = 0 THEN u.id_post_group ELSE u.id_group END)
' . (!$user_info['is_guest'] ? '
LEFT JOIN {db_prefix}log_topics AS lt ON (lt.id_topic = m.id_topic AND lt.id_member = ' . $user_info['id'] . ')
LEFT JOIN {db_prefix}log_mark_read AS lmr ON (lmr.id_board = b.id_board AND lmr.id_member = ' . $user_info['id'] . ')' : '') . '
WHERE m.approved=1' . (empty($exclude_boards) ? '' : '
AND b.id_board NOT IN ({array_int:exclude_boards})') . ' AND {query_see_board}
ORDER BY t.id_last_msg DESC
LIMIT ' . $limit,
array(
'exclude_boards' => empty($exclude_boards) ? '' : $exclude_boards,
'current_member' => $user_info['id'],
)
);
$posts = array();
while ($row_posts = $smcFunc['db_fetch_assoc']($posts_result)) {
global $memberContext;
loadMemberData($row_posts['id_member_updated']);
loadMemberContext($row_posts['id_member_updated']);
$posts[] = array(
'id' => $row_posts['id_member_updated'],
'username' => '<a style="color: ' . $row_posts['online_color'] . ';" href="' . $scripturl . '?action=profile;u=' . $row_posts['id_member_updated'] . '">' . $row_posts['poster_name'] . '</a>',
'subject' => '<a style="font-weight: bold;" title="' . $txt['board'] . ': ' . $row_posts['name'] . '" href="' . $scripturl . '?topic=' . $row_posts['id_topic'] . '.msg' . $row_posts['id_last_msg'] . ';topicseen#new">' . $row_posts['subject'] . '</a>',
'body' => $row_posts['body'],
'avatar' => $row_posts['avatar'] == '' ? $memberContext[$row_posts['id_member_updated']]['avatar']['href'] : (stristr($row_posts['avatar'], 'http://') ? $row_posts['avatar'] : $modSettings['avatar_url'] . '/' . $row_posts['avatar']),
'board' => $row_posts['name'],
'time' => timeformat($row_posts['poster_time']),
'new' => !empty($row_posts['is_read']),
'subject_new' => $scripturl . '?topic=' . $row_posts['id_topic'] . '.msg' . $row_posts['id_msg'] . ';topicseen#new'
);
}
$smcFunc['db_free_result']($posts_result);
} else {
if (is_array($exclude_boards) || (int) $exclude_boards === $exclude_boards) {
$exclude_boards = is_array($exclude_boards) ? $exclude_boards : array($exclude_boards);
} elseif ($exclude_boards != null) {
$output_method = $exclude_boards;
$exclude_boards = array();
}
$posts_result = $smcFunc['db_query'](
'',
'
SELECT m.poster_time, m.id_msg, m.id_member, m.subject, m.body, m.id_topic, b.name, b.id_board, IFNULL(u.real_name, m.poster_name) AS poster_name, u.avatar, g.online_color,' . ($user_info['is_guest'] ? '1 AS is_read, 0 AS new_from' : '
(IFNULL(lb.id_msg, 0) >= b.id_msg_updated) AS is_read,
IFNULL(lb.id_msg, -1) + 1 AS new_from') . '
FROM {db_prefix}messages AS m
LEFT JOIN {db_prefix}boards AS b ON (m.id_board = b.id_board)
LEFT JOIN {db_prefix}members AS u ON (m.id_member = u.id_member)' . ($user_info['is_guest'] ? '' : '
LEFT JOIN {db_prefix}log_boards AS lb ON (lb.id_board = b.id_board AND lb.id_member = {int:current_member})') . '
LEFT JOIN {db_prefix}membergroups AS g ON (g.id_group = CASE WHEN u.id_group = 0 THEN u.id_post_group ELSE u.id_group END)
' . (!$user_info['is_guest'] ? '
LEFT JOIN {db_prefix}log_topics AS lt ON (lt.id_topic = m.id_topic AND lt.id_member = ' . $user_info['id'] . ')
LEFT JOIN {db_prefix}log_mark_read AS lmr ON (lmr.id_board = b.id_board AND lmr.id_member = ' . $user_info['id'] . ')' : '') . '
WHERE m.approved=1' . (empty($exclude_boards) ? '' : '
AND b.id_board NOT IN ({array_int:exclude_boards})') . ' AND {query_see_board}
ORDER BY m.id_msg DESC
LIMIT ' . $limit,
array(
'exclude_boards' => empty($exclude_boards) ? '' : $exclude_boards,
'current_member' => $user_info['id'],
)
);
$posts = array();
while ($row_posts = $smcFunc['db_fetch_assoc']($posts_result)) {
global $memberContext;
loadMemberData($row_posts['id_member']);
loadMemberContext($row_posts['id_member']);
$posts[] = array(
'id' => $row_posts['id_member'],
'username' => '<a style="color: ' . $row_posts['online_color'] . ';" href="' . $scripturl . '?action=profile;u=' . $row_posts['id_member'] . '">' . $row_posts['poster_name'] . '</a>',
'subject' => '<a style="font-weight: bold;" title="' . $txt['board'] . ': ' . $row_posts['name'] . '" href="' . $scripturl . '?topic=' . $row_posts['id_topic'] . '.msg' . $row_posts['id_msg'] . ';topicseen#new">' . $row_posts['subject'] . '</a>',
'body' => $row_posts['body'],
'avatar' => $row_posts['avatar'] == '' ? $memberContext[$row_posts['id_member']]['avatar']['href'] : (stristr($row_posts['avatar'], 'http://') ? $row_posts['avatar'] : $modSettings['avatar_url'] . '/' . $row_posts['avatar']),
'board' => $row_posts['name'],
'time' => timeformat($row_posts['poster_time']),
'new' => !empty($row_posts['is_read']),
'subject_new' => $scripturl . '?topic=' . $row_posts['id_topic'] . '.msg' . $row_posts['id_msg'] . ';topicseen#new'
);
}
$smcFunc['db_free_result']($posts_result);
}
//Finally the Output
//Scrolling xD
if ($scrolling == 1)
echo '<div style="overflow: hidden;">
<marquee height=' . $height . ' behavior="scroll" direction="up" scrollamount="' . $speed . '" onmouseover="this.stop()" onmouseout="this.start()">';
if ($scrollbar == 1)
echo '<div style="height:' . $height . '; overflow-y: scroll; overflow-x: hidden;">';
foreach ($posts as $post) {
// Lets fix the BBCode bug and Strip the Text
$content1 = str_replace("[", "<", $post['body']);
$content2 = str_replace("]", ">", $content1);
$content3 = strip_tags($content2);
$preview = substr($content3, 0, $number);
echo '<table>
<tr>
<td style="width: 40px;">
<img src="' . $post['avatar'] . '" alt="" width="40px" height="40px" />
</td>
<td>
' . $post['subject'];
if (!$post['new'] && $context['user']['is_logged'])
echo ' <a href="' . $post['subject_new'] . '" rel="nofollow" class="new_posts" style="margin:0px;">New</a>';
echo '<br />
<small>' . $txt['by'] . ' ' . $post['username'] . ' | ' . $post['time'] . '</small>
</td>
</tr>
</table>';
if ($htmlspecialcharacters) {
echo htmlspecialchars($preview, ENT_NOQUOTES, "UTF-8") . '...';
} else {
echo $preview . '...';
}
echo '
<hr />';
}
//Scrolling xD
if ($scrollbar == 1)
echo '</div>';
if ($scrolling == 1)
echo '</marquee>
</div>';
Quote from: Arminus on February 11, 2024, 03:10:00 PMQuote from: tino on February 11, 2024, 10:53:17 AMthe functions we supply were never intended to just be called.I can see that, but that was suggested by rjen above and I figured that since we are calling this from within a TP Article, the context might be implicitly there - but I really don't have any understanding on how the bits and pieces play together there.
At any rate, seems that setting these 3 vars is sufficient:$context['TPortal']['recentboxnum'] = 5;
$context['TPortal']['recentlength'] = 25;
$context['TPortal']['useavatar'] = 0;
So we're fine here for now.
Quote from: tino on February 11, 2024, 10:53:17 AMthe functions we supply were never intended to just be called.I can see that, but that was suggested by rjen above and I figured that since we are calling this from within a TP Article, the context might be implicitly there - but I really don't have any understanding on how the bits and pieces play together there.
$context['TPortal']['recentboxnum'] = 5;
$context['TPortal']['recentlength'] = 25;
$context['TPortal']['useavatar'] = 0;
TPortal_recentbox();
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 10
File: <base>/SSI.php
Line: 652
require_once("C:/xampp/htdocs/SSI.php");
require_once("C:/xampp/htdocs/Themes/default/TPsubs.template.php");
require_once("C:/xampp/htdocs/Themes/default/languages/TPortal.german_informal.php");
TPortal_recentbox();
Notice: Undefined index: TPortal in C:\xampp\htdocs\Themes\default\TPsubs.template.php on line 669
Notice: Trying to access array offset on value of type null in C:\xampp\htdocs\Themes\default\TPsubs.template.php on line 669
Notice: Undefined index: TPortal in C:\xampp\htdocs\Themes\default\TPsubs.template.php on line 674
Notice: Trying to access array offset on value of type null in C:\xampp\htdocs\Themes\default\TPsubs.template.php on line 674
Notice: Undefined index: TPortal in C:\xampp\htdocs\Themes\default\TPsubs.template.php on line 694
Notice: Trying to access array offset on value of type null in C:\xampp\htdocs\Themes\default\TPsubs.template.php on line 694
Quote from: rrolle on February 10, 2024, 09:04:01 AMThere is no code in the block itself, I only selected the "Current Topics" type at the time.
It would be enough for me if I knew in which file the code for "Current Topics" is located.
// blocktype 12: Recent Topics
function TPortal_recentbox()
{
global $scripturl, $context, $settings, $txt, $modSettings, $user_info;
// if no guest access to forum, then no recent topics
if(empty($modSettings['allow_guestAccess']) && $user_info['is_guest']) {
echo '' .$txt['tp-noguest_access'] .'';
return;
}
else {
// set variable
if(is_numeric($context['TPortal']['minmessagetopics']))
$context['min_message_topics'] = $context['TPortal']['minmessagetopics'];
else
$context['min_message_topics'] = 350;
// is it a number?
if(is_numeric($context['TPortal']['recentlength']))
$recentlength = $context['TPortal']['recentlength'];
else
$recentlength = '25';
// exclude boards
if (isset($context['TPortal']['recentboards']) && $context['TPortal']['boardmode'] == 0)
$exclude_boards = $context['TPortal']['recentboards'];
else {
// leave out the recycle board, if any
if(isset($modSettings['recycle_board']) && $modSettings['recycle_enable'] = 1 )
$bb = array($modSettings['recycle_board']);
$exclude_boards = $bb;
}
// include boards
if (isset($context['TPortal']['recentboards']) && !$context['TPortal']['boardmode'] == 0)
$include_boards = $context['TPortal']['recentboards'];
else
$include_boards = null;
$what = ssi_recentTopics($num_recent = $context['TPortal']['recentboxnum'] , $exclude_boards, $include_boards, $output_method = 'array');
if($context['TPortal']['useavatar'] == 0)
{
// Output the topics
echo '
<ul class="tp_recenttopics" style="' , isset($context['TPortal']['recentboxscroll']) && $context['TPortal']['recentboxscroll'] == 1 ? 'overflow: auto; height: 20ex;' : '' , 'margin: 0; padding: 0;">';
$coun = 1;
foreach($what as $wi => $w)
{
$tpshortsubject = $w['subject'];
$w['readmore'] = '';
if(TPUtil::shortenString($tpshortsubject, $recentlength)) {
$w['readmore'] = '...';
}
echo '
<li' , $coun<count($what) ? '' : ' style="border: none; margin-bottom: 0;padding-bottom: 0;"' , '>';
if ($w['is_new'])
echo '
<a href="' . $scripturl . '?topic=' . $w['topic'] . '.msg' . $w['new_from'] . ';topicseen#new" rel="nofollow" class="new_posts" style="margin:0px;">' . $txt['new'] . '</a> ';
echo '
<a href="' . $w['href'] . '" title="' . $w['subject'] . '">'. $tpshortsubject .''. $w['readmore'] .'</a>
', $txt['by'], ' <b>', $w['poster']['link'],'</b>
<br><span class="smalltext">['.$w['time'].']</span>
</li>';
$coun++;
}
echo '
</ul>';
}
else
{
$member_ids = array();
foreach($what as $wi => $w)
{
$member_ids[] = $w['poster']['id'];
}
if(!empty($member_ids))
$avatars = progetAvatars($member_ids);
else
$avatars = array();
// Output the topics
$coun = 1;
echo '
<ul class="tp_recenttopics" style="' , isset($context['TPortal']['recentboxscroll']) && $context['TPortal']['recentboxscroll']==1 ? 'overflow: auto; height: 20ex;' : '' , 'margin: 0; padding: 0;">';
foreach($what as $wi => $w)
{
$tpshortsubject = $w['subject'];
$w['readmore'] = '';
if(TPUtil::shortenString($tpshortsubject, $recentlength)) {
$w['readmore'] = '...';
}
echo '
<li' , $coun<count($what) ? '' : ' style="border: none; margin-bottom: 0;padding-bottom: 0;"' , '>';
if ($w['is_new'])
echo '
<a href="' . $scripturl . '?topic=' . $w['topic'] . '.msg' . $w['new_from'] . ';topicseen#new" rel="nofollow" class="new_posts" style="margin:0px;">' . $txt['new'] . '</a> ';
echo '
<span class="tp_avatar"><a href="' . $scripturl. '?action=profile;u=' . $w['poster']['id'] . '">' , empty($avatars[$w['poster']['id']]) ? '<img class="avatar" src="' . $settings['tp_images_url'] . '/TPguest.png" alt="" />' : $avatars[$w['poster']['id']] , '</a></span><a href="'.$w['href'].'" title="' . $w['subject'] . '">'. $tpshortsubject .''. $w['readmore'] .'</a>
', $txt['by'], ' <b>', $w['poster']['link'],'</b>
<br><span class="smalltext">['.$w['time'].']</span>
</li>';
$coun++;
}
echo '
</ul>';
}
}
}
Page created in 0.122 seconds with 24 queries.