[Error]  Integracion de seccion privada al Proportal
* URL del foro: www.Infomaster21.com * Versión del foro: 1.6 * Actualización: --- Buenas, decidi integrar en mi foro una seccion privada, para ell...


Buenas, decidi integrar en mi foro una seccion privada, para ello cree un nuevo grupo de usuarios.

Pregunta:
Quiero que las cosas posteadas en dicha seccion privada sea mostrada en el Proportal, pero solo a los usuarios permitidos.
Actualmente tengo el bloque central announcements configurados los foros visibles para invitados, pero si le agrego foros ocultos, el portal muestra todo a todos sin tener en cuenta los permisos de los foros.
Es decir, no puedo utilizar un mismo bloque announcements para todos los grupos por igual.

Se puede añadir un segundo bloque con otros permisos, pero no se puede configurar que foros mostrar independientemente del anterior, y asi no tiene sentido, porque repite y se visualiza todo mal.

Lo mismo ocurre con otros bloques...

Espero haberme expresado bien xD
Última modificación: 16 Sep, 2011, 7:47 am por YondaimeKuba.
si entiendo lo que dices, se puede diseñar otro bloque para que puedas ver los otros usuarios que tenga los permisos necesarios y también se puede hacer que solo mires un foro en especifico pero tendría que trabajar en el bloque, voy a ver si tengo tiempo y lo hago o si no haber si viene alguien que sepa y te lo haga mas rápido como ordaz xD.
Ok... seguire esperando a ver si alguien que sepa del tema se acerca para ayudar Big Grin
Muy bien.

primero hay que modificar la configuraciones del portal, para hacer esto tienes que entrar en tu FTP o si usas localhost, entra a admin>modules>portal>settings.php, abre ese archivo con cualquier editor de texto.
ahora busca
Código PHP:
$form_container->output_row($lang->portal_settings_annfid$lang->portal_settings_annfiddesc$form->generate_text_box('upsetting[announcementsfid]'$settings_data['announcementsfid'], array('id' => 'announcementsfid')), 'announcementsfid'); 
y agrega despues
Código PHP:
$form_container->output_row($lang->portal_settings_annfid."2"$lang->portal_settings_annfiddesc$form->generate_text_box('upsetting[announcementsfid2]'$settings_data['announcementsfid2'], array('id' => 'announcementsfid2')), 'announcementsfid2'); 
para que es esto, para hacer un text tarea en las configuraciones de portal en administración así entrar la id del foro y obtener los valores.

Ahora entra a phpmyadmin de tu servidor y busca la tabla mybb_portal_settings, ahora solo agrega una nueva configuración insertando una nueva fila de valores. con el nombre announcementsfid2 y lo demás en blanco.

Ahora que lo mas sencillo, entra en tu FTP y busca block_announcements.php y copia es archivo, este se encuentra en porta>blocks.

luego cámbiale el nombre, puedes ponerle cualquiera yo le pondré block_announcements2.php, ahora entra al block_announcements2.php y busca
Código PHP:
$announcementsfids explode(','$proportal->settings['announcementsfid']); 
y cambialo por
Código PHP:
$announcementsfids explode(','$proportal->settings['announcementsfid2']); 
ahora busca
Código PHP:
$annnum $db->fetch_field($db->simple_select('threads''COUNT(*) AS annnum'"fid IN (".$proportal->settings['announcementsfid'].") AND visible='1' AND closed NOT LIKE 'moved|%'"), 'annnum'); 
y remplazarlo por
Código PHP:
$annnum $db->fetch_field($db->simple_select('threads''COUNT(*) AS annnum'"fid IN (".$proportal->settings['announcementsfid2'].") AND visible='1' AND closed NOT LIKE 'moved|%'"), 'annnum'); 

y por ultimo al agregar un block y busca el block que copiaste y en Grupos de Usuarios permitido pon el grupo que deseas que lo vean y solo eso.

En realidad es muy sencillo y si crear muchas cosas xD, cualquier duda que tengas ya sabes aquí estamos.
Realice todo lo que dijiste, y los permisos funcionan bien, pero tengo un problema.

En el portal tengo:

block_announcements2
block_announcements

En la seccion privada tengo 2 post, que son mostrados correctamente por el block_announcements2, pero el primer post de esa seccion privada es incorporado en el block_announcements. Es decir, se ve asi:

[Imagen: dibujo2rk9yr.png]

Se entiende?. Eso pasa unicamente cuando estan ambos bloques activos, es decir, que lo ve la persona que tiene permisos especiales, en caso contrario, el invitado ve solamente el block_announcements sin problemas.
no entiendo bien, dices que cuando pones el bloque sale post del bloque que esta en privado en el bloque de anuncios normales ???. si es así, mira si no has puesto la id del foro en el primer bloque es decir el block_announcements ya que este mostrar todo los temas que estén con esta id. o si no prueba

busca
Código PHP:
// Get latest news announcements
// First validate announcement fids:
$announcementsfids explode(','$proportal->settings['announcementsfid2']);
if(
is_array($announcementsfids))
{
    foreach(
$announcementsfids as $fid)
    {
        
$fid_array[] = intval($fid);
    }
    
$announcementsfids implode(','$fid_array);
}
// And get them!
$query $db->simple_select("forums""*""fid IN (".$announcementsfids.")");
while(
$forumrow $db->fetch_array($query))
{
    
$forum[$forumrow['fid']] = $forumrow;
}

// Let's add pagination
$annnum $db->fetch_field($db->simple_select('threads''COUNT(*) AS annnum'"fid IN (".$proportal->settings['announcementsfid2'].") AND visible='1' AND closed NOT LIKE 'moved|%'"), 'annnum');
$pagenum intval($mybb->input['page']);
$totalpage ceil($annnum $proportal->settings['numannouncements']);
if(
$pagenum || !$pagenum || $pagenum $totalpage){ $pagenum 1; }
$multipage multipage($annnum$proportal->settings['numannouncements'], $pagenum$mybb->settings['bburl'].'/portal.php');

$pids '';
$tids '';
$comma '';
$query $db->query("
    SELECT p.pid, p.message, p.tid
    FROM "
.TABLE_PREFIX."posts p
    LEFT JOIN "
.TABLE_PREFIX."threads t ON (t.tid=p.tid)
    WHERE t.fid IN ("
.$announcementsfids.") AND t.visible='1' AND t.closed NOT LIKE 'moved|%' AND t.firstpost=p.pid
    ORDER BY t.dateline DESC 
    LIMIT "
.(($pagenum-1)*$proportal->settings['numannouncements']).", ".$proportal->settings['numannouncements']
);
while(
$getid $db->fetch_array($query))
{
    
$pids .= ",'{$getid['pid']}'";
    
$tids .= ",'{$getid['tid']}'";
    
$posts[$getid['tid']] = $getid;
}
$pids "pid IN(0{$pids})";
// Now lets fetch all of the attachments for these posts
$query $db->simple_select("attachments""*"$pids);
while(
$attachment $db->fetch_array($query))
{
    
$attachcache[$attachment['pid']][$attachment['aid']] = $attachment;
}

if(
is_array($forum))
{
    foreach(
$forum as $fid => $forumrow)
    {
        
$forumpermissions[$fid] = forum_permissions($fid);
    }
}

$icon_cache $cache->read("posticons");

$announcements '';
$query $db->query("
    SELECT t.*, t.username AS threadusername, u.username, u.avatar, u.avatardimensions
    FROM "
.TABLE_PREFIX."threads t
    LEFT JOIN "
.TABLE_PREFIX."users u ON (u.uid = t.uid)
    WHERE t.fid IN ("
.$announcementsfids.") AND t.tid IN (0{$tids}) AND t.visible='1' AND t.closed NOT LIKE 'moved|%'
    ORDER BY t.dateline DESC
    LIMIT 0, "
.$proportal->settings['numannouncements']
); 
remplazalo
Código PHP:
// Get latest news announcements
// First validate announcement fids:
$announcementsfids2 explode(','$proportal->settings['announcementsfid2']);
if(
is_array($announcementsfids2))
{
    foreach(
$announcementsfids2 as $fid2)
    {
        
$fid_array2[] = intval($fid2);
    }
    
$announcementsfids2 implode(','$fid_array2);
}
// And get them!
$query $db->simple_select("forums""*""fid IN (".$announcementsfids2.")");
while(
$forumrow $db->fetch_array($query))
{
    
$forum[$forumrow['fid']] = $forumrow;
}

// Let's add pagination
$annnum $db->fetch_field($db->simple_select('threads''COUNT(*) AS annnum'"fid IN (".$proportal->settings['announcementsfid2'].") AND visible='1' AND closed NOT LIKE 'moved|%'"), 'annnum');
$pagenum intval($mybb->input['page']);
$totalpage ceil($annnum $proportal->settings['numannouncements']);
if(
$pagenum || !$pagenum || $pagenum $totalpage){ $pagenum 1; }
$multipage multipage($annnum$proportal->settings['numannouncements'], $pagenum$mybb->settings['bburl'].'/portal.php');

$pids '';
$tids '';
$comma '';
$query $db->query("
    SELECT p.pid, p.message, p.tid
    FROM "
.TABLE_PREFIX."posts p
    LEFT JOIN "
.TABLE_PREFIX."threads t ON (t.tid=p.tid)
    WHERE t.fid IN ("
.$announcementsfids2.") AND t.visible='1' AND t.closed NOT LIKE 'moved|%' AND t.firstpost=p.pid
    ORDER BY t.dateline DESC 
    LIMIT "
.(($pagenum-1)*$proportal->settings['numannouncements']).", ".$proportal->settings['numannouncements']
);
while(
$getid $db->fetch_array($query))
{
    
$pids .= ",'{$getid['pid']}'";
    
$tids .= ",'{$getid['tid']}'";
    
$posts[$getid['tid']] = $getid;
}
$pids "pid IN(0{$pids})";
// Now lets fetch all of the attachments for these posts
$query $db->simple_select("attachments""*"$pids);
while(
$attachment $db->fetch_array($query))
{
    
$attachcache[$attachment['pid']][$attachment['aid']] = $attachment;
}

if(
is_array($forum))
{
    foreach(
$forum as $fid => $forumrow)
    {
        
$forumpermissions[$fid] = forum_permissions($fid);
    }
}

$icon_cache $cache->read("posticons");

$announcements '';
$query $db->query("
    SELECT t.*, t.username AS threadusername, u.username, u.avatar, u.avatardimensions
    FROM "
.TABLE_PREFIX."threads t
    LEFT JOIN "
.TABLE_PREFIX."users u ON (u.uid = t.uid)
    WHERE t.fid IN ("
.$announcementsfids2.") AND t.tid IN (0{$tids}) AND t.visible='1' AND t.closed NOT LIKE 'moved|%'
    ORDER BY t.dateline DESC
    LIMIT 0, "
.$proportal->settings['numannouncements']
); 

son pequeñas las mosdificaciones pero no quier escribir mucho Sleepy, esto búscalo en el bloque que copiaste. Jejeje la verdad el anterior no lo había probado pero este ya lo probé y me anda bien, cualquier cosa pregunta.
Última modificación: 20 Sep, 2011, 5:49 pm por ermarco.
No no.. tenia bien configurado las ID, pero con esta ultima edicion que me recomendaste se soluciono.

Muchas gracias! Big Grin
Se puede cerrar.