From 9f889b043981b7dfe6af148830c8032c703ec3da Mon Sep 17 00:00:00 2001
From: Laurent Destailleur <eldy@destailleur.fr>
Date: Wed, 30 Nov 2011 12:28:01 +0100
Subject: [PATCH] Qual: Uniformize code for document generation of shipments.
 Prepare usage of odt templates.

---
 htdocs/admin/expedition.php                   |  4 +-
 htdocs/core/class/html.formfile.class.php     |  2 +-
 .../ModelePdfExpedition.class.php             | 85 ++++++++++---------
 .../pdf_expedition_merou.modules.php          |  4 +-
 .../pdf_expedition_rouget.modules.php         |  4 +-
 htdocs/install/upgrade2.php                   |  2 +-
 test/phpunit/BuildDocTest.php                 |  6 +-
 7 files changed, 57 insertions(+), 50 deletions(-)
 rename htdocs/core/modules/expedition/{pdf => doc}/ModelePdfExpedition.class.php (65%)
 rename htdocs/core/modules/expedition/{pdf => doc}/pdf_expedition_merou.modules.php (99%)
 rename htdocs/core/modules/expedition/{pdf => doc}/pdf_expedition_rouget.modules.php (99%)

diff --git a/htdocs/admin/expedition.php b/htdocs/admin/expedition.php
index 2719ef96b6d..217b920b8c3 100644
--- a/htdocs/admin/expedition.php
+++ b/htdocs/admin/expedition.php
@@ -58,7 +58,7 @@ if ($action == 'specimen')
 	//$exp->fetch_commande();
 
 	// Charge le modele
-	$dir = DOL_DOCUMENT_ROOT . "/core/modules/expedition/pdf/";
+	$dir = DOL_DOCUMENT_ROOT . "/core/modules/expedition/doc/";
 	$file = "pdf_expedition_".$modele.".modules.php";
 	if (file_exists($dir.$file))
 	{
@@ -483,7 +483,7 @@ clearstatcache();
 
 foreach ($conf->file->dol_document_root as $dirroot)
 {
-	$dir = $dirroot . "/core/modules/expedition/pdf/";
+	$dir = $dirroot . "/core/modules/expedition/doc/";
 
 	if (is_dir($dir))
 	{
diff --git a/htdocs/core/class/html.formfile.class.php b/htdocs/core/class/html.formfile.class.php
index 52c68848b15..2b9e28c07a9 100644
--- a/htdocs/core/class/html.formfile.class.php
+++ b/htdocs/core/class/html.formfile.class.php
@@ -247,7 +247,7 @@ class FormFile
                 if (is_array($genallowed)) $modellist=$genallowed;
                 else
                 {
-                    include_once(DOL_DOCUMENT_ROOT.'/core/modules/expedition/pdf/ModelePdfExpedition.class.php');
+                    include_once(DOL_DOCUMENT_ROOT.'/core/modules/expedition/doc/ModelePdfExpedition.class.php');
                     $modellist=ModelePDFExpedition::liste_modeles($this->db);
                 }
             }
diff --git a/htdocs/core/modules/expedition/pdf/ModelePdfExpedition.class.php b/htdocs/core/modules/expedition/doc/ModelePdfExpedition.class.php
similarity index 65%
rename from htdocs/core/modules/expedition/pdf/ModelePdfExpedition.class.php
rename to htdocs/core/modules/expedition/doc/ModelePdfExpedition.class.php
index 2ba0f1883b8..8b6fea4ae37 100644
--- a/htdocs/core/modules/expedition/pdf/ModelePdfExpedition.class.php
+++ b/htdocs/core/modules/expedition/doc/ModelePdfExpedition.class.php
@@ -19,7 +19,7 @@
  */
 
 /**
- *  \file       htdocs/core/modules/expedition/pdf/ModelePdfExpedition.class.php
+ *  \file       htdocs/core/modules/expedition/doc/ModelePdfExpedition.class.php
  *  \ingroup    shipping
  *  \brief      Fichier contenant la classe mere de generation des expeditions
  */
@@ -65,46 +65,60 @@ abstract class ModelePdfExpedition extends CommonDocGenerator
 function expedition_pdf_create($db, $object, $modele, $outputlangs)
 {
 	global $conf,$langs;
-	$langs->load("sendings");
 
-	$dir = "/core/modules/expedition/pdf/";
-	$modelisok=0;
+	$langs->load("sendings");
 
-	// Positionne modele sur le nom du modele de commande a utiliser
-	$file = "pdf_expedition_".$modele.".modules.php";
+	// Increase limit for PDF build
+	$err=error_reporting();
+	error_reporting(0);
+	@set_time_limit(120);
+	error_reporting($err);
 
-	// On verifie l'emplacement du modele
-	$file = dol_buildpath($dir.$file);
+	$dir = "/core/modules/expedition/";
+	$srctemplatepath='';
 
-	if ($modele && file_exists($file)) $modelisok=1;
+	// Positionne le modele sur le nom du modele a utiliser
+	if (! dol_strlen($modele))
+	{
+	    if (! empty($conf->global->EXPEDITION_ADDON_PDF))
+	    {
+	        $modele = $conf->global->EXPEDITION_ADDON_PDF;
+	    }
+	    else
+	    {
+	        $modele = 'rouget';
+	    }
+	}
 
-    // Si model pas encore bon
-	if (! $modelisok)
+	// If selected modele is a filename template (then $modele="modelname:filename")
+	$tmp=explode(':',$modele,2);
+	if (! empty($tmp[1]))
 	{
-		if ($conf->global->EXPEDITION_ADDON_PDF) $modele = $conf->global->EXPEDITION_ADDON_PDF;
-      	$file = "pdf_expedition_".$modele.".modules.php";
-      	// On verifie l'emplacement du modele
-		$file = dol_buildpath($dir.$file);
-    	if (file_exists($file)) $modelisok=1;
-    }
+	    $modele=$tmp[0];
+	    $srctemplatepath=$tmp[1];
+	}
 
-    // Si model pas encore bon
-	if (! $modelisok)
+	// Search template file
+	$file=''; $classname=''; $filefound=0;
+	foreach(array('doc','pdf') as $prefix)
 	{
-		$liste=ModelePDFExpedition::liste_modeles($db);
-        $modele=key($liste);        // Renvoie premiere valeur de cle trouve dans le tableau
-      	$file = "pdf_expedition_".$modele.".modules.php";
-      	// On verifie l'emplacement du modele
-		$file = dol_buildpath($dir.$file);
-    	if (file_exists($file)) $modelisok=1;
+	    $file = $prefix."_expedition_".$modele.".modules.php";
+
+	    // On verifie l'emplacement du modele
+	    $file = dol_buildpath($dir.'doc/'.$file);
+
+	    if (file_exists($file))
+	    {
+	        $filefound=1;
+	        $classname=$prefix.'_expedition_'.$modele;
+	        break;
+	    }
 	}
 
 	// Charge le modele
-    if ($modelisok)
+	if ($filefound)
 	{
-	    dol_syslog("expedition_pdf_create ".$modele);
-		$classname = "pdf_expedition_".$modele;
-		require_once($file);
+	    require_once($file);
 
 		$obj = new $classname($db);
 
@@ -132,16 +146,9 @@ function expedition_pdf_create($db, $object, $modele, $outputlangs)
 	}
 	else
 	{
-        if (! $conf->global->EXPEDITION_ADDON_PDF)
-        {
-			print $langs->trans("Error")." ".$langs->trans("Error_EXPEDITION_ADDON_PDF_NotDefined");
-        }
-        else
-        {
-    		print $langs->trans("Error")." ".$langs->trans("ErrorFileDoesNotExists",$dir.$file);
-        }
-		return 0;
-   }
+		dol_print_error('',$langs->trans("Error")." ".$langs->trans("ErrorFileDoesNotExists",$dir.$file));
+		return -1;
+    }
 }
 
 ?>
diff --git a/htdocs/core/modules/expedition/pdf/pdf_expedition_merou.modules.php b/htdocs/core/modules/expedition/doc/pdf_expedition_merou.modules.php
similarity index 99%
rename from htdocs/core/modules/expedition/pdf/pdf_expedition_merou.modules.php
rename to htdocs/core/modules/expedition/doc/pdf_expedition_merou.modules.php
index c7159277e89..9d14713d57a 100644
--- a/htdocs/core/modules/expedition/pdf/pdf_expedition_merou.modules.php
+++ b/htdocs/core/modules/expedition/doc/pdf_expedition_merou.modules.php
@@ -19,12 +19,12 @@
  */
 
 /**
- *	\file       htdocs/core/modules/expedition/pdf/pdf_expedition_merou.modules.php
+ *	\file       htdocs/core/modules/expedition/doc/pdf_expedition_merou.modules.php
  *	\ingroup    expedition
  *	\brief      Fichier de la classe permettant de generer les bordereaux envoi au modele Merou
  */
 
-require_once DOL_DOCUMENT_ROOT."/core/modules/expedition/pdf/ModelePdfExpedition.class.php";
+require_once DOL_DOCUMENT_ROOT."/core/modules/expedition/doc/ModelePdfExpedition.class.php";
 require_once DOL_DOCUMENT_ROOT."/contact/class/contact.class.php";
 require_once(DOL_DOCUMENT_ROOT."/core/lib/company.lib.php");
 require_once(DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php');
diff --git a/htdocs/core/modules/expedition/pdf/pdf_expedition_rouget.modules.php b/htdocs/core/modules/expedition/doc/pdf_expedition_rouget.modules.php
similarity index 99%
rename from htdocs/core/modules/expedition/pdf/pdf_expedition_rouget.modules.php
rename to htdocs/core/modules/expedition/doc/pdf_expedition_rouget.modules.php
index 85de36612cb..cc4e3c716e8 100644
--- a/htdocs/core/modules/expedition/pdf/pdf_expedition_rouget.modules.php
+++ b/htdocs/core/modules/expedition/doc/pdf_expedition_rouget.modules.php
@@ -19,12 +19,12 @@
  */
 
 /**
- *	\file       htdocs/core/modules/expedition/pdf/pdf_expedition_rouget.modules.php
+ *	\file       htdocs/core/modules/expedition/doc/pdf_expedition_rouget.modules.php
  *	\ingroup    expedition
  *	\brief      Fichier de la classe permettant de generer les bordereaux envoi au modele Rouget
  */
 
-require_once DOL_DOCUMENT_ROOT."/core/modules/expedition/pdf/ModelePdfExpedition.class.php";
+require_once DOL_DOCUMENT_ROOT."/core/modules/expedition/doc/ModelePdfExpedition.class.php";
 require_once(DOL_DOCUMENT_ROOT."/core/lib/company.lib.php");
 require_once(DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php');
 
diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php
index 4571d8bdd6b..820a8921a6c 100644
--- a/htdocs/install/upgrade2.php
+++ b/htdocs/install/upgrade2.php
@@ -1754,7 +1754,7 @@ function migrate_modeles($db,$langs,$conf)
 
     if (! empty($conf->expedition->enabled))
     {
-        include_once(DOL_DOCUMENT_ROOT.'/core/modules/expedition/pdf/ModelePdfExpedition.class.php');
+        include_once(DOL_DOCUMENT_ROOT.'/core/modules/expedition/doc/ModelePdfExpedition.class.php');
         $modellist=ModelePDFExpedition::liste_modeles($db);
         if (count($modellist)==0)
         {
diff --git a/test/phpunit/BuildDocTest.php b/test/phpunit/BuildDocTest.php
index c1b05121447..10857fa5e0f 100644
--- a/test/phpunit/BuildDocTest.php
+++ b/test/phpunit/BuildDocTest.php
@@ -43,15 +43,15 @@ require_once dirname(__FILE__).'/../../htdocs/core/modules/propale/pdf_propale_a
 require_once dirname(__FILE__).'/../../htdocs/core/modules/propale/pdf_propale_jaune.modules.php';
 require_once dirname(__FILE__).'/../../htdocs/core/modules/project/pdf/pdf_baleine.modules.php';
 require_once dirname(__FILE__).'/../../htdocs/core/modules/fichinter/pdf_soleil.modules.php';
-require_once dirname(__FILE__).'/../../htdocs/core/modules/expedition/pdf/pdf_expedition_merou.modules.php';
-require_once dirname(__FILE__).'/../../htdocs/core/modules/expedition/pdf/pdf_expedition_rouget.modules.php';
+require_once dirname(__FILE__).'/../../htdocs/core/modules/expedition/doc/pdf_expedition_merou.modules.php';
+require_once dirname(__FILE__).'/../../htdocs/core/modules/expedition/doc/pdf_expedition_rouget.modules.php';
 // Mother classes of pdf generators
 require_once dirname(__FILE__).'/../../htdocs/core/modules/facture/modules_facture.php';
 require_once dirname(__FILE__).'/../../htdocs/core/modules/commande/modules_commande.php';
 require_once dirname(__FILE__).'/../../htdocs/core/modules/propale/modules_propale.php';
 require_once dirname(__FILE__).'/../../htdocs/core/modules/project/modules_project.php';
 require_once dirname(__FILE__).'/../../htdocs/core/modules/fichinter/modules_fichinter.php';
-require_once dirname(__FILE__).'/../../htdocs/core/modules/expedition/pdf/ModelePdfExpedition.class.php';
+require_once dirname(__FILE__).'/../../htdocs/core/modules/expedition/doc/ModelePdfExpedition.class.php';
 
 if (empty($user->id))
 {
-- 
GitLab