/*
////////////GENERADOR DE ABMS para sistemas SPI por el Lic. Nicolas W. (?)2004
////v0.010
GENERA TEXT, HTML Y TEXTAREA
////v0.020
*listas con db
*permisos
*parametros
*classes
*valores default parametrizados
//v.030
*entrada de imagenes -falta enable/disable
*entrada tipo date para fechas
*..modularizacion de codigo
//v.040
*chequeo js validacion
-type=notnull
-type=email
-type=alfanum
//v.050
*HTML y PHP definible para elementos complejos: $ABM['nnn']['custom']=" " etc
*Se define ID en el tr de cada elemento TR_nnnn
*Param para TR de elementos $ABM['nnn']['param']="style='display: plapal;' height='10' "
//v.0060
*Ahora datetime es fecha y hora
//v.070
*mejoras chequeo de fecha
//v.071
-hotfix de chequeo de fechas...bolo parseInt
//v.075
-hotfix chequeo fechas .071
-parametriza tablas advf y de seguridad
*/
//v.076
//-flag identificador del generador: http://xxx.xxx.xx/admNotEdit.php?id=1&abm_gen=1 <=== muetra un texto identificando
// al generador como activo
//-Texto de fecha invalida por default
//-Funcion javascript custom_validate() es una extencion de chequeo para el usuario
//v.080
//-select multiples
// * ['multiple']="1" habilita select multiple
// ['glue']="," define separador de id multiples ; or default
//v.081
//fix para select..no dejaba seleccionar un solo elemento...arreglo de busqueda en varchar separado por coma
//v.090
//* Agregado ['javascript'] para inyectar codigo js sin tocar los param y no perder valores default
//* Agregado ['forcedefault'] fuerza un valor por default sin importar que venga id con su valor de la base
//* Modificacion en el chequeo default de fechas
//v0.10
//templates
//v.0101
//nuevo fix para compatibilidad de fechas en mozilla
//v0.20
//Integracion al sistema de arbol y archivos fs
//v0.21
//modificaciones de type custom
//v0.22
//en image ahora muestra titulo envez de link en el campo
//v0.23
//ahora carga el form con ID en la primer recarga al insertar
//v.0.25
//ya no necesita register_variables=on
//v0.30
//nuevo editor wysiwyg inline type='wysiwyg' de tinymce
//agregado $ABM_debug
//v0.31 19-01-05
//agregado de boton borrar
//$ABM_borrar=0 - no muestra el boton
// ="nuevo" - borra y muestra nuevo abm limpio
// ="volver" - borra= y vuelve a la lista
//v0.35 24-01-05
// type=hidden
$abm_gen_v="v0.36 (tpl y fs) 15-02-05";
//v0.36 15-02-05
//fix para cargar en la insercion datos que no forman parte de la tabla
/*TODO:
-radiobutton
-password
-checkbox
-validaciones regexp
-posibilidad de agregar onEnterCustom o onExitCustom en cada elemento
-flag de compilador/interpretador para generar codigo php directamente
*/
//carga valores globales de site
if(file_exists("abm_global.php")){
include("abm_global.php");
}
//*******aca llena la matriz con valores default si no vienen definidos
if(!$ABM_ADVF){$ABM_ADVF="ADVF";} //tablas de spi default
if(!$ABM_segAdminABM){$ABM_segAdminABM="segAdminABM";}
if(!$ABM_segAdminSeguridadABM){$ABM_segAdminSeguridadABM="segAdminSeguridadABM";}
if($_REQUEST['abm_gen']){$ABM_titulo.=" (Powered by abm_generator $abm_gen_v)";}
if(!$ABMid && !$ABM_fs){ //define id sacada de la primary key de la tabla
$KEYsql="show keys from $ABMtabla";
$KEYrs=$conn->execute($KEYsql);
$ABMid=$KEYrs->field("Column_name");
}
//define permiso por default C/A=todos
reset($ABM);
while (list ($VALfld, $VALval) = each($ABM)){
if(!$ABM[$VALfld]['perm']){
$ABM[$VALfld]['perm']=$ABM_DEF_PERM;
}
}
if(!$ABM_DEF_VALIDATE_DATE_TEXT){$ABM_DEF_VALIDATE_DATE_TEXT="Fecha invalida";}
//define texto por default para fechas incorrectas
reset($ABM);
while (list ($VALfld, $VALval) = each($ABM)){
if(($ABM[$VALfld]['type']=="date" || $ABM[$VALfld]['type']=="datetime") && !$ABM[$VALfld]['validate']['text']){
$ABM[$VALfld]['validate']['text']=$ABM_DEF_VALIDATE_DATE_TEXT;
}
}
reset($ABM); //define parametros de tags html default
while (list ($VALfld, $VALval) = each($ABM)){
//define class por default
if(!$ABM[$VALfld]['class']){
$ABM[$VALfld]['class']=$ABM_DEF_CLASS[$ABM[$VALfld]['type']];
}
//define parametros default
if(!$ABM[$VALfld]['param']){
$ABM[$VALfld]['param']=$ABM_DEF_PARAM[$ABM[$VALfld]['type']];
}
}
//completa options de selects con datos almacenados en tablas
reset($ABM);
while (list ($VALfld, $VALval) = each($ABM)){
if($ABM[$VALfld]['option_table'] || $ABM[$VALfld]['sql']){
$DEFid=$ABM[$VALfld]['option_id'];
$DEFdesc=$ABM[$VALfld]['option_desc'];
$DEFtable=$ABM[$VALfld]['option_table'];
if($ABM[$VALfld]['sql']){ //si hay definido sql especial, toma ese.
$DEFsql=$ABM[$VALfld]['sql'];
}else{
$DEFsql="select $DEFid, $DEFdesc from $DEFtable";
}
$DEFrs=$conn->execute($DEFsql);
while(!$DEFrs->eof){
$DEFid2=$DEFrs->field($DEFid);
$DEFdesc2=$DEFrs->field($DEFdesc);
$ABM[$VALfld]['options'][$DEFid2]=$DEFdesc2;
$DEFrs->movenext();
}
}
}
if($ABM_debug>0 || $_REQUEST['ABM_debug']>0){
$ABM['ABMdebug']['type']='custom';
$ABM['ABMdebug']['custom']="$_REQUEST
".print_r($_REQUEST,1).""; } if($ABM_debug==2 || $_REQUEST['ABM_debug']==2){ $ABM['ABMdebug2']['type']='custom'; $ABM['ABMdebug2']['custom']="$_SERVER
".print_r($_SERVER,1).""; } if($ABM_WYSIWYG){$ABM_WYSIWYG2=",".$ABM_WYSIWYG2;} if(!$ABM_WYSIWYG){ $ABM_WYSIWYG=" theme : 'advanced', theme_advanced_toolbar_location : 'top', plugins : 'preview', theme_advanced_buttons2_add : 'forecolor,preview,zoom', theme_advanced_buttons2_add_before : 'fontselect,fontsizeselect' $ABM_WYSIWYG2 "; } //******aca arma querys de agregar, borrar, modificar $id=$_REQUEST['id']; if($ABM_fs) { //NUEVO SISTEMA CON FS if($_REQUEST['accion']=="Borrar"){ delete__file($id); if($ABM_borrar=="nuevo"){ header("Location: ".$_SERVER['PHP_SELF']); } if($ABM_borrar=="volver"){ header("Location: $ABM_volver"); } die(); } //MODIFICA REGISTRO if($_REQUEST['accion']=="Guardar"){ $id=create__file("titulo",$_REQUEST['ABM_dir'],$ABM_attrib); } /*if($_REQUEST['accion']=="Actualizar"){ move__file($_REQUEST['id'],$_REQUEST['ABM_dir']); }*/ if($_REQUEST['accion']=="Guardar" || $_REQUEST['accion']=="Actualizar"){ reset($ABM); while (list ($VALfld, $VALval) = each($ABM)){ $req_valfld=$_REQUEST[$VALfld]; //si es un multiple lista $valor_lista=""; if(is_array($_REQUEST[$VALfld])){ //si es select multiple if(!$ABM[$VALfld]['glue']){$ABM[$VALfld]['glue']=";";}//default ; while(list($fld_sel,$val_sel) = each($_REQUEST[$VALfld])){ $valor_lista.= $val_sel.$ABM[$VALfld]['glue']; } $req_valfld=substr($valor_lista,0,strlen($valor_lista)-strlen($ABM[$VALfld]['glue'])); } if($VALfld!="ABM_dir"){ set__data($id,$VALfld,$req_valfld); } } } }else{ /////////VIEJO SISTEMA POR MYSQL if($_REQUEST['accion']=="Borrar"){ $sql_borra="delete from $tbl where $ABMid = '$id'"; $conn->execute($sql_borra); if($ABM_borrar=="nuevo"){ header("Location: ".$_SERVER['PHP_SELF']); } if($ABM_borrar=="volver"){ header("Location: $ABM_volver"); } die(); } //INSERTA NUEVO REGISTRO function esfield1111($tbl,$fld){ global $conn; $result = $conn->execute("SHOW FIELDS FROM $tbl"); while(!$result->eof){ if($result->field(Field)==$fld){return true;} $result->movenext(); } return false; } if($_REQUEST['accion']=="Guardar"){ $AGRsql="insert into $ABMtabla ("; reset($ABM); //arma query while (list ($VALfld, $VALval) = each ($ABM)) { if(esfield1111($ABMtabla,$VALfld)){ $AGRsql.=$VALfld.", "; } } $AGRsql=substr($AGRsql,0,strlen($AGRsql)-2); $AGRsql.=") values ("; reset($ABM); while (list ($VALfld, $VALval) = each ($ABM)) { if(esfield1111($ABMtabla,$VALfld)){ $req_valfld=$_REQUEST[$VALfld]; //si es un multiple lista $valor_lista=""; if(is_array($_REQUEST[$VALfld])){ //si es select multiple if(!$ABM[$VALfld]['glue']){$ABM[$VALfld]['glue']=";";}//default ; while(list($fld_sel,$val_sel) = each($_REQUEST[$VALfld])){ $valor_lista.= $val_sel.$ABM[$VALfld]['glue']; } $req_valfld=substr($valor_lista,0,strlen($valor_lista)-strlen($ABM[$VALfld]['glue'])); } $AGRsql.="'".$req_valfld."', "; } } $AGRsql=substr($AGRsql,0,strlen($AGRsql)-2); $AGRsql.=")"; //echo $AGRsql; $conn->execute($AGRsql); $id=mysql_insert_id(); } //MODIFICA REGISTRO if($_REQUEST['accion']=="Actualizar"){ $MODsql="update $ABMtabla set "; reset($ABM); while (list ($VALfld, $VALval) = each($ABM)){ if(esfield1111($ABMtabla,$VALfld)){ $req_valfld=$_REQUEST[$VALfld]; //si es un multiple lista $valor_lista=""; if(is_array($_REQUEST[$VALfld])){ //si es select multiple if(!$ABM[$VALfld]['glue']){$ABM[$VALfld]['glue']=";";}//default ; while(list($fld_sel,$val_sel) = each($_REQUEST[$VALfld])){ $valor_lista.= $val_sel.$ABM[$VALfld]['glue']; } $req_valfld=substr($valor_lista,0,strlen($valor_lista)-strlen($ABM[$VALfld]['glue'])); } $MODsql.=$VALfld."='".$req_valfld."', "; } } $MODsql=substr($MODsql,0,strlen($MODsql)-2); $MODsql.=" where $ABMid = '".$id."'"; $conn->execute($MODsql); } } if($_REQUEST['accion']=="Guardar" && $id){ //para que al guardar ya cargue el form con el dato del ID //header("Location: ".$_SERVER['PHP_SELF']."?id=$id&".$_SERVER['QUERY_STRING']); //die(); ?> die(); } //*********aca llenar valores en el abm si viene $_REQUEST['id'] if($_REQUEST['id']){ if($ABM_fs){ //fs sys reset($ABM); while (list ($VALfld, $VALval) = each ($ABM)) { $$VALfld=get__data($_REQUEST['id'],$VALfld); } }else{ $VALsql="select * from $ABMtabla where $ABMid = '".$_REQUEST['id']."'"; $VALrs=$conn->execute($VALsql); reset($ABM); while (list ($VALfld, $VALval) = each ($ABM)) { $$VALfld=$VALrs->field($VALfld); } } } //levanta los permisos en este abm para el usuario //$admABMLink=substr($SCRIPT_NAME,strrpos($SCRIPT_NAME,"/")+1); $sql="select B.permTipo from $ABM_segAdminABM A, $ABM_segAdminSeguridadABM B where A.admABMID=B.admABMID and A.admABMLink='$admABMLink' and B.usradID='$usradID'"; $rsperm=$conn->execute($sql); //############### GENERA ABM ################################################ //string de tpl de abm $TPL=file_get_contents($ABM_template); $TPLpos1=strpos($TPL,""); $TPLpos2=strpos($TPL,""); $abm_elements="?>".substr($TPL,0,$TPLpos1); $ABM1=$ABM; reset($ABM1); while (list ($ABMfield, $VALval) = each($ABM1)){ $ABMi++; //$ABMfield=$ABMrs->field(Field); $ABMparam=$ABM[$ABMfield]['param']; $ABMjs=$ABM[$ABMfield]['javascript']; $ABMclass=$ABM[$ABMfield]['class']; $ABMperm=$ABM[$ABMfield]['perm']; $ABMmultiple=$ABM[$ABMfield]['multiple']; if(!$_REQUEST['id']){$ABMvalue=$ABM[$ABMfield]['value'];} if($ABMperm=="A"){ //si el usuario tiene acceso enable, sino diabled if($rsperm->field(permTipo)!="A"){ $ABMenable="disabled"; } } if($_REQUEST[$ABMfield] && !$$ABMfield){$$ABMfield=$_REQUEST[$ABMfield];} if(!$_REQUEST['id']){$$ABMfield=$ABM[$ABMfield]['default'];}//si no hay id asigna valor default if($ABM[$ABMfield]['forcedefault']){$$ABMfield=$ABM[$ABMfield]['forcedefault'];} //fuerza un default if(1==1){ //recarga la definicion de template $TPL_ABM=substr($TPL,$TPLpos1,$TPLpos2-$TPLpos1); //atributos de TR if($ABM[$ABMfield]['type']=="hidden"){$ABM[$ABMfield]['TR_param'].=" style='display: none;'";} $TPL_ABM=str_replace("{PARAMETERS-TR}","id='TR_{$ABMfield}' {$ABM[$ABMfield]['TR_param']}",$TPL_ABM); if($ABM[$ABMfield]['custom']){ //si se definio un elemento custom, evaula de una $abm_elements.="
|
| ";
}
$elements.="
$ABMvalue{$$ABMfield}
|
",$TPL_ABM);
break;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
case "select":
$elements="
";
$TPL_ABM=str_replace("{INPUT}",$elements,$TPL_ABM);
break;
////////////////////////////////////////////////////////////////////////////////////////////////////
case "directory":
$elements=recursive_browse($_REQUEST['id'],false);
$TPL_ABM=str_replace("{INPUT}",$elements,$TPL_ABM);
break;
}
$abm_elements.= $TPL_ABM;
}
}
}
$abm_elements.=substr($TPL,$TPLpos2,strlen($TPL)-$TPLpos2);
////######################### CODIGO JAVASCRIPT, VALIDACIONES, ETC ########################
$wysiwygELEMENTS=substr($wysiwygELEMENTS,0,strlen($wysiwygELEMENTS)-1);
$javascript="
";
?>