From 5a21d90411989788293b72737cf9c63edbc640ff Mon Sep 17 00:00:00 2001
From: Regis Houssin <regis@dolibarr.fr>
Date: Tue, 29 Mar 2011 20:41:57 +0000
Subject: [PATCH] Fix: add function to encrypt/decrypt in sql files

---
 .../install/mysql/migration/3.0.0-3.1.0.sql   |  8 +++---
 htdocs/install/upgrade.php                    |  6 +++++
 htdocs/lib/admin.lib.php                      | 26 +++++++++++++++++++
 3 files changed, 36 insertions(+), 4 deletions(-)

diff --git a/htdocs/install/mysql/migration/3.0.0-3.1.0.sql b/htdocs/install/mysql/migration/3.0.0-3.1.0.sql
index f55b8427ae9..170c9309e0c 100755
--- a/htdocs/install/mysql/migration/3.0.0-3.1.0.sql
+++ b/htdocs/install/mysql/migration/3.0.0-3.1.0.sql
@@ -27,10 +27,10 @@ ALTER TABLE llx_propal MODIFY model_pdf varchar(255);
 
 
 -- Delete old constants
-DELETE FROM llx_const WHERE name = 'MAIN_MENU_BARRETOP';
-DELETE FROM llx_const WHERE name = 'MAIN_MENUFRONT_BARRETOP';
-DELETE FROM llx_const WHERE name = 'MAIN_MENU_BARRELEFT';
-DELETE FROM llx_const WHERE name = 'MAIN_MENUFRONT_BARRELEFT';
+DELETE FROM llx_const WHERE __DECRYPT('name')__ = 'MAIN_MENU_BARRETOP';
+DELETE FROM llx_const WHERE __DECRYPT('name')__ = 'MAIN_MENUFRONT_BARRETOP';
+DELETE FROM llx_const WHERE __DECRYPT('name')__ = 'MAIN_MENU_BARRELEFT';
+DELETE FROM llx_const WHERE __DECRYPT('name')__ = 'MAIN_MENUFRONT_BARRELEFT';
 
 ALTER TABLE llx_facture_fourn ADD COLUMN ref_ext varchar(30) AFTER entity;
 ALTER TABLE llx_commande_fournisseur ADD COLUMN ref_ext varchar(30) AFTER entity;
diff --git a/htdocs/install/upgrade.php b/htdocs/install/upgrade.php
index 389f0b7559a..8bb4055c95d 100644
--- a/htdocs/install/upgrade.php
+++ b/htdocs/install/upgrade.php
@@ -107,6 +107,12 @@ if (! GETPOST("action") || preg_match('/upgrade/i',GETPOST('action')))
 	$conf->db->name = $dolibarr_main_db_name;
 	$conf->db->user = $dolibarr_main_db_user;
 	$conf->db->pass = $dolibarr_main_db_pass;
+	
+	// Load type and crypt key
+	if (empty($dolibarr_main_db_encryption)) $dolibarr_main_db_encryption=0;
+	$conf->db->dolibarr_main_db_encryption = $dolibarr_main_db_encryption;
+	if (empty($dolibarr_main_db_cryptkey)) $dolibarr_main_db_cryptkey='';
+	$conf->db->dolibarr_main_db_cryptkey = $dolibarr_main_db_cryptkey;
 
 	$db = new DoliDb($conf->db->type,$conf->db->host,$conf->db->user,$conf->db->pass,$conf->db->name,$conf->db->port);
 	if ($db->connected == 1)
diff --git a/htdocs/lib/admin.lib.php b/htdocs/lib/admin.lib.php
index 7cff6d202c7..debfbcf04d7 100644
--- a/htdocs/lib/admin.lib.php
+++ b/htdocs/lib/admin.lib.php
@@ -218,6 +218,32 @@ function run_sql($sqlfile,$silent=1,$entity='',$usesavepoint=1,$handler='')
 			// Ajout trace sur requete (eventuellement a commenter si beaucoup de requetes)
 			if (! $silent) print '<tr><td valign="top">'.$langs->trans("Request").' '.($i+1)." sql='".$newsql."'</td></tr>\n";
 			dol_syslog('Admin.lib::run_sql Request '.($i+1).' sql='.$newsql, LOG_DEBUG);
+			
+			// Replace for encrypt data
+			if (preg_match_all('/__ENCRYPT\(\'([^\,]+)\'\)__/i',$newsql,$reg))
+			{
+				$num=count($reg[0]);
+
+				for($i=0;$i<$num;$i++)
+				{
+					$from 	= $reg[0][$i];
+					$to		= $db->encrypt($reg[1][$i],1);
+					$newsql	= str_replace($from,$to,$newsql);
+				}
+			}
+			
+			// Replace for decrypt data
+			if (preg_match_all('/__DECRYPT\(\'([^\,]+)\'\)__/i',$newsql,$reg))
+			{
+				$num=count($reg[0]);
+
+				for($i=0;$i<$num;$i++)
+				{
+					$from 	= $reg[0][$i];
+					$to		= $db->decrypt($reg[1][$i]);
+					$newsql	= str_replace($from,$to,$newsql);
+				}
+			}
 
 			// Replace __x__ with rowid of insert nb x
 			while (preg_match('/__([0-9]+)__/',$newsql,$reg))
-- 
GitLab