Cómo Añadir un "version checker"

Foro de debate para los escritores de MOD, sobre MOD en Desarrollo.

Moderador: Personalizaciones de Extensiones

Avatar de Usuario
Saske
Ex Miembro del Equipo
Mensajes: 258
Registrado: Sab Feb 05, 2011 9:30 am
Ubicación: España
Contactar:

Cómo Añadir un "version checker"

Mensaje sin leer por Saske » Vie Sep 02, 2011 5:44 am

Patrocinador

¿Cual es la URL de su foro?: http://www.phpbbsaske.com
¿Con quien hospeda su sitio?:
¿Como ha instalado su foro?:
¿Que versión de phpBB está usando?: 3.0.9
¿Es una instalación nueva o una conversión?:
Usuario de prueba: Clave:
¿Que estilo(s) tiene actualmente instalados?: Prosilver se
¿Que languaje(s) tiene actualmente instalado?: es
¿Que tipo y versión de base de datos está utilizando?:
¿Tiene MODs instalados?: Si
¿Cuál es su nivel de experiencia?:
¿Cuando ha comenzado su problema?:
Por favor describa su problema: Estoy intentando añadir un Corrector de Versión o Versión Checker, a mi MOD Share On, al no saber como empezar me base para hacerlo en el codigo del MOD Advanced BBCode Box, y bueno, este es el codigo de mi includes/aco/acp_shereon.php

Código: Seleccionar todo

<?php

/**
*
* @package - Share On
* @version $Id: acp_shareon.php 2010-03-12 02:40 Saske1 $
* @copyright (c) Saske1 ( http://www.phpbbsaske.com )
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
	exit;
}

/**
* @package acp
*/
class acp_shareon
{
	var $u_action;

	function main($id, $mode)
	{
		global $db, $user, $auth, $template, $cache;
		global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;

		include($phpbb_root_path . 'includes/acp/info/acp_shareon.' . $phpEx);

		$user->add_lang('acp/common');
		$this->tpl_name = 'acp_shareon';
		$this->page_title = $user->lang['SHARE_ON_MOD'];
		add_form_key('acp_shareon');

		// Version Check
		$config['SHAREON_VERSION']			= (isset($config['SHAREON_VERSION']))			? $config['SHAREON_VERSION']			: '1.1.1';

		// Install and update the ShareOn MOD through the ACP file
		$version = new acp_shareon_info();
				  
		$shareon_version = $version->module();
		$shareon_version = $shareon_version['version'];

		if (!isset($config['shareon_mod_version']))
		{
			$version->install($this->u_action);
		}
		else if (version_compare($config['shareon_mod_version'], $shareon_version, '<'))
		{
			$version->update($this->u_action);
		}

		$submit = (isset($_POST['submit'])) ? true : false;
		if ($submit)
		{
			if (!check_form_key('acp_shareon'))
			{
				trigger_error('FORM_INVALID');
			}

			set_config('so_status', request_var('so_status', 0));
			set_config('so_facebook', request_var('so_facebook', 0));
			set_config('so_twitter', request_var('so_twitter', 0));
			set_config('so_tuenti', request_var('so_tuenti', 0));
			set_config('so_sonico', request_var('so_sonico', 0));
			set_config('so_friendfeed', request_var('so_friendfeed', 0));
			set_config('so_orkut', request_var('so_orkut', 0));
			set_config('so_digg', request_var('so_digg', 0));
			set_config('so_myspace', request_var('so_myspace', 0));
			set_config('so_delicious', request_var('so_delicious', 0));
			set_config('so_technorati', request_var('so_technorati', 0));

			trigger_error($user->lang['SO_SAVED'] . adm_back_link($this->u_action));
		}
		
		$template->assign_vars(array(
			'SO_STATUS'      => $config['so_status'],
			'SO_FACEBOOK'   => $config['so_facebook'],
			'SO_TWITTER'   => $config['so_twitter'],
			'SO_TUENTI'   => $config['so_tuenti'],
			'SO_SONICO'   => $config['so_sonico'],
			'SO_FRIENDFEED'   => $config['so_friendfeed'],
			'SO_ORKUT'      => $config['so_orkut'],
			'SO_DIGG'		=> $config['so_digg'],
			'SO_MYSPACE'	=> $config['so_myspace'],
			'SO_DELICIOUS' 	=> $config['so_delicious'],
			'SO_TECHNORATI'	=> $config['so_technorati'],
			'U_ACTION'      => $this->u_action,
			'SHAREON_VERSION'				=> $config['SHAREON_VERSION'],

			'S_VERSION_UP_TO_DATE'		=> $this->shareon_version_compare($config['SHAREON_VERSION']),
		));
	}
	/**
	* Obtains the latest version information
	* @param string 	$current_version 	version information
	* @param int 		$ttl 				Cache version information for $ttl seconds. Defaults to 86400 (24 hours).
	* 
	* @return bool 		false on failure.
	**/
	function shareon_version_compare($current_version = '', $version_up_to_date = true, $ttl = 86400)
	{
		global $cache, $template;
		
		$info = $cache->get('shareon_versioncheck');

		if ($info === false)
		{
			$errstr = '';
			$errno = 0;

			$info = get_remote_file('www.phpbbsaske.com', '/foro/shareon', 'shareon.txt', $errstr, $errno);
			if ($info === false)
			{
				$template->assign_var('S_VERSIONCHECK_FAIL', true);
				$cache->destroy('shareon_versioncheck');
			}
		}

		if ($info !== false)
		{
			$cache->put('shareon_versioncheck', $info, $ttl);
			$latest_version_info = explode("\n", $info);

			$latest_version = strtolower(trim($latest_version_info[0]));
			$current_version = strtolower(trim($current_version));
			$version_up_to_date = version_compare($current_version, $latest_version, '<') ? false : true;

			$template->assign_vars(array(
				'U_VERSIONCHECK'	=> ($version_up_to_date) ? false : $latest_version_info[1],
			));
		}

		return $version_up_to_date;
	}
}

?>
No se que parte del codigo tengo mal, pero toma la versión puesta en SHAREON_VERSION, en vez de la que hay en http://www.phpbbsaske.com/foro/shareon/shareon.txt
También dejo mi adm/style/acp_shareon.html

Código: Seleccionar todo

<!-- INCLUDE overall_header.html -->

<h1>{L_SO_TITLE}</h1>
<p>{L_SO_EXPLAIN}</p>


<form id="acp_shareon" method="post" action="{U_ACTION}">
	<fieldset>
		<dl>
			<dt><label for="so_status">{L_SO_STATUS}</label></dt>
			<dd><input type="radio" class="radio" name="so_status" value="1" <!-- IF SO_STATUS -->checked="checked"<!-- ENDIF -->/> {L_YES} &nbsp; 
				<input type="radio" class="radio" name="so_status" value="0" <!-- IF not SO_STATUS -->checked="checked"<!-- ENDIF --> /> {L_NO}</dd>
				<dd>
			<!-- IF S_VERSION_UP_TO_DATE -->
				<!-- IF S_VERSIONCHECK_FAIL -->
					<strong>{SHAREON_VERSION}</strong> {L_VERSIONCHECK_FAIL}
				<!-- ELSE -->
					<strong style="color: #228822;">{SHAREON_VERSION}</strong>
				<!-- ENDIF -->
			<!-- ELSE -->
					<strong><a href="{U_VERSIONCHECK}" title="{L_MORE_INFORMATION}" style="color: #BC2A4D;" onclick="window.open(this.href);return false;">{SHAREON_VERSION}</a></strong>
			<!-- ENDIF -->
				</dd>
		</dl>
	</fieldset>

	<fieldset>
		<legend>{L_SO_SELECT}</legend>
		<dl>
			<dt><label for="so_delicious">{L_SO_DELICIOUS}</label></dt>
			<dd><input type="radio" class="radio" name="so_delicious" value="1" <!-- IF SO_DELICIOUS -->checked="checked"<!-- ENDIF -->/> {L_YES} &nbsp;
				<input type="radio" class="radio" name="so_delicious" value="0" <!-- IF not SO_DELICIOUS -->checked="checked"<!-- ENDIF --> /> {L_NO}</dd>
		</dl>
		<dl>
			<dt><label for="so_digg">{L_SO_DIGG}</label></dt>
			<dd><input type="radio" class="radio" name="so_digg" value="1" <!-- IF SO_DIGG -->checked="checked"<!-- ENDIF -->/> {L_YES} &nbsp;
				<input type="radio" class="radio" name="so_digg" value="0" <!-- IF not SO_DIGG -->checked="checked"<!-- ENDIF --> /> {L_NO}</dd>
		</dl>
		<dl>
			<dt><label for="so_facebook">{L_SO_FACEBOOK}</label></dt>
			<dd><input type="radio" class="radio" name="so_facebook" value="1" <!-- IF SO_FACEBOOK -->checked="checked"<!-- ENDIF -->/> {L_YES} &nbsp; 
				<input type="radio" class="radio" name="so_facebook" value="0" <!-- IF not SO_FACEBOOK -->checked="checked"<!-- ENDIF --> /> {L_NO}</dd>
		</dl>
		<dl>
			<dt><label for="so_myspace">{L_SO_MYSPACE}</label></dt>
			<dd><input type="radio" class="radio" name="so_myspace" value="1" <!-- IF SO_MYSPACE -->checked="checked"<!-- ENDIF -->/> {L_YES} &nbsp;
				<input type="radio" class="radio" name="so_myspace" value="0" <!-- IF not SO_MYSPACE -->checked="checked"<!-- ENDIF --> /> {L_NO}</dd>
		</dl>
		<dl>
			<dt><label for="so_orkut">{L_SO_ORKUT}</label></dt>
			<dd><input type="radio" class="radio" name="so_orkut" value="1" <!-- IF SO_ORKUT -->checked="checked"<!-- ENDIF -->/> {L_YES} &nbsp;
				<input type="radio" class="radio" name="so_orkut" value="0" <!-- IF not SO_ORKUT -->checked="checked"<!-- ENDIF --> /> {L_NO}</dd>
		</dl>
		<dl>
			<dt><label for="so_technorati">{L_SO_TECHNORATI}</label></dt>
			<dd><input type="radio" class="radio" name="so_technorati" value="1" <!-- IF SO_TECHNORATI -->checked="checked"<!-- ENDIF -->/> {L_YES} &nbsp;
				<input type="radio" class="radio" name="so_technorati" value="0" <!-- IF not SO_TECHNORATI -->checked="checked"<!-- ENDIF --> /> {L_NO}</dd>
		</dl>
		<dl>
			<dt><label for="so_twitter">{L_SO_TWITTER}</label></dt>
			<dd><input type="radio" class="radio" name="so_twitter" value="1" <!-- IF SO_TWITTER -->checked="checked"<!-- ENDIF -->/> {L_YES} &nbsp;
				<input type="radio" class="radio" name="so_twitter" value="0" <!-- IF not SO_TWITTER -->checked="checked"<!-- ENDIF --> /> {L_NO}</dd>
		</dl>	
		<dl>
			<dt><label for="so_tuenti">{L_SO_TUENTI}</label></dt>
			<dd><input type="radio" class="radio" name="so_tuenti" value="1" <!-- IF SO_TUENTI -->checked="checked"<!-- ENDIF -->/> {L_YES} &nbsp;
				<input type="radio" class="radio" name="so_tuenti" value="0" <!-- IF not SO_TUENTI -->checked="checked"<!-- ENDIF --> /> {L_NO}</dd>
		</dl>	
		<dl>
			<dt><label for="so_sonico">{L_SO_SONICO}</label></dt>
			<dd><input type="radio" class="radio" name="so_sonico" value="1" <!-- IF SO_SONICO -->checked="checked"<!-- ENDIF -->/> {L_YES} &nbsp;
				<input type="radio" class="radio" name="so_sonico" value="0" <!-- IF not SO_SONICO -->checked="checked"<!-- ENDIF --> /> {L_NO}</dd>
		</dl>
		<dl>
			<dt><label for="so_friendfeed">{L_SO_FRIENDFEED}</label></dt>
			<dd><input type="radio" class="radio" name="so_friendfeed" value="1" <!-- IF SO_FRIENDFEED -->checked="checked"<!-- ENDIF -->/> {L_YES} &nbsp;
				<input type="radio" class="radio" name="so_friendfeed" value="0" <!-- IF not SO_FRIENDFEED -->checked="checked"<!-- ENDIF --> /> {L_NO}</dd>
		</dl>		
	</fieldset>
	<fieldset>
		<p class="submit-buttons">
			<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />&nbsp;
			<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
		</p>
	</fieldset>
	{S_FORM_TOKEN}
</form>
<!-- INCLUDE overall_footer.html -->
Mi pregunta es, Cómo puedo hacer que funcione correctamente ? :roll:
Última edición por nextgen el Vie Sep 02, 2011 3:33 pm, editado 1 vez en total.
Razón: Siempre hay que agregar el icono de resuelto

Avatar de Usuario
Leviatan21
Lider phpBB Argentina
Lider phpBB Argentina
Mensajes: 1993
Registrado: Mié Nov 25, 2009 4:43 pm
Ubicación: Buenos Aires, Argentina
Contactar:

Re: Cómo Añadir un "version checker"

Mensaje sin leer por Leviatan21 » Vie Sep 02, 2011 11:11 am

Saske escribió:No se que parte del codigo tengo mal, pero toma la versión puesta en SHAREON_VERSION, en vez de la que hay en http://www.phpbbsaske.com/foro/shareon/shareon.txt
como funcionar, funciona, solo debes mirar cual es la version actual y si la version ha sido comparada anteriormente, porque se almacena en la cache por 24 hs, si estas haciendo pruebas, purga la cache antes para obligar a que se chequee
Lea las reglas | Nosotros | Acerca de phpBB | Descargas | Soporte | Blog
Ex Miembro del Equipo QA en phpbb.com
No se brindará soporte por Mensaje Privado, por favor pregunte en un tema público, tenga en cuenta que su problema puede ser también un problema para otros ;)

Avatar de Usuario
Saske
Ex Miembro del Equipo
Mensajes: 258
Registrado: Sab Feb 05, 2011 9:30 am
Ubicación: España
Contactar:

Re: Cómo Añadir un "version checker"

Mensaje sin leer por Saske » Vie Sep 02, 2011 11:19 am

Leviatan21 escribió: como funcionar, funciona, solo debes mirar cual es la version actual y si la version ha sido comparada anteriormente, porque se almacena en la cache por 24 hs, si estas haciendo pruebas, purga la cache antes para obligar a que se chequee
Bueno, pues me salía 1.1.1, en verde, al principio, ahora acabo de limpiar la cache, y ya me sale en rojo :roll:
2 Cosas mas, primero una pregunta, lo que hace el codigo, es comprobar si la versión que puse en SHAREON_VERSION, es igual o diferente a la que hay en el .txt, y en el caso de ser igual se muestra en verde, y en caso de ser diferente en rojo ?
Aunque mas bien lo que yo quería hacer era que saliera la versión actual, y comprobando el .txt saliera al lado la última versión, luego al igual que ahora, si la versión es la misma, que salga en "verde" y si es diferenete en rojo, se podría hacer ?
Hay algún MOD que lo tengo así ?

Avatar de Usuario
Leviatan21
Lider phpBB Argentina
Lider phpBB Argentina
Mensajes: 1993
Registrado: Mié Nov 25, 2009 4:43 pm
Ubicación: Buenos Aires, Argentina
Contactar:

Re: Cómo Añadir un "version checker"

Mensaje sin leer por Leviatan21 » Vie Sep 02, 2011 2:49 pm

Saske escribió:lo que hace el codigo, es comprobar si la versión que puse en SHAREON_VERSION, es igual o diferente a la que hay en el .txt, y en el caso de ser igual se muestra en verde, y en caso de ser diferente en rojo ?
No compara si es igual o diferente, solo compara si la versión en el txt es mas nueva que la pasada por parámetro ( $config['SHAREON_VERSION'] )

Saske escribió:Aunque mas bien lo que yo quería hacer era que saliera la versión actual, y comprobando el .txt saliera al lado la última versión, luego al igual que ahora, si la versión es la misma, que salga en "verde" y si es diferenete en rojo, se podría hacer ?
Hay algún MOD que lo tengo así ?
Para eso, solo debes pasar a la plantilla la version nueva, mira este cambio

Código: Seleccionar todo

			$template->assign_vars(array(
				'U_VERSIONCHECK'	=> ($version_up_to_date) ? false : $latest_version_info[1],
				'S_VERSIONACTUAL'	=> $current_version,
				'S_VERSIONNEW'		=> ($version_up_to_date) ? false : $latest_version_info[0],
			));
Y en la plantilla utilizas {S_VERSIONNEW} como número de la version nueva y {S_VERSIONACTUAL} como número de version instalada, y de ser necesario una nueva variable e texto con algo mas de información
Lea las reglas | Nosotros | Acerca de phpBB | Descargas | Soporte | Blog
Ex Miembro del Equipo QA en phpbb.com
No se brindará soporte por Mensaje Privado, por favor pregunte en un tema público, tenga en cuenta que su problema puede ser también un problema para otros ;)

Avatar de Usuario
Saske
Ex Miembro del Equipo
Mensajes: 258
Registrado: Sab Feb 05, 2011 9:30 am
Ubicación: España
Contactar:

Re: Cómo Añadir un "version checker"

Mensaje sin leer por Saske » Vie Sep 02, 2011 3:31 pm

Leviatan21 escribió: No compara si es igual o diferente, solo compara si la versión en el txt es mas nueva que la pasada por parámetro ( $config['SHAREON_VERSION'] )
Entiendo, gracias por la aclaración ;)
Leviatan21 escribió: Para eso, solo debes pasar a la plantilla la version nueva, mira este cambio

Y en la plantilla utilizas {S_VERSIONNEW} como número de la version nueva y {S_VERSIONACTUAL} como número de version instalada, y de ser necesario una nueva variable e texto con algo mas de información
Muchas gracias, ya hice los cambios y funciona perfectamente, te dejo una captura :mrgreen:
MOD -Share On-_1314987579704.png
Tema Solucionado, cierro :)

Cerrado