Последние сообщения phpbb + MKPortal 1.1.1

Идеи для расширения функциональности phpBB 2.0.x
Аватара пользователя
SpLinter
phpBB 1.2.1
Сообщения: 22
Стаж: 18 лет 5 месяцев
Откуда: МСК

Последние сообщения phpbb + MKPortal 1.1.1

Сообщение SpLinter »

Приветствую, коллеги, или около того :)

Возникла вот проблемка небольшая.
По умолчанию модуль "Последние сообщение на форуме" для портала MKPortal выводит вообще ВСЕ сообщения с форума, т.е. там есть проверка кто зашел, но она на уровне админ, модер, участник, гость. Таким образом пользователи видят сообщения даже из закрытых для них форумов, как понимаете это ни разу не секьюно :)

Решил переписать этот модуль и столкнулся с проблемой.
Сейчас будет код, а потом вопросы :)

Код: Выделить всё

	function get_last_posts($by, $sdate)
 	{
		global $DB, $mklib, $mkportals;
		$limit = 5;
		$taglio = 40;

		/*//Forum Read Perms
		switch($mkportals->member['mgroup']) 
		{
			case '1': 
			$readperm = 5; //Admins (phpBB: 'AUTH_ADMIN', 5)
		break;
			case '2': 
			$readperm = 3; //Moderators (phpBB: 'AUTH_MOD', 3)
		break;
			case '3': 
			$readperm = 2; //Members (phpBB: 'AUTH_REG', 1)
		break;
			default: //Guest mgroup=9
			$readperm = 0;
		break;
		}*/
		
--		$is_auth_read = array();
--		$is_auth_read = auth(AUTH_READ, AUTH_LIST_ALL, $userdata);
--
--		$unauthed = '0';
--
--		while ( list($forum_id, $auth_mode) = each($is_auth_read) )
--		{
--			if ( !$auth_mode['auth_read'] )
--			{
--				$unauthed .= ',' . $forum_id;
--			}
--		}
--
--		unset($is_auth_read);

		$sql = "SELECT pt.post_text, pt.bbcode_uid, pt.post_subject, p.*, f.forum_id, f.forum_name, t.*, u.username, u.user_id, u.user_sig, u.user_sig_bbcode_uid
				FROM " . FORUMS_TABLE . " f, " . TOPICS_TABLE . " t, " . USERS_TABLE . " u, " . POSTS_TABLE . " p, " . POSTS_TEXT_TABLE . " pt
					WHERE pt.post_id = p.post_id
--					AND f.forum_id NOT IN (" . $unauthed . ")
					AND f.forum_id = p.forum_id
					#AND f.auth_read <= $readperm
					AND p.topic_id = t.topic_id
					AND p.poster_id = u.user_id
					ORDER BY p.post_time DESC LIMIT 0,$limit";
		$DB->query($sql);

		while ( $post = $DB->fetch_row() ) {
  		$post['post_subject'] = strip_tags($post['topic_title']);
		$post['post_subject'] = str_replace( "!" , "!" , $post['post_subject'] );
		$post['post_subject'] = str_replace( """, "\"", $post['post_subject'] );
			if (strlen($post['post_subject']) > $taglio) {
				$post['post_subject'] = substr( $post['post_subject'],0,($taglio - 3) ) . "...";
				$post['post_subject'] = preg_replace( '/&(#(\d+;?)?)?(\.\.\.)?$/', '...',$post['post_subject'] );
			}

 		$post['date']  = $mklib->create_date($post['post_time']);
		$tid = $post['post_id'];
		$title = $post['post_subject'];
		$mid = $post['user_id'];
		$mname = $post['username'];
		$date = $post['date'];
		$content .= "
				<tr>
--				<!-- $userdata;<br>
--				$unauthed;<br> -->
				  <td width=\"100%\" class=\"tdblock\">
				  <a class=\"uno\" href=\"$mkportals->forum_url/viewtopic.php?p=$tid#$tid\">$title</a>
				  </td>
				</tr>
				<tr>
				  <td class=\"tdglobal\">
				  <a class=\"uno\" href=\"$mkportals->forum_url/profile.php?mode=viewprofile&u=$mid\">$by: $mname</a><br /> $date
				  </td>
				</tr>
		";
 		}
		return $content;


	}
Вот такой вот код. Немного комментариев - все что закомментировано (тавталогия :)) это исходный текст, то что написал я начинается с "--".
Вопрос в следующем, при таком коде переменная $userdata получается пустой, в результате чего, мы получаем разрешения на чтение форумов, как для гостя. Как это побороть?

Спасибо.

з.ы. PHP начал заниматься недавно, так что сильно не пинать. Процедура проверки на аутентифицированность взята из мода Glance. =)
Последний раз редактировалось SpLinter 09.04.2007 17:30, всего редактировалось 1 раз.
Небо инопланетянам.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16948
Стаж: 18 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 549 раз
Поблагодарили: 1701 раз

Сообщение rxu »

Для начала добавьте $userdata в список переменных global.
Изображение
Аватара пользователя
SpLinter
phpBB 1.2.1
Сообщения: 22
Стаж: 18 лет 5 месяцев
Откуда: МСК

Сообщение SpLinter »

rxu
А-А-А-А!!!!
Спасибо, помогло! Все работает. Вот я балда.
Еще раз огромное спасибо. :beer:

Добавлено спустя 12 минут 27 секунд:

Вот решение, может кому-то пригодится.

Открываем файл mkportal\include\PHPBB\php_board_functions.php
Ищем

Код: Выделить всё

function get_last_posts($by, $sdate)
 	{
		global $DB, $mklib, $mkportals;
Заменяем на

Код: Выделить всё

function get_last_posts($by, $sdate)
 	{
		global $DB, $mklib, $mkportals, $userdata;
Ищем

Код: Выделить всё

		//Forum Read Perms
		switch($mkportals->member['mgroup']) 
		{
			case '1': 
			$readperm = 5; //Admins (phpBB: 'AUTH_ADMIN', 5)
		break;
			case '2': 
			$readperm = 3; //Moderators (phpBB: 'AUTH_MOD', 3)
		break;
			case '3': 
			$readperm = 2; //Members (phpBB: 'AUTH_REG', 1)
		break;
			default: //Guest mgroup=9
			$readperm = 0;
		break;
		}
Заменяем на

Код: Выделить всё

		$is_auth_read = array();
		$is_auth_read = auth(AUTH_READ, AUTH_LIST_ALL, $userdata);

		$unauthed = '0';

		while ( list($forum_id, $auth_mode) = each($is_auth_read) )
		{
			if ( !$auth_mode['auth_read'] )
			{
				$unauthed .= ',' . $forum_id;
			}
		}

		unset($is_auth_read);
Ищем

Код: Выделить всё

					WHERE pt.post_id = p.post_id
					AND f.forum_id = p.forum_id
					AND f.auth_read <= $readperm
					AND p.topic_id = t.topic_id
					AND p.poster_id = u.user_id
					ORDER BY p.post_time DESC LIMIT 0,$limit";
Заменем на

Код: Выделить всё

					WHERE pt.post_id = p.post_id
					AND f.forum_id NOT IN (" . $unauthed . ")
					AND f.forum_id = p.forum_id
					AND p.topic_id = t.topic_id
					AND p.poster_id = u.user_id
					ORDER BY p.post_time DESC LIMIT 0,$limit";
Все отлично работает.
Небо инопланетянам.

Вернуться в «Запросы модов для phpBB 2.0.x»