2005-11-19 23:09:12 +01:00
< ? php
2006-01-21 20:08:36 +01:00
/* Copyright ( C ) 2005 - 2006 Laurent Destailleur < eldy @ users . sourceforge . net >
2005-11-19 23:09:12 +01:00
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 59 Temple Place - Suite 330 , Boston , MA 02111 - 1307 , USA .
*
* $Id $
* $Source $
*/
/**
\file htdocs / exports / export . class . php
2006-01-22 17:14:33 +01:00
\ingroup export
2005-11-19 23:09:12 +01:00
\brief Fichier de la classe des exports
\version $Revision $
*/
/**
\class Export
\brief Classe permettant la gestion des exports
*/
class Export
{
2006-01-21 20:08:36 +01:00
var $array_export_code = array (); // Tableau de "idmodule_numlot"
var $array_export_module = array (); // Tableau de "nom de modules"
var $array_export_label = array (); // Tableau de "libell<6C> de lots"
2006-01-22 17:14:33 +01:00
var $array_export_sql = array (); // Tableau des "requetes sql"
var $array_export_fields = array (); // Tableau des liste de champ+libell<6C> <20> exporter
var $array_export_alias = array (); // Tableau des liste de champ+alias <20> exporter
2005-11-19 23:09:12 +01:00
/**
* \brief Constructeur de la classe
* \param DB Handler acc<EFBFBD> s base de donn<EFBFBD> es
*/
function Export ( $DB )
{
$this -> db = $DB ;
}
/**
* \brief Charge les lots de donn<EFBFBD> es exportables
* \param user Objet utilisateur qui exporte
* \param filter Code export pour charger un lot de donn<EFBFBD> es particulier
*/
2005-12-03 05:25:10 +01:00
function load_arrays ( $user , $filter = '' )
2005-11-19 23:09:12 +01:00
{
2006-01-22 17:14:33 +01:00
global $langs ;
2005-11-19 23:09:12 +01:00
dolibarr_syslog ( " Export::load_arrays user= $user filter= $filter " );
$dir = DOL_DOCUMENT_ROOT . " /includes/modules " ;
$handle = opendir ( $dir );
// Recherche des exports disponibles
$var = True ;
$i = 0 ;
while (( $file = readdir ( $handle )) !== false )
{
2006-01-09 20:58:46 +01:00
if ( eregi ( " ^(mod.*) \ .class \ .php " , $file , $reg ))
2005-11-19 23:09:12 +01:00
{
2006-01-09 20:58:46 +01:00
$modulename = $reg [ 1 ];
// Chargement de la classe
$file = $dir . " / " . $modulename . " .class.php " ;
$classname = $modulename ;
require_once ( $file );
$module = new $classname ( $db );
if ( is_array ( $module -> export_code ))
2005-11-19 23:09:12 +01:00
{
2006-01-09 20:58:46 +01:00
foreach ( $module -> export_code as $r => $value )
2005-11-19 23:09:12 +01:00
{
2006-01-09 20:58:46 +01:00
if ( $filter && ( $filter != $module -> export_code [ $r ])) continue ;
// Test si permissions ok \todo tester sur toutes permissions
$perm = $module -> export_permission [ $r ][ 0 ];
//print_r("$perm[0]-$perm[1]-$perm[2]<br>");
if ( $perm [ 2 ])
{
$bool = $user -> rights -> $perm [ 0 ] -> $perm [ 1 ] -> $perm [ 2 ];
}
else
{
$bool = $user -> rights -> $perm [ 0 ] -> $perm [ 1 ];
}
2006-01-09 21:19:19 +01:00
if ( $perm [ 0 ] == 'user' && $user -> admin ) $bool = true ;
2006-01-09 20:58:46 +01:00
//print("$bool<br>");
// Permissions ok
if ( $bool )
2005-11-19 23:09:12 +01:00
{
2006-01-22 19:31:56 +01:00
// Charge fichier lang en rapport
$langtoload = $module -> getLangFilesArray ();
if ( is_array ( $langtoload ))
{
foreach ( $langtoload as $key )
{
$langs -> load ( $key );
}
}
2006-01-09 20:58:46 +01:00
// Nom module
$this -> array_export_module [ $i ] = $module ;
// Code du dataset export
$this -> array_export_code [ $i ] = $module -> export_code [ $r ];
// Libell<6C> du dataset export
2006-01-22 19:31:56 +01:00
$this -> array_export_label [ $i ] = $module -> getDatasetLabel ( $r );
2006-01-09 20:58:46 +01:00
// Requete sql du dataset
$this -> array_export_sql [ $i ] = $module -> export_sql [ $r ];
2006-01-22 17:14:33 +01:00
// Tableau des champ <20> exporter (cl<63> =champ, valeur=libell<6C> )
$this -> array_export_fields [ $i ] = $module -> export_fields_array [ $r ];
2006-02-25 15:26:29 +01:00
// Tableau des entites <20> exporter (cl<63> =champ, valeur=entite)
$this -> array_export_entities [ $i ] = $module -> export_entities_array [ $r ];
2006-01-22 17:14:33 +01:00
// Tableau des alias <20> exporter (cl<63> =champ, valeur=alias)
$this -> array_export_alias [ $i ] = $module -> export_alias_array [ $r ];
2006-01-08 18:08:20 +01:00
2006-01-09 20:58:46 +01:00
dolibarr_syslog ( " Export charg<72> pour le module " . $modulename . " en index " . $i . " , dataset= " . $module -> export_code [ $r ] . " , nbre de champs= " . sizeof ( $module -> export_fields_code [ $r ]));
$i ++ ;
}
}
2005-11-19 23:09:12 +01:00
}
}
}
closedir ( $handle );
}
2006-01-21 20:08:36 +01:00
/**
* \brief Lance la generation du fichier
* \param user User qui exporte
* \param model Modele d ' export
* \param datatoexport Lot de donn<EFBFBD> e <EFBFBD> exporter
* \param array_selected Tableau des champs <EFBFBD> exporter
* \remarks Les tableaux array_export_xxx sont d<EFBFBD> j<EFBFBD> charg<EFBFBD> es pour le bon datatoexport
* aussi le parametre datatoexport est inutilis<EFBFBD>
*/
function build_file ( $user , $model , $datatoexport , $array_selected )
{
global $conf , $langs ;
$indice = 0 ;
2006-01-22 17:14:33 +01:00
asort ( $array_selected );
2006-01-21 20:08:36 +01:00
dolibarr_syslog ( " Export::build_file $model , $datatoexport , $array_selected " );
// Creation de la classe d'export du model ExportXXX
$dir = DOL_DOCUMENT_ROOT . " /includes/modules/export/ " ;
$file = " export_ " . $model . " .modules.php " ;
$classname = " Export " . $model ;
require_once ( $dir . $file );
2006-01-22 17:14:33 +01:00
$objmodel = new $classname ( $db );
2006-01-21 20:08:36 +01:00
// Execute requete export
$sql = $this -> array_export_sql [ $indice ];
$resql = $this -> db -> query ( $sql );
if ( $resql )
{
//$this->array_export_label[$indice]
2006-01-22 19:31:56 +01:00
$filename = " export_ " . $datatoexport ;
2006-01-22 17:14:33 +01:00
$filename .= '.' . $objmodel -> getDriverExtension ();
$dirname = $conf -> export -> dir_ouput . '/' . $user -> id ;
2006-01-21 20:08:36 +01:00
// Open file
create_exdir ( $dirname );
2006-01-22 17:14:33 +01:00
$objmodel -> open_file ( $dirname . " / " . $filename );
2006-01-21 20:08:36 +01:00
// Genere en-tete
2006-01-22 17:14:33 +01:00
$objmodel -> write_header ( $langs );
2006-01-21 20:08:36 +01:00
// Genere ligne de titre
2006-01-22 17:14:33 +01:00
$objmodel -> write_title ( $this -> array_export_fields [ $indice ], $array_selected , $langs );
2006-01-21 20:08:36 +01:00
while ( $objp = $this -> db -> fetch_object ( $resql ))
{
$var =! $var ;
2006-01-22 17:14:33 +01:00
$objmodel -> write_record ( $this -> array_export_alias [ $indice ], $array_selected , $objp );
2006-01-21 20:08:36 +01:00
}
// Genere en-tete
2006-01-22 17:14:33 +01:00
$objmodel -> write_footer ( $langs );
2006-01-21 20:08:36 +01:00
// Close file
2006-01-22 17:14:33 +01:00
$objmodel -> close_file ();
2006-01-21 20:08:36 +01:00
}
else
{
2006-01-22 17:14:33 +01:00
$this -> error = $this -> db -> error () . " - sql= " . $sql ;
dolibarr_syslog ( " Error: " . $this -> error );
2006-01-21 20:08:36 +01:00
return - 1 ;
}
}
2005-11-19 23:09:12 +01:00
}
?>