Página 1 de 1

Ayuda para programar esto  Tema Solucionado

Publicado: 24 Ene 2013, 15:32
por Hereze
Hola,

me gustaría que cuando un usuario es baneado ya sea de forma temporal o permanente, aparezca un cartel en TODOS los mensajes que ha escrito indicando que el Usuario: xxxx han sido baneado durante: xxxxx por el siguiente motivo: xxxxx

Obviamente los xxxx saldrían de la base de datos.

Cuando me voy a Benar dentro del perfil de un usuario, hay dos campos que son los que me interesa, uno es el banlength que indica la duración de la exclusión, y el otro es el banreason que indica el motivo. Por lo que he visto, los datos los guarda en la tabla ban_list siendo los campos que me interesaría el ban_userid, ban_end y ban_reason.

Bien lo que no sé es como programarlo, en plan: Si ban_userid=id usuario del mensaje then mostrar El usuario xxx ha sido baneado hasta el: ban_end por el siguiente motivo: ban_reason
y que apareciera en todos sus mensajes. Vamos es como si a mi me banearan de esta web y en este mensaje justo encima de donde pone Hola, aparecería ese mensaje.

Saludos.

Mostrar estado de baneado y tiempo de baneo en viewtopic

Publicado: 24 Ene 2013, 20:02
por Alorse
He tocado algunas cosas y he logrado lo que deseas... así que abre el archivo viewtopic.php y busca:

Código: Seleccionar todo

unset($id_cache); 
Antes agrega:

Código: Seleccionar todo

/* Usuarios baneados por Alorse */
$sql = 'SELECT b.*
    FROM ' . BANLIST_TABLE . ' b
    WHERE (b.ban_end >= ' . time() . '
        OR b.ban_end = 0)';

$result = $db->sql_query($sql);
$ban_list = array();
while ($row2 = $db->sql_fetchrow($result))
{
    $ban_list['ban_userid'][] = $row2['ban_userid'];
    $ban_list['ban_end'][] = $row2['ban_end'];
    $ban_list['ban_reason'][] = $row2['ban_reason'];
    $ban_list['ban_start'][] = $row2['ban_start'];
}
$db->sql_freeresult($result);

/* Usuarios baneados por Alorse */
Busca:

Código: Seleccionar todo

    //
    $postrow = array(
Antes agrega:

Código: Seleccionar todo

        
    /* Usuarios baneados por Alorse */
    if(sizeof($ban_list)){
        $user->setup('acp/ban');
        $user_ban = (in_array($poster_id, $ban_list['ban_userid'])) ? true : false;
        $key_ban = (array_search($poster_id, $ban_list['ban_userid']));
        $ban_end_text = array(0 => $user->lang['PERMANENT'], 30 => $user->lang['30_MINS'], 60 => $user->lang['1_HOUR'], 360 => $user->lang['6_HOURS'], 1440 => $user->lang['1_DAY'], 10080 => $user->lang['7_DAYS'], 20160 => $user->lang['2_WEEKS'], 40320 => $user->lang['1_MONTH'], -1 => $user->lang['UNTIL'] . ' -> ');
        $time_length = ($ban_list['ban_end'][$key_ban]) ? ($ban_list['ban_end'][$key_ban] - $ban_list['ban_start'][$key_ban]) / 60 : 0;
    }else{
        $user_ban = false;
    }
    /* Usuarios baneados por Alorse */
Busca:

Código: Seleccionar todo

        'U_SEARCH'        => $user_cache[$poster_id]['search'],
Después agrega:

Código: Seleccionar todo

        /* Usuarios baneados por Alorse */
        'S_USER_BANNED'         => $user_ban,
        'S_USER_BANNED_TIME'    => $user_ban ? ($time_length == 0) ? $user->lang['PERMANENT'] : sprintf($user->lang['BANNED_UNTIL_DURATION'], $ban_end_text[$time_length], $user->format_date($ban_list['ban_end'][$key_ban], false, true)) : 0,
        'S_USER_BANNED_REASON'  => $user_ban ? $ban_list['ban_reason'][$key_ban] : "",
        /* Usuarios baneados por Alorse */ 
Abre viewtopic_body.html de tu plantilla y busca:

Código: Seleccionar todo

<div class="content">{postrow.MESSAGE}</div>
Antes agrega:

Código: Seleccionar todo

                        <!-- IF postrow.S_USER_BANNED -->
                        <p class="rules">
                                <!-- IF postrow.S_USER_BANNED -->El usuario {postrow.POST_AUTHOR_FULL} ha sido baneado durante: {postrow.S_USER_BANNED_TIME} por el siguiente motivo: {postrow.S_USER_BANNED_REASON}<!-- ELSEIF postrow.POSTER_WARNINGS -->{L_WARNINGS}: {postrow.POSTER_WARNINGS}<!-- ENDIF -->
			</p>
                        <!-- ENDIF -->
Y eso es todo, no olvides limpiar el caché despues de hacer los cambios.

Re: Mostrar estado de baneado y tiempo de baneo en viewtopic

Publicado: 24 Ene 2013, 20:27
por Hereze
Alorse escribió:Por favor no cites mensajes tan grandes.
Sencillamente IMPRESIONANTE.
Sólo una duda, ¿hay alguna forma de que en la dureción sólo salga las semanas sin el hasta? por ejemplo, si baneo a un usuario 2 semanas, que ponga:
El usuario xzxx ha sido baneado durante 2 semanas.... sin el (hasta el ...). Imagino que eso será ya porque la base de datos lo guarda así.

Muchísimas Gracias de verdad.

Un saludo.

Re: Ayuda para programar esto

Publicado: 24 Ene 2013, 20:38
por Alorse
Lo que pasa es que si baneas a alguien por 2 semanas, y solo falta un día para que se quite el baneo, ya a seguir saliendo 2 semanas y ni tú vas a saber cuanto es que hace falta.
Intenta hacer la resta para que mostrara solo tiempo que hace falta, pero se alargaba mucho, porque eran muchas condiciones, si faltan minutos, ni puede mostrar horas, días, semanas, meses, si faltan días, no puede mostrar semanas y meses, en fin, se volvía algo larguísimo.

Si quieres modificarlo la variable $time_length es la que tiene el tiempo de baneo y 'S_USER_BANNED_TIME' es el encargado de mostrar el aviso del tiempo, puedes jugar con ellas, pero como te digo no es sencillo porque pueden haber muchos casos de tiempo de baneo.

Te recomiendo que lo dejes así.

Re: Ayuda para programar esto

Publicado: 24 Ene 2013, 20:46
por Hereze
Alorse escribió:Lo que pasa es que si baneas a alguien por 2 semanas, y solo falta un día para que se quite el baneo, ya a seguir saliendo 2 semanas y ni tú vas a saber cuanto es que hace falta.
Intenta hacer la resta para que mostrara solo tiempo que hace falta, pero se alargaba mucho, porque eran muchas condiciones, si faltan minutos, ni puede mostrar horas, días, semanas, meses, si faltan días, no puede mostrar semanas y meses, en fin, se volvía algo larguísimo.

Si quieres modificarlo la variable $time_length es la que tiene el tiempo de baneo y 'S_USER_BANNED_TIME' es el encargado de mostrar el aviso del tiempo, puedes jugar con ellas, pero como te digo no es sencillo porque pueden haber muchos casos de tiempo de baneo.

Te recomiendo que lo dejes así.
OK, tienes razón, no había caido en eso. Ahora tengo que mirar como puedo hacer que cuando sale el usuario, lo haga sin el link para ver su perfil, ya que me descuadra la linea.

Imagen

Saludos.

Re: Ayuda para programar esto

Publicado: 24 Ene 2013, 20:59
por Alorse
Edité tu mensaje anterior porque citabas contenido, por favor no lo hagas a menos que en realidad sea necesario.

Para hacer lo que quieres en el viretopic_body.html cambia {postrow.POST_AUTHOR_FULL} por {postrow.POST_AUTHOR}.
Es todo.

Re: Ayuda para programar esto

Publicado: 24 Ene 2013, 21:39
por Hereze
Alorse escribió:Edité tu mensaje anterior porque citabas contenido, por favor no lo hagas a menos que en realidad sea necesario.

Para hacer lo que quieres en el viretopic_body.html cambia {postrow.POST_AUTHOR_FULL} por {postrow.POST_AUTHOR}.
Es todo.
OK.
Pues ya está, ahora sale perfecto.

Gracias de nuevo.