]> git.llucax.com Git - mecon/ai.git/blobdiff - lib/AI/Servicio.php
Cambios cortesía de gmeray:
[mecon/ai.git] / lib / AI / Servicio.php
index a6b4fec3d7935b07a395d737262d5c0604b4d7a1..29f20703f5f6f3b4129e99c3c3a43c0a562d3bc0 100644 (file)
 // +X2C includes
 require_once 'AI/DBTreeObject.php';
 // ~X2C
-//
+
 require_once 'AI/Error.php';
 
+/**
+ * Archivo de configuración.
+ */
+define('AI_SERVICIO_CONFFILE', dirname(__FILE__).'/Servicio.ini');
+
+/**
+ * Trae los servicios en un orden según la <em>longitud</em> de los hijos.
+ * La <em>longitud<em> de los hijos se calcula prediciendo la cantidad de
+ * renglones que va a ocupar cada hijo y sumándolos para un mismo padre.
+ */
+define('AI_SERVICIO_ORDEN_LONG_HIJOS', 1);
+
+/**
+ * Trae los servicios en un orden según la longitud del nombre.
+ */
+define('AI_SERVICIO_ORDEN_LONG_NOMBRE', 2);
+
 // +X2C Class 413 :AI_Servicio
 /**
  * Servicio.
@@ -64,7 +81,7 @@ class AI_Servicio extends AI_DBTreeObject {
     var $nombre = '';
 
     /**
-     * Descripcin del servicio.
+     * Descripción del servicio.
      *
      * @var    string $descripcion
      * @access public
@@ -72,7 +89,7 @@ class AI_Servicio extends AI_DBTreeObject {
     var $descripcion = '';
 
     /**
-     * ?ono del servicio.
+     * Ícono del servicio.
      *
      * @var    string $icono
      * @access public
@@ -122,7 +139,7 @@ class AI_Servicio extends AI_DBTreeObject {
      */
     function AI_Servicio($servicio = 0) // ~X2C
     {
-        parent::AI_DBTreeObject($servicio, dirname(__FILE__) . '/Servicio.ini');
+        parent::AI_DBTreeObject($servicio, AI_SERVICIO_CONFFILE);
     }
     // -X2C
 
@@ -153,7 +170,63 @@ class AI_Servicio extends AI_DBTreeObject {
     }
     // -X2C
 
-
+    // +X2C Operation 539
+    /**
+     * Carga hijos de un servicio. 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 a usar.
+     * @param  bool $soloHabilitados Si es true, sólo trae los servicios habilitados.
+     * @param  mixed $orden Indica el orden en que se deben traer los hijos. Puede ser AI_SERVICIO_ORDEN_CANT_HIJOS, AI_SERVICIO_ORDEN_LONG_NOMBRE o un campo arbitrario.
+     *
+     * @return mixed
+     * @access public
+     */
+    function cargarHijos($db, $soloHabilitados = true, $orden = false) // ~X2C
+    {
+        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);
+            }
+        }
+        return parent::cargarHijos($db, $soloHabilitados, $orden);
+    }
+    // -X2C
 
 } // -X2C Class :AI_Servicio