intento personalizar la clase parametros para agregar mis propios parametros configurables por BD…
tengo estas 2 clases:
<?php
namespace unlam\modelo\entidades;
use siu\modelo\datos\catalogo;
use SIU\Chulupi\kernel;
use SIU\Chulupi\util\cache\AdminCache;
class parametro extends \siu\modelo\entidades\parametro
{
static function en_mantenimiento()
{
$datos = catalogo::consultar('parametro', 'en_mantenimiento');
return $datos[0];
}
...
<?php
namespace unlam\modelo\datos\db;
use SIU\Chulupi\kernel;
use SIU\Chulupi\util\db\db;
use siu\errores\error_guarani;
class parametro extends \siu\modelo\datos\db\parametro
{
/**
* cache: memoria
* cache_expiracion: 60
*/
function en_mantenimiento() {
$sql = "execute procedure sp_param_sistema('en_mantenimiento')";
$datos = kernel::db()->consultar_fila($sql, db::FETCH_NUM);
return $datos[0];
}
...
Estaba funcionando en G3W2.9.0 pero en G3W3.13.0 ya no funciona, arroja el mensaje:
SQL ERROR: SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near “sp_param_sistema” LINE 1: execute procedure sp_param_sistema(‘en_mantenimiento’) ^ execute procedure sp_param_sistema(‘en_mantenimiento’)
Lo cual es raro porque el código de G3W3.13.0 hace muchas llamadas similares ¿será código obsoleto? por ejemplo en la linea 124 de siu\modelo\datos\db\parametros.php se ve:
Honestamente el error es claro… lo que no entiendo es por qué en los otros métodos no da error, de ahí mi pregunta si son métodos obsoletos… o si es que estoy haciendo algo mal (o ambas 2).
reemplazando la llamada por un código compatible con postgresql
select sp_param_sistema(‘en_mantenimiento’)
igualmente el resultado es un error:
SQL ERROR: SQLSTATE[42883]: Undefined function: 7 ERROR: function sp_param_sistema(unknown) does not exist LINE 1: select sp_param_sistema(‘en_mantenimiento’) ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. select sp_param_sistema(‘en_mantenimiento’)
así que resulta claro que ese código en g3w3 ya no se usa o no sé como es que no da error…
El procedure sp_param_sistema es un procedure de Guarani 2 en informix.
En Guarani 3 existe la funcion get_valor_parametro_plan(, )
Igualmente para consultar un parámetro deberias agregar un método con el nombre que identifique al parametro en /src/siu/modelo/entidades/parametro.php (Recordar que debes agregarlo en tu carpeta de personalizaciones… Ver como se personaliza para agregar o modificar metodos).
Ejemplo: Este metodo se usa para consultar el valor del parámetro reinscripcion_reingresante
function reinscripcion_ingresante()
{
$datos = catalogo::consultar('parametro', 'reinscripcion_ingresante');
return $datos[0];
}
En tu caso:
function en_mantenimiento()
{
$datos = catalogo::consultar('parametro', 'en_mantenimiento');
return $datos[0];
}
Ademas, debes crear el parámetro en la base de datos definiendo el tipo de datos, valores posibles, valor default, nivel de aplicación, etc.
Podes tomar como ejemplo del catálogo de parámetros del sistema que se entrega en cada version y de alli hacer el script para registrar este parámetro.
Estos archivos s eencuentran en: \BD\Datos_nucleo\Parametros \BD\Datos_nucleo\ParametrosEtiquetas
create or replace function f_en_matenimiento(p_estado char(1) default null) returns char(1)
AS $$
declare
_valor char(1);
BEGIN
if p_estado is null then
select valor into _valor from par_param_sist_valores where parametro='en_mantenimiento';
if not _valor is null then
return _valor;
end if;
p_estado := 'N';
else
p_estado = upper(p_estado);
if p_estado not in ('S','N') then
RAISE EXCEPTION 'Parámetro ''%'' no es un estado valido! Se esperaba ''S'' o ''N'' para establecer un nuevo estado o nada para consultarlo', p_estado;
end if;
end if;
delete from par_parametros_etiquetas where parametro='en_mantenimiento';
delete from par_param_sist_valores_entidad where param_valor=1 and entidad=1;
delete from par_param_sist_valores where parametro='en_mantenimiento';
delete from par_parametros_sistema where parametro='en_mantenimiento';
insert into par_parametros_sistema(parametro, descripcion, tipo_de_parametro, tipo_de_dato, nivel, valor_desde, valor_hasta, valor_default, tabla_referenciada, referencia) values ('en_mantenimiento', 'Define si el sitio web está en mantenimiento', 'L', 'S', 1, '', '', 'N', '', 'Mientras que G3W esté en mantenimiento el acceso al sistema se encuentra limitado');
insert into par_param_sist_valores (param_valor, parametro, valor, tipo, entidad_tipo) values (1,'en_mantenimiento',p_estado,'S',4);
insert into par_param_sist_valores_entidad (param_valor, entidad) values (1, 1);
insert into par_parametros_etiquetas(parametro, etiqueta, es_operacion) VALUES ('en_mantenimiento', 'Define si la web está en mantenimiento', 'false');
return p_estado;
END;
$$ LANGUAGE plpgsql;
para consultar el estado actual:
select * from f_en_mantenimiento();
y para setear un valor:
select * from f_en_mantenimiento('s'); --valores válidos: 'N'/'S'