| // +--------------------------------------------------------------------+ // // $Id$ // // +X2C includes require_once 'AI/DBObject.php'; // ~X2C // +X2C Class 524 :AI_DBTreeObject /** * @package AI * @access public * @abstract */ class AI_DBTreeObject extends AI_DBObject { /** * Grupos de secciones que tiene este grupo. * * @var array $hijos * @access protected */ var $_hijos = array(); /** * Gets Hijos. * * @return array * @access public */ function getHijos() { return $this->_hijos; } // ~X2C // +X2C Operation 526 /** * @param int $id Identificador del objecto. * @param string $confFile Configuración del objeto. * * @return void * @access public */ function AI_DBTreeObject($id = 0, $confFile = '') // ~X2C { parent::AI_DBObject($id, $confFile); } // -X2C // +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 mixed * @access public */ function cargarHijos($db, $soloHabilitados = true, $orden = 'nombre') // ~X2C { $id_field = $this->conf['id']; $id_padre = $this->conf['padre']; $tabla = $this->conf['base'].'.'.$this->conf['tabla']; $id = intval($this->$id_field); if (is_a($db, 'db_result')) { $result = $db; $db = $result->dbh; // Si no es un resultado, hago el query. } else { $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; } } $this->_hijos = array(); $clase = get_class($this); $hijo = new $clase; $err = $hijo->cargar($result); while (!PEAR::isError($err)) { $this->_hijos[] = $hijo->__clone(); $err = $hijo->cargar($result); } // Si no hay mas resultados, entonces terminó bien. if (AI_Error::isError($err) 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 ?>