[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Noalyss-commit] [noalyss] 48/323: Task #1520 : Préférence : pouvoir ch
From: |
Dany De Bontridder |
Subject: |
[Noalyss-commit] [noalyss] 48/323: Task #1520 : Préférence : pouvoir changer les préférence pour les exports CSV |
Date: |
Wed, 14 Mar 2018 17:38:16 -0400 (EDT) |
sparkyx pushed a commit to branch master
in repository noalyss.
commit 1e7bb6e6a499e1039497abb7fe8e8375031e5947
Author: Dany De Bontridder <address@hidden>
Date: Wed Jan 10 17:41:51 2018 +0100
Task #1520 : Préférence : pouvoir changer les préférence pour les exports
CSV
---
html/do.php | 7 ++++
include/ajax/ajax_preference.php | 64 ++++++++++++++++++++++++++++++++++++-
include/class/user.class.php | 21 ++++++++++--
include/export/export_histo_csv.php | 3 +-
include/lib/database.class.php | 17 +++++-----
include/lib/noalyss_csv.class.php | 39 +++++++++++++++++++---
6 files changed, 132 insertions(+), 19 deletions(-)
diff --git a/html/do.php b/html/do.php
index 1bd08fb..54959ad 100644
--- a/html/do.php
+++ b/html/do.php
@@ -81,6 +81,9 @@ if ( isset ($_POST['set_preference'])) {
$p_email=$http->post("p_email","string","");
$minirap=$http->post("minirap","number",0);
$period=$http->post("period","number");
+ $csv_fieldsep=$http->post("csv_fieldsep","number");
+ $csv_decimal=$http->post("csv_decimal","number");
+ $csv_encoding=$http->post("csv_encoding");
if (strlen(trim($pass_1)) != 0 && strlen(trim($pass_2)) != 0)
{
@@ -91,6 +94,10 @@ if ( isset ($_POST['set_preference'])) {
$g_user->save_global_preference('THEME', $style_user);
$g_user->save_global_preference('LANG', $lang);
$g_user->save_global_preference('PAGESIZE', $p_size);
+ $g_user->save_global_preference('csv_fieldsep', $csv_fieldsep);
+ $g_user->save_global_preference('csv_decimal', $csv_decimal);
+ $g_user->save_global_preference('csv_encoding', $csv_encoding);
+
$g_user->set_mini_report($minirap);
$_SESSION['g_theme']=$style_user;
$_SESSION['g_pagesize']=$p_size;
diff --git a/include/ajax/ajax_preference.php b/include/ajax/ajax_preference.php
index 4505aaa..1b92a86 100644
--- a/include/ajax/ajax_preference.php
+++ b/include/ajax/ajax_preference.php
@@ -100,7 +100,7 @@ if (isset($_REQUEST['gDossier']) &&
$_REQUEST['gDossier']<>0)
if ($l_user_per == "")
$l_user_per = $cn->get_value("select min(p_id) from
parm_periode where p_closed='f'");
-// if periode is closed then warns the users
+ // if periode is closed then warns the users
$period = new Periode($cn, $l_user_per);
$period->p_id = $l_user_per;
@@ -148,6 +148,68 @@ if (isset($_REQUEST['gDossier']) &&
$_REQUEST['gDossier']<>0)
?>
</table>
</fieldset>
+ <fieldset>
+ <legend><?=_("Format Export CSV")?></legend>
+ <p>
+ <?php
+ if ( $_SESSION['csv_fieldsep']==1 &&
$_SESSION['csv_decimal']==1)
+ {
+ echo_warning(_("N'utilisez pas le même séparateur pour les
champs et les décimales"));
+ }
+ ?>
+ </p>
+ <table>
+ <tr>
+ <td>
+ <?=_("Séparateur de champs")?>
+ </td>
+ <td>
+ <?php
+ $csv_fieldsep=new ISelect('csv_fieldsep');
+ $csv_fieldsep->value=[
+ ["label"=>_("Point-virgule"),"value"=>0],
+ ["label"=>_("virgule"),"value"=>1]
+ ];
+ $csv_fieldsep->selected=$_SESSION['csv_fieldsep'];
+ echo $csv_fieldsep->input();
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <?=_("Séparateur Décimale")?>
+ </td>
+ <td>
+ <?php
+ $csv_decimal=new ISelect('csv_decimal');
+ $csv_decimal->value=[
+ ["label"=>_("point"),"value"=>0],
+ ["label"=>_("virgule"),"value"=>1]
+ ];
+ $csv_decimal->selected=$_SESSION['csv_decimal'];
+ echo $csv_decimal->input();
+ ?>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <?=_("Encodage")?>
+ </td>
+ <td>
+ <?php
+ $csv_encoding=new ISelect('csv_encoding');
+ $csv_encoding->value=[
+ ["label"=>_("utf8"),"value"=>'utf8'],
+ ["label"=>_("latin1"),"value"=>'latin1']
+ ];
+ $csv_encoding->selected=$_SESSION['csv_encoding'];
+ echo $csv_encoding->input();
+ ?>
+ </td>
+ </tr>
+ </table>
+
+ </fieldset>
<?php
if ($inside_dossier)
{
diff --git a/include/class/user.class.php b/include/class/user.class.php
index 3d5e43b..4849af9 100644
--- a/include/class/user.class.php
+++ b/include/class/user.class.php
@@ -631,7 +631,14 @@ class User
;
}
// save array into g_ variable
- $array_pref = array('g_theme' => 'THEME', 'g_pagesize' =>
'PAGESIZE', 'g_topmenu' => 'TOPMENU', 'g_lang' => 'LANG');
+ $array_pref = array('g_theme' => 'THEME',
+ 'g_pagesize' => 'PAGESIZE',
+ 'g_topmenu' => 'TOPMENU',
+ 'g_lang' => 'LANG',
+ 'csv_fieldsep'=>'csv_fieldsep',
+ 'csv_decimal'=>'csv_decimal' ,
+ 'csv_encoding'=>'csv_encoding');
+
foreach ($array_pref as $name => $parameter)
{
if (!isset($line[$parameter]))
@@ -659,7 +666,11 @@ class User
$default_parameter = array("THEME" => "classic",
"PAGESIZE" => "50",
'TOPMENU' => 'TEXT',
- 'LANG' => 'fr_FR.utf8');
+ 'LANG' => 'fr_FR.utf8',
+ 'csv_fieldsep'=>'0',
+ 'csv_decimal'=>'0',
+ 'csv_encoding'=>'utf8'
+ );
$cn = new Database();
$Sql = "insert into
user_global_pref(user_id,parameter_type,parameter_value)
values ('%s','%s','%s')";
@@ -692,7 +703,11 @@ class User
$default_parameter = array("THEME" => "classic",
"PAGESIZE" => "50",
"LANG" => 'fr_FR.utf8',
- 'TOPMENU' => 'SELECT');
+ 'TOPMENU' => 'SELECT',
+ 'csv_fieldsep'=>'0',
+ 'csv_decimal'=>'0',
+ 'csv_encoding'=>'utf8'
+ );
$cn = new Database();
$Sql = "update user_global_pref set parameter_value=$1
where parameter_type=$2 and
diff --git a/include/export/export_histo_csv.php
b/include/export/export_histo_csv.php
index 4e954f4..847ceae 100644
--- a/include/export/export_histo_csv.php
+++ b/include/export/export_histo_csv.php
@@ -24,8 +24,9 @@
*/
if ( ! defined ('ALLOWED') ) die('Appel direct ne sont pas permis');
require_once NOALYSS_INCLUDE.'/lib/noalyss_csv.class.php';
+require_once NOALYSS_INCLUDE.'/class/acc_ledger_search.class.php';
-$ledger=new Acc_Ledger($cn,0);
+$ledger=new Acc_Ledger_Search($cn,0);
list($sql,$where)=$ledger->build_search_sql($_GET);
$order=" order by jr_date_order asc,substring(jr_pj_number,'[0-9]+$')::numeric
asc ";
diff --git a/include/lib/database.class.php b/include/lib/database.class.php
index 0351995..393b6dc 100644
--- a/include/lib/database.class.php
+++ b/include/lib/database.class.php
@@ -1085,32 +1085,31 @@ class Database
*/
function query_to_csv($ret, $aheader)
{
- $seq="";
+ $csv=new Noalyss_Csv("db-query");
+ $a_header=[];
for ($i=0; $i<count($aheader); $i++)
{
- echo $seq.'"'.$aheader[$i]['title'].'"';
- $seq=";";
+ $a_header[]=$aheader[$i]['title'];
}
- printf("\n\r");
+ $csv->write_header($a_header);
+
// fetch all the rows
for ($i=0; $i<Database::num_row($ret); $i++)
{
$row=Database::fetch_array($ret, $i);
- $sep2="";
// for each rows, for each value
for ($e=0; $e<count($row)/2; $e++)
{
switch ($aheader[$e]['type'])
{
case 'num':
- echo $sep2.nb($row[$e]);
+ $csv->add($row[$e],"number");
break;
default:
- echo $sep2.'"'.$row[$e].'"';
+ $csv->add($row[$e]);
}
- $sep2=";";
}
- printf("\n\r");
+ $csv->write();
}
}
/**
diff --git a/include/lib/noalyss_csv.class.php
b/include/lib/noalyss_csv.class.php
index 86bf593..11df760 100644
--- a/include/lib/noalyss_csv.class.php
+++ b/include/lib/noalyss_csv.class.php
@@ -35,12 +35,22 @@ class Noalyss_Csv
private $filename;
private $element;
+ private $sep_field;
+ private $sep_dec;
+ private $encoding;
function __construct($p_filename)
{
$this->filename=$p_filename;
$this->element=array();
$this->size=0;
+
+ $a_field=[';',','];
+ $this->sep_field=$a_field[$_SESSION['csv_fieldsep']];
+ $a_field=['.',','];
+ $this->sep_dec=$a_field[$_SESSION['csv_decimal']];
+ $this->encoding=$_SESSION['csv_encoding'];
+
}
/***
@@ -91,8 +101,9 @@ class Noalyss_Csv
$sep="";
for ($i=0; $i<$size_array; $i++)
{
- printf($sep.'"%s"', $p_array[$i]);
- $sep=";";
+
+ printf($sep.'"%s"', $this->encode($p_array[$i]));
+ $sep=$this->sep_field;
}
printf("\r\n");
}
@@ -127,7 +138,7 @@ class Noalyss_Csv
{
if ($this->element[$i]['type'] == 'number' )
{
- printf($sep.'%s', nb($this->element[$i]['value']));
+ printf($sep.'%s', $this->nb($this->element[$i]['value']));
}
else
{
@@ -136,9 +147,9 @@ class Noalyss_Csv
$export=str_replace("\r"," ", $export);
// remove double quote
$export=str_replace('"',"", $export);
- printf($sep.'"%s"', $export);
+ printf($sep.'"%s"', $this->encode($export));
}
- $sep=";";
+ $sep=$this->sep_field;
}
printf("\r\n");
$this->clean();
@@ -151,5 +162,23 @@ class Noalyss_Csv
$this->element=array();
$this->size=0;
}
+ /**
+ * format the number for the CSV export
+ * @param $p_number number
+ */
+ private function nb($p_number)
+ {
+ $p_number=trim($p_number);
+ if ($p_number=="") {return $p_number;}
+ $r=number_format($p_number, 4, $this->sep_dec,'');
+ return $r;
+ }
+ private function encode($str)
+ {
+ if ($this->encoding=="utf8") return $str;
+ if ($this->encoding=="latin1") return utf8_decode ($str);
+ throw new Exception(_("Encodage invalide"));
+ }
+
}
- [Noalyss-commit] [noalyss] 53/323: Bug : search cannot select ledger, (continued)
- [Noalyss-commit] [noalyss] 53/323: Bug : search cannot select ledger, Dany De Bontridder, 2018/03/14
- [Noalyss-commit] [noalyss] 47/323: Task #0001519: Assouplissement de la sécurité : Administrateur accès à tout, ajout d'utilisateur par défaut securité désactivée, Dany De Bontridder, 2018/03/14
- [Noalyss-commit] [noalyss] 72/323: typo, Dany De Bontridder, 2018/03/14
- [Noalyss-commit] [noalyss] 64/323: th.num align right, Dany De Bontridder, 2018/03/14
- [Noalyss-commit] [noalyss] 55/323: Task #1457 & 1281 : export PDF with opening writing, Dany De Bontridder, 2018/03/14
- [Noalyss-commit] [noalyss] 54/323: Task #1326 & #1512 = ajout détail extourne, libellé directement après ajout opération, Dany De Bontridder, 2018/03/14
- [Noalyss-commit] [noalyss] 57/323: Task #0001527: Effacement du champ code fiche : bouton , indent, Dany De Bontridder, 2018/03/14
- [Noalyss-commit] [noalyss] 63/323: Task #0001529: Icon_Action missing, Dany De Bontridder, 2018/03/14
- [Noalyss-commit] [noalyss] 62/323: Merge branch 'master' of ssh://ns3/srv/git/noalyss, Dany De Bontridder, 2018/03/14
- [Noalyss-commit] [noalyss] 66/323: Database : add function is_prepare() to check if pg_prepare has already run, Dany De Bontridder, 2018/03/14
- [Noalyss-commit] [noalyss] 48/323: Task #1520 : Préférence : pouvoir changer les préférence pour les exports CSV,
Dany De Bontridder <=
- [Noalyss-commit] [noalyss] 59/323: Task #0001529: Réécriture de code , placer les icones dans Icon_Action, Dany De Bontridder, 2018/03/14
- [Noalyss-commit] [noalyss] 45/323: Task #0001519: Assouplissement de la sécurité : journaux et actions, Dany De Bontridder, 2018/03/14
- [Noalyss-commit] [noalyss] 77/323: Small bug in clean card, Dany De Bontridder, 2018/03/14
- [Noalyss-commit] [noalyss] 69/323: Task #0001530: Réécriture PRINTJRN : export PDF, Dany De Bontridder, 2018/03/14
- [Noalyss-commit] [noalyss] 80/323: before deleting a card , check if it is not used as an attribute in another card, Dany De Bontridder, 2018/03/14
- [Noalyss-commit] [noalyss] 78/323: esthetic, Dany De Bontridder, 2018/03/14
- [Noalyss-commit] [noalyss] 70/323: Task #0001530: Réécriture PRINTJRN : export CSV : Purchase List (L), Dany De Bontridder, 2018/03/14
- [Noalyss-commit] [noalyss] 73/323: Missing import of icon_action, Dany De Bontridder, 2018/03/14
- [Noalyss-commit] [noalyss] 75/323: Merge branch 'rewrite-printjrn', Dany De Bontridder, 2018/03/14
- [Noalyss-commit] [noalyss] 76/323: Small bug in save_card, Dany De Bontridder, 2018/03/14