- Nuevo requerimiento de funciones, nueva funcionalidad de filtrado para el campo "Suggest"
- Solucion:
Se ha implementado un nuevo atributo para el campo "Suggest" en el formulario "Add Suggest"
que consta de un Dropdown que nos permite seleccionar una opcion, la misma permite el filtrado
de texto, de la siguiente manera:
> Results that contain the entered text
> Results that start with the entered text
> Results that finish with the entered text
Esta opciones estan seteadas en el atributo "Search Type" con sus correspondientes opciones.
Disponible para la version 2.5.2
377 lines
12 KiB
PHP
Executable File
377 lines
12 KiB
PHP
Executable File
<?php
|
|
|
|
$request = isset($_POST['request'])? $_POST['request']: null;
|
|
if( !isset($request) ){
|
|
$request = isset($_GET['request'])? $_GET['request']: null;
|
|
}
|
|
if( isset($request) ){
|
|
switch($request){
|
|
case 'deleteGridRowOnDynaform':
|
|
//This code is to update the SESSION variable for dependent fields in grids
|
|
|
|
if (!defined("XMLFORM_AJAX_PATH")) {
|
|
define("XMLFORM_AJAX_PATH", PATH_XMLFORM);
|
|
}
|
|
|
|
if (is_array($_SESSION[$_POST["formID"]][$_POST["gridname"]])) {
|
|
if (!is_array($_SESSION[$_POST["formID"]][$_POST["gridname"]])) {
|
|
$_SESSION[$_POST["formID"]][$_POST["gridname"]] = (array)$_SESSION[$_POST["formID"]][$_POST["gridname"]];
|
|
}
|
|
ksort($_SESSION[$_POST["formID"]][$_POST["gridname"]]);
|
|
$oFields = array();
|
|
$initialKey = 1;
|
|
|
|
foreach ($_SESSION[$_POST["formID"]][$_POST["gridname"]] as $key => $value) {
|
|
if ($key != $_POST["rowpos"]) {
|
|
$oFields[$initialKey] = $value;
|
|
$initialKey++;
|
|
}
|
|
}
|
|
|
|
unset($_SESSION[$_POST["formID"]][$_POST["gridname"]]);
|
|
|
|
$_SESSION[$_POST["formID"]][$_POST["gridname"]] = $oFields;
|
|
}
|
|
|
|
/* if( isset($_SESSION['APPLICATION']) ){
|
|
G::LoadClass('case');
|
|
$oApp= new Cases();
|
|
$aFields = $oApp->loadCase($_SESSION['APPLICATION']);
|
|
unset($aFields['APP_DATA'][$_POST['gridname']][$_POST['rowpos']]);
|
|
$initialKey = 1;
|
|
foreach ($aFields['APP_DATA'][$_POST['gridname']] as $key => $value) {
|
|
$oFields[$initialKey] = $value;
|
|
$initialKey++;
|
|
$aFields['APP_DATA'][$_POST['gridname']] = $oFields;
|
|
}
|
|
$oApp->updateCase($_SESSION['APPLICATION'], $aFields);
|
|
}
|
|
*/
|
|
break;
|
|
/** widgets **/
|
|
case 'suggest':
|
|
|
|
try {
|
|
if(isset($_GET["inputEnconde64"])) {
|
|
$_GET['input'] = base64_decode($_GET['input']);
|
|
}
|
|
$sData = base64_decode(str_rot13($_GET['hash']));
|
|
list($SQL, $DB_UID) = explode('@|', $sData);
|
|
// Remplace values for dependent fields
|
|
$aDependentFieldsKeys = explode("|", base64_decode(str_rot13($_GET['dependentFieldsKeys'])));
|
|
$aDependentFieldsValue = explode("|", $_GET['dependentFieldsValue']);
|
|
if ($aDependentFieldsKeys) {
|
|
$aDependentFields = array();
|
|
foreach ($aDependentFieldsKeys as $nKey => $sFieldVar ) {
|
|
$sKeyDepFields = substr($sFieldVar, 2);
|
|
$aDependentFields[$sKeyDepFields] = $aDependentFieldsValue[$nKey];
|
|
}
|
|
$SQL = G::replaceDataField($SQL, $aDependentFields);
|
|
}
|
|
|
|
// Parsed SQL Structure
|
|
G::LoadClass('phpSqlParser');
|
|
|
|
$parser = new PHPSQLParser($SQL);
|
|
$searchType = $_GET["searchType"];
|
|
|
|
// Verif parsed array
|
|
// print_r($parser->parsed);
|
|
$SQL = queryModified($parser->parsed, $_GET['input'], $searchType);
|
|
|
|
$aRows = Array();
|
|
try {
|
|
$con = Propel::getConnection($DB_UID);
|
|
$con->begin();
|
|
$rs = $con->executeQuery($SQL);
|
|
$con->commit();
|
|
|
|
while ( $rs->next() ) {
|
|
array_push($aRows, $rs->getRow());
|
|
}
|
|
} catch (SQLException $sqle) {
|
|
$con->rollback();
|
|
}
|
|
|
|
$input = strtolower( $_GET['input'] );
|
|
$len = strlen($input);
|
|
$limit = isset($_GET['limit']) ? (int) $_GET['limit'] : 0;
|
|
$aResults = array();
|
|
$count = 0;
|
|
$aRows = sortByChar($aRows, $input);
|
|
|
|
if ($len){
|
|
for ($i=0;$i<count($aRows);$i++){
|
|
$aRow = $aRows[$i];
|
|
$nCols = sizeof($aRow);
|
|
|
|
$aRow = array_values($aRow);
|
|
switch( $nCols ){
|
|
case 1:
|
|
$id = $aRow[0];
|
|
$value = $aRow[0];
|
|
$info = '';
|
|
break;
|
|
|
|
case 2:
|
|
$id = $aRow[0];
|
|
$value = $aRow[1];
|
|
$info = '';
|
|
break;
|
|
|
|
case $nCols >= 3:
|
|
$id = $aRow[0];
|
|
$value = $aRow[1];
|
|
$info = $aRow[2];
|
|
break;
|
|
}
|
|
|
|
|
|
// had to use utf_decode, here
|
|
// not necessary if the results are coming from mysql
|
|
//
|
|
$count++;
|
|
$aResults[] = array( "id"=>$id ,"value"=>htmlspecialchars($value), "info"=>htmlspecialchars($info) );
|
|
|
|
}
|
|
}
|
|
|
|
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
|
|
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified
|
|
header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
|
|
header ("Pragma: no-cache"); // HTTP/1.0
|
|
|
|
if (isset($_REQUEST['json'])) {
|
|
header("Content-Type: application/json");
|
|
echo Bootstrap::json_encode(array("status" => 0, "results" => $aResults));
|
|
} else {
|
|
header("Content-Type: text/xml");
|
|
|
|
echo "<?xml version=\"1.0\" encoding=\"utf-8\" ?><results>";
|
|
for ($i=0;$i<count($aResults);$i++)
|
|
{
|
|
echo "<rs id=\"".$aResults[$i]['id']."\" info=\"".$aResults[$i]['info']."\">".$aResults[$i]['value']."</rs>";
|
|
}
|
|
echo "</results>";
|
|
}
|
|
|
|
} catch(Exception $e){
|
|
$err = $e->getMessage();
|
|
//$err = eregi_replace("[\n|\r|\n\r]", ' ', $err);
|
|
$err = preg_replace("[\n|\r|\n\r]", ' ', $err);//Made compatible to PHP 5.3
|
|
echo '{"status":1, "message":"'.$err.'"}';
|
|
}
|
|
break;
|
|
|
|
|
|
case 'storeInTmp':
|
|
try {
|
|
$con = Propel::getConnection($_GET['cnn']);
|
|
if($_GET['pkt'] == 'int'){
|
|
$rs = $con->executeQuery("SELECT MAX({$_GET['pk']}) as lastId FROM {$_GET['table']};");
|
|
$rs->next();
|
|
$row = $rs->getRow();
|
|
$gKey = (int)$row['lastId'] + 1;
|
|
|
|
} else {
|
|
$gKey = md5(date('Y-m-d H:i:s').'@'.rand());
|
|
}
|
|
|
|
$rs = $con->executeQuery("INSERT INTO {$_GET['table']} ({$_GET['pk']}, {$_GET['fld']}) VALUES ('$gKey', '{$_GET['value']}');");
|
|
|
|
echo "{status: 1, message: \"success\"}";
|
|
} catch (Exception $e) {
|
|
$err = $e->getMessage();
|
|
//$err = eregi_replace("[\n|\r|\n\r]", ' ', $err);
|
|
$err = preg_replace("[\n|\r|\n\r]", " ", $err); //Made compatible to PHP 5.3
|
|
|
|
echo "{status: 0, message: \"" . $err . "\"}";
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function sortByChar($aRows, $charSel)
|
|
{
|
|
$aIniChar = array();
|
|
$aRest = array();
|
|
for($i=0; $i<count($aRows) ;$i++){
|
|
$aRow = $aRows[$i];
|
|
$nCols = sizeof($aRow);
|
|
$aRowOrder = array_values($aRow);
|
|
switch( $nCols ){
|
|
case 1:
|
|
$value = $aRowOrder[0];
|
|
break;
|
|
case 2:
|
|
$value = $aRowOrder[1];
|
|
break;
|
|
case $nCols >= 3:
|
|
$value = $aRowOrder[1];
|
|
break;
|
|
}
|
|
|
|
if(substr(strtolower($value), 0, 1) == substr( strtolower($charSel), 0, 1)){
|
|
array_push($aIniChar, $aRow);
|
|
} else {
|
|
array_push($aRest, $aRow);
|
|
}
|
|
}
|
|
return array_merge($aIniChar, $aRest);
|
|
}
|
|
|
|
|
|
/*
|
|
* Converts a SQL array parsing to a SQL string.
|
|
* @param string $sqlParsed
|
|
* @param string $inputSel default value empty string
|
|
* @return string
|
|
*/
|
|
function queryModified($sqlParsed, $inputSel = "", $searchType)
|
|
{
|
|
if(!empty($sqlParsed['SELECT'])) {
|
|
$sqlSelectOptions = (isset($sqlParsed["OPTIONS"]) && count($sqlParsed["OPTIONS"]) > 0)? implode(" ", $sqlParsed["OPTIONS"]) : null;
|
|
|
|
$sqlSelect = "SELECT $sqlSelectOptions ";
|
|
$aSelect = $sqlParsed["SELECT"];
|
|
|
|
$sFieldSel = (count($aSelect)>1 ) ? $aSelect[1]['base_expr'] : $aSelect[0]['base_expr'];
|
|
foreach($aSelect as $key => $value ) {
|
|
if($key != 0)
|
|
$sqlSelect .= ", ";
|
|
$sAlias = str_replace("`","", $aSelect[$key]['alias']);
|
|
$sBaseExpr = $aSelect[$key]['base_expr'];
|
|
switch($aSelect[$key]['expr_type']){
|
|
case 'colref' : if($sAlias === $sBaseExpr)
|
|
$sqlSelect .= $sAlias;
|
|
else
|
|
$sqlSelect .= $sBaseExpr . ' AS ' . $sAlias;
|
|
break;
|
|
case 'expression' : if($sAlias === $sBaseExpr)
|
|
$sqlSelect .= $sBaseExpr;
|
|
else
|
|
$sqlSelect .= $sBaseExpr . ' AS ' . $sAlias;
|
|
break;
|
|
case 'subquery' : if(strpos($sAlias, $sBaseExpr,0) != 0)
|
|
$sqlSelect .= $sAlias;
|
|
else
|
|
$sqlSelect .= $sBaseExpr . " AS " . $sAlias;
|
|
break;
|
|
case 'operator' : $sqlSelect .= $sBaseExpr;
|
|
break;
|
|
default : $sqlSelect .= $sBaseExpr;
|
|
break;
|
|
}
|
|
}
|
|
|
|
$sqlFrom = " FROM ";
|
|
if(!empty($sqlParsed['FROM'])){
|
|
$aFrom = $sqlParsed['FROM'];
|
|
if(count($aFrom) > 0){
|
|
foreach($aFrom as $key => $value ){
|
|
if($key == 0) {
|
|
$sqlFrom .= $aFrom[$key]['table'] . (($aFrom[$key]['table'] == $aFrom[$key]['alias'])?"" : " " . $aFrom[$key]['alias']);
|
|
} else {
|
|
$sqlFrom .= " " . (($aFrom[$key]['join_type']=='JOIN')?"INNER": $aFrom[$key]['join_type']) . " JOIN " . $aFrom[$key]['table']
|
|
. (($aFrom[$key]['table'] == $aFrom[$key]['alias'])?"" : " " . $aFrom[$key]['alias']) . " " . $aFrom[$key]['ref_type'] . " " . $aFrom[$key]['ref_clause'] ;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
$sqlConditionLike = "LIKE '%" . $inputSel . "%'";
|
|
|
|
switch ($searchType) {
|
|
case "searchtype*":
|
|
$sqlConditionLike = "LIKE '" . $inputSel . "%'";
|
|
break;
|
|
case "*searchtype":
|
|
$sqlConditionLike = "LIKE '%" . $inputSel . "'";
|
|
break;
|
|
}
|
|
|
|
if(!empty($sqlParsed['WHERE'])){
|
|
$sqlWhere = " WHERE ";
|
|
$aWhere = $sqlParsed['WHERE'];
|
|
foreach($aWhere as $key => $value ){
|
|
$sqlWhere .= $value['base_expr'] . " ";
|
|
}
|
|
$sqlWhere .= " AND " . $sFieldSel . " " . $sqlConditionLike;
|
|
}
|
|
else {
|
|
$sqlWhere = " WHERE " . $sFieldSel . " " . $sqlConditionLike;
|
|
}
|
|
|
|
$sqlGroupBy = "";
|
|
if(!empty($sqlParsed['GROUP'])){
|
|
$sqlGroupBy = "GROUP BY ";
|
|
$aGroup = $sqlParsed['GROUP'];
|
|
foreach($aGroup as $key => $value ){
|
|
if($key != 0)
|
|
$sqlGroupBy .= ", ";
|
|
if($value['direction'] == 'ASC' )
|
|
$sqlGroupBy .= $value['base_expr'];
|
|
else
|
|
$sqlGroupBy .= $value['base_expr'] . " " . $value['direction'];
|
|
}
|
|
}
|
|
|
|
$sqlHaving = "";
|
|
if(!empty($sqlParsed['HAVING'])){
|
|
$sqlHaving = "HAVING ";
|
|
$aHaving = $sqlParsed['HAVING'];
|
|
foreach($aHaving as $key => $value ){
|
|
$sqlHaving .= $value['base_expr'] . " ";
|
|
}
|
|
}
|
|
|
|
$sqlOrderBy = "";
|
|
if(!empty($sqlParsed['ORDER'])){
|
|
$sqlOrderBy = "ORDER BY ";
|
|
$aOrder = $sqlParsed['ORDER'];
|
|
foreach($aOrder as $key => $value ){
|
|
if($key != 0)
|
|
$sqlOrderBy .= ", ";
|
|
if($value['direction'] == 'ASC' )
|
|
$sqlOrderBy .= $value['base_expr'];
|
|
else
|
|
$sqlOrderBy .= $value['base_expr'] . " " . $value['direction'];
|
|
}
|
|
} else {
|
|
$sqlOrderBy = " ORDER BY " . $sFieldSel;
|
|
}
|
|
|
|
$sqlLimit = "";
|
|
if(!empty($sqlParsed['LIMIT'])){
|
|
$sqlLimit = "LIMIT ". $sqlParsed['LIMIT']['start'] . ", " . $sqlParsed['LIMIT']['end'];
|
|
}
|
|
|
|
return $sqlSelect . $sqlFrom . $sqlWhere . $sqlGroupBy . $sqlHaving . $sqlOrderBy . $sqlLimit;
|
|
}
|
|
if(!empty($sqlParsed['CALL'])){
|
|
$sCall = "CALL ";
|
|
$aCall = $sqlParsed['CALL'];
|
|
foreach($aCall as $key => $value ){
|
|
$sCall .= $value . " ";
|
|
}
|
|
return $sCall;
|
|
}
|
|
if(!empty($sqlParsed['EXECUTE'])){
|
|
$sCall = "EXECUTE ";
|
|
$aCall = $sqlParsed['EXECUTE'];
|
|
foreach($aCall as $key => $value ){
|
|
$sCall .= $value . " ";
|
|
}
|
|
return $sCall;
|
|
}
|
|
if(!empty($sqlParsed[''])){
|
|
$sCall = "";
|
|
$aCall = $sqlParsed[''];
|
|
foreach($aCall as $key => $value ){
|
|
$sCall .= $value . " ";
|
|
}
|
|
return $sCall;
|
|
}
|
|
}
|