From d6a4d5ef4185358bc17ed476b5c19917206e7456 Mon Sep 17 00:00:00 2001 From: Regis Houssin <regis@dolibarr.fr> Date: Wed, 1 Aug 2012 14:42:24 +0200 Subject: [PATCH] Fix: avoid errors if install directory is deleted before module activation --- htdocs/core/modules/modCommande.class.php | 29 +++++++++++++---------- htdocs/core/modules/modFacture.class.php | 28 +++++++++++++--------- htdocs/core/modules/modPropale.class.php | 27 ++++++++++++--------- htdocs/core/modules/modSociete.class.php | 22 ++++++++++------- htdocs/install/etape1.php | 22 +++++++++++++++++ 5 files changed, 86 insertions(+), 42 deletions(-) diff --git a/htdocs/core/modules/modCommande.class.php b/htdocs/core/modules/modCommande.class.php index 342f0d92480..45dd5de80a1 100644 --- a/htdocs/core/modules/modCommande.class.php +++ b/htdocs/core/modules/modCommande.class.php @@ -4,7 +4,7 @@ * Copyright (C) 2004 Sebastien Di Cintio <sdicintio@ressource-toi.org> * Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be> * Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com> - * Copyright (C) 2005-2011 Regis Houssin <regis@dolibarr.fr> + * Copyright (C) 2005-2012 Regis Houssin <regis@dolibarr.fr> * Copyright (C) 2012 Juanjo Menent <jmenent@2byte.es> * * This program is free software; you can redistribute it and/or modify @@ -201,22 +201,27 @@ class modCommande extends DolibarrModules $this->remove($options); //ODT template - require_once(DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'); + $src=DOL_DOCUMENT_ROOT.'/install/doctemplates/orders/template_order.odt'; $dirodt=DOL_DATA_ROOT.'/doctemplates/orders'; - dol_mkdir($dirodt); - $src=DOL_DOCUMENT_ROOT.'/install/doctemplates/orders/template_order.odt'; $dest=$dirodt.'/template_order.odt'; - $result=dol_copy($src,$dest,0,0); - if ($result < 0) + $dest=$dirodt.'/template_order.odt'; + + if (file_exists($src) && ! file_exists($dest)) { - $langs->load("errors"); - $this->error=$langs->trans('ErrorFailToCopyFile',$src,$dest); - return 0; + require_once(DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'); + dol_mkdir($dirodt); + $result=dol_copy($src,$dest,0,0); + if ($result < 0) + { + $langs->load("errors"); + $this->error=$langs->trans('ErrorFailToCopyFile',$src,$dest); + return 0; + } } $sql = array( - "DELETE FROM ".MAIN_DB_PREFIX."document_model WHERE nom = '".$this->const[0][2]."' AND entity = ".$conf->entity, - "INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity) VALUES('".$this->const[0][2]."','order',".$conf->entity.")" - ); + "DELETE FROM ".MAIN_DB_PREFIX."document_model WHERE nom = '".$this->const[0][2]."' AND entity = ".$conf->entity, + "INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity) VALUES('".$this->const[0][2]."','order',".$conf->entity.")" + ); return $this->_init($sql,$options); } diff --git a/htdocs/core/modules/modFacture.class.php b/htdocs/core/modules/modFacture.class.php index e072907f403..817b7c0fff2 100644 --- a/htdocs/core/modules/modFacture.class.php +++ b/htdocs/core/modules/modFacture.class.php @@ -3,7 +3,7 @@ * Copyright (C) 2004-2010 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2004 Sebastien Di Cintio <sdicintio@ressource-toi.org> * Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be> - * Copyright (C) 2005-2011 Regis Houssin <regis@dolibarr.fr> + * Copyright (C) 2005-2012 Regis Houssin <regis@dolibarr.fr> * * 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 @@ -223,21 +223,27 @@ class modFacture extends DolibarrModules // Remove permissions and default values $this->remove($options); - require_once(DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'); + //ODT template + $src=DOL_DOCUMENT_ROOT.'/install/doctemplates/invoices/template_invoice.odt'; $dirodt=DOL_DATA_ROOT.'/doctemplates/invoices'; - dol_mkdir($dirodt); - $src=DOL_DOCUMENT_ROOT.'/install/doctemplates/invoices/template_invoice.odt'; $dest=$dirodt.'/template_invoice.odt'; - $result=dol_copy($src,$dest,0,0); - if ($result < 0) + $dest=$dirodt.'/template_invoice.odt'; + + if (file_exists($src) && ! file_exists($dest)) { - $langs->load("errors"); - $this->error=$langs->trans('ErrorFailToCopyFile',$src,$dest); - return 0; + require_once(DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'); + dol_mkdir($dirodt); + $result=dol_copy($src,$dest,0,0); + if ($result < 0) + { + $langs->load("errors"); + $this->error=$langs->trans('ErrorFailToCopyFile',$src,$dest); + return 0; + } } $sql = array( - "DELETE FROM ".MAIN_DB_PREFIX."document_model WHERE nom = '".$this->const[0][2]."' AND entity = ".$conf->entity, - "INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity) VALUES('".$this->const[0][2]."','invoice',".$conf->entity.")" + "DELETE FROM ".MAIN_DB_PREFIX."document_model WHERE nom = '".$this->const[0][2]."' AND entity = ".$conf->entity, + "INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity) VALUES('".$this->const[0][2]."','invoice',".$conf->entity.")" ); return $this->_init($sql,$options); diff --git a/htdocs/core/modules/modPropale.class.php b/htdocs/core/modules/modPropale.class.php index 9594418d487..7c140968dd0 100644 --- a/htdocs/core/modules/modPropale.class.php +++ b/htdocs/core/modules/modPropale.class.php @@ -3,7 +3,7 @@ * Copyright (C) 2004-2010 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2004 Sebastien Di Cintio <sdicintio@ressource-toi.org> * Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be> - * Copyright (C) 2005-2011 Regis Houssin <regis@dolibarr.fr> + * Copyright (C) 2005-2012 Regis Houssin <regis@dolibarr.fr> * Copyright (C) 2012 Juanjo Menentr <jmenent@2byte.es> * * This program is free software; you can redistribute it and/or modify @@ -199,21 +199,26 @@ class modPropale extends DolibarrModules $this->remove($options); //ODT template - require_once(DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'); + $src=DOL_DOCUMENT_ROOT.'/install/doctemplates/proposals/template_proposal.odt'; $dirodt=DOL_DATA_ROOT.'/doctemplates/proposals'; - dol_mkdir($dirodt); - $src=DOL_DOCUMENT_ROOT.'/install/doctemplates/proposals/template_proposal.odt'; $dest=$dirodt.'/template_proposal.odt'; - $result=dol_copy($src,$dest,0,0); - if ($result < 0) + $dest=$dirodt.'/template_proposal.odt'; + + if (file_exists($src) && ! file_exists($dest)) { - $langs->load("errors"); - $this->error=$langs->trans('ErrorFailToCopyFile',$src,$dest); - return 0; + require_once(DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'); + dol_mkdir($dirodt); + $result=dol_copy($src,$dest,0,0); + if ($result < 0) + { + $langs->load("errors"); + $this->error=$langs->trans('ErrorFailToCopyFile',$src,$dest); + return 0; + } } $sql = array( - "DELETE FROM ".MAIN_DB_PREFIX."document_model WHERE nom = '".$this->const[0][2]."' AND entity = ".$conf->entity, - "INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity) VALUES('".$this->const[0][2]."','propal',".$conf->entity.")", + "DELETE FROM ".MAIN_DB_PREFIX."document_model WHERE nom = '".$this->const[0][2]."' AND entity = ".$conf->entity, + "INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity) VALUES('".$this->const[0][2]."','propal',".$conf->entity.")", ); return $this->_init($sql,$options); diff --git a/htdocs/core/modules/modSociete.class.php b/htdocs/core/modules/modSociete.class.php index 040e82fa668..73cd9bb303b 100644 --- a/htdocs/core/modules/modSociete.class.php +++ b/htdocs/core/modules/modSociete.class.php @@ -368,16 +368,22 @@ class modSociete extends DolibarrModules // We disable this to prevent pb of modules not correctly disabled //$this->remove($options); - require_once(DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'); + //ODT template + $src=DOL_DOCUMENT_ROOT.'/install/doctemplates/thirdparties/template_thirdparty.odt'; $dirodt=DOL_DATA_ROOT.'/doctemplates/thirdparties'; - dol_mkdir($dirodt); - $src=DOL_DOCUMENT_ROOT.'/install/doctemplates/thirdparties/template_thirdparty.odt'; $dest=$dirodt.'/template_thirdparty.odt'; - $result=dol_copy($src,$dest,0,0); - if ($result < 0) + $dest=$dirodt.'/template_thirdparty.odt'; + + if (file_exists($src) && ! file_exists($dest)) { - $langs->load("errors"); - $this->error=$langs->trans('ErrorFailToCopyFile',$src,$dest); - return 0; + require_once(DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'); + dol_mkdir($dirodt); + $result=dol_copy($src,$dest,0,0); + if ($result < 0) + { + $langs->load("errors"); + $this->error=$langs->trans('ErrorFailToCopyFile',$src,$dest); + return 0; + } } $sql = array(); diff --git a/htdocs/install/etape1.php b/htdocs/install/etape1.php index 93af8facadd..f1383f3c13f 100644 --- a/htdocs/install/etape1.php +++ b/htdocs/install/etape1.php @@ -337,6 +337,7 @@ if (! $error && $db->connected && $action == "set") $dir[4] = $main_data_dir."/propale"; $dir[5] = $main_data_dir."/ficheinter"; $dir[6] = $main_data_dir."/produit"; + $dir[7] = $main_data_dir."/doctemplates"; // Boucle sur chaque repertoire de dir[] pour les creer s'ils nexistent pas $num=count($dir); @@ -372,6 +373,27 @@ if (! $error && $db->connected && $action == "set") print "</td></tr>"; print '<tr><td colspan="2"><br>'.$langs->trans("CorrectProblemAndReloadPage",$_SERVER['PHP_SELF'].'?testget=ok').'</td></tr>'; } + else + { + //ODT templates + require_once(DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'); + $srcroot='./doctemplates'; + $destroot=$main_data_dir.'/doctemplates'; + $docs=array('thirdparties' => 'thirdparty', 'proposals' => 'proposal', 'orders' => 'order', 'invoices' => 'invoice'); + foreach($docs as $dir => $file) + { + $src=$srcroot.'/thirdparties/template_'.$file.'.odt'; + $dirodt=$destroot.'/'.$dir; + $dest=$dirodt.'/template_'.$file.'.odt'; + + dol_mkdir($dirodt); + $result=dol_copy($src,$dest,0,0); + if ($result < 0) + { + print '<tr><td colspan="2"><br>'.$langs->trans('ErrorFailToCopyFile',$src,$dest).'</td></tr>'; + } + } + } } } -- GitLab