El siguiente es el manual para administradores de la aplicación Code Manager.
El gestor de código es una herramienta para desarrolladores que permite:
La herramienta pretende construir una base de código para el desarrollo de proyectos. En tal sentido, debemos comprender que la herramienta no agota las posibilidades que ofrece el framework, y siempre será necesario modificar el código generado.
Sin perjuicio de ello, la herramienta crea una base lo suficientemente robusta como para comenzar cualquier proyecto.
Una aplicación es un programa informático, diseñado como una herramienta para realizar tareas o funciones específicas.
La aplicación esta compuesta de una o varias extensiones, que facilitan la lógica y optimizan la resolución de los problemas propios de la tarea encomendada.
La extensión es el primer nivel de desglose de una aplicación y agrupa regiones comunes de ésta. Por ejemplo, una Tienda Virtual puede dividirse en varias extensiones, cada una de ellas estará, por separado, encargada de: los productos, los clientes, las ordenes, la facturación, la logística, etc.
El componente es una parte más pequeña de la extensión. El componente debe servir a una sola tarea y en un único ámbito, por ejemplo, administrar una tabla de la base de datos, o, como se lo conoce, realizar un CRUD.
A su vez, los componentes tienen sus propios elementos comunes. Estos elementos pueden ser: controlador, modelo, vista y javascript.
La ruta para acceder al gestor de código es Administración > Herramientas > Gestor de código.
Una vez en en él, se mostrará la lista de todas las extensiones instaladas, por ejemplo:

Un registro de la lista contiene los siguientes datos:
Nombre de la extensión.
El nombre del desarrollador de la extensión.
Una vista rápida de los componentes que contiene.
Para filtrar la lista, y mostrar sólo una parte de los registros, presione sobre el botón:

Se mostrarán todas las opciones de filtros:

La caja de texto busca en el nombre de la extensión.
Para reestablecer los filtros, presione el botón:

Con la instalación inicial del CMS, se incluyen muchas herramientas para el desarrollo y la administración, por ejemplo, las necesarias para crear y distribuir extensiones, menús, configuraciones, permisos, activos, temas, etc.
Con esta aplicación se pretende, fundamentalmente, crear y eliminar código, lo que se hace a partir de la estructura del CMS, y sus convenciones.
Dicho esto, tenemos:
Crea una vista rápida de todo lo perteneciente a la extensión, y muestra enlaces a diferentes administraciones, como ser: configuraciones, activos, menús, etc..
Gestiona la carpeta app/, que contiene: modelos, vistas, controladores, rutas, javascript, estilos, etc. Si bien hay una conexión entre está carpeta y el concepto de aplicación, en lo concreto, no son exactamente lo mismo.
Gestiona las librerías php de una extensión.
Lista los plugins de una o varias extensiones, y realiza gestiones mínimas.
Lista los fragmentos de una o varias extensiones, y realiza gestiones mínimas.
Lista los middlewares de una o varias extensiones, y realiza gestiones mínimas.
Lista las notificaciones de una o varias extensiones, y realiza gestiones mínimas.
Lista las configuraciones de una extensión, y evalúa sus estados.
Lista los íconos de una o varias extensiones. Como sabrán, la fuente de íconos utilizada por el CMS es fontawesome.
Verifica que todas las carpetas de una o varias extensiones contengan el archivo index.html, lo que significa una capa más de seguridad en muchos servidores web.
En el Resumen encontramos accesos directos y datos básicos acerca de una extensión.
Para acceder, seleccione un registro y presione el botón:

Se desplegará un modal similar a:

Gestiona la carpeta app/, que contiene las rutas, los controladores, los modelos y las vistas, además del javascript y el css.
Para acceder, debe seleccionar un registro y presionar el botón:

A continuación, se abrirá un modal mostrando el contenido de la carpeta, por ejemplo:

Un registro de la lista contiene los siguientes datos:
Nombre del componente.
El punto de acceso.
Los elementos de componente que utiliza. Estos pueden ser: modelo, vista, controlador y javascript.
Una vista rápida a los puntos de entrada o endpoints que contiene el controlador.
El filtro de lista contiene:

El selector permite mostrar métodos públicos de los modelos que, según las convenciones del framework, no se corresponden con ningún punto de entrada del controlador.
Esta opción crea un controlador vacío. Si el controlador existe, no realiza ninguna acción.

El formulario será similar a:

El nombre del controlador consta de 3 partes:
El punto de acceso al controlador. Las opciones son las del enrutador, y pueden modificarse desde las configuraciones.
El alias de la extensión, esta no puede ser modificada.
El sub-componente permite ampliar las posibilidades de controladores en una misma extensión.
Esta opción intenta eliminar todo lo referido al componente.
Es decir, si el componente tiene punto de acceso, entonces eliminará: controlador, sub-modelo, vistas y javascript. De lo contrario, solo eliminará el modelo.

La opción permite gestionar los puntos de entrada que ejecuta el controlador y todos los elementos vinculados a los mismos: modelo, sub-modelo y vista.

Presionando sobre el nombre del componente, también podrá acceder a los puntos de entrada.
Podrá descargar todos los elementos del componente de aplicación.
En caso de tener un punto de acceso, esto es: controlador, sub-modelo, vistas y javascript. De lo contrario, será solo el modelo.

Los componentes pueden ser importados desde plugins.
Para ello, existen plugins que contienen componentes "universales", en los que se les reemplazó cualquier texto significativo por un token. Esto permite importarlos a cualquier otra extensión.
Un ejemplo práctico de la utilidad de importar un componente es la de crear un CRUD completo sin necesidad de programar.

Los componentes pueden ser exportados a plugins (Véase Importar componentes).

A la hora de exportar, es posible crear un nuevo plugin, o editar uno ya existente.
Si elegimos crear un nuevo componente "universal", debemos ingresar la extensión a la que pertenecerá y, opcionalmente, un nombre alternativo.

Para editar, debemos seleccionar un componente existente.

Un punto de entrada o endpoint es un método público del controlador. A través de un punto de entrada es posible asociar una url con un recurso o acción del servidor.
Para gestionar los puntos de entrada, debemos acceder a través de la opción «Puntos de entrada» de un componente de aplicación.
Una vez que accedemos, se mostrará una lista como la siguiente:

Un registro contiene los siguientes datos:
Éste permite una identificación rápida del tipo de tarea. Esta clasificación es interna, pertenece a la herramienta, y sirve solo como un modo de agrupar puntos de entrada.
El nombre del punto de entrada, tal y como se encuentra en el controlador.
Una lista de los componentes del punto de entrada hallados.
El filtro de lista contiene:

El selector permite mostrar elementos, ya sean modelos o vistas, que no se corresponden con ninguno de los puntos de entrada del controlador, según las convenciones del framework.
Para crear un punto de entrada, precione el botón:

Se desplegará un modal con varias opciones para crear, cada una de ellas con una descripción. También, cuenta con etiquetas que ayudan a entender todo lo que se va a crear. Las posibilidades de creación de código son: Modelos, Vistas, Controlador (Puntos de entrada), Rutas, Javascript (Controles), Botones y Configuraciones.
Para selecciona una de las opciones, presione el botón:

Una vez seleccionada una opción, el formulario que se despliega varía según la opción.
Algunos de los formularios requieren que, previamente, se hayan completado las Preferencias.
Para eliminar un punto de entrada, seleccione un registro y precione el botón:

Se desplegará un modal para confirmar la acción.
La herramienta intentará eliminar todos los elementos asociados: modelos, vistas, controlador, rutas, javascript y botones. Aunque no siempre encuentra a estos elementos, y es posible que tenga que eliminarlos de modo manual.
Reordena todos los métodos del controlador y de los modelos, según la clasificación interna que realiza la herramienta.

Se utiliza internamente para declarar valores que se utilizan para crear código. Por ejemplo, el nombre de la tabla que es administrada por el controlador.
Varias de las opciones para crear puntos de entrada, requieren de estas preferencias.

Para gestionar las librerías php, debe seleccionar un registro y presionar el botón:

A continuación, se abrirá un modal mostrando el contenido de la carpeta, por ejemplo:

Un registro de la lista contiene los siguientes datos:
Nombre de la librería.
El filtro de lista contiene:

La caja de texto busca en el nombre de la librería.
Esta opción crea una librería vacía. Para ello, debe presionar el botón:

El formulario será similar a:

El nombre de la librería a crear.
Esta opción reescribirá cualquier librería existente.
Para eliminar una librería, debe seleccionarla y presionar el botón:

Está herramienta lee una librería, extrae datos relevantes y los devuelve en un formato que solemos utilizar para la documentación.
Esta opción permite gestionar los plugins de una o varias extensiones.
Para ello, puede seleccionar una o varias extensiones y presionar el botón:

Si no se selecciona ninguna extensión, se mostrará la lista completa de plugins.
A continuación, se abrirá un modal mostrando el contenido de la carpeta, por ejemplo:

Un registro de la lista contiene los siguientes datos:
El alias de la extensión que contiene el plugin.
Nombre del plugin.
El filtro de lista contiene:

La caja de texto busca en el nombre del plugin.
Para eliminar un plugin, debe seleccionar el plugin a eliminar y presionar el botón:

Se desplegará un modal para confirmar la acción.
Esta opción permite gestionar los fragmentos (snippets) de una o varias extensiones.
Para ello, puede seleccionar una o varias extensiones y presionar el botón:

Si no se selecciona ninguna extensión, se mostrará la lista completa de fragmentos.
A continuación, se abrirá un modal mostrando el contenido de la carpeta, por ejemplo:

Un registro de la lista contiene los siguientes datos:
El alias de la extensión que contiene el fragmento.
Nombre del fragmento.
El filtro de lista contiene:

La caja de texto busca en el nombre del fragmento.
Para eliminar un fragmento, debe seleccionar el fragmento a eliminar y presionar el botón:

Se desplegará un modal para confirmar la acción.
El archivo de rutas permite modificar las convenciones de enrutamiento del framework.
Las rutas estarán siempre acotadas a un punto de acceso de una extensión. Esto mejora el rendimiento y facilita la organización.
Para acceder a los archivos de rutas, seleccione una o varias extensiones y presione el botón:

A continuación, se abrirá un modal con la lista de rutas, por ejemplo:

Un registro de la lista contiene los siguientes datos:
El ámbito o punto de entrada de las rutas.
La extensión de las rutas.

El filtro de la lista contiene:
La caja de texto busca en el nombre de la librería.
Esta opción crea un archivo de rutas. Para ello, presione el botón:

El formulario será similar a:

El nombre de la librería a crear.está compuesto por el punto de acceso y el alias de la extensión.
Esta opción reescribirá cualquier archivo de rutas existente.
El apartado permite completar el archivo de rutas con las rutas para crear una Api.
Activa la opción.
Para eliminar un archivo de rutas, debe seleccionarlo y presionar el botón:

Para gestionar los middlewares, debe seleccionar una extensión y presionar el botón:

A continuación, se abrirá un modal mostrando el contenido de la carpeta, por ejemplo:

Un registro de la lista contiene los siguientes datos:
Nombre del middleware.
Alias de la extensión propietaria del middleware.
El filtro de lista contiene:

La caja de texto busca en el nombre del middleware.
Esta opción crea el esqueleto de un middleware. Para ello, debe presionar el botón:

El formulario será similar a:

El nombre del middleware a crear.
Esta opción reescribirá cualquier middleware existente.
Para eliminar un middleware, debe seleccionar el middleware a eliminar y presionar el botón:

Para gestionar las notificaciones, debe seleccionar una extensión y presionar el botón:

A continuación, se abrirá un modal mostrando el contenido de la carpeta, por ejemplo:

Un registro de la lista contiene los siguientes datos:
Nombre de la notificación.
Alias de la extensión propietaria de la notificación.
El filtro de lista contiene:

La caja de texto busca en el nombre de la notificación.
Esta opción crea el esqueleto de una notificación. Para ello, debe presionar el botón:

El formulario será similar a:

El nombre de la notificación a crear.
Esta opción reescribirá cualquier notificación existente.
Para eliminar una notificación, debe seleccionar la notificación a eliminar y presionar el botón:

Esta herramienta intenta buscar las configuraciones utilizadas en una extensión y las compara con las declaradas.
Para acceder, seleccione un registro y presione el botón:

Se desplegará un modal con la lista de configuraciones halladas. Por ejmplo:

Un registro de la lista contiene los siguientes datos:
La clave con la que se registra la configuración.
La lista de archivos donde es utilizada la configuración.
Un estado, el cual puede ser:
Esta opción permite ver los íconos de una o varias extensiones.
Para ello, puede seleccionar una o varias extensiones y presionar el botón:

Si no se selecciona ninguna extensión, se mostrará la lista completa de íconos del CMS.
La fuente de íconos utilizada por el CMS es fontawesome.
A continuación, se abrirá un modal mostrando una tabla con todos los íconos utilizados, por ejemplo:

Esta herramienta se asegura que todas las carpetas expuestas de una o varias extensiones contengan el archivo index.html.
Esta es una medida de seguridad para muchos de los servidores web actuales.
Para acceder, seleccione una o varias extensiones y presione el botón:

Si no se selecciona ninguna extensión, se verificarán todas.
A continuación, se desplegará un modal para que, en el caso de ser necesario, se confirme la acción de agregar los archivos index.html en las carpetas que lo requieran.
