// +X2C Operation 526
/**
* @param int $id Identificador del objecto.
- * @param string $confFile Configuracin del objeto.
+ * @param string $confFile Configuración del objeto.
*
* @return void
* @access public
// +X2C Operation 527
/**
+ * Carga hijos de un objeto. Si hubo error devuelve un PEAR_Error, si no hubo error, devuleve un array de objetos (los hijos).
+ *
* @param mixed $db Base de datos o resultado de donde cargar los hijos.
+ * @param bool $soloHabilitados Si es true, se cargan solo los hijos con el flag habilitado.
+ * @param string $orden Indica cómo ordenar los hijos cargados.
*
- * @return PEAR_Error
+ * @return mixed
* @access public
*/
- function cargarHijos($db) // ~X2C
+ function cargarHijos($db, $soloHabilitados = true, $orden = 'nombre') // ~X2C
{
$id_field = $this->conf['id'];
$id_padre = $this->conf['padre'];
$db = $result->dbh;
// Si no es un resultado, hago el query.
} else {
- $result = $db->query("SELECT * FROM $tabla WHERE $id_padre = $id");
+ $query = "SELECT * FROM $tabla WHERE $id_padre = $id";
+ if ($soloHabilitados) {
+ $query .= ' AND ' . $this->conf['habilitado'] . ' = 1';
+ }
+ if ($orden) {
+ $query .= ' ORDER BY ' . $orden;
+ }
+ $result = $db->query($query);
if (DB::isError($result)) {
return $result;
}
}
// Si no hay mas resultados, entonces terminó bien.
if (AI_Error::isError($err)
- and $err->getCode() == AIERROR_NO_RESULTADOS) {
- return true;
+ and $err->getCode() == AI_ERROR_NO_RESULTADOS) {
+ return $this->_hijos;
}
// Si no, se devuelve el error.
return $err;
}
// -X2C
+ // +X2C Operation 529
+ /**
+ * Borra el objeto de la base de datos verificando que no tenga hijos.
+ *
+ * @param DB $db Base de datos de la cual borrar el objeto.
+ *
+ * @return PEAR_Error
+ * @access public
+ */
+ function borrar($db) // ~X2C
+ {
+ $id_field = $this->conf['id'];
+ $id_padre = $this->conf['padre'];
+ $tabla = $this->conf['base'].'.'.$this->conf['tabla'];
+ $id = intval($this->$id_field);
+ if ($id) {
+ // Verifico si tiene hijos.
+ $hijos = $db->getOne("
+ SELECT $id_field
+ FROM $tabla
+ WHERE $id_padre = $id");
+ if (DB::isError($hijos)) {
+ return $hijos;
+ } elseif ($hijos) {
+ // Si tiene hijos, da error.
+ return new AI_Error(AI_ERROR_TIENE_HIJOS,
+ "El elemento de identificador $id todavía tiene hijos.");
+ } else {
+ // Si no tiene hijos, lo borro.
+ return parent::borrar($db);
+ }
+ }
+ return PEAR::raiseError('No hay un identificador válido para borrar');
+ }
+ // -X2C
+
} // -X2C Class :AI_DBTreeObject
?>
\ No newline at end of file