Announcement Permissions Power

This commit is contained in:
Ice
2008-01-31 18:19:12 +00:00
parent a52171fba0
commit 1c596cb785
2 changed files with 283 additions and 256 deletions

View File

@@ -17,29 +17,10 @@ if (!defined('IN_PORTAL'))
exit; exit;
} }
// Get cleaned up list... return only those forums not having the f_read permission
$forum_ary = $auth->acl_getf('!f_read', true);
$forum_ary = array_unique(array_keys($forum_ary));
// Determine first forum the user is able to read into - for global announcement link
$sql = 'SELECT forum_id
FROM ' . FORUMS_TABLE . '
WHERE forum_type = ' . FORUM_POST;
if (sizeof($forum_ary))
{
$sql .= ' AND ' . $db->sql_in_set('forum_id', $forum_ary, true);
}
$result = $db->sql_query_limit($sql, 1);
$g_forum_id = (int) $db->sql_fetchfield('forum_id');
$db->sql_freeresult($result);
$can_read = ( $g_forum_id == 0 ) ? false : true;
$news = request_var('announcement', -1); $news = request_var('announcement', -1);
if($news < 0) if($news < 0)
{ {
$fetch_news = phpbb_fetch_posts('', $portal_config['portal_number_of_announcements'], $portal_config['portal_announcements_length'], $portal_config['portal_announcements_day'], 'announcements'); $fetch_news = phpbb_fetch_posts($portal_config['portal_global_announcements_forum'], $portal_config['portal_number_of_announcements'], $portal_config['portal_announcements_length'], $portal_config['portal_announcements_day'], 'announcements');
if (count($fetch_news) == 0) if (count($fetch_news) == 0)
{ {
@@ -47,6 +28,8 @@ if($news < 0)
'S_NO_TOPICS' => true, 'S_NO_TOPICS' => true,
'S_NOT_LAST' => false 'S_NOT_LAST' => false
)); ));
$template->assign_var('S_CAN_READ', $can_read);
} }
else else
{ {
@@ -71,7 +54,7 @@ if($news < 0)
$topic_tracking_info = get_complete_topic_tracking($forum_id, $topic_id, $global_announce_list = false); $topic_tracking_info = get_complete_topic_tracking($forum_id, $topic_id, $global_announce_list = false);
$unread_topic = (isset($topic_tracking_info[$topic_id]) && $fetch_news[$i]['topic_last_post_time'] > $topic_tracking_info[$topic_id]) ? true : false; $unread_topic = (isset($topic_tracking_info[$topic_id]) && $fetch_news[$i]['topic_last_post_time'] > $topic_tracking_info[$topic_id]) ? true : false;
$real_forum_id = ( $forum_id == 0 ) ? $g_forum_id : $forum_id; $real_forum_id = ( $forum_id == 0 ) ? $fetch_news[$i]['global_id']: $forum_id;
$template->assign_block_vars('announcements_row', array( $template->assign_block_vars('announcements_row', array(
'ATTACH_ICON_IMG' => ($fetch_news[$i]['attachment']) ? $user->img('icon_topic_attach', $user->lang['TOTAL_ATTACHMENTS']) : '', 'ATTACH_ICON_IMG' => ($fetch_news[$i]['attachment']) ? $user->img('icon_topic_attach', $user->lang['TOTAL_ATTACHMENTS']) : '',
@@ -101,8 +84,7 @@ if($news < 0)
} }
else else
{ {
#$fetch_news = phpbb_fetch_posts($portal_config['portal_news_forum'], $portal_config['portal_number_of_news'], 0, 0, ($portal_config['portal_show_all_news']) ? 'news_all' : 'news'); $fetch_news = phpbb_fetch_posts($portal_config['portal_news_forum'], $portal_config['portal_number_of_news'], $portal_config['portal_news_length'], 0, ($portal_config['portal_show_all_news']) ? 'news_all' : 'news');
$fetch_news = phpbb_fetch_posts('', $portal_config['portal_number_of_announcements'], 0, 0, 'announcements');
$i = $news; $i = $news;
$forum_id = $fetch_news[$i]['forum_id']; $forum_id = $fetch_news[$i]['forum_id'];
@@ -140,7 +122,6 @@ $template->assign_vars(array(
'NEWEST_POST_IMG' => $user->img('icon_topic_newest', 'VIEW_NEWEST_POST'), 'NEWEST_POST_IMG' => $user->img('icon_topic_newest', 'VIEW_NEWEST_POST'),
'READ_POST_IMG' => $user->img('icon_topic_latest', 'VIEW_NEWEST_POST'), 'READ_POST_IMG' => $user->img('icon_topic_latest', 'VIEW_NEWEST_POST'),
'S_DISPLAY_ANNOUNCEMENTS' => true, 'S_DISPLAY_ANNOUNCEMENTS' => true,
'S_CAN_READ' => $can_read,
)); ));
?> ?>

View File

@@ -31,19 +31,57 @@ while( $row = $db->sql_fetchrow($result) )
include($phpbb_root_path . 'includes/message_parser.'.$phpEx); include($phpbb_root_path . 'includes/message_parser.'.$phpEx);
// fetch post for news & announce // fetch post for news & announce
function phpbb_fetch_posts($forum_sql, $number_of_posts, $text_length, $time, $type) function phpbb_fetch_posts($forum_from, $number_of_posts, $text_length, $time, $type)
{ {
global $db, $phpbb_root_path, $auth, $bbcode_bitfield, $user, $forum_id; global $db, $phpbb_root_path, $auth, $user, $bbcode_bitfield;
$posts = array();
$from_forum = ($forum_sql) ? 't.forum_id IN (' . $forum_sql . ') AND' : '';
$post_time = ($time == 0) ? '' : 't.topic_last_post_time > ' . (time() - $time * 86400) . ' AND'; $post_time = ($time == 0) ? '' : 't.topic_last_post_time > ' . (time() - $time * 86400) . ' AND';
$forum_from = ( strpos($forum_from, ',') !== FALSE ) ? explode(',', $forum_from) : (($forum_from != '') ? array($forum_from) : array());
$str_where = '';
$allow_access = $auth->acl_getf('f_read', true);
if( sizeof($allow_access) ){
if( sizeof($forum_from) )
{
foreach( $allow_access as $acc_id => $acc_data )
{
if( in_array($acc_id, $forum_from ) )
{
$str_where .= "t.forum_id = $acc_id OR ";
if( !isset($gobal_f) )
{
$global_f = $acc_id;
}
}
}
}
else
{
foreach( $allow_access as $acc_id => $acc_bool )
{
$str_where .= "t.forum_id = $acc_id OR ";
if( !isset($gobal_f) )
{
$global_f = $acc_id;
}
}
}
if ($type == 'announcements') if ($type == 'announcements')
{ {
// only global announcements for announcements block // only global announcements for announcements block
$topic_type = '(( t.topic_type = ' . POST_ANNOUNCE . ') OR ( t.topic_type = ' . POST_GLOBAL . ')) AND'; $topic_type = '(( t.topic_type = ' . POST_ANNOUNCE . ') OR ( t.topic_type = ' . POST_GLOBAL . ')) AND';
if( strlen($str_where) > 0 )
{
$str_where = ( strlen($str_where) > 0 ) ? 'AND (t.forum_id = 0 OR ' . substr($str_where, 0, -4) . ')' : '';
$sql = 'SELECT $sql = 'SELECT
t.forum_id, t.forum_id,
@@ -87,10 +125,10 @@ function phpbb_fetch_posts($forum_sql, $number_of_posts, $text_length, $time, $t
t.topic_first_post_id = p.post_id t.topic_first_post_id = p.post_id
WHERE WHERE
' . $topic_type . ' ' . $topic_type . '
' . $from_forum . '
' . $post_time . ' ' . $post_time . '
t.topic_status <> 2 AND t.topic_status <> 2 AND
t.topic_approved = 1 t.topic_approved = 1
' . $str_where .'
ORDER BY ORDER BY
t.topic_time DESC'; t.topic_time DESC';
@@ -112,11 +150,8 @@ function phpbb_fetch_posts($forum_sql, $number_of_posts, $text_length, $time, $t
include_once($phpbb_root_path . 'includes/bbcode.' . $phpEx); include_once($phpbb_root_path . 'includes/bbcode.' . $phpEx);
$bbcode = new bbcode(base64_encode($bbcode_bitfield)); $bbcode = new bbcode(base64_encode($bbcode_bitfield));
} }
$posts = array();
$i = 0; $i = 0;
while ( ($row = $db->sql_fetchrow($result)) && ( ($i < $number_of_posts) || ($number_of_posts == '0') ) ) while ( ($row = $db->sql_fetchrow($result)) && ( ($i < $number_of_posts) || ($number_of_posts == '0') ) )
{
if ( ($auth->acl_get('f_read', $row['forum_id'])) || ($row['forum_id'] == '0') )
{ {
if ($row['user_id'] != ANONYMOUS && $row['user_colour']) if ($row['user_id'] != ANONYMOUS && $row['user_colour'])
{ {
@@ -146,12 +181,13 @@ function phpbb_fetch_posts($forum_sql, $number_of_posts, $text_length, $time, $t
$posts[$i]['attachment'] = ($row['topic_attachment']) ? true : false; $posts[$i]['attachment'] = ($row['topic_attachment']) ? true : false;
$posts[$i]['topic_views'] = ($row['topic_views']); $posts[$i]['topic_views'] = ($row['topic_views']);
$posts[$i]['forum_name'] = ($row['forum_name']); $posts[$i]['forum_name'] = ($row['forum_name']);
$posts[$i]['global_id'] = ($global_f);
$message = $posts[$i]['post_text']; $message = $posts[$i]['post_text'];
$message = str_replace("\n", '<br />', $message); $message = str_replace("\n", '<br />', $message);
if ($auth->acl_get('f_html', $forum_id)) if ($auth->acl_get('f_html', $row['forum_id']))
{ {
$message = preg_replace('#<!\-\-(.*?)\-\->#is', '', $message); // Remove Comments from post content $message = preg_replace('#<!\-\-(.*?)\-\->#is', '', $message); // Remove Comments from post content
} }
@@ -183,6 +219,8 @@ function phpbb_fetch_posts($forum_sql, $number_of_posts, $text_length, $time, $t
} }
$str_where = 'AND (' . substr($str_where, 0, -4) . ')';
$sql = 'SELECT $sql = 'SELECT
t.forum_id, t.forum_id,
t.topic_id, t.topic_id,
@@ -211,24 +249,28 @@ function phpbb_fetch_posts($forum_sql, $number_of_posts, $text_length, $time, $t
p.bbcode_uid, p.bbcode_uid,
f.forum_name f.forum_name
FROM FROM
' . TOPICS_TABLE . ' AS t, ' . TOPICS_TABLE . ' AS t
' . USERS_TABLE . ' AS u, LEFT JOIN
' . POSTS_TABLE . ' AS p, ' . USERS_TABLE . ' as u
' . FORUMS_TABLE . ' AS f ON
t.topic_poster = u.user_id
LEFT JOIN
' . FORUMS_TABLE . ' as f
ON
t.forum_id=f.forum_id
LEFT JOIN
' . POSTS_TABLE . ' as p
ON
t.topic_first_post_id = p.post_id
WHERE WHERE
' . $topic_type . ' ' . $topic_type . '
' . $from_forum . '
' . $post_time . ' ' . $post_time . '
t.topic_last_poster_id = u.user_id AND
t.topic_last_post_id = p.post_id AND
t.topic_status <> 2 AND t.topic_status <> 2 AND
t.topic_approved = 1 AND t.topic_approved = 1
f.forum_id = t.forum_id ' . $str_where . '
ORDER BY ORDER BY
t.topic_last_post_time DESC'; t.topic_last_post_time DESC';
// query the database // query the database
if(!($result = $db->sql_query_limit($sql, $number_of_posts))) if(!($result = $db->sql_query_limit($sql, $number_of_posts)))
{ {
@@ -246,7 +288,6 @@ function phpbb_fetch_posts($forum_sql, $number_of_posts, $text_length, $time, $t
include_once($phpbb_root_path . 'includes/bbcode.' . $phpEx); include_once($phpbb_root_path . 'includes/bbcode.' . $phpEx);
$bbcode = new bbcode(base64_encode($bbcode_bitfield)); $bbcode = new bbcode(base64_encode($bbcode_bitfield));
} }
$posts = array();
$i = 0; $i = 0;
while ( ($row = $db->sql_fetchrow($result)) && ( ($i < $number_of_posts) || ($number_of_posts == '0') ) ) while ( ($row = $db->sql_fetchrow($result)) && ( ($i < $number_of_posts) || ($number_of_posts == '0') ) )
{ {
@@ -286,7 +327,7 @@ function phpbb_fetch_posts($forum_sql, $number_of_posts, $text_length, $time, $t
$message = str_replace("\n", '<br/> ', $message); $message = str_replace("\n", '<br/> ', $message);
if ($auth->acl_get('f_html', $forum_id)) if ($auth->acl_get('f_html', $row['forum_id']))
{ {
$message = preg_replace('#<!\-\-(.*?)\-\->#is', '', $message); // Remove Comments from post content $message = preg_replace('#<!\-\-(.*?)\-\->#is', '', $message); // Remove Comments from post content
} }
@@ -303,6 +344,11 @@ function phpbb_fetch_posts($forum_sql, $number_of_posts, $text_length, $time, $t
// return the result // return the result
return $posts; return $posts;
} }
else
{
return array();
}
}
/** /**
* Censor title, return short title * Censor title, return short title