/** * Parseara los parametros para formar los constraints basados en los * datos del request. * * En el caso de SmarClient esos son basicamente : * _startRow = primera fila a enviar del total de los resultados. * _endRow = Ultima fila a enviar del total de los resultados. * @todo Agregar el resto conforme se vayan implementando. * * * @param Object $constraintData para el caso de este processor basado en * JSON , el string que contiene el objeto Json con los valores requeridos. * @param \TSLRequestConstraints $constraints referencia a un objeto constraints * si a existe uno creado. * * @return \TSLRequestConstraints la estructura de los constraints a procesar. */ public function &process($constraintData, &$constraints = NULL) { $startRow = 0; $endRow = 0; // Si el parametro no es valido retornamos un arreglo en blanco if (!isset($constraintData) || is_null($constraintData)) { return NULL; } if (isset($constraintData['_startRow'])) { $startRow = $constraintData['_startRow']; } if (isset($constraintData['_endRow'])) { $endRow = $constraintData['_endRow']; } // Creamos si no se envia uno para usar. if (!isset($constraints) || $constraints === NULL) { $constraints = new TSLRequestConstraints(); } // Campos de sort (primer intento un solo campo). // El sort viene con un negativo adelante si es descendente if (isset($constraintData['_sortBy'])) { $pos = strpos($constraintData['_sortBy'], '-'); if ($pos !== FALSE) { $constraints->addSortField(substr($constraintData['_sortBy'], 1), 'DESC'); } else { $constraints->addSortField($constraintData['_sortBy'], 'ASC'); } } // Seteamos los datos $constraints->setStartRow($startRow); $constraints->setEndRow($endRow); // Vemos si tenemos que procesar un advanced filter // De lo contrario solo efectuamos un filtro normal. if (isset($constraintData['_acriteria'])) { $afilter = json_decode($constraintData['_acriteria']); foreach ($afilter->criteria as $elem) { $constraints->addFilterField($elem->fieldName, $elem->value, $elem->operator); } } else { // Los campos de filtro , para el smartClient son todos aquellos que // no tienen el underscore delante. foreach ($constraintData as $key => $value) { // Si empieza con op o libid o parentId son parametros para otors usos no // son campos. if (!strcmp($key, "op") || !strcmp($key, "libid") || !strcmp($key, "parentId")) { continue; } // Si no empieza con underscore o _isc (isomorphic smartclient identificador) $pos = strpos($key, '_'); $pos2 = strpos($key, 'isc_'); if (!($pos === 0 || $pos2 === 0)) { if (isset($constraintData['_textMatchStyle'])) { $constraints->addFilterField($key, $value, $constraintData['_textMatchStyle']); } else { $constraints->addFilterField($key, $value, $constraintData[$key]); } } } } return $constraints; }