One of the instructions was missed, that this has to go at the end of Load.php.
// Figure out what we can see. Note, because this sets up query_see_board, we cannot call boardsAllowedTo() :(
function loadBoardsVisibility() {
global $user_info, $smcFunc;
if($user_info['is_admin']) {
$user_info['query_see_board'] = '1=1';
$user_info['query_see_only_board'] = '1=1';
return;
}
// SLOW QUERY?
$query = $smcFunc['db_query']('', '
SELECT b.id_board, bp.permission, bp.add_deny
FROM {db_prefix}boards AS b INNER JOIN {db_prefix}board_permissions AS bp ON (b.id_profile = bp.id_profile)
WHERE id_group IN ({array_int:groups}) AND bp.permission IN ({array_string:permission})',
array(
'groups' => $user_info['groups'],
'permission' => array('view_board', 'enter_board'),
)
);
$boards = array(
'allow' => array(
'view_board' => array(),
'enter_board' => array(),
),
'deny' => array(
'view_board' => array(),
'enter_board' => array(),
)
);
while($row = $smcFunc['db_fetch_assoc']($query)) {
$area = $row['add_deny'] ? 'allow' : 'deny';
$boards[$area][$row['permission']][] = $row['id_board'];
}
$smcFunc['db_free_result']($query);
$allow = array_diff($boards['allow']['view_board'], $boards['deny']['view_board']);
$user_info['query_see_only_board'] = count($allow) > 0 ? 'b.id_board IN (' . implode(',', $allow) . ')' : '1=0';
$allow = array_diff($boards['allow']['enter_board'], $boards['deny']['enter_board']);
$user_info['query_see_board'] = count($allow) > 0 ? 'b.id_board IN (' . implode(',', $allow) . ')' : '1=0';
}