La interfaz pretende ser muy simple, no solo en su uso, sino en su utilización, programación, y extensión. También debe ser sumamente liviana, pero escalable, lo que permita su utilización tanto en pequeñas centrales como en aquellas muy grandes.
El concepto de interfase que quiero, se define como “el dokuwiki” llevado a una GUI para asterisk. Es decir, simple, código elegante y bien pensado y que no requiera de base de datos. Simplemente un paquete con una única dependencia: el lenguaje.
En principio pretendo utilizar PHP, pero creo que dadas las características podría ser fácilmente portado a otros lenguajes como Perl.
Toda la configuración del asterisk se escribirá en lenguaje AEL. La idea es que si no se desea utilizar la gui, los cambios en los archvos de texto impacten directamente en la central, sin necesidad de recargar nada.
Todo el diseño será basado en módulos. La interfase en sí solo implementará un core. Todo lo demás serán módulos.
El core proveerá las funcionalidades de render, es decir el template. Tendrá funciones básicas como para dibujar toda la pantalla. La manera correcta de definir un template será ubcar las funciones de forma correcta, escribir los css, y reimplementar, si fuera necesario, alguno de los métodos que escribe el código. De esta manera el código HTML será adaptable a cualquier necesidad.
Todo el modelo se basará en objetos. Como ejemplo, el desarrollador podrá tomar un objeto interno, y solicitar al objeto renderer que muestre los datos de ese objeto, o que genere un formulario, o genere un listado a partir de una lista de objetos.
Los módulos tendrán también la capacidad de incluir sus menús automáticamente.
Todos los parámetros fundamentales se guardarán en un archivo de configuración, que luego podrá editarse mediante un módulo.
Se reaprovechará todo el código posible de proyectos abiertos, como dokuwiki
Los módulos implementarán absolutamente todas las funcionalidades de la interfase. Tendrán una prioridad de carga, y podrán depender de otros módulos, incluso de versiones específicas.
Podrán existir módulos “helper” que faciliten la creación de otros módulos con funcionalidades similares.
Algunos ejemplos de módulos podrán ser: