X-Git-Url: https://git.llucax.com/mecon/ai.git/blobdiff_plain/df9d0deaca85d998cd966a75db730202e0f7c993..5d1175ef0a3555a5042a7ab07f0e67db544b4685:/lib/AI/Servicio.php?ds=sidebyside
diff --git a/lib/AI/Servicio.php b/lib/AI/Servicio.php
index a6b4fec..29f2070 100644
--- a/lib/AI/Servicio.php
+++ b/lib/AI/Servicio.php
@@ -30,9 +30,26 @@
// +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 longitud de los hijos.
+ * La longitud 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