Viewing file: ci_principal.php (14.44 KB) -rwxrwxr-x Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php require_once('seleccion_imagenes.php');
define('id_temporal', 'Automático');
class ci_principal extends toba_ci { protected $s__id_item ; protected $s__inicializar_item_nuevo = true; protected $s__fuentes; protected $s__hay_con_permisos; protected $cambio_item = false; private $elemento_eliminado = false; private $refrescar = false; function ini__operacion() { if (! isset($this->s__fuentes)) { $this->s__fuentes = toba_info_editores::get_fuentes_datos(toba_editor::get_proyecto_cargado()); } $this->s__hay_con_permisos = false; foreach ($this->s__fuentes as $fuente) { if (isset($fuente['permisos_por_tabla']) && $fuente['permisos_por_tabla'] == '1') { $this->s__hay_con_permisos = true; } } } function ini() { //Se quita la secuencia para manejar el caso de alta de un ID alfanumerico a gusto $this->get_entidad()->tabla('base')->set_definicion_columna('item', 'secuencia', null);
//Se quita el control de concurrencia porque permite modificar claves $this->get_entidad()->persistidor()->set_lock_optimista(false); $zona = toba::zona(); if ($zona->cargada()) { list($proyecto, $item) = $zona->get_editable(); //Se notifica un item y un proyecto if (isset($item) && isset($proyecto)) { //Se determina si es un nuevo item $es_nuevo = (!isset($this->s__id_item ) || ($this->s__id_item['proyecto'] != $proyecto || $this->s__id_item['item'] != $item)); if ($es_nuevo) { $this->set_item(array('proyecto'=>$proyecto, 'item'=>$item)); $this->cambio_item = true; } } } else { //Creacion de un item nuevo if ($this->s__inicializar_item_nuevo) { unset($this->s__id_item ); $datos = $this->get_entidad(); $datos->resetear(); $this->inicializar_item($datos); $this->s__inicializar_item_nuevo = false; } } } function get_entidad() { //Acceso al DATOS_RELACION if ($this->cambio_item) { toba::logger()->debug($this->get_txt() . '*** se cargo el item: ' . print_r($this->s__id_item,true)); $this->dependencia('datos')->cargar($this->s__id_item); } return $this->dependencia('datos'); }
function set_item($id) { $this->s__id_item = $id; } function conf() { if (! $this->get_entidad()->esta_cargada()) { $this->pantalla()->eliminar_evento('eliminar'); } if (! $this->s__hay_con_permisos) { $this->pantalla()->eliminar_tab('pant_permisos'); } } /** * Inicializacion de un ITEM nuevo, llega el DR vacio */ function inicializar_item($dr) { //Ver si el padre viene por post $datos = array(); //TODO: See this -.- $padre_i = toba::memoria()->get_parametro('padre_i'); $padre_p = toba::memoria()->get_parametro('padre_p'); if (isset($padre_p) && isset($padre_i)) { $datos = array('item' => id_temporal); $datos['padre'] = $padre_i; $datos['padre_proyecto'] = $padre_p; } $dr->tabla('base')->set($datos); //Le agrego el permiso del usuario actual foreach (toba::usuario()->get_grupos_acceso() as $grupo) { $permiso_usuario_actual = array('usuario_grupo_acc' => $grupo); $dr->tabla('permisos')->nueva_fila($permiso_usuario_actual); } }
//------------------------------------------------------------------- //--- PROPIEDADES BASICAS //-------------------------------------------------------------------
function conf__prop_basicas(toba_ei_formulario $form) { $datos = $this->get_entidad()->tabla('base')->get(); if (!isset($datos['carpeta']) || $datos['carpeta'] != 1) { if (!$this->get_entidad()->esta_cargada()) { $form->ef('item')->set_iconos_utilerias(array(new utileria_identificador_nuevo())); } else { $form->ef('item')->set_iconos_utilerias(array(new utileria_identificador_actual())); } } //Transfiere los campos accion, buffer y patron a uno comportamiento if (isset($datos['actividad_accion']) && $datos['actividad_accion'] != '') { $datos['comportamiento'] = 'accion'; } if (isset($datos['actividad_buffer']) && $datos['actividad_buffer'] != 0) { $datos['comportamiento'] = 'buffer'; } if (isset($datos['actividad_patron']) && $datos['actividad_patron'] != 'especifico') { $datos['comportamiento'] = 'patron'; } if (! isset($datos['pagina_tipo'])) { $pagina = toba_info_editores::get_tipo_pagina_defecto(); $datos['pagina_tipo'] = $pagina['pagina_tipo']; $datos['pagina_tipo_proyecto'] = $pagina['proyecto']; } if ($form->existe_ef('accion')) { $form->ef('accion')->set_iconos_utilerias(admin_util::get_ef_popup_utileria_php()); } $form->set_datos($datos); }
function evt__prop_basicas__modificacion($registro) { //El campo comportamiento incide en el buffer, patron y accion if ($registro['solicitud_tipo'] == 'browser') { switch ($registro['comportamiento']) { case 'accion': $registro['actividad_buffer'] = 0; $registro['actividad_patron'] = 'especifico'; break; case 'buffer': $registro['actividad_accion'] = ''; $registro['actividad_patron'] = 'especifico'; break; case 'patron': $registro['actividad_buffer'] = 0; $registro['actividad_accion'] = ''; break; } } unset($registro['comportamiento']); $this->get_entidad()->tabla('base')->set($registro); } //---------------------------------------------------------- //-- OBJETOS ----------------------------------------------- //---------------------------------------------------------- function conf__objetos() { $objetos = $this->get_entidad()->tabla('objetos')->get_filas(null, true); return $objetos; } function evt__objetos__modificacion($objetos) { $this->get_entidad()->tabla('objetos')->procesar_filas($objetos); } //---------------------------------------------------------- //-- PERMISOS ------------------------------------------------- //---------------------------------------------------------- function conf__pant_permisos_tablas(toba_ei_pantalla $pant) { if (! $this->s__hay_con_permisos && $this->existe_dependencia('form_tablas')) { $pant->eliminar_dep('form_tablas'); $this->get_entidad()->tabla('permisos_tablas')->eliminar_filas(); } } /* * Toma los permisos actuales, les agrega los grupos faltantes y les pone descripcion */ function conf__permisos() { $asignados = $this->get_entidad()->tabla('permisos')->get_filas(); $grupos = toba_info_permisos::get_grupos_acceso(toba_editor::get_proyecto_cargado()); $datos = array(); foreach ($grupos as $grupo) { //El grupo esta asignado al item? $esta_asignado = false; foreach ($asignados as $asignado) { //Si esta asignado ponerle el nombre del grupo y chequear el checkbox if ($asignado['usuario_grupo_acc'] == $grupo['usuario_grupo_acc']) { $grupo['tiene_permiso'] = 1; $grupo['item'] = $this->s__id_item['item']; $esta_asignado = true; } } //Si no esta asignado poner el item y deschequear el checkbox if (!$esta_asignado) { $grupo['tiene_permiso'] = 0; $grupo['item'] = $this->s__id_item['item']; } $datos[] = $grupo; } return $datos; } function evt__permisos__modificacion($grupos) { $dbr = $this->get_entidad()->tabla('permisos'); $asignados = $dbr->get_filas(array(), true); if (!$asignados) { $asignados = array(); } //ei_arbol($asignados, 'asignados'); //ei_arbol($grupos, 'nuevos'); foreach ($grupos as $grupo) { $estaba_asignado = false; foreach ($asignados as $id => $asignado) { //¿Estaba asignado anteriormente? if ($asignado['usuario_grupo_acc'] == $grupo['usuario_grupo_acc']) { $estaba_asignado = true; if (! $grupo['tiene_permiso']) { //Si estaba asignado, y fue deseleccionado entonces borrar $dbr->eliminar_fila($id); } } } //Si no estaba asignado y ahora se asigna, agregarlo if (!$estaba_asignado && $grupo['tiene_permiso']) { unset($grupo['tiene_permiso']); unset($grupo['nombre']); $dbr->nueva_fila($grupo); } } } function conf__form_tablas(toba_ei_formulario_ml $form) { $configurados = $this->get_entidad()->tabla('permisos_tablas')->get_cantidad_filas(); $permisos = array(); foreach ($this->s__fuentes as $fuente) { $con_permisos = $fuente['permisos_por_tabla']; if (! $con_permisos) { continue; } if ($configurados === 0) { //No hay permisos configurados $fuente['esquema'] = $fuente['schema']; $fuente['proyecto'] = toba_editor::get_proyecto_cargado(); $fuente['tablas_modifica'] = array(); $permisos[] = $fuente; } else { //Hay permisos previos $aux = array(); $datos_fila = $this->get_entidad()->tabla('permisos_tablas')->get_filas(array('fuente_datos' => $fuente['fuente_datos'])); foreach ($datos_fila as $fila) { //Agrupo las tablas por schema $indx = $fila['esquema']; $aux[$indx][] = $fila['tabla']; } if (! empty($aux)) { foreach($aux as $schema => $tablas) { $permisos[] = array('fuente_datos' => $fuente['fuente_datos'], 'esquema' => $schema, 'proyecto' => toba_editor::get_proyecto_cargado(), 'tablas_modifica' => $tablas); } unset($aux); } } } $form->set_datos($permisos); } function evt__form_tablas__modificacion($datos) { $conj_actual = array(); $datos_actuales = $this->get_entidad()->tabla('permisos_tablas')->get_filas(); foreach($datos_actuales as $fila) { $indx = "{$fila['fuente_datos']}_{$fila['esquema']}_{$fila['tabla']}"; $conj_actual[$indx] = $fila; } $conj_nuevo = array(); foreach($datos as $fila) { foreach ($fila['tablas_modifica'] as $tabla) { $indx = "{$fila['fuente_datos']}_{$fila['esquema']}_$tabla"; $conj_nuevo[$indx] = $fila; $conj_nuevo[$indx]['tabla'] = $tabla; } } $nuevos = array_diff_key($conj_nuevo, $conj_actual); $borrados = array_diff_key($conj_actual, $conj_nuevo); foreach($borrados as $fila) { $condicion = array('fuente_datos' => $fila['fuente_datos'], 'esquema' => $fila['esquema'], 'tabla' => $fila['tabla']); $id = $this->get_entidad()->tabla('permisos_tablas')->get_id_fila_condicion($condicion); $this->get_entidad()->tabla('permisos_tablas')->eliminar_fila(current($id)); } foreach($nuevos as $fila) { $id = $this->get_entidad()->tabla('permisos_tablas')->nueva_fila($fila); $this->set_permisos_basicos($id); } } function get_tablas_fuente($fuente, $schema = null) { try { return toba::db($fuente, toba_editor::get_proyecto_cargado())->get_lista_tablas(false, $schema); } catch (toba_error $e) { toba::notificacion()->warning("La fuente '$fuente' no está definida en bases.ini. Si guarda los cambios es posible que borre información existente"); //No esta definida en bases.ini return array(); } }
function get_schemas_fuente($fuente) { try { return toba::db($fuente, toba_editor::get_proyecto_cargado())->get_lista_schemas_disponibles(); } catch (toba_error $e) { toba::notificacion()->warning("La fuente '$fuente' no está definida en bases.ini. Si guarda los cambios es posible que borre información existente"); //No esta definida en bases.ini return array(); } }
//----------------------------------------------------------------------------------------------------------------------------------------------------// // PANTALLA PERMISOS // //----------------------------------------------------------------------------------------------------------------------------------------------------// function conf__form_acl(toba_ei_formulario_ml $form) { $datos = $this->get_entidad()->tabla('permisos_tablas')->get_filas(); toba::logger()->var_dump($datos); foreach($datos as $klave => $fila) { $permisos = explode(',' , $fila['permisos']); if (in_array('select', $permisos)) { $datos[$klave]['chk_select'] = 1; } if (in_array('insert', $permisos)) { $datos[$klave]['chk_insert'] = 1; } if (in_array('update', $permisos)) { $datos[$klave]['chk_update'] = 1; } if (in_array('delete', $permisos)) { $datos[$klave]['chk_delete'] = 1; } } $form->set_datos($datos); } function evt__form_acl__modificacion($datos) { foreach($datos as $klave => $fila) { $permisos = array(); $datos[$klave]['permisos'] = array(); if (isset($fila['chk_select']) && $fila['chk_select'] == 1) { $permisos[] = 'select'; } if (isset($fila['chk_insert']) && $fila['chk_insert'] == 1) { $permisos[] = 'insert'; } if (isset($fila['chk_update']) && $fila['chk_update'] == 1) { $permisos[] = 'update'; } if (isset($fila['chk_delete']) && $fila['chk_delete'] == 1) { $permisos[] = 'delete'; } if (! empty($permisos)) { $datos[$klave]['permisos'] = implode(',', $permisos); } } $this->get_entidad()->tabla('permisos_tablas')->procesar_filas($datos); } function set_permisos_basicos($id_fila) { $this->get_entidad()->tabla('permisos_tablas')->set_fila_columna_valor($id_fila, 'permisos', 'select,insert,update,delete'); } // ******************************************************************* // ******************* PROCESAMIENTO ******************************* // *******************************************************************
function evt__procesar() { //Seteo los datos asociados al uso de este editor $basicos = $this->get_entidad()->tabla('base'); $basicos->set_fila_columna_valor(0, 'proyecto', toba_editor::get_proyecto_cargado()); $es_temporal = $basicos->get_columna('item') == id_temporal; if ($es_temporal) { //Reemplazar el automático por la secuencia $basicos->set_columna_valor('item', toba::instancia()->get_db()->recuperar_nuevo_valor_secuencia('apex_item_seq')); } //Sincronizo el DBT $this->get_entidad()->sincronizar(); $datos = $this->get_entidad()->tabla('base')->get(); //Si el proyecto usa esquema de permisos por tabla $modelo_proyecto = toba_editor::get_modelo_proyecto(); try { $modelo_proyecto->generar_roles_db($datos['item']); } catch (toba_error_db $e) { toba::notificacion()->error('Error al actualizar los roles postgres para esta operación', $e->get_mensaje_log()); } if (! isset($this->s__id_item )) { //Si el item es nuevo admin_util::refrescar_editor_item($datos['item']); admin_util::redirecionar_a_editor_item($datos['proyecto'], $datos['item']); } }
function evt__eliminar() { $this->get_entidad()->eliminar(); toba::notificacion()->agregar('La operación ha sido eliminada', 'info'); toba::zona()->resetear(); admin_util::refrescar_editor_item(); }
/** * Servicio para mostrar la imagen */ function servicio__ejecutar() { seleccion_imagenes::generar_html_listado(); } }
?>
|