Foros del Web » Creando para Internet » Sistemas de gestión de contenidos »

Restringir acceso a tema por num mensajes [phpbb]

Estas en el tema de Restringir acceso a tema por num mensajes [phpbb] en el foro de Sistemas de gestión de contenidos en Foros del Web. Vamos a ver.. estoy intentando modificar un poco mis foros para tener algunos temas en los que sea necesario un numero minimo de post diarios ...
  #1 (permalink)  
Antiguo 13/07/2006, 05:03
Avatar de Azrael666  
Fecha de Ingreso: noviembre-2004
Mensajes: 652
Antigüedad: 19 años, 5 meses
Puntos: 1
Restringir acceso a tema por num mensajes [phpbb]

Vamos a ver.. estoy intentando modificar un poco mis foros para tener algunos temas en los que sea necesario un numero minimo de post diarios para entrar (muy util en temas de descargas, para que no lleguen los gorrones y se registren solo para bajarse cosillas).

Por ahora lo que encontré es lo siguiente... lo que necesitaria es un poco de colaboracion para intentar a partir de estos dos MODs crear uno para lograr lo planteado, que por otra parte creo que sería bastante util para la mayoria de los que tenemos este tipo de foros:

Empezamos..

1) este MOD limita la entrada a un foro a quienes tengan menos de X mensajes totales (es decir, si el minimo es 30 mensajes y tengo 29 chao chao, no entro):

Código:
############################################################## 
## MOD Title: forum enter limit
## MOD Author: emrag < [email protected] > (Emrah Türkmen)  www.canver.net
## MOD Description: You can set a minimum message limit for forums ;)
##		    exp: you set a forum enter limit 20 for forum id = 6 so 
##		    if a normal user want to see forum id = 6 he/she must have already posted
##		    20 messages.Admins and MODs are not effected.
##
## MOD Version: 1.0.3
## 
## Installation Level: Easy
## Installation Time : 10 minutes 
## Files to Edit: viewforum.php	
##		  viewtopic.php
##		  admin/admin_forums.php
##		  language/lang_english/lang_main.php
##		  templates/subSilver/admin/forum_edit_body.tpl
##
## Included Files: db_update_limit.php
############################################################## 
##
## Author Notes: You can find this at 
##
##		 Administration Panel -> Management(FORUM ADMIN) -> Edit
##
##		 or when you are creating a new forum ;)
##
############################################################## 
##
## MOD History: ??.??.2004 - 1.0.0
##		- Initial version
##
## 		06.11.2004 - 1.0.1
##		- added a forgotten line
##		- added pre-modded files (for phpBB 2.0.10)
##
## 		25.11.2004 - 1.0.2
##		- added limit value to error message
##
## 		04.01.2005 - 1.0.3
##		- fixed a bug
##
############################################################## 
##
## Before Adding This Hack To Your Forum, You Should Back Up All Files Related To This Hack  
##
############################################################## 
# 
#-----[ SQL ]------------------------------------------ 
# 
# you can use db_update_limit.php file instead of this code ;)
#

ALTER TABLE phpbb_forums ADD forum_enter_limit MEDIUMINT(8) unsigned default '0'

# 
#-----[ OPEN ]------------------------------------------ 
# 

viewforum.php

#
#----[ FIND ]------------------------------------------ 
#

//
// Grab all the basic data (all topics except announcements)
// for this forum
//

#
#-----[ BEFORE, ADD ]------------------------------------------ 
# 

//
// forum enter limit by emrag
//
		if (!($userdata['user_level'] == ADMIN OR $userdata['user_level'] == MOD))
		{
		$sql = "SELECT f.forum_id, f.forum_enter_limit, u.user_posts
			FROM " . FORUMS_TABLE . " f, " . USERS_TABLE . " u
			WHERE user_id = " . $userdata['user_id'];

		if( !($result = $db->sql_query($sql)) )
		{
			message_die(GENERAL_ERROR, 'Could not query information', '', __LINE__, __FILE__, $sql);
		}

			while ($row = $db->sql_fetchrow($result))
			{
			$forum_id_limit = $row['forum_id'];
			$forum_enter_limit = $row['forum_enter_limit'];
			$user_posts_limit = $row['user_posts'];

			$error_limit = sprintf($lang['Forum_enter_limit_error'], $forum_enter_limit);

				if ($forum_id == $forum_id_limit AND $user_posts_limit < $forum_enter_limit)
				{
					message_die(GENERAL_ERROR, $error_limit);
				}
			}
		}
//
// forum enter limit by emrag
//

# 
#-----[ OPEN ]------------------------------------------ 
# 

viewtopic.php

#
#----[ FIND ]------------------------------------------ 
#

//
// Go ahead and pull all data for this topic
//

#
#----[ BEFORE, ADD ]------------------------------------------ 
#

//
// forum enter limit by emrag
//
		if (!($userdata['user_level'] == ADMIN OR $userdata['user_level'] == MOD))
		{
		$sql = "SELECT f.forum_id, f.forum_enter_limit, u.user_posts
			FROM " . FORUMS_TABLE . " f, " . USERS_TABLE . " u
			WHERE user_id = " . $userdata['user_id'];

		if( !($result = $db->sql_query($sql)) )
		{
			message_die(GENERAL_ERROR, 'Could not query information', '', __LINE__, __FILE__, $sql);
		}

			while ($row = $db->sql_fetchrow($result))
			{
			$forum_id_limit = $row['forum_id'];
			$forum_enter_limit = $row['forum_enter_limit'];
			$user_posts_limit = $row['user_posts'];

			$error_limit = sprintf($lang['Forum_enter_limit_error'], $forum_enter_limit);

				if ($forum_id == $forum_id_limit AND $user_posts_limit < $forum_enter_limit)
				{
					message_die(GENERAL_ERROR, $error_limit);
				}
			}
		}
//
// forum enter limit by emrag
//


# 
#-----[ OPEN ]------------------------------------------ 
# 

admin/admin_forums.php

#
#----[ FIND ]------------------------------------------ 
#

				$forumstatus = $row['forum_status'];

#
#----[ AFTER, ADD ]------------------------------------------ 
#

				$forum_enter_limit = $row['forum_enter_limit'];

#
#----[ FIND ]------------------------------------------ 
#

				$forumstatus = FORUM_UNLOCKED;

#
#----[ AFTER, ADD ]------------------------------------------ 
#

				$forum_enter_limit = '';

#
#----[ FIND ]------------------------------------------ 
#

				'FORUM_NAME' => $forumname,

#
#----[ AFTER, ADD ]------------------------------------------ 
#

				'FORUM_ENTER_LIMIT' => $forum_enter_limit,
				'L_FORUM_ENTER_LIMIT' => $lang['Forum_enter_limit'],

#
#-----[ FIND ]--------------------------------------------
#
			$sql = "INSERT INTO " . FORUMS_TABLE . " (forum_id, forum_name, cat_id, forum_desc, forum_order, forum_status, prune_enable" . $field_sql . ")
				VALUES ('" . $next_id . "', '" . str_replace("\'", "''", $HTTP_POST_VARS['forumname']) . "', " . intval($HTTP_POST_VARS[POST_CAT_URL]) . ", '" . str_replace("\'", "''", $HTTP_POST_VARS['forumdesc']) . "', $next_order, " . intval($HTTP_POST_VARS['forumstatus']) . ", " . intval($HTTP_POST_VARS['prune_enable']) . $value_sql . ")";

#
#-----[ IN LINE, FIND ]------------------------------------
#
, forum_status

#
#-----[ AFTER, ADD ]--------------------------------------
#

, forum_enter_limit

#
#-----[ IN LINE, FIND ]------------------------------------
#
, " . intval($HTTP_POST_VARS['forumstatus']) . "

#
#-----[ AFTER, ADD ]--------------------------------------
#

, " . intval($HTTP_POST_VARS['forum_enter_limit']) . "

#
#-----[ FIND ]--------------------------------------------
#
			$sql = "UPDATE " . FORUMS_TABLE . "
				SET forum_name = '" . str_replace("\'", "''", $HTTP_POST_VARS['forumname']) . "', cat_id = " . intval($HTTP_POST_VARS[POST_CAT_URL]) . ", forum_desc = '" . str_replace("\'", "''", $HTTP_POST_VARS['forumdesc']) . "', forum_status = " . intval($HTTP_POST_VARS['forumstatus']) . ", prune_enable = " . intval($HTTP_POST_VARS['prune_enable']) . "

#
#-----[ IN LINE, FIND ]------------------------------------
#
, forum_status = " . intval($HTTP_POST_VARS['forumstatus']) . "

#
#-----[ AFTER, ADD ]--------------------------------------
#

, forum_enter_limit = " . intval($HTTP_POST_VARS['forum_enter_limit']) . "

# 
#-----[ OPEN ]------------------------------------------ 
# 

language/lang_english/lang_main.php

#
#----[ FIND ]------------------------------------------ 
#

?>

#
#----[ BEFORE, ADD ]------------------------------------------ 
#

$lang['Forum_enter_limit'] = 'Forum enter limit';
//Necesitas escribir un minimo de <b>%d</b> mensajes al dia para entrar a este tema.
$lang['Forum_enter_limit_error'] = 'You have to post <b>%d</b> message to display this forum/topic.';

# 
#-----[ OPEN ]------------------------------------------ 
# 

templates/subSilver/admin/forum_edit_body.tpl

#
#----[ FIND ]------------------------------------------ 
#

	<tr> 
	  <td class="row1">{L_FORUM_STATUS}</td>
	  <td class="row2"><select name="forumstatus">{S_STATUS_LIST}</select></td>
	</tr>

#
#----[ AFTER, ADD ]------------------------------------------ 
#

	<tr> 
	  <td class="row1">{L_FORUM_ENTER_LIMIT}</td>
	  <td class="row2"><input type="text" name="forum_enter_limit" value="{FORUM_ENTER_LIMIT}" size="10" maxlength="8" /></td>
	</tr>

#
#-----[ SAVE ALL FILES/CLOSE ]------------------------------------------ 
#
# EoM
supongo que en este caso no sería muy dificil el hacer que en lugar de limitar por foro limitase por un tema en concreto (no lo he mirado aun)


Nota: divido en dos temas que no me deja meterlo solo en uno jaja
__________________
ALOZORRO v5.0 (ahora en .es)
  #2 (permalink)  
Antiguo 13/07/2006, 05:04
Avatar de Azrael666  
Fecha de Ingreso: noviembre-2004
Mensajes: 652
Antigüedad: 19 años, 5 meses
Puntos: 1
hala.. continuo:


2) este codigo muestra la media de mensajes por dia (pero claro, es la media total, no el numero de mensajes al dia):

Código:
############################################################## 
## MOD Title: Posts Per Day Average on Topic 
## MOD Author: FuNEnD3R < [email protected] > http://www.funender.com 
## MOD Description: This will display the total posts per day average underneath the user's avatar 
## MOD Version: 1.0.3 
## 
## Translation: ThE KuKa - http://www.phpbb-es.com
## Installation Level: Easy 
## Installation Time: 5 Minutes 
## Files To Edit: viewtopic.php, viewtopic_body.tpl 
## Included Files: N/A 
############################################################## 
## For Security Purposes, Please Check: http://www.phpbb.com/mods/ for the 
## latest version of this MOD. Downloading this MOD from other sites could cause malicious code 
## to enter into your phpBB Forum. As such, phpBB will not offer support for MOD's not offered 
## in our MOD-Database, located at: http://www.phpbb.com/mods/ 
############################################################## 
## Author Notes: You can visit the forums of www.funender.com for a demonstration
## 
############################################################## 
## MOD History: 
##
##   2004-11-30 - 1.0.1 
##      - First Release
## 
##   2004-12-22 - 1.0.2 
##      - Slightly modified install file for easier installation
##  
##   2005-03-23 - 1.0.1 
##      - Compatiable with phpBB 2.0.13
##
############################################################## 
## Before Adding This MOD To Your Forum, You Should Back Up All Files Related To This MOD 
############################################################## 

# 
#-----[ OPEN ]------------------------------------------ 
# 

language/lang_spanish/lang_main.php 

# 
#-----[ FIND ]------------------------------------------ 
# Busqueda parcial, esta linea acaba con punto y coma ;

$lang['A_critical_error']

# 
#-----[ AFTER, ADD ]------------------------------------------ 
# 

$lang['Post_per_day'] = 'Mensajes por Día: '; 

# 
#-----[ OPEN ]------------------------------------------ 
# 

viewtopic.php 

# 
#-----[ FIND ]------------------------------------------ 
# 

	$poster_joined = ( $postrow[$i]['user_id'] != ANONYMOUS ) ? $lang['Joined'] . ': ' . create_date($lang['DATE_FORMAT'], $postrow[$i]['user_regdate'], $board_config['board_timezone']) : '';

# 
#-----[ AFTER, ADD ]------------------------------------------ 
# 

   $ppd_regdate = $postrow[$i]['user_regdate']; 
   $ppd_memberdays = max(1, round( ( time() - $ppd_regdate ) / 86400 )); 
   $posts_per_day = $lang['Post_per_day'] . round(($postrow[$i]['user_posts'] / $ppd_memberdays), 2) ;

# 
#-----[ FIND ]------------------------------------------ 
# 

      'RANK_IMAGE' => $rank_image, 
      'POSTER_JOINED' => $poster_joined, 

# 
#-----[ AFTER, ADD ]------------------------------------------ 
# 

'POST_DAY_STATS' => $posts_per_day, 

# 
#-----[ OPEN ]------------------------------------------ 
# 

templates/subSilver/viewtopic_body.tpl
 
# 
#-----[ FIND ]------------------------------------------ 
# 

<td width="150" align="left" valign="top" class="{postrow.ROW_CLASS}"><span class="name"><a name="{postrow.U_POST_ID}"></a><b>{postrow.POSTER_NAME}</b></span><br /><span class="postdetails">{postrow.POSTER_RANK}<br />{postrow.RANK_IMAGE}{postrow.POSTER_AVATAR}<br /><br />{postrow.POSTER_JOINED}<br />{postrow.POSTER_POSTS}<br />{postrow.POSTER_FROM}</span><br /></td> 

# 
#-----[ IN-LINE FIND ]------------------------------------------ 
# 

{postrow.POSTER_POSTS} 

# 
#-----[ IN-LINE AFTER, ADD ]------------------------------------------ 
# 

<br />{postrow.POST_DAY_STATS}

# 
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------ 
# 
# EoM
que igual tampoco es muy dificil de modificar, pero tampoco me ha dado por mirarlo a fondo (mas que nada porque estoy en el curro jeje)

Pues nada.. yo tenia la idea de juntar esos dos MODs en uno, haciendoles las respectivas modificaciones de limitar solo temas y no foros completos y el mostrar los mensajes por dia en lugar de la media total por dia,

que igual puede ser mas facil: si sacando el numero de mensajes del usuario ese dia con una consulta en el codigo ya se lo puedo pasar directamente al primer MOD pues no necesitaria usar el segundo..

y nada.. es para ver si alguien esta interesado en el proyectito, que ofrezca su colaboracion aportando ideas de como puedo hacerlo (o que intente hacerlo si tiene tiempo y nos vaya poniendo resultados por aqui jajaja)
__________________
ALOZORRO v5.0 (ahora en .es)
  #3 (permalink)  
Antiguo 13/07/2006, 13:27
Avatar de Azrael666  
Fecha de Ingreso: noviembre-2004
Mensajes: 652
Antigüedad: 19 años, 5 meses
Puntos: 1
una duda, en la tabla donde se guardan los mensajes hay un campo "post_time" de tipo int(11) que supongo que es donde se guarda la fecha (porque si no es ahi ya me rindo jajaja) pero claro.. el formato no es ni date, ni datetime ni timestamp... alguien sabe como se formatea este numero para que de la fecha que pongo?:

1152818154 ---> (mensaje escrito en: Thu Jul 13, 2006 7:15 pm )

es que sabiendo eso, puedo hacer el paso contrario y restringir la busqueda de temas entre el dia actual a las 00:00:00 y la hora actual, y por el id de usuario ya tendría el numero de mensajes de ese usuario en el dia actual (solo en el dia actual) y sería un paso bastante grande con lo que quiero hacer..

andaa.. vengaaa.. ser buenos y contestar algo aunque sea un "no se como hacerlo" jajajajaja
__________________
ALOZORRO v5.0 (ahora en .es)
  #4 (permalink)  
Antiguo 13/07/2006, 13:33
Avatar de Azrael666  
Fecha de Ingreso: noviembre-2004
Mensajes: 652
Antigüedad: 19 años, 5 meses
Puntos: 1
nada.. ya lo encontré.. usa esta funcion para sacarlo (creo)

Cita:
function create_date($format, $gmepoch, $tz)
{
global $board_config, $lang;
static $translate;

if ( empty($translate) && $board_config['default_lang'] != 'english' )
{
@reset($lang['datetime']);
while ( list($match, $replace) = @each($lang['datetime']) )
{
$translate[$match] = $replace;
}
}

return ( !empty($translate) ) ? strtr(@gmdate($format, $gmepoch + (3600 * $tz)), $translate) : @gmdate($format, $gmepoch + (3600 * $tz));
}
ahora me queda saber que parametros son estos que le pasa....

$msg_date = create_date($board_config['default_dateformat'], $postrow['post_time'], $board_config['board_timezone']);
__________________
ALOZORRO v5.0 (ahora en .es)
  #5 (permalink)  
Antiguo 14/07/2006, 02:07
Avatar de Azrael666  
Fecha de Ingreso: noviembre-2004
Mensajes: 652
Antigüedad: 19 años, 5 meses
Puntos: 1
vale.. olvidandose todo el mundo de esa otra funcion.. es mas facil asi:

saco la fecha con getdate() y se lo paso a mktime() (que facil era.. y yo que no me empanaba....)
__________________
ALOZORRO v5.0 (ahora en .es)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:58.