private static function __SQLsearch($field, $comparison, $value, $connector, $type, $join_name) { global $ari; $table = static::getTable(); $operadores = array(); $operadores["eq"] = "="; $operadores["lt"] = "<"; $operadores["gt"] = ">"; $operadores["eqgt"] = ">="; $operadores["ltgt"] = "<="; $operadores["neq"] = "!="; $constraint = ""; //le agregue esto para que funcione la informacion adicional de contactos if ($table == 'contactos_informacion_adicional_control_value' && $field != 'control') { switch ($type) { case 'numeric': $constraint = 'isInt'; break; case 'date': $constraint = 'object-Date'; break; } } else { if (in_array($field, array('id', 'status')) && $type != 'list') { $constraint = 'isInt'; } elseif (in_array($field, array('id', 'status')) && $type == 'list') { $constraint = 'list'; } else { $constraint = static::$public_properties[$field]; } } switch ($constraint) { case 'isNumeric': case 'isFloat': case 'isInt': if (!is_numeric($value) && !is_float($value) && !OOB_validatetext::isInt($value)) { return false; } $operador_inicio = $operadores[$comparison]; $operador_fin = ""; break; case 'object-Date': $value = $ari->db->qMagic(date('Y-m-d', strtotime($value))); // @fixme : formato de fecha, revisar $operador_inicio = $operadores[$comparison]; $operador_fin = ""; break; case 'isArray': return false; // no valido break; case 'isBool': if ($value == true) { $value = 1; } else { $value = 0; } $operador_inicio = " = "; $operador_fin = ""; break; case 'list': // $value = $ari->db->qMagic($value) $operador_inicio = "IN ( "; $operador_fin = ") "; break; default: $value = $ari->db->qMagic('%' . $value . '%'); $operador_inicio = " LIKE "; $operador_fin = ""; break; } return ' ' . $connector . ' ' . $join_name . '.' . $field . ' ' . $operador_inicio . $value . $operador_fin; }
/** Parametros: * $selected = (oob_tree_node o TREE_ROOT), el nodo que va a volver seleccionado en el array * $node = (oob_tree_node o TREE_ROOT), el nodo en el que estamos parados (para considerar padres e hijos) * $root = (oob_tree_node o TREE_ROOT), el nodo desde donde empieza a armarse el arbol * $class_name = (false, string o array), nombre de la clase/clases que va a devolver el arbol * $initialize = (bool), inicializa los objetos del arbol (penalidad de velocidad, necesario si quiere validar STATUS) * $cantNiveles = (int), cantidad de niveles que quiere que el arbol recorra, por defecto todos * * Return: Este objeto devuelve un array con 3 array dentro (tree, childs, parents), cada uno a su vez dentro tiene: * donde ['nivel'], es su nivel en el árbol * ['nodo'], es un objeto OOB_tree_node * */ public function getTreeAdvanced($selected = TREE_ROOT, $node = TREE_ROOT, $root = TREE_ROOT, $class_names = false, $initialize = true, $cantNiveles = 99999) { global $ari; $ari->internalChrono('getTreeAdvanced_start'); $return['tree'] = array(); $return['childs'] = array(); $return['parents'] = array(); // validamos los datos viste if (!is_a($node, 'OOB_tree_node')) { $node = new OOB_tree_root($this->id); } if (is_a($selected, 'OOB_tree_node')) { $selected = $selected->id; } $init = true; if (OOB_validatetext::isBool($initialize)) { $init = $initialize; } $levels = 0; if (OOB_validatetext::isInt($cantNiveles)) { $levels = $cantNiveles; } if (!is_array($class_names)) { if (!$class_names) { $classes = false; } else { $classes[] = $class_names; } } else { $classes = $class_names; } //my_nivel contendra el nivel del nodo cargado en la pagina $my_nivel = 0; //bandera q permite o no la carga de hijos del nodo cargado $flagCargaHijos = false; if ($nodes = $this->getTree($root, $classes, $init)) { $i = 0; //array donde acumulo las derecha de los nodos de una raiz completa $niveles = array(); foreach ($nodes as $n) { $ok = USED; if ($init) { $ok = $n->object()->get('status'); } if ($ok != DELETED) { $cuenta = count($niveles); // no entiendo que hace esto, pero anda de diez if ($cuenta > 0) { while ($niveles[$cuenta - 1] < $n->right()) { array_pop($niveles); $cuenta = count($niveles); if ($cuenta == 0) { //si termino cualquier rama desabilito la carga de hijos $flagCargaHijos = false; break; } } } // si hay limitación de nivel, la validamos if ($levels > $cuenta || $levels == 0) { // lo ponemos en el arbol $return['tree'][$i]['nivel'] = ""; $return['tree'][$i]['node'] = $n; // marcamos al elegido (selected) if ($selected == $n->id()) { $return['tree'][$i]['selected'] = "selected"; } //guardo el nivel del nodo cargado en la pagina y activo la carga de sus hijos //ya q llegue al nodo cargado en el recorrido if ($n->left() == $node->left()) { $my_nivel = $cuenta; $flagCargaHijos = true; } //busco los padres del nodo cargado los cuales deben tener una izquierda mayor q //el nodo cargado y una derecha mayor q la derecha del nodo cargado if ($n->left() < $node->left() && $n->right() > $node->right()) { $return['parents'][] = $return['tree'][$i]; } else { if ($cuenta == 0 && $n->id() != $node->id() && $root !== TREE_ROOT || $my_nivel + 1 == $cuenta && $flagCargaHijos && $node->right() > $n->right() && $root === TREE_ROOT) { $return['childs'][] = $return['tree'][$i]; } } $return['tree'][$i]['nivel'] .= str_repeat('--', $cuenta); $niveles[] = $n->right(); //['right']; ++$i; } // end if nivel } //end if enabled } //end foreach } // end if $ari->internalChrono('getTreeAdvanced_end'); return $return; }