- $servicio = intval($this->servicio);
- $result = $db->query("SELECT * FROM servicio WHERE servicio_padre = $servicio");
- if (DB::isError($result)) {
- return $result;
- }
- $this->_hijos = array();
- $hijo = new Servicio;
- $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() == AIERROR_NO_RESULTADOS) {
- return true;
+ if (!is_a($db, 'db_result')) {
+ if (is_int($orden)) {
+ $id_field = $this->conf['id'];
+ $id_padre = $this->conf['padre'];
+ $id = intval($this->$id_field);
+ if ($orden === AI_SERVICIO_ORDEN_LONG_HIJOS) {
+ $query = "
+ SELECT
+ A.*,
+ count(1) as COUNT,
+ SUM(CEIL(LENGTH(B.nombre) / 22)) as RENGLONES
+ FROM {$this->conf['base']}.{$this->conf['tabla']} AS A,
+ {$this->conf['base']}.{$this->conf['tabla']} AS B
+ WHERE A.$id_field = B.$id_padre
+ AND A.$id_padre = $id";
+ if ($soloHabilitados) {
+ $query .= " AND A.{$this->conf['habilitado']} = 1";
+ }
+ $query .= "
+ GROUP BY A.$id_field
+ ORDER BY RENGLONES DESC, COUNT DESC, A.nombre";
+ } elseif ($orden === AI_SERVICIO_ORDEN_LONG_NOMBRE) {
+ $query = "
+ SELECT *
+ FROM {$this->conf['base']}.{$this->conf['tabla']}
+ WHERE $id_padre = $id";
+ if ($soloHabilitados) {
+ $query .= ' AND ' . $this->conf['habilitado'] . ' = 1';
+ }
+ $query .= ' ORDER BY LENGTH(nombre)';
+ } else {
+ return new AI_Error(AI_ERROR_ORDEN_INVALIDO,
+ "Tipo de órden incorrecto [orden=$orden]");
+ }
+ $result = $db->query($query);
+ if (DB::isError($result)) {
+ return $result;
+ }
+ return parent::cargarHijos($result, $soloHabilitados, $orden);
+ }