[Tutorial] Creacion de Un Task (tarea)
Bueno pues en este tutorial les enceñare a crear un task para su admin ACP, el cual les permitira hacer lo que ustedes deceen. Lo primero para crear...

Bueno pues en este tutorial les enceñare a crear un task para su admin ACP, el cual les permitira hacer lo que ustedes deceen.

Lo primero para crear un Task es 2 php

1 El task
2 El lenguaje

En este tutorial primero les enceñare a crear el Task modelo (como va contruido)

lo primero en el task seria esto

Código PHP:
<?php

?>

despues de esto pondremos un comentario (opcional)

Código PHP:
<?php
/**
 *
 * MyBB 1.6
 *
 * Sitio Web: http://gx-reloaded.com
 *
 * $Id: limpiadordelogs.php  2011-05-04 Autor:DARKNESSDH
 *
 */


?>

como ven es un simple comentario

ahora pasaremos a poner una funcion.

Código PHP:
<?php

function task_"el nombre de la funcion"($task)
{
    
Aqui adentro vendria siendo la funcion

}
?>

utilizare algo que es muy facil, lo cual lo que hace es limpiar los log de administrador, moderacion, busqueda, etc.

Código PHP:
<?php

function task_limpiadordelogs($task)
{
    global 
$mybb$db$lang;

    
$lang->load("limpiadordelogs");

$db->query("TRUNCATE ".TABLE_PREFIX."adminlog;");
$db->query("TRUNCATE ".TABLE_PREFIX."feedbot_log;");
$db->query("TRUNCATE ".TABLE_PREFIX."maillogs;");
$db->query("TRUNCATE ".TABLE_PREFIX."moderatorlog;");
$db->query("TRUNCATE ".TABLE_PREFIX."promotionlogs;");
$db->query("TRUNCATE ".TABLE_PREFIX."searchlog;");
$db->query("TRUNCATE ".TABLE_PREFIX."tasklog;");



}

?>

como ven yo le puse de nombre a mi funcion limpiadordelogs

Código PHP:
    global $mybb$db$lang

global = toma variables como globales de otros archivos y no locales para 1 sola funcion
$mybb = variable que se utiliza para una tabla en la base de datos que vendria siento esto "mybb_"
$db = se toma de la coneccion de base de datos para su utilizacion
$lang = toma los archivos de lenguaje del Admin para su utilizacion en contexto


Son las Variables que se utilizaran en la funcion.

Código PHP:
    $lang->load("limpiadordelogs"); 

Esto lo que hace es leer el archivo limpiadordelogs de global admin, la cual veria siendo la ruta inc/lenguaje/espanol/admin/aqui el archivo.

lo demas es la ejecucion de la base de datos la cual hace lo que teniamos en mente desde un principio, limpiar los log.

Ahora lo que falta para terminar esta funcion es agregarle el log de la tarea, la que aparecera en el historial de logs.

Código PHP:
    add_task_log($task$lang->task_limpiadordelogs_ran); 

Esto lo que hace, es tomar del archivo de lenguaje la variable task_limpiadordelogs_ran, que mas adelante les explicare.
Loguardamos con el nombre de limpiadordelogs.php
Este archivo lo subimos a /inc/task

Bueno ya creada la tarea iremos por el archivo de lenguaje.

Para eso creamos otro php de la siguiente manera

Código PHP:
<?php
/**
 *
 * MyBB 1.6
 *
 * Sitio Web: http://gx-reloaded.com
 *
 * limpiador de logs lenguaje  2011-05-04 DARKNESSDH
 *
 */

// Este es el mensaje que se mostrara en el hisorial de tareas
$l['task_limpiadordelogs_ran'] = 'La tarea de limpiador de logs a sido exitosa.';

?>

Como siempre empezamos con los <?php y cerramos con ?>

Ponemos los comentarios y ahora agregamos la variable

Código PHP:
$l['task_limpiadordelogs_ran'] = 'La tarea de limpiador de logs a sido exitosa.'

Se preguntaran task_limpiadordelogs_ran tiene algo que ver con el archivo del task?

Asi es, esta es la variable que se utilizo en el archivo task. sera la variable del cual nuestro task tomara como lenguaje.

Bueno ya que terminamos de poner el archivo lo guardamos con el siguiente nombre en este seria asi limpiadordelogs.lang.php

y lo subimos a las siguientes carpetas
inc/lenguaje/espanol/admin/
inc/lenguaje/english/admin/

Porque a esas dos?

Cuando cambies transfieras o instales un nuevo mybb, no detectara el archivo espanol ya que mybb solo tiene english, y te daria error no reconociendo su lenguaje. no es obligatorio pero de preferencia.

Bueno terminando esto iremos a nuestro ACP Admin > mantenimiento > Tareas Programadas > Agregar Tarea.

En titulo y descripcion ustedes le pondran lo mas conveniente, en las demas opciones es para que ustedes elijan cuando y cada que tiempo se ejecutara.

Y listo esto fue creado por mi en su TOTALIDAD para Gx-Reloaded & Mybb-ES
exelente tuto deberias explicar SOLAMENTE en este tema diferentes tipos de tarea con libertad explicare una tambien....

la tarea actualiza avatars de Mauricio Calderon....

como podemos ver la tarea esta asi:

Código PHP:
<?php
//Realiado por Mauricio CAlderon
//www.FotoNaturaleza.net

function task_actualiza_avatar($task)
{

global 
$db;

$total $db->num_rows($db->query("SELECT * FROM mybb_users WHERE avatar=''"));
$db->query("UPDATE mybb_users set avatar = 'images/avatars/sinavatar.jpg' where avatar = ''");
add_task_log($task,"Fueron actualizados $total avatar...");
}
?>

Bueno para empezar para que ejecute la funcion se debe llamar exactamente como el archivo. La funcion debe llamarse task_nombredelarchivo.

como podemos ver como a explicado Dark primero todo entre
Código PHP:
<?php
?>


despues tiene unas lineas de comentarios de Mauricio despues como podemos ver tiene la funcion con el nombre del archivo y declaran la variable $db eso quiere decir que manejara datos de la base de datos.
Código PHP:
function task_actualiza_avatar($task)
{

global 
$db

despues de eso podemos ver esto:
Código PHP:
$total $db->num_rows($db->query("SELECT * FROM mybb_users WHERE avatar=''")); 

donde:
Cita:$db->num_rows(); -> Cuenta todo lo que lleva dentro de los parentesis.
$db->query() -> este sirve para obtener cosas dependiendo lo que le pongas dentro de los ().

Ahora:
SELECT * FROM Esto quiere decir que Obtendra todos los datos de la tabla mybb_users unicamente cuando el espacio avatar se encuentre vacio (WHERE avatar=''")

por ejemplo si no nosotros queremos obtener el nombre de los que tienen su avatar vacio seria

Código PHP:
$db->query("SELECT username FROM mybb_users WHERE avatar=''"); 

pero en este caso no importa que obtengamos ya que solo servira para contar cuantos usuarios tienen el avatar vacio este pedaso asi queda lo sigo explicando para que sirve despues de lo siguiente...

Cita:$db->query("UPDATE mybb_users set avatar = 'images/avatars/sinavatar.jpg' where avatar = ''");

esto quiere decir que actualizara los avatars vacios por un nuevo avatar de la tabla usuarios
(guiarse por los colores Wink)

y por ultimos vemos
Código PHP:
add_task_log($task,"Fueron actualizados $total avatar..."); 

add_task_log es agregar al log de tareas.
$task porque es la tarea a agregar en este caso task_actualiza_avatar($task)
y por ultimo:
"Fueron actualizados $total avatar..."
esto es lo que agregaremos al log de tareas Fueron actualizados $total pero donde esta $total?? pues arriba lo explique

Código PHP:
$total $db->num_rows($db->query("SELECT * FROM mybb_users WHERE avatar=''")); 

esa funcion cuenta los avatars en blanco unicamente esto esta hasta arriba porque si estuviera abajo y se ejecuta primero
$db->query("UPDATE mybb_users set avatar = 'images/avatars/sinavatar.jpg' where avatar = ''");
se actualizan y no contara ninguno vacio entonces $total primero los cuenta y despues en el log de tasks

Código PHP:
add_task_log($task,"Fueron actualizados $total avatar..."); 

en ves de poner $total pone el numero exacto de numeros de avatars vacios que conto (los mismos que fueron actualizados) y listo............

Saludos!
y porfavor usen ".TABLE_PREFIX." en ves de mybb_ en las consultas...
para asegurar que funcione para todos
en realidad lo decia por el ejemplo que dejo edson de mauricio...
cuando tenia dxp el otro admin tuvo que instalar otro foro en la misma base de datos y no los funncionaba la tarea y en ese tiempo no sabia nada de php y nunca pudimos arreglarolo....
Jaja de echo si yi uso eso pero no quise modificarla inckuso pense en editar la forna en que cuenta pero no quise modificar su task para que no hubiese problemas
(4 May, 2011, 5:16 pm)Himura escribió: y porfavor usen ".TABLE_PREFIX." en ves de mybb_ en las consultas...
para asegurar que funcione para todos
descuida fue un tutorial rapido que hice, se me olvidaba ese jeje

solo lo tome de ejemplo rapido ya que me di cuenta que erafacilisimo jeje

si te das cuenta utilize la variable mybb en global para utilizar lo de ".TABLE_PREFIX."

XD

Listo el mensaje a sido actualizado gracias himura por el dato
para todos aquellos que pregunten??

que demonios es TABLE_PREFIX??

Les explico en MyBB tienes que definir un "prefijo" para el nombre de tus tablas por ejemplo en mybb por defecto trae mybb_ y despues el nombre de la tabla por ejemplo usuarios es:

mybb_users

pero al instalar MyBB te da la opcion que pngas lo que deses entonces si pones foro_ los plugins que pongas que editara la base de datos con mybb_ no funcionara por ello lo mejor es usar table TABLE_PREFIX...

pero una vez mas porque TABLE_PREFIX??
bueno pues MyBB en el archivo init.php en la linea 138 encontraremos

Código PHP:
define("TABLE_PREFIX"$config['database']['table_prefix']); 

entonces TABLE_PREFIX es lo mismo que $config['database']['table_prefix'] y ahora la pregunta es que es $config['database']['table_prefix']?? bueno pues el archivo init.php llama a config.php este guarda la configuracion de la conexion con la DB y ai se graba el nombre de tu prefijo al instalar MyBB en el archivo config.php dentro de inc en la linea 12 encontraremos

Código PHP:
$config['database']['table_prefix'] = 'su prefijo'
en mi caso tengo

Código PHP:
$config['database']['table_prefix'] = 'mybb_'

entonces por ejemplo para mi esto

Código PHP:
define("TABLE_PREFIX"$config['database']['table_prefix']);

//es igual a esto:
define("TABLE_PREFIX"'mybb_'); 

cosa que en los plugins puedo usar ya que el archivo init.php se comunica a todos los archivos de MyBB!!

Saludos!
wow esta guia realmente me sirvio !!
son unos maestros de los Codes o_O
he aprendido mucho en este foro Big Grin