Debug export filters. Seems to be enougth stable so it is now enabled by

default.
This commit is contained in:
Laurent Destailleur 2012-11-20 15:56:44 +01:00
parent d9cdb542d5
commit 8f0b548714
3 changed files with 66 additions and 103 deletions

View File

@ -202,10 +202,9 @@ class Export
* @param int $indice Indice of export
* @param array $array_selected Filter on array of fields to export
* @param array $array_filterValue Filter on array of fields to export
* @param array $array_filtered Array with filters values
* @return string SQL String. Example "select s.rowid as r_rowid, s.status as s_status from ..."
*/
function build_sql($indice, $array_selected, $array_filterValue, $array_filtered)
function build_sql($indice, $array_selected, $array_filterValue)
{
// Build the sql request
$sql=$this->array_export_sql_start[$indice];
@ -225,16 +224,13 @@ class Export
$sql.=$this->array_export_sql_end[$indice];
//construction du filtrage si le parametrage existe
if (is_array($array_filtered))
if (is_array($array_filterValue))
{
$sqlWhere='';
// pour ne pas a gerer le nombre de condition
foreach ($array_filtered as $key => $value)
foreach ($array_filterValue as $key => $value)
{
if ($array_filterValue[$key])
{
$sqlWhere.=" and ".$this->build_filterQuery($this->array_export_TypeFields[0][$key], $key, $array_filterValue[$key]);
}
$sqlWhere.=" and ".$this->build_filterQuery($this->array_export_TypeFields[0][$key], $key, $array_filterValue[$key]);
}
$sql.=$sqlWhere;
}
@ -297,8 +293,10 @@ class Export
$szFilterQuery=" ".$NameField.substr($ValueField,0,1).substr($ValueField,1);
}
break;
case 'Status':
case 'Boolean':
$szFilterQuery=" ".$NameField."=".(is_numeric($ValueField) ? $ValueField : ($ValueField =='yes' ? 1: 0) );
break;
case 'Status':
case 'List':
if (is_numeric($ValueField))
$szFilterQuery=" ".$NameField."=".$ValueField;
@ -350,18 +348,18 @@ class Export
$szFilterField='<input type="text" name='.$NameField." value='".$ValueField."'>";
break;
case 'Boolean':
$szFilterField="<select name=".$NameField.'" class="flat">';
$szFilterField='<select name="'.$NameField.'" class="flat">';
$szFilterField.='<option ';
if ($ValueField=='') $szFilterField.=' selected ';
$szFilterField.=' value="">&nbsp;</option>';
$szFilterField.='<option ';
if ($ValueField=='1') $szFilterField.=' selected ';
$szFilterField.=' value="1">'.yn(1).'</option>';
if ($ValueField=='yes') $szFilterField.=' selected ';
$szFilterField.=' value="yes">'.yn(1).'</option>';
$szFilterField.='<option ';
if ($ValueField=='0') $szFilterField.=' selected ';
$szFilterField.=' value="0">'.yn(0).'</option>';
if ($ValueField=='no') $szFilterField.=' selected ';
$szFilterField.=' value="no">'.yn(0).'</option>';
$szFilterField.="</select>";
break;
case 'List':
@ -466,11 +464,10 @@ class Export
* @param string $datatoexport Name of dataset to export
* @param array $array_selected Filter on array of fields to export
* @param array $array_filterValue Filter on array of fields with a filter
* @param array $array_filtered Values of filters
* @param string $sqlquery If set, transmit a sql query instead of building it from arrays
* @return int <0 if KO, >0 if OK
*/
function build_file($user, $model, $datatoexport, $array_selected, $array_filterValue, $array_filtered, $sqlquery = '')
function build_file($user, $model, $datatoexport, $array_selected, $array_filterValue, $sqlquery = '')
{
global $conf,$langs;
@ -494,7 +491,7 @@ class Export
$objmodel = new $classname($this->db);
if (! empty($sqlquery)) $sql = $sqlquery;
else $sql=$this->build_sql($indice, $array_selected, $array_filterValue, $array_filtered);
else $sql=$this->build_sql($indice, $array_selected, $array_filterValue);
// Run the sql
$this->sqlusedforexport=$sql;

View File

@ -94,7 +94,7 @@ $entitytolang = array(
);
$array_selected=isset($_SESSION["export_selected_fields"])?$_SESSION["export_selected_fields"]:array();
$array_filtered=isset($_SESSION["export_filtered_fields"])?$_SESSION["export_filtered_fields"]:array();
//$array_filtered=isset($_SESSION["export_filtered_fields"])?$_SESSION["export_filtered_fields"]:array();
$array_filtervalue=isset($_SESSION["export_FilterValue_fields"])?$_SESSION["export_FilterValue_fields"]:array();
$datatoexport=GETPOST("datatoexport");
$action=GETPOST('action', 'alpha');
@ -116,8 +116,8 @@ $sqlusedforexport='';
$upload_dir = $conf->export->dir_temp.'/'.$user->id;
$usefilters=($conf->global->MAIN_FEATURES_LEVEL > 1);
//$usefilters=1;
//$usefilters=($conf->global->MAIN_FEATURES_LEVEL > 1);
$usefilters=1;
/*
@ -189,53 +189,6 @@ if ($action=='unselectfield')
}
}
/*
if ($action=='selectFilterfield')
{
if ($_GET["field"]=='all')
{
$fieldsarray=$objexport->array_export_TypeFields[0];
foreach($fieldsarray as $key=>$val)
{
if (! empty($array_filtered[$key])) continue; // If already selected, select next
$array_filtered[$key]=count($array_filtered)+1;
//print_r($array_selected);
$_SESSION["export_filtered_fields"]=$array_filtered;
}
}
else
{
$array_filtered[$_GET["field"]]=count($array_filtered)+1;
//print_r($array_selected);
$_SESSION["export_filtered_fields"]=$array_filtered;
}
}
if ($action=='unselectFilterfield')
{
if ($_GET["field"]=='all')
{
$array_filtered=array();
$_SESSION["export_filtered_fields"]=$array_filtered;
}
else
{
unset($array_filtered[$_GET["field"]]);
// Renumber fields of array_selected (from 1 to nb_elements)
asort($array_filtered);
$i=0;
$array_filterted_save=$array_filtered;
foreach($array_filtered as $code=>$value)
{
$i++;
$array_filtered[$code]=$i;
//print "x $code x $i y<br>";
}
$_SESSION["export_filtered_fields"]=$array_filtered;
}
}
*/
if ($action=='downfield' || $action=='upfield')
{
$pos=$array_selected[$_GET["field"]];
@ -263,7 +216,7 @@ if ($action=='downfield' || $action=='upfield')
if ($step == 1 || $action == 'cleanselect')
{
$_SESSION["export_selected_fields"]=array();
$_SESSION["export_FilterValue_fields"]=array();
//$_SESSION["export_FilterValue_fields"]=array();
$_SESSION["export_filtered_fields"]=array();
$array_selected=array();
$array_filtervalue=array();
@ -273,7 +226,7 @@ if ($step == 1 || $action == 'cleanselect')
if ($action == 'builddoc')
{
// Build export file
$result=$objexport->build_file($user, $_POST['model'], $datatoexport, $array_selected, $array_filtervalue, $array_filtered);
$result=$objexport->build_file($user, $_POST['model'], $datatoexport, $array_selected, $array_filtervalue);
if ($result < 0)
{
$mesg='<div class="error">'.$objexport->error.'</div>';
@ -360,7 +313,7 @@ if ($action == 'add_export_model')
if ($step == 2 && $action == 'select_model')
{
$_SESSION["export_selected_fields"]=array();
$_SESSION["export_filtered_fields"]=array();
//$_SESSION["export_filtered_fields"]=array();
$_SESSION["export_FilterValue_fields"]=array();
$array_selected=array();
@ -388,25 +341,34 @@ if ($step == 2 && $action == 'select_model')
$array_filtervalue[$val]=$fieldsarrayvalue[$i-1];
$i++;
}
$_SESSION["export_filtered_fields"]=$array_filtered;
//$_SESSION["export_filtered_fields"]=$array_filtered;
$_SESSION["export_FilterValue_fields"]=$array_filtervalue;
}
}
// recuperation du filtrage issu du formulaire
// Get form with filters
if ($step == 4 && $action == 'submitFormField')
{
// on boucle sur les champs selectionne pour recuperer la valeur
if (is_array($objexport->array_export_TypeFields[0]))
{
$_SESSION["export_FilterValue_fields"]=array();
foreach($array_filtered as $code=>$value)
var_dump($_POST);
foreach($objexport->array_export_TypeFields[0] as $code => $type) // $code: s.fieldname $value: Text|Boolean|List:ccc
{
//print $code."=".$_POST[$objexport->array_export_fields[0][$code]];
$objexport->array_export_FilterValue[0][$code] = (isset($objexport->array_export_fields[0][$code])?$_POST[$objexport->array_export_fields[0][$code]]:'');
$newcode=(string) preg_replace('/\./','_',$code);
//print 'xxx'.$code."=".$newcode."=".$type."=".$_POST[$newcode]."\n<br>";
$filterqualified=1;
if (! isset($_POST[$newcode]) || $_POST[$newcode] == '') $filterqualified=0;
elseif (preg_match('/^List/',$type) && $_POST[$newcode] <= 0) $filterqualified=0;
if ($filterqualified)
{
//print 'Filter on '.$newcode.' type='.$type.' value='.$_POST[$newcode]."\n";
$objexport->array_export_FilterValue[0][$code] = $_POST[$newcode];
}
}
$_SESSION["export_FilterValue_fields"]=(! empty($objexport->array_export_FilterValue[0])?$objexport->array_export_FilterValue[0]:'');
$array_filtervalue=(! empty($objexport->array_export_FilterValue[0])?$objexport->array_export_FilterValue[0]:'');
$_SESSION["export_FilterValue_fields"]=$array_filtervalue;
}
}
@ -415,7 +377,6 @@ if ($step == 4 && $action == 'submitFormField')
* View
*/
if ($step == 1 || ! $datatoexport)
{
llxHeader('',$langs->trans("NewExport"),'EN:Module_Exports_En|FR:Module_Exports|ES:M&oacute;dulo_Exportaciones');
@ -566,7 +527,7 @@ if ($step == 2 && $datatoexport)
// Champs exportables
$fieldsarray=$objexport->array_export_fields[0];
// Select request if all fields are selected
$sqlmaxforexport=$objexport->build_sql(0, array(), array(), array());
$sqlmaxforexport=$objexport->build_sql(0, array(), array());
// $this->array_export_module[0]=$module;
// $this->array_export_code[0]=$module->export_code[$r];
@ -741,7 +702,7 @@ if ($step == 3 && $datatoexport)
// valeur des filtres
$ValueFiltersarray=(! empty($objexport->array_export_FilterValue[0])?$objexport->array_export_FilterValue[0]:'');
// Select request if all fields are selected
$sqlmaxforexport=$objexport->build_sql(0, array(), array(), array());
$sqlmaxforexport=$objexport->build_sql(0, array(), array());
$var=true;
$i = 0;
@ -868,7 +829,7 @@ if ($step == 4 && $datatoexport)
print $objexport->array_export_label[0];
print '</td></tr>';
// Nbre champs exportes
// List of exported fields
print '<tr><td width="25%">'.$langs->trans("ExportedFields").'</td>';
$list='';
foreach($array_selected as $code=>$value)
@ -876,28 +837,31 @@ if ($step == 4 && $datatoexport)
$list.=($list?', ':'');
$list.=$langs->trans($objexport->array_export_fields[0][$code]);
}
print '<td>'.$list.'</td></tr>';
print '<td>'.$list.'</td>';
print '</tr>';
// Number of filtered fields
// List of filtered fiels
if (isset($objexport->array_export_TypeFields[0]) && is_array($objexport->array_export_TypeFields[0]))
{
print '<tr><td width="25%">'.$langs->trans("FilteredFields").'</td>';
$list='';
foreach($array_filtered as $code=>$value)
foreach($array_filtervalue as $code=>$value)
{
if (isset($objexport->array_export_fields[0][$code])) {
if (isset($objexport->array_export_fields[0][$code]))
{
$list.=($list?', ':'');
$list.="[".$langs->trans($objexport->array_export_fields[0][$code])."]='".(isset($array_filtervalue[$code])?$array_filtervalue[$code]:'')."'";
$list.=$langs->trans($objexport->array_export_fields[0][$code])."='".(isset($array_filtervalue[$code])?$array_filtervalue[$code]:'')."'";
}
}
print '<td>'.$list.'</td></tr>';
print '<td>'.($list?$list:$langs->trans("None")).'</td>';
print '</tr>';
}
print '</table>';
print '<br>';
// Select request if all fields are selected
$sqlmaxforexport=$objexport->build_sql(0, array(), array(), array());
$sqlmaxforexport=$objexport->build_sql(0, array(), array());
print $langs->trans("ChooseFieldsOrdersAndTitle").'<br>';
@ -1098,7 +1062,7 @@ if ($step == 5 && $datatoexport)
print $objexport->array_export_label[0];
print '</td></tr>';
// Nbre champs exportes
// List of exported fields
print '<tr><td width="25%">'.$langs->trans("ExportedFields").'</td>';
$list='';
foreach($array_selected as $code=>$label)
@ -1108,19 +1072,21 @@ if ($step == 5 && $datatoexport)
}
print '<td>'.$list.'</td></tr>';
// Nbre champs filtres
if (is_array($objexport->array_export_TypeFields[0]))
// List of filtered fiels
if (isset($objexport->array_export_TypeFields[0]) && is_array($objexport->array_export_TypeFields[0]))
{
print '<tr><td width="25%">'.$langs->trans("FilteredFields").'</td>';
$list='';
foreach($array_filtered as $code=>$value)
foreach($array_filtervalue as $code=>$value)
{
if (isset($objexport->array_export_fields[0][$code])) {
if (isset($objexport->array_export_fields[0][$code]))
{
$list.=($list?', ':'');
$list.="[".$langs->trans($objexport->array_export_fields[0][$code])."]='".(isset($array_filtervalue[$code])?$array_filtervalue[$code]:'')."'";
$list.=$langs->trans($objexport->array_export_fields[0][$code])."='".(isset($array_filtervalue[$code])?$array_filtervalue[$code]:'')."'";
}
}
print '<td>'.$list.'</td></tr>';
print '<td>'.($list?$list:$langs->trans("None")).'</td>';
print '</tr>';
}
print '</table>';
@ -1182,10 +1148,10 @@ if ($step == 5 && $datatoexport)
print '<br>';
$db->close();
llxFooter();
$db->close();
/**
* Return table name of an alias. For this, we look for the "tablename as alias" in sql string.

View File

@ -144,21 +144,21 @@ class ExportTest extends PHPUnit_Framework_TestCase
$model='csv';
// Build export file
$result=$objexport->build_file($user, $model, $datatoexport, $array_selected, array(), array(), $sql);
$result=$objexport->build_file($user, $model, $datatoexport, $array_selected, array(), $sql);
$expectedresult=1;
$this->assertEquals($result,$expectedresult);
$model='tsv';
// Build export file
$result=$objexport->build_file($user, $model, $datatoexport, $array_selected, array(), array(), $sql);
$result=$objexport->build_file($user, $model, $datatoexport, $array_selected, array(), $sql);
$expectedresult=1;
$this->assertEquals($result,$expectedresult);
$model='excel';
// Build export file
$result=$objexport->build_file($user, $model, $datatoexport, $array_selected, array(), array(), $sql);
$result=$objexport->build_file($user, $model, $datatoexport, $array_selected, array(), $sql);
$expectedresult=1;
$this->assertEquals($result,$expectedresult);
@ -195,21 +195,21 @@ class ExportTest extends PHPUnit_Framework_TestCase
$model='csv';
// Build export file
$result=$objexport->build_file($user, $model, $datatoexport, $array_selected, $array_filtervalue, $array_filtered, $sql);
$result=$objexport->build_file($user, $model, $datatoexport, $array_selected, $array_filtervalue, $sql);
$expectedresult=1;
$this->assertEquals($result,$expectedresult);
$model='tsv';
// Build export file
$result=$objexport->build_file($user, $model, $datatoexport, $array_selected, $array_filtervalue, $array_filtered, $sql);
$result=$objexport->build_file($user, $model, $datatoexport, $array_selected, $array_filtervalue, $sql);
$expectedresult=1;
$this->assertEquals($result,$expectedresult);
$model='excel';
// Build export file
$result=$objexport->build_file($user, $model, $datatoexport, $array_selected, $array_filtervalue, $array_filtered, $sql);
$result=$objexport->build_file($user, $model, $datatoexport, $array_selected, $array_filtervalue, $sql);
$expectedresult=1;
$this->assertEquals($result,$expectedresult);
@ -234,7 +234,7 @@ class ExportTest extends PHPUnit_Framework_TestCase
$result=$objexport->load_arrays($user,$datatoexport);
// Build export file
$result=$objexport->build_file($user, $model, $datatoexport, $array_selected, array(), array(), $sql);
$result=$objexport->build_file($user, $model, $datatoexport, $array_selected, array(), $sql);
$expectedresult=1;
$this->assertEquals($result,$expectedresult);