+ /**
+ * Agrega filas desde el resultado de una consulta a una base de datos.
+ * Si no hay resultados, muestra un mensaje. Dependiendo de si es se pasa
+ * un objeto a usar o no, llama a addRowsObject() o addRowsResult()
+ * respectivamente.
+ * Ejemplo:
+ * @code
+ * @endcode
+ *
+ * @param DB_Result $result Resultados de una consulta.
+ * @param array $campos Propiedades del objeto a mostrar.
+ * @param mixed $obj Objeto a usar. Puede ser un objeto instanciado o un
+ * string con el nombre de la clase.
+ *
+ * @see Ejemplo en addPager();
+ */
+ function addRows($result, $campos, $obj = null) {
+ if ($result->numRows()) {
+ if ($obj) {
+ $this->addRowsObject($result, $campos, $obj);
+ } else {
+ $this->addRowsResult($result, $campos, $obj);
+ }
+ } else {
+ $id = $this->addRow(array(new MECON_HTML_Error("No se encontraron {$this->_desc}.")));
+ $this->updateCellAttributes($id, 0, array('colspan' => count($campos)));
+ }
+ }
+
+ /**
+ * Agrega filas usando un resultado.
+ *
+ * @param DB_Result $result Resultados de una consulta.
+ * @param array $campos Campos de la base de datos a mostrar.
+ */
+ function addRowsResult($result, $campos) {
+ while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC)) {
+ $datos = array();
+ if ($this->_prependRowsData) {
+ $datos = $this->_buildRowsData($datos, $row, $this->_prependRowsData);
+ }
+ foreach ($campos as $campo) {
+ $datos[] = $row[$campo];
+ }
+ if ($this->_appendRowsData) {
+ $datos = $this->_buildRowsData($datos, $row, $this->_appendRowsData);
+ }
+ $this->addRow($datos);
+ }
+ }
+
+ /**
+ * Agrega filas usando un objeto.
+ * El objeto debe tener un método llamado cargar que acepte como primer (y
+ * único obligatorio) parámetro un DB_Result para cargar sus datos desde una
+ * base de datos.
+ *
+ * @param DB_Result $result Resultados de una consulta.
+ * @param array $campos Propiedades del objeto a mostrar.
+ * @param mixed $obj Objeto a usar. Puede ser un objeto instanciado o un
+ * string con el nombre de la clase.
+ *
+ * @see La interfaz MECON_DBO que tiene el método MECON_DBO::cargar().
+ */
+ function addRowsObject($result, $campos, $obj) {
+ if (is_string($obj)) {
+ $obj = new $obj;
+ }
+ if (!method_exists($obj, 'cargar')) {
+ $this->raiseError('La clase ' . get_class($obj) . ' no tiene un metodo cargar().');
+ }
+ while ($obj->cargar($result)) {
+ $datos = array();
+ foreach ($campos as $campo) {
+ $datos[] = $obj->$campo;
+ }
+ $this->addRow($datos);
+ }
+ }
+
+ function addRowsData($format, $campos = array(), $lugar = 'append') {
+ if (!is_array($campos)) {
+ $campos = array($campos);
+ }
+ switch (strtolower($lugar)) {
+ case 'prepend':
+ $this->_prependRowsData[] = array($format, $campos);
+ break;
+ case 'append':
+ $this->_appendRowsData[] = array($format, $campos);
+ break;
+ default:
+ $this->raiseError('Lugar incorrecto. Lugares soportados: append, prepend.');
+ }
+ }
+
+ function _buildRowsData($datos, $row, $array) {
+ if ($array) {
+ foreach ($array as $data) {
+ list($format, $fields) = $data;
+ // Si tiene formatos y argumentos.
+ if ($fields) {
+ $args = array($format);
+ foreach ($fields as $field) {
+ if (is_array($row)) {
+ $args[] = $row[$field];
+ } else {
+ $args[] = $row->$field;
+ }
+ }
+ $datos[] = call_user_func_array('sprintf', $args);
+ // Si tiene solo formato.
+ } else {
+ #echo "TAG: $format<br>";
+ // Si es un link, traduce las variables GET.
+ if (is_a($format, 'mecon_html_link')) {
+ $vars = $format->getGetVars();
+ foreach ($vars as $var => $val) {
+ if (preg_match("/^{$this->_getVarPrefix}(.+)$/", $var, $m)
+ and ($val === null)) {
+ $format->setGetVar($var, $row[$m[1]]);
+ }
+ }
+ }
+ $datos[] = $format;
+ }
+ }
+ }
+ return $datos;
+ }
+
+ function addRowsIcon($id, $campos = array(), $link = null, $lugar = 'append') {
+ if (is_string($campos)) {
+ $campos = array($campos);
+ }
+ if (!$link) {
+ $link = @$_SERVER['PHP_SELF'];
+ }
+ if (is_string($link)) {
+ $link = new MECON_HTML_Link($link, '');
+ }
+ switch ($id) {
+ case 'modificar':
+ $img = new MECON_HTML_Image('/MECON/images/general_modificar', '(M)');
+ $link->addContents($img);
+ foreach ($campos as $campo) {
+ $link->setGetVar($this->_getVarPrefix.$campo, null);
+ }
+ $this->addRowsData($link, array(), $lugar);
+ break;
+ case 'no_modificar':
+ $img = new MECON_HTML_Image('/MECON/images/general_modificar_des', '(-)');
+ $this->addRowsData($img, array(), $lugar);
+ break;
+ case 'borrar':
+ $img = new MECON_HTML_Image('/MECON/images/general_eliminar', '(B)');
+ $link->addContents($img);
+ foreach ($campos as $campo) {
+ $link->setGetVar($this->_getVarPrefix.$campo, null);
+ }
+ $this->addRowsData($link, array(), $lugar);
+ break;
+ case 'no_borrar':
+ $img = new MECON_HTML_Image('/MECON/images/general_eliminar_des', '(-)');
+ $this->addRowsData($img, array(), $lugar);
+ break;
+ case 'ir':
+ $img = new MECON_HTML_Image('/MECON/images/general_ir4', '->');
+ $link->addContents($img);
+ foreach ($campos as $campo) {
+ $link->setGetVar($this->_getVarPrefix.$campo, null);
+ }
+ $this->addRowsData($link, array(), $lugar);
+ break;
+ default:
+ $this->raiseError("No hay un ícono predefinido llamado '$id'.");
+ }
+ }
+