SISFOX cuenta con un sistema de auto-actualización.
Constantemente y por temas propios del desarrollo, se agregan, modifican o eliminan campos en la base de datos... o se modifica el contenido de ciertos archivos, o se cambia la estructura de carpetas, etc.
Estas variaciones estructurales, están fuertemente relacionadas con el código base de SISFOX. Por ejemplo, si para una tabla en particular agrego un campo, seguramente el mismo lo incluya en alguna consulta SQL dentro del código. Por consiguiente, si este campo no existe en la base de datos, nuestro script dará ERROR.
El 17 de noviembre de 2013 se modificó la función banners, con el fin de imprimir en el tag img, el width y el height de la imagen.
Para una mejor performance, se decidió guardar estos datos, es decir el ancho y alto de la imagen, dentro de la base de datos.
Frente a esta situación, se presentan 2 cuestiones a actualizar.
Estas 2 acciones se pueden ver entonces a partir de la línea 59 en el archivo adm/upgrade/act2013-11.php.
if($fecha_actualizacion < '2013-11-17 23:36:00') { $cadena_final .= "<h3>17 de noviembre de 2013 / 23:36</h3>"; if(!in_array("alto", $conn->MetaColumnNames($prefijo."banners_txt"))){ $sql = "ALTER TABLE `".$prefijo."banners_txt` ADD COLUMN `alto` int(11) NOT NULL DEFAULT '0' AFTER `archivo`;"; $cadena_final .= proceso_sql($sql); } // fin existencia campo id_categoria if(!in_array("ancho", $conn->MetaColumnNames($prefijo."banners_txt"))){ $sql = "ALTER TABLE `".$prefijo."banners_txt` ADD COLUMN `ancho` int(11) NOT NULL DEFAULT '0' AFTER `archivo`;"; $cadena_final .= proceso_sql($sql); } // fin existencia campo id_categoria if(!in_array("tipo", $conn->MetaColumnNames($prefijo."banners_txt"))){ $sql = "ALTER TABLE `".$prefijo."banners_txt` ADD COLUMN `tipo` tinyint(1) NOT NULL DEFAULT '0' AFTER `alto`;"; $cadena_final .= proceso_sql($sql); } // fin existencia campo id_categoria $sql = "SELECT * FROM ".$prefijo."banners_txt"; $banners = $conn->GetArray($sql); foreach($banners as $bn) { if(!empty($bn["archivo"])) { $ruta_archivo = 'img/img-bnn/'.$bn["archivo"]; if(file_exists($ruta_archivo)) { list($ancho, $alto, $tipo, $atr) = getimagesize($ruta_archivo); $data["ancho"] = $ancho; $data["alto"] = $alto; $data["tipo"] = $tipo; $where = "id_banner = ".$bn["id_banner"]." AND idioma = '".$bn["idioma"]."'"; $cadena_final .= modifico_datos($prefijo."banners_txt", $data, $where); } } // fin archivo vacío } }
Pasos que se siguieron en este código:
En el proyecto, se envía por GET la variable actualizo.
Ejemplo: http://localhost/mi-proyecto.com/?actualizo=1
El código general de auto-actualización se encuentra en master/adm/upgrade/index.php y se incluye en master/inc/header.php de modo que esté siempre accesible.
Obviamente solo se ejecuta si se pasa por GET la variable antes descripta.
Los pasos son básicamente:
Existe una forma que creé para probar las actualizaciones antes de aplicarlas finalmente en los archivos que correspondan.
Para hacerlo, basta simplemente con enviar por GET la variable test lo que hará que se ejecute el archivo que se encuentra en master/adm/upgrade/test.php
Ejemplo: http://localhost/mi-proyecto.com/?test=1
En este archivo, suelo armar todos los scripts que se ejecutarán para actualizar algo, pero de un modo que me permita ir probando si todo saldrá bien.
La diferencia está en que en este modo, no se actualiza la fecha en la tabla actualizacion, por lo que puedo ejecutar los scripts la cantidad de veces que quiera y necesite.
Tener en cuenta que si deseo ver la impresión de un resultado en pantalla debo cambiar $cadena_final por $cadena_test.