Elastix Developer addon – Desarrollo de formulario para ingreso de datos en Mysql
Como sabrán durante el 2014 se vinieron organizando los llamados «Elastixwebinarwednesdays» , los cuales eran charlas sobre algún tema en particular del ecosistema de Elastix, de todos los realizados hubieron 3 que me llamaron mucho la atención:
Construyendo un Addon Elastix: Avanzado – Juan Pablo Romero
Construyendo un Addon Elastix Elementos Básicos – Juan Pablo Romero
Pasos esenciales para generar el RPM de tu Elastix Addon – Luis Abarca
Desde hace tiempo, que quería organizar mi tiempo para poder entender adecuadamente el proceso de creación de un addon en Elastix, por un lado mi alma de programador me lo pedía, y por otro lado el que poder incorporar aplicaciones dentro del esquema de Elastix , brinda una gama muy interesante de posibilidades, por ejemplo agregar un reporte tipo grid de los formularios para el modulo de callcenter, solo por citar un ejemplo.
Así que me puse a revisar los vídeos y puse manos a las obra, para el siguiente ejemplo voy a tomar como base y referencia, el vídeo y material que Juan Pablo Romero tuvo la gentileza de subir a la red los ejemplos (aquí lo pueden ver ) que desarrollo en el webinar «Construyendo un Addon Elastix Elementos Básicos» así que les recomiendo primero darse el tiempo de verlo para poder no solo desarrollar el addon, si no también entender conceptos como MVC , Smarty y la estructura de archivos y funcionamiento del Developer.
Vamos a crear un módulo llamado «producto_ingreso» que tenga 3 campos de entrada (codigo,nombre,descripcion) la cual permita guardar la información en la base de datos Mysql local del servidor.
1.- Setup de la base de datos
Descargar el archivo «webinar.sql» desde aquí y cargar la información a la base de datos de la siguiente forma:
#mysql -u root -p 123456 < webinar.sql
2.- Creación del módulo desde el Developer
Ingresar al Build Module y configurarlo de la siguiente forma :
Module Name: producto_ingreso
Your Name : tu nombre
Your e-mail : tu email
Module Level : Level 3
Leve 1 Parent Exist : No
Level 1 Parent Name : Sistema
Level 2 Parent Name : mantenimiento
Module Type: Form
Field Name : codigo,nombre,descripcion
Type Filed: Type Text
Una vez configurado hacer clic en el botón «Save»
Cuando el Developer crea el modulo se verá de la siguiente forma.
El Developer internamente habrá creado las siguiente carpetas :
3.- Modificar la conexión a la base de datos
Ingresar al archivo «default.conf.php» ubicado en la carpeta «/var/www/html/modules/producto_ingreso/configs»
Cambiar:
$arrConfModule[‘dsn_conn_database’] = »;
Por :
$arrConfModule[‘dsn_conn_database’] = «mysql://webinar:webinar@localhost/webinar»;
4.- Crear el archivo que corresponde al idioma español
– Desde la consola, crear el archivo es.lang en la carpeta lang del modulo de la siguiente forma:
#touch /var/www/html/modules/producto_ingreso/lang/es.lang
– Copiar el contenido desde la siguiente url https://github.com/jprb79/webinar_addons/blob/master/modules/producto_lista/lang/es.lang y copiarlo al archivo es.lang previamente creado.
5.- Modificar el archivo «paloSantoproducto_ingreso.class.php» ubicado en /var/www/html/modules/producto_ingreso/libs/ el cual que corresponde a la clase del módulo
– Desactivar/comentar las funciones «getproducto_ingreso» y «getproducto_ingresoById» de la siguiente forma:
– Luego agregar la función «saveNew» de la siguiente forma:
6.- Modificar el controlador «index.php» ubicado en la ubicación «/var/www/html/modules/producto_ingreso/»
– Linea 61 aproximadamente, Modificar la cadena de conexión
$pDB = «»;
por
$pDB = new paloDB($arrConf[‘dsn_conn_database’]);
– Linea 139 aproximadamente, identificar la función «saveNewproducto_ingreso» luego de la condicional «else»
Cambiar/agregar la condicional de la siguiente forma:
– Linea 160 aproximadamente, en la función «createFieldForm» cambiar la siguientes lineas
«codigo» => array( «LABEL» => _tr(«codigo»),
Por:
«codigo» => array( «LABEL» => _tr(«Product code»),
«nombre» => array( «LABEL» => _tr(«nombre»),
Por:
«nombre» => array( «LABEL» => _tr(«Name»),
«descripcion» => array( «LABEL» => _tr(«descripcion»),
Por:
«descripcion» => array( «LABEL» => _tr(«Description»),
La cual quedará de la siguiente forma:
– Linea 202 aproximadamente, luego de la función «getAction» agregar la nueva función «_pre» como se muestra a continuación:
7.- Pruebas al módulo
Una vez que hemos culminado con la programación del modulo, ingresamos ingresamos información y hacemos clic en el boton «Save»
Si todo esta correcto , nos mostrará un mensaje que indica que el producto se ha guardado correctamente, como se muestra a continuación :
Para poder validar que los datos están correctamente grabados en la base de datos, podemos realizar la consulta directa como se muestra a continuación.
En caso de tener errores, o que no funcione el modulo, el archivo a consultar es :
/var/log/httpd/ssl_error_log
En el próximo post desarrollaremos el módulo para listar los registros ingresados.
UPDATE 16/07/2015
Por que lo prometido es deuda, acabo de realizar la segunda parte del tutorial y lo he publicado en el blog de Elastix
Elastix Developer addon – Desarrollo de módulo para reporte de datos
Saludos
Juan Oliva
@jroliva
Excelente comentario, estoy a punto de iniciar a trabajar algo parecido agradezco tu aporte en el tema, saludos