X-Git-Url: https://git.llucax.com/mecon/ai.git/blobdiff_plain/61fdd4f7e9019fdd5c4e3b5d9c43ab5d3506a11c..efefba10aeaaa7d31d1339e5db0f6a5425467631:/lib/AI/GrupoSecciones.php diff --git a/lib/AI/GrupoSecciones.php b/lib/AI/GrupoSecciones.php index 23fa14a..b7dc567 100644 --- a/lib/AI/GrupoSecciones.php +++ b/lib/AI/GrupoSecciones.php @@ -1,5 +1,5 @@ _hijos; - } - - // ~X2C - - // +X2C Operation 495 /** * @param int $grupo ID del grupo. * * @return void * @access public */ - function AI_GrupoSecciones($grupo = 0) // ~X2C + function AI_GrupoSecciones($grupo = 0) { - $this->grupo = $grupo; + parent::AI_DBTreeObject($grupo, AI_GRUPOSECCIONES_CONFFILE); } - // -X2C - // +X2C Operation 496 /** * @param mixed $db Base de datos o Resultado a utilizar. * * @return PEAR_Error * @access public */ - function cargar($db) // ~X2C + function cargar($db) { - $grupo = intval($this->grupo); - if (is_a($db, 'db_result')) { - $result = $db; - $db = $result->dbh; - // Si no es un resultado, hago el query. - } else { - $result = $db->query( - "SELECT * - FROM grupo_secciones - WHERE grupo = $grupo" - ); - if (DB::isError($result)) { - return $result; - } - } - // Obtengo la fila. - $row = $result->fetchRow(DB_FETCHMODE_ASSOC); - if (!$row) { - return new AI_Error(AI_ERROR_NO_RESULTADOS, - "No hay más resultados en la DB [grupo=$grupo]"); + // Obtengo campos comunes. + $err = parent::cargar($db); + if (PEAR::isError($err)) { + return $err; } - // Asigno valores al objeto. - extract($row); - $this->grupo = $grupo; - $this->nombre = $nombre; - $this->grupo_padre = $grupo_padre; - $this->habilitado = $habilitado; - $this->antiguedad = $antiguedad; - $this->mostrar_hijos= $mostrar_hijos; // Obtengo secciones. + $id = intval($this->grupo); + extract($this->conf['secciones'], EXTR_PREFIX_ALL, 'cnf'); $secciones = $db->getCol( - "SELECT seccion - FROM grupo_secciones_seccion - WHERE grupo = $grupo" + "SELECT $cnf_campo + FROM $cnf_base.$cnf_tabla + WHERE $cnf_id = $id" ); + //Busco los hijos si corresponde + //Agregado por gmeray + if($this->mostrar_hijos) + { + //hijos + $secciones = array_merge($secciones, + $db->getCol( + "SELECT GSS.$cnf_campo + FROM $cnf_base.$cnf_tabla GSS, $cnf_base.grupo_secciones GS + WHERE GSS.$cnf_id = GS.grupo + AND GS.grupo_padre = $id" + ) + ); + //nietos + $secciones = array_merge($secciones, + $db->getCol( + "SELECT GSS.$cnf_campo + FROM $cnf_base.$cnf_tabla GSS, $cnf_base.grupo_secciones GS, $cnf_base.grupo_secciones GS2 + WHERE GSS.$cnf_id = GS.grupo + AND GS.grupo_padre = GS2.grupo + AND GS2.grupo_padre = $id" + ) + ); + //Si hace falta agreguen los bisnietos. + } + //Fin Agregado + if (DB::isError($secciones)) { return $secciones; } @@ -179,20 +165,18 @@ class AI_GrupoSecciones { } return true; } - // -X2C - // +X2C Operation 497 /** * @param DB $db DB donde guardar. - * @param bool $nuevo Si es true, se fuerza a guardar el Grupo de Secciones como nuevo. + * @param bool $nuevo Si es true, se fuerza a guardar el Grupo de + * Secciones como nuevo. * * @return PEAR_Error * @access public */ - function guardar($db, $nuevo = false) // ~X2C + function guardar($db, $nuevo = false) { - $grupo = intval($this->grupo); - $where = ''; + // Guardo datos generales. $datos = array( 'grupo_padre' => intval($this->grupo_padre), 'nombre' => $this->nombre, @@ -200,31 +184,20 @@ class AI_GrupoSecciones { 'antiguedad' => intval($this->antiguedad), 'mostrar_hijos' => $this->mostrar_hijos ? 1 : 0, ); - if ($grupo and !$nuevo) { - $accion = DB_AUTOQUERY_UPDATE; - $where = "grupo = $grupo"; - } else { - $accion = DB_AUTOQUERY_INSERT; - // Si no tiene ID, le asigno uno nuevo. - if (!$grupo) { - $grupo = $db->nextId('grupo_secciones'); - if (DB::isError($grupo)) { - return $grupo; - } - $this->grupo = $grupo; - } - $datos['grupo'] = $grupo; + $err = parent::guardar($db, $datos, $nuevo); + if (PEAR::isError($err)) { + return $err; } - $res = $db->autoExecute('grupo_secciones', $datos, $accion, $where); + // Guardo datos de secciones. + $id_field = $this->conf['id']; + $id = intval($this->$id_field); + extract($this->conf['secciones'], EXTR_PREFIX_ALL, 'cnf'); + $res = $db->query("DELETE FROM $cnf_base.$cnf_tabla WHERE $cnf_id = $id"); if (DB::isError($res)) { return $res; } - $res = $db->query("DELETE FROM grupo_secciones_seccion WHERE grupo = $grupo"); - if (DB::isError($res)) { - return $res; - } - $prepare = $db->prepare("INSERT INTO grupo_secciones_seccion - (grupo, seccion) VALUES ($grupo, ?)"); + $prepare = $db->prepare("INSERT INTO $cnf_base.$cnf_tabla + ($cnf_id, $cnf_campo) VALUES ($id, ?)"); if (DB::isError($prepare)) { return $prepare; } @@ -234,77 +207,163 @@ class AI_GrupoSecciones { } return true; } - // -X2C - // +X2C Operation 498 /** * @param DB $db DB de donde borrar. * * @return PEAR_Error * @access public */ - function borrar($db) // ~X2C + function borrar($db) { - $grupo = intval($this->grupo); - if ($grupo) { - $res = $db->query( - "DELETE FROM grupo_secciones WHERE grupo = $grupo"); - if (DB::isError($res)) { - return $res; - } - $res = $db->query( - "DELETE FROM grupo_secciones_seccion WHERE grupo = $grupo"); - if (DB::isError($res)) { - return $res; - } - return true; + // Obtengo campos comunes. + $err = parent::borrar($db); + if (PEAR::isError($err)) { + return $err; + } + // Obtengo secciones. + $id = intval($this->grupo); + extract($this->conf['secciones'], EXTR_PREFIX_ALL, 'cnf'); + $res = $db->query( + "DELETE FROM $cnf_base.$cnf_tabla WHERE $cnf_id = $id"); + if (DB::isError($res)) { + return $res; } - return PEAR::raiseError("No hay un grupo válido para borrar"); + return true; } - // -X2C - // +X2C Operation 499 /** - * @param DB $db DB de donde cargar los hijos. + * Obtiene un array con una lista de secciones. + * Sólo se obtienen las secciones que todavía no pertenecen a ningún + * grupo. Si se especifica un grupo, se agregan las secciones de ese grupo + * al array resultante. * - * @return PEAR_Error + * @param DB $db Base de datos a usar para obtener los datos. + * @param int $grupo Grupo del cual obtener las secciones. + * + * @return array * @access public + * @static */ - function cargarHijos($db) // ~X2C + function getSeccionesArray($db = null, $grupo = 0) { - $grupo = intval($this->grupo); - $result = $db->query("SELECT * FROM grupo_secciones WHERE grupo_padre = $grupo"); - if (DB::isError($result)) { - return $result; + static $conf_dav, $conf_sec; + if (!$conf_dav or !$conf_sec) { + $conf = parse_ini_file(AI_GRUPOSECCIONES_CONFFILE, true); + $conf_dav = $conf['mecondav']; + $conf_sec = $conf['secciones']; } - $this->_hijos = array(); - $hijo = new GrupoSecciones; - $err = $hijo->cargar($result); - while (!PEAR::isError($err)) { - $this->_hijos[] = $hijo->__clone(); - $err = $hijo->cargar($result); + extract($conf_dav, EXTR_PREFIX_ALL, 'dav'); + extract($conf_sec, EXTR_PREFIX_ALL, 'sec'); + return $db->getAssoc( + "SELECT d.$dav_id, d.$dav_campo + FROM $dav_base.$dav_tabla as d + LEFT JOIN $sec_base.$sec_tabla AS s + ON s.$sec_campo = d.$dav_id + WHERE s.$sec_campo IS NULL + OR s.$sec_id = $grupo + ORDER BY d.$dav_campo ASC"); + } + + /** + * Obtiene un array con una lista de todas las secciones. + * + * @param DB $db Base de datos a usar para obtener los datos. + * + * @return array + * @access public + * @static + */ + function getAllSeccionesArray($db = null) + { + static $conf; + if (!$conf) { + $conf = parse_ini_file(AI_GRUPOSECCIONES_CONFFILE, true); + $conf = $conf['mecondav']; } - // Si no hay mas resultados, entonces terminó bien. - if (AI_Error::isError($err) - and $err->getCode() == AI_ERROR_NO_RESULTADOS) { - return true; + extract($conf, EXTR_PREFIX_ALL, 'dav'); + return $db->getAssoc( + "SELECT d.$dav_id, d.$dav_campo + FROM $dav_base.$dav_tabla as d + ORDER BY d.$dav_campo ASC"); + } + + /** + * Obtiene un array con una lista de las secciones ocultas. + * + * @param DB $db Base de datos a usar para obtener los datos. + * + * @return array + * @access public + * @static + */ + function getSeccionesOcultasArray($db = null) + { + static $conf; + if (!$conf) { + $conf = parse_ini_file(AI_GRUPOSECCIONES_CONFFILE, true); + $conf = $conf['ocultas']; } - // Si no, se devuelve el error. - return $err; + extract($conf, EXTR_PREFIX_ALL, 'ocu'); + return $db->getCol("SELECT d.$ocu_id FROM $ocu_base.$ocu_tabla as d"); } - // -X2C - // +X2C Operation 500 /** - * @return GrupoSecciones + * Establece las secciones ocultas. + * + * @param DB $db Base de datos a usar para grabar los datos. + * + * @return Cantidad de secciones insertadas o PEAR_Error. * @access public + * @static */ - function __clone() // ~X2C + function setSeccionesOcultas($db = null, $secciones) { - return $this; + static $conf; + if (!$conf) { + $conf = parse_ini_file(AI_GRUPOSECCIONES_CONFFILE, true); + $conf = $conf['ocultas']; + } + extract($conf, EXTR_PREFIX_ALL, 'ocu'); + $res = $db->query("DELETE FROM $ocu_base.$ocu_tabla"); + if (DB::isError($res)) { + return $res; + } + foreach ($secciones as $seccion) { + $res = $db->query( + "INSERT INTO $ocu_base.$ocu_tabla VALUES (" + . $db->quote($seccion) . ")"); + if (DB::isError($res)) { + return $res; + } + } + return count($secciones); + } + + /** + * Obtiene el grupo al que pertenece una sección. + * + * @param int $seccion Sección a buscar. + * @param DB $db DB a usar. + * + * @return AI_GrupoSecciones + * @access public + * @static + */ + function getGrupo($seccion, $db = null) + { + static $conf; + if (!$conf) { + $conf = parse_ini_file(AI_GRUPOSECCIONES_CONFFILE, true); + $conf = $conf['secciones']; + } + extract($conf); + return $db->getOne( + "SELECT $id + FROM $base.$tabla + WHERE $campo = " . $db->quote($seccion)); } - // -X2C -} // -X2C Class :AI_GrupoSecciones +} -?> +?> \ No newline at end of file