Ver Mensaje Individual
  #8 (permalink)  
Antiguo 16/02/2005, 18:58
Avatar de yoseman
yoseman
 
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 5 meses
Puntos: 5
Quisiera decir un par de cosillas respecto de este tema en lo concerniente a filtrar en el listado aquellos foros a los que el usuario conectado no tiene acceso.
Para determinar dada una sesión phpBB(se ha de incluir el código de inicio de sesión phpBB que puse en otros temas ), se puede usar la función de los foros auth.

La cosa sería más o menos así:
Código:
// iniciamos sesión phpBB si el código no está dentro de algún script del foro
// en cuyo caso no haría falta
// definimos la ruta del foro en phpbb_root_path
// si es el directorio del foro no ponemos nada
// si esta por arriba del foro ponemos: directorio_del_foro/
define('IN_PHPBB', true); 
$phpbb_root_path = ''; //PATH DEL FORO RESPECTO DEL SCRIPT 
include($phpbb_root_path . 'extension.inc'); 
include($phpbb_root_path . 'common.'.$phpEx); 
$userdata = session_pagestart($user_ip, PAGE_INDEX); 
init_userprefs($userdata); 
global $db, $board_config;
global $HTTP_COOKIE_VARS, $HTTP_GET_VARS, $SID;
$cookiename = $board_config['cookie_name'];
$cookiepath = $board_config['cookie_path'];
$cookiedomain = $board_config['cookie_domain'];
$cookiesecure = $board_config['cookie_secure'];
}
// determinamos si cookie activada sino propagamos sid por url
   if ( !(isset($HTTP_COOKIE_VARS[$cookiename . '_sid']) || isset($HTTP_COOKIE_VARS[$cookiename . '_data'])) )
   {
   output_add_rewrite_var('sid', $userdata['session_id']);
   }
// fin inicio sesión phpBB
//
$auth_ary = auth(AUTH_READ, AUTH_LIST_ALL, $userdata); 
while ( list($auth_forum_id, $auth_level) = each($auth_ary) )   
   { 
   if (!$auth_level['auth_read'] ) 
      {      
      $auth_view_forums = ($auth_view_forums . " forum_id<>" . $auth_forum_id . " and "); 
      } 
   } 
$auth_view_forums=($auth_view_forums=="") ? "" : ("WHERE " . $auth_view_forums ."1=1");
Y entonces en tu sentencia SQL concatenarías la cadena que se creó:

Código:
    $sql = mysql_query("SELECT * FROM phpbb_topics ". $auth_view_forums." ORDER BY topic_last_post_id DESC LIMIT 0,5")
No le deis importancia a la parte que dice and 1=1 es para que no se quede sólo el and de la cadena creada ya que sino daría error.
Lo digo porque de esta forma, sólo se mostrarán los mensajes a los que tenga acceso el usuario conectado, y porque creo que mindpanic colocó en sus scripts el inicio de sesión phpBB.
Por cierto que cuando se inicia sesión phpBB, no es necesario conectar con la base de datos, ya que la cabecera de los foros lo hace para gestionar algunas cosas.

Ese mismo 'truquillo' lo utilize en mi foro en un script:

http://elotrositio.tuarrobanet.com/f...s.php?id=todos

Que muestra al entrar todos los mensajes y tambien se puede ir por cada foro, pero además no se muestra ni los mensajes a los que el usuario no tiene acceso ni el foro en el select. O sea yo tengo un foro privado de moderadores(aunque no se para que ya que no hay nadie jajajajaja) y sólo se vería si el que se conecta es admin o moderador o tiene nivel para verlo. Y cómo de esta forma, preguntamos a la función del foro encargada de esto precisamente (auth) pués no hay fallos.

La cosa queda +/- así:
Código:
<?
// iniciamos sesión phpBB si el código no está dentro de algún script del foro
// en cuyo caso no haría falta
// definimos la ruta del foro en phpbb_root_path
// si es el directorio del foro no ponemos nada
// si esta por arriba del foro ponemos: directorio_del_foro/
define('IN_PHPBB', true); 
$phpbb_root_path = ''; //PATH DEL FORO RESPECTO DEL SCRIPT 
include($phpbb_root_path . 'extension.inc'); 
include($phpbb_root_path . 'common.'.$phpEx); 
$userdata = session_pagestart($user_ip, PAGE_INDEX); 
init_userprefs($userdata); 
global $db, $board_config;
global $HTTP_COOKIE_VARS, $HTTP_GET_VARS, $SID;
$cookiename = $board_config['cookie_name'];
$cookiepath = $board_config['cookie_path'];
$cookiedomain = $board_config['cookie_domain'];
$cookiesecure = $board_config['cookie_secure'];
// determinamos si cookie activada sino propagamos sid por url
   if ( !(isset($HTTP_COOKIE_VARS[$cookiename . '_sid']) || isset($HTTP_COOKIE_VARS[$cookiename . '_data'])) )
   {
   output_add_rewrite_var('sid', $userdata['session_id']);
   }
// fin inicio sesión phpBB
//
$auth_ary = auth(AUTH_READ, AUTH_LIST_ALL, $userdata); 
while ( list($auth_forum_id, $auth_level) = each($auth_ary) )   
   { 
   if (!$auth_level['auth_read'] ) 
      {      
      $auth_view_forums = ($auth_view_forums . " forum_id<>" . $auth_forum_id . " and "); 
      } 
   } 
$auth_view_forums=($auth_view_forums=="") ? "" : ("WHERE " . $auth_view_forums ."1=1"); 
$sql = mysql_query("SELECT * FROM phpbb_topics ". $auth_view_forums." ORDER BY topic_last_post_id DESC LIMIT 0,5");
while ($row = mysql_fetch_array($sql)) {
$id = "$row[topic_id]";
$titulo = "$row[topic_title]";
$respuestas = "$row[topic_replies]";?>
<a href="http://www.mindpanic.com/foros/viewtopic.php?t=<?=$id?>&sid=<?=$userdata['session_id']?>">&nbsp;+&nbsp;<?=$titulo?></a><br />(<?=$respuestas?> Respuestas)<br /><br /><?}?>
<a href="jljljl">lñlñkñk</a>
Salu2 ;)
__________________
[+]
[+]

Última edición por yoseman; 16/02/2005 a las 19:38