44define(
'ALLOWED_IF_UPGRADE_UNLOCK_FOUND', 1);
45include_once
'inc.php';
52 print
'Error: Dolibarr config file was not found. This may means that Dolibarr is not installed yet. Please call the page "/install/index.php" instead of "/install/upgrade.php").';
70require_once $dolibarr_main_document_root.
'/compta/facture/class/facture.class.php';
71require_once $dolibarr_main_document_root.
'/comm/propal/class/propal.class.php';
72require_once $dolibarr_main_document_root.
'/contrat/class/contrat.class.php';
73require_once $dolibarr_main_document_root.
'/commande/class/commande.class.php';
74require_once $dolibarr_main_document_root.
'/fourn/class/fournisseur.commande.class.php';
75require_once $dolibarr_main_document_root.
'/core/lib/price.lib.php';
76require_once $dolibarr_main_document_root.
'/core/class/menubase.class.php';
77require_once $dolibarr_main_document_root.
'/core/lib/admin.lib.php';
78require_once $dolibarr_main_document_root.
'/core/lib/files.lib.php';
79require_once $dolibarr_main_document_root.
'/user/class/user.class.php';
88$err = error_reporting();
97$setuplang =
GETPOST(
"selectlang",
'aZ09', 3) ?
GETPOST(
"selectlang",
'aZ09', 3) :
'auto';
98$langs->setDefaultLang($setuplang);
99$versionfrom =
GETPOST(
"versionfrom",
'alpha', 3) ?
GETPOST(
"versionfrom",
'alpha', 3) : (empty($argv[1]) ?
'' : $argv[1]);
100$versionto =
GETPOST(
"versionto",
'alpha', 3) ?
GETPOST(
"versionto",
'alpha', 3) : (empty($argv[2]) ?
'' : $argv[2]);
101$enablemodules =
GETPOST(
"enablemodules",
'alpha', 3) ?
GETPOST(
"enablemodules",
'alpha', 3) : (empty($argv[3]) ?
'' : $argv[3]);
103$langs->loadLangs(array(
"admin",
"install",
"bills",
"suppliers"));
105if ($dolibarr_main_db_type ==
'mysqli') {
108if ($dolibarr_main_db_type ==
'pgsql') {
111if ($dolibarr_main_db_type ==
'mssql') {
116dolibarr_install_syslog(
"--- upgrade2: entering upgrade2.php page ".$versionfrom.
" ".$versionto.
" ".$enablemodules);
117if (!is_object($conf)) {
127if ((!$versionfrom || preg_match(
'/version/', $versionfrom)) && (!$versionto || preg_match(
'/version/', $versionto))) {
128 print
'Error: Parameter versionfrom or versionto missing or having a bad format.'.
"\n";
129 print
'Upgrade must be ran from command line with parameters or called from page install/index.php (like a first install)'.
"\n";
131 $sapi_type = php_sapi_name();
132 $script_file = basename(__FILE__);
133 if (substr($sapi_type, 0, 3) ==
'cli') {
134 print
'Syntax from command line: '.$script_file.
" x.y.z a.b.c [MAIN_MODULE_NAME1_TO_ENABLE,MAIN_MODULE_NAME2_TO_ENABLE...]\n";
135 print
'Example, upgrade from 19 to 20: '.$script_file.
" 19.0.0 20.0.0\n";
136 print
'Example, enable a module only: '.$script_file.
" 0.0.0 0.0.0 MAIN_MODULE_Adherent\n";
142pHeader(
'',
'step5',
GETPOST(
'action',
'aZ09') ?
GETPOST(
'action',
'aZ09') :
'upgrade',
'versionfrom='.$versionfrom.
'&versionto='.$versionto,
'',
'main-inside main-inside-borderbottom');
145if (!
GETPOST(
'action',
'aZ09') || preg_match(
'/upgrade/i',
GETPOST(
'action',
'aZ09'))) {
146 print
'<h3><img class="valignmiddle inline-block paddingright" src="../public/theme/common/database.svg" width="20" alt="Database"> ';
147 print
'<span class="inline-block valignmiddle">'.$langs->trans(
'DataMigration').
'</span></h3>';
149 print
'<table class="centpercent">';
152 if ((!empty($dolibarr_main_db_pass) && preg_match(
'/(crypted|dolcrypt):/i', (
string) $dolibarr_main_db_pass)) || !empty($dolibarr_main_db_encrypted_pass)) {
153 require_once $dolibarr_main_document_root.
'/core/lib/security.lib.php';
154 if (!empty($dolibarr_main_db_pass) && preg_match(
'/crypted:/i', $dolibarr_main_db_pass)) {
155 $dolibarr_main_db_pass = preg_replace(
'/crypted:/i',
'', (
string) $dolibarr_main_db_pass);
156 $dolibarr_main_db_encrypted_pass = $dolibarr_main_db_pass;
157 $dolibarr_main_db_pass =
dol_decode((
string) $dolibarr_main_db_pass);
158 } elseif (preg_match(
'/dolcrypt:/i', (
string) $dolibarr_main_db_pass)) {
159 $dolibarr_main_db_encrypted_pass = $dolibarr_main_db_pass;
160 $dolibarr_main_db_pass =
dolDecrypt((
string) $dolibarr_main_db_pass);
162 $dolibarr_main_db_pass =
dol_decode((
string) $dolibarr_main_db_encrypted_pass);
167 $conf->db->type = $dolibarr_main_db_type;
168 $conf->db->host = $dolibarr_main_db_host;
169 $conf->db->port = $dolibarr_main_db_port;
170 $conf->db->name = $dolibarr_main_db_name;
171 $conf->db->user = $dolibarr_main_db_user;
172 $conf->db->pass = $dolibarr_main_db_pass;
174 $db =
getDoliDBInstance($conf->db->type, $conf->db->host, $conf->db->user, $conf->db->pass, $conf->db->name, (
int) $conf->db->port);
176 if (!$db->connected) {
177 print
'<tr><td colspan="4">'.$langs->trans(
"ErrorFailedToConnectToDatabase", $conf->db->name).
'</td><td class="right">'.$langs->trans(
'Error').
'</td></tr>';
178 dolibarr_install_syslog(
'upgrade2: failed to connect to database :'.$conf->db->name.
' on '.$conf->db->host.
' for user '.$conf->db->user, LOG_ERR);
183 if ($db->database_selected) {
190 if (empty($dolibarr_main_db_encryption)) {
191 $dolibarr_main_db_encryption = 0;
193 $conf->db->dolibarr_main_db_encryption = $dolibarr_main_db_encryption;
194 if (empty($dolibarr_main_db_cryptkey)) {
195 $dolibarr_main_db_cryptkey =
'';
197 $conf->db->dolibarr_main_db_cryptkey = $dolibarr_main_db_cryptkey;
200 $conf->setValues($db);
204 $conf->global->MAIN_ENABLE_LOG_TO_HTML = 1;
205 $conf->modules[
'syslog'] =
'syslog';
206 $conf->global->SYSLOG_LEVEL = constant(
'LOG_DEBUG');
207 if (!defined(
'SYSLOG_HANDLERS')) {
208 define(
'SYSLOG_HANDLERS',
'["mod_syslog_file"]');
210 if (!defined(
'SYSLOG_FILE')) {
211 if (@is_writable(
'/tmp')) {
212 define(
'SYSLOG_FILE',
'/tmp/dolibarr_install.log');
213 } elseif (!empty($_ENV[
"TMP"]) && @is_writable($_ENV[
"TMP"])) {
214 define(
'SYSLOG_FILE', $_ENV[
"TMP"].
'/dolibarr_install.log');
215 } elseif (!empty($_ENV[
"TEMP"]) && @is_writable($_ENV[
"TEMP"])) {
216 define(
'SYSLOG_FILE', $_ENV[
"TEMP"].
'/dolibarr_install.log');
217 } elseif (@is_writable(
'../../../../') && @file_exists(
'../../../../startdoliwamp.bat')) {
218 define(
'SYSLOG_FILE',
'../../../../dolibarr_install.log');
219 } elseif (@is_writable(
'../../')) {
220 define(
'SYSLOG_FILE',
'../../dolibarr_install.log');
224 if (defined(
'SYSLOG_FILE')) {
225 $conf->global->SYSLOG_FILE = constant(
'SYSLOG_FILE');
227 if (!defined(
'SYSLOG_FILE_NO_ERROR')) {
228 define(
'SYSLOG_FILE_NO_ERROR', 1);
231 $handlers = array(
'mod_syslog_file');
232 foreach ($handlers as $handler) {
233 $file = DOL_DOCUMENT_ROOT.
'/core/modules/syslog/'.$handler.
'.php';
234 if (!file_exists($file)) {
235 throw new Exception(
'Missing log handler file '.$handler.
'.php');
239 $loghandlerinstance =
new $handler();
240 if (!$loghandlerinstance instanceof
LogHandler) {
241 throw new Exception(
'Log handler does not extend LogHandler');
244 if (empty($conf->loghandlers[$handler])) {
245 $conf->loghandlers[$handler] = $loghandlerinstance;
250 $listofentities = array(1);
253 include_once DOL_DOCUMENT_ROOT.
'/core/class/hookmanager.class.php';
255 $hookmanager->initHooks(array(
'upgrade2'));
257 $parameters = array(
'versionfrom' => $versionfrom,
'versionto' => $versionto);
260 $reshook = $hookmanager->executeHooks(
'doUpgradeBefore', $parameters,
$object, $action);
261 if ($reshook >= 0 && is_array($hookmanager->resArray)) {
263 $listofentities = array_unique(array_merge($listofentities, $hookmanager->resArray));
273 dol_syslog(
"Process upgrade2 (step common to all entities)");
276 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN birth date';
278 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN dateemployment date';
280 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN dateemploymentend date';
282 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN default_range integer';
284 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user ADD COLUMN default_c_exp_tax_cat integer';
286 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN langs varchar(24)';
288 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN fieldcomputed text';
290 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN fielddefault varchar(255)';
292 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
"extrafields ADD COLUMN enabled varchar(255) DEFAULT '1'";
294 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'extrafields ADD COLUMN help text';
296 $sql =
'ALTER TABLE '.MAIN_DB_PREFIX.
'user_rights ADD COLUMN entity integer DEFAULT 1 NOT NULL';
302 foreach ($listofentities as $entity) {
303 dol_syslog(
"Process upgrade2 (step a) for entity ".$entity);
306 $conf->setEntityValues($db, $entity);
309 if (defined(
'SYSLOG_FILE')) {
310 $conf->global->SYSLOG_FILE = constant(
'SYSLOG_FILE');
313 $conf->global->MAIN_ENABLE_LOG_TO_HTML = 1;
315 $versiontoarray = array();
316 $versionranarray = array();
318 dol_syslog(
"Process upgrade2 (step b) for entity ".$entity);
321 if (count($listofentities) > 1) {
322 print
'<tr><td colspan="4">*** '.$langs->trans(
"Entity").
' '.$entity.
'</td></tr>'.
"\n";
333 $versiontoarray = explode(
'.', $versionto);
334 $versionranarray = explode(
'.', DOL_VERSION);
336 $afterversionarray = explode(
'.',
'2.0.0');
337 $beforeversionarray = explode(
'.',
'2.7.9');
339 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
400 $afterversionarray = explode(
'.',
'2.7.9');
401 $beforeversionarray = explode(
'.',
'2.8.9');
404 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
428 $afterversionarray = explode(
'.',
'2.8.9');
429 $beforeversionarray = explode(
'.',
'2.9.9');
431 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
443 $afterversionarray = explode(
'.',
'2.9.9');
444 $beforeversionarray = explode(
'.',
'3.0.9');
450 $afterversionarray = explode(
'.',
'3.0.9');
451 $beforeversionarray = explode(
'.',
'3.1.9');
453 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
461 $afterversionarray = explode(
'.',
'3.1.9');
462 $beforeversionarray = explode(
'.',
'3.2.9');
464 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
474 $afterversionarray = explode(
'.',
'3.2.9');
475 $beforeversionarray = explode(
'.',
'3.3.9');
477 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
486 $afterversionarray = explode(
'.',
'3.6.9');
487 $beforeversionarray = explode(
'.',
'3.7.9');
489 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
495 $afterversionarray = explode(
'.',
'3.7.9');
496 $beforeversionarray = explode(
'.',
'3.8.9');
502 $afterversionarray = explode(
'.',
'3.9.9');
503 $beforeversionarray = explode(
'.',
'4.0.9');
505 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
511 $afterversionarray = explode(
'.',
'4.0.9');
512 $beforeversionarray = explode(
'.',
'5.0.9');
514 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
524 $afterversionarray = explode(
'.',
'5.0.9');
525 $beforeversionarray = explode(
'.',
'6.0.9');
528 global $multicompany_transverse_mode;
531 if (empty($multicompany_transverse_mode)) {
532 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
544 $afterversionarray = explode(
'.',
'6.0.9');
545 $beforeversionarray = explode(
'.',
'7.0.9');
547 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
556 $afterversionarray = explode(
'.',
'7.0.9');
557 $beforeversionarray = explode(
'.',
'8.0.9');
559 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
565 $afterversionarray = explode(
'.',
'8.0.9');
566 $beforeversionarray = explode(
'.',
'9.0.9');
572 $afterversionarray = explode(
'.',
'10.0.9');
573 $beforeversionarray = explode(
'.',
'11.0.9');
575 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
584 $afterversionarray = explode(
'.',
'13.0.9');
585 $beforeversionarray = explode(
'.',
'14.0.9');
587 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
594 $afterversionarray = explode(
'.',
'15.0.9');
595 $beforeversionarray = explode(
'.',
'16.0.9');
597 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
604 $afterversionarray = explode(
'.',
'16.0.9');
605 $beforeversionarray = explode(
'.',
'17.0.9');
607 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
613 $afterversionarray = explode(
'.',
'17.0.9');
614 $beforeversionarray = explode(
'.',
'18.0.9');
616 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
630 $afterversionarray = explode(
'.',
'19.0.9');
631 $beforeversionarray = explode(
'.',
'20.0.9');
633 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
639 $afterversionarray = explode(
'.',
'20.0.9');
640 $beforeversionarray = explode(
'.',
'21.0.9');
644 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
650 $afterversionarray = explode(
'.',
'21.0.9');
651 $beforeversionarray = explode(
'.',
'22.0.9');
653 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
659 $afterversionarray = explode(
'.',
'22.0.9');
660 $beforeversionarray = explode(
'.',
'23.0.9');
662 dol_syslog(
"Run migrate_... versionto is between ".json_encode($afterversionarray).
" and ".json_encode($beforeversionarray));
674 dol_syslog(
"Run migrate_... if migration is LAST ONE");
677 $listofmodule = array(
678 'MAIN_MODULE_ACCOUNTING' =>
'newboxdefonly',
679 'MAIN_MODULE_AGENDA' =>
'newboxdefonly',
680 'MAIN_MODULE_BOM' =>
'menuonly',
681 'MAIN_MODULE_BANQUE' =>
'menuonly',
682 'MAIN_MODULE_BARCODE' =>
'newboxdefonly',
683 'MAIN_MODULE_CRON' =>
'newboxdefonly',
684 'MAIN_MODULE_COMMANDE' =>
'newboxdefonly',
685 'MAIN_MODULE_BLOCKEDLOG' =>
'noboxes',
686 'MAIN_MODULE_DON' =>
'newboxdefonly',
687 'MAIN_MODULE_ECM' =>
'newboxdefonly',
688 'MAIN_MODULE_EVENTORGANIZATION' =>
'newboxdefonly',
689 'MAIN_MODULE_EXPENSEREPORT' =>
'newboxdefonly',
690 'MAIN_MODULE_FACTURE' =>
'newboxdefonly',
691 'MAIN_MODULE_FOURNISSEUR' =>
'newboxdefonly',
692 'MAIN_MODULE_FICHEINTER' =>
'newboxdefonly',
693 'MAIN_MODULE_HOLIDAY' =>
'newboxdefonly',
694 'MAIN_MODULE_LOAN' =>
'newboxdefonly',
695 'MAIN_MODULE_MARGIN' =>
'menuonly',
696 'MAIN_MODULE_MRP' =>
'menuonly',
697 'MAIN_MODULE_OPENSURVEY' =>
'newboxdefonly',
698 'MAIN_MODULE_PARTNERSHIP' =>
'newboxdefonly',
699 'MAIN_MODULE_PRINTING' =>
'newboxdefonly',
700 'MAIN_MODULE_PRODUIT' =>
'newboxdefonly',
701 'MAIN_MODULE_RECRUITMENT' =>
'menuonly',
702 'MAIN_MODULE_RESOURCE' =>
'noboxes',
703 'MAIN_MODULE_SALARIES' =>
'newboxdefonly',
704 'MAIN_MODULE_SERVICE' =>
'newboxdefonly',
705 'MAIN_MODULE_SYSLOG' =>
'newboxdefonly',
706 'MAIN_MODULE_SOCIETE' =>
'newboxdefonly',
707 'MAIN_MODULE_STRIPE' =>
'menuonly',
708 'MAIN_MODULE_TICKET' =>
'newboxdefonly',
709 'MAIN_MODULE_TAKEPOS' =>
'newboxdefonly',
710 'MAIN_MODULE_USER' =>
'newboxdefonly',
711 'MAIN_MODULE_VARIANTS' =>
'newboxdefonly',
712 'MAIN_MODULE_WEBSITE' =>
'newboxdefonly',
738 if (!$error && $enablemodules) {
740 $listofmodules = array();
741 $enablemodules = preg_replace(
'/enablemodules=/',
'', $enablemodules);
742 $tmplistofmodules = explode(
',', $enablemodules);
743 foreach ($tmplistofmodules as $value) {
744 $listofmodules[$value] =
'forceactivate';
748 if ($resultreloadmodules < 0) {
756 $parameters = array(
'versionfrom' => $versionfrom,
'versionto' => $versionto,
'conf' => $conf);
759 $reshook = $hookmanager->executeHooks(
'doUpgradeAfterDB', $parameters,
$object, $action);
760 if ($hookmanager->resNbOfHooks > 0) {
762 print
'<tr><td colspan="4">';
763 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: ';
764 print $hookmanager->error;
765 print
"<!-- (".$reshook.
") -->";
768 print
'<tr class="trforrunsql"><td colspan="4">';
769 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
' (DB)</b>: <span class="ok">OK</span>';
770 print
"<!-- (".$reshook.
") -->";
775 if (!empty($conf->modules_parts[
'hooks'])) {
776 print
'<tr class="trforrunsql"><td colspan="4">';
777 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: '.$langs->trans(
"NodoUpgradeAfterDB");
788 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"const SET VALUE = 'torefresh' WHERE name = 'MAIN_FIRST_PING_OK_ID'";
803 foreach ($listofentities as $entity) {
805 $conf->setEntityValues($db, $entity);
807 if (defined(
'SYSLOG_FILE')) {
808 $conf->global->SYSLOG_FILE = constant(
'SYSLOG_FILE');
810 $conf->global->MAIN_ENABLE_LOG_TO_HTML = 1;
814 $srcroot = DOL_DOCUMENT_ROOT.
'/install/medias';
815 $destroot = DOL_DATA_ROOT.
'/medias';
828 $parameters = array(
'versionfrom' => $versionfrom,
'versionto' => $versionto,
'conf' => $conf);
831 $reshook = $hookmanager->executeHooks(
'doUpgradeAfterFiles', $parameters,
$object, $action);
832 if ($hookmanager->resNbOfHooks > 0) {
834 print
'<tr><td colspan="4">';
835 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: ';
836 print $hookmanager->error;
837 print
"<!-- (".$reshook.
") -->";
840 print
'<tr class="trforrunsql"><td colspan="4">';
841 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
' (Files)</b>: <span class="ok">OK</span>';
842 print
"<!-- (".$reshook.
") -->";
847 if (!empty($conf->modules_parts[
'hooks'])) {
848 print
'<tr class="trforrunsql"><td colspan="4">';
849 print
'<b>'.$langs->trans(
'UpgradeExternalModule').
'</b>: '.$langs->trans(
"NodoUpgradeAfterFiles");
859 print
'<table width="100%">';
860 print
'<tr><td style="width: 30%">'.$langs->trans(
"MigrationFinished").
'</td>';
861 print
'<td class="right">';
865 print
'<span class="error">'.$langs->trans(
"Error").
'</span> - ';
869 print
'<script type="text/javascript">
870 jQuery(document).ready(function() {
871 function init_trrunsql()
873 console.log("toggle .trforrunsql");
874 jQuery(".trforrunsql").toggle();
877 jQuery(".trforrunsqlshowhide").click(function() {
882 print
'<a class="trforrunsqlshowhide" href="#">'.$langs->trans(
"ShowHideDetails").
'</a>';
885 print
'</td></tr>'.
"\n";
891 print
'<div class="error">'.$langs->trans(
'ErrorWrongParameters').
'</div>';
896if ($error && isset($argv[1])) {
902pFooter($error ? 2 : 0, $setuplang);
925 print
'<tr><td colspan="4">';
928 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
930 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
931 $obj = $db->fetch_object($result);
933 $sql =
"SELECT p.rowid, p.fk_facture, p.amount";
934 $sql .=
" FROM ".MAIN_DB_PREFIX.
"paiement as p";
935 $sql .=
" WHERE p.fk_facture > 0";
937 $resql = $db->query($sql);
944 $num = $db->num_rows($resql);
947 $obj = $db->fetch_object($resql);
948 $row[$i][0] = $obj->rowid;
949 $row[$i][1] = $obj->fk_facture;
950 $row[$i][2] = $obj->amount;
958 print $langs->trans(
'MigrationPaymentsNumberToUpdate', $num).
"<br>\n";
962 for ($i = 0; $i < $num; $i++) {
963 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
964 $sql .=
" VALUES (".((int) $row[$i][1]).
",".((int) $row[$i][0]).
",".((float) $row[$i][2]).
")";
966 $res += $db->query($sql);
968 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"paiement SET fk_facture = 0 WHERE rowid = ".((int) $row[$i][0]);
970 $res += $db->query($sql);
972 print $langs->trans(
'MigrationProcessPaymentUpdate', $row[$i][0]).
"<br>\n";
976 if (is_array($row) && $res == (2 * count($row))) {
978 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
981 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
984 print $langs->trans(
'MigrationPaymentsNothingToUpdate').
"<br>\n";
987 print $langs->trans(
'MigrationPaymentsNothingToUpdate').
"<br>\n";
1005 print
'<tr><td colspan="4">';
1008 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
1010 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
1011 $obj = $db->fetch_object($result);
1014 $sql =
"SELECT DISTINCT p.rowid, p.datec, p.amount as pamount, bu.fk_bank, b.amount as bamount,";
1015 $sql .=
" bu2.url_id as socid";
1016 $sql .=
" FROM (".MAIN_DB_PREFIX.
"paiement as p, ".MAIN_DB_PREFIX.
"bank_url as bu, ".MAIN_DB_PREFIX.
"bank as b)";
1017 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON pf.fk_paiement = p.rowid";
1018 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu2 ON (bu.fk_bank=bu2.fk_bank AND bu2.type = 'company')";
1019 $sql .=
" WHERE pf.rowid IS NULL AND (p.rowid=bu.url_id AND bu.type='payment') AND bu.fk_bank = b.rowid";
1020 $sql .=
" AND b.rappro = 1";
1021 $sql .=
" AND (p.fk_facture = 0 OR p.fk_facture IS NULL)";
1023 $resql = $db->query($sql);
1029 $num = $db->num_rows($resql);
1032 $obj = $db->fetch_object($resql);
1033 if ($obj->pamount == $obj->bamount && $obj->socid) {
1034 $row[$j][
'paymentid'] = $obj->rowid;
1035 $row[$j][
'pamount'] = $obj->pamount;
1036 $row[$j][
'fk_bank'] = $obj->fk_bank;
1037 $row[$j][
'bamount'] = $obj->bamount;
1038 $row[$j][
'socid'] = $obj->socid;
1039 $row[$j][
'datec'] = $obj->datec;
1049 print $langs->trans(
'OrphelinsPaymentsDetectedByMethod', 1).
': '.count($row).
"<br>\n";
1054 for ($i = 0; $i < $num; $i++) {
1056 print
'* '.$row[$i][
'datec'].
' paymentid='.$row[$i][
'paymentid'].
' pamount='.$row[$i][
'pamount'].
' fk_bank='.$row[$i][
'fk_bank'].
' bamount='.$row[$i][
'bamount'].
' socid='.$row[$i][
'socid'].
'<br>';
1060 $sql =
" SELECT DISTINCT f.rowid from ".MAIN_DB_PREFIX.
"facture as f";
1061 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON f.rowid = pf.fk_facture";
1062 $sql .=
" WHERE f.fk_statut in (2,3) AND fk_soc = ".((int) $row[$i][
'socid']).
" AND total_ttc = ".((float) $row[$i][
'pamount']);
1063 $sql .=
" AND pf.fk_facture IS NULL";
1064 $sql .=
" ORDER BY f.fk_statut";
1066 $resql = $db->query($sql);
1068 $num = $db->num_rows($resql);
1071 $obj = $db->fetch_object($resql);
1072 $facid = $obj->rowid;
1074 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
1075 $sql .=
" VALUES (".((int) $facid).
",".((int) $row[$i][
'paymentid']).
", ".((float) $row[$i][
'pamount']).
")";
1077 $res += $db->query($sql);
1079 print $langs->trans(
'MigrationProcessPaymentUpdate',
'facid='.$facid.
'-paymentid='.$row[$i][
'paymentid'].
'-amount='.$row[$i][
'pamount']).
"<br>\n";
1087 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1089 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1094 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1097 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1115 print
'<tr><td colspan="4">';
1118 print
'<b>'.$langs->trans(
'MigrationPaymentsUpdate').
"</b><br>\n";
1120 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiement",
"fk_facture");
1121 $obj = $db->fetch_object($result);
1124 $sql =
"SELECT DISTINCT p.rowid, p.datec, p.amount as pamount, bu.fk_bank, b.amount as bamount,";
1125 $sql .=
" bu2.url_id as socid";
1126 $sql .=
" FROM (".MAIN_DB_PREFIX.
"paiement as p, ".MAIN_DB_PREFIX.
"bank_url as bu, ".MAIN_DB_PREFIX.
"bank as b)";
1127 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON pf.fk_paiement = p.rowid";
1128 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu2 ON (bu.fk_bank = bu2.fk_bank AND bu2.type = 'company')";
1129 $sql .=
" WHERE pf.rowid IS NULL AND (p.fk_bank = bu.fk_bank AND bu.type = 'payment') AND bu.fk_bank = b.rowid";
1130 $sql .=
" AND (p.fk_facture = 0 OR p.fk_facture IS NULL)";
1132 $resql = $db->query($sql);
1138 $num = $db->num_rows($resql);
1141 $obj = $db->fetch_object($resql);
1142 if ($obj->pamount == $obj->bamount && $obj->socid) {
1143 $row[$j][
'paymentid'] = $obj->rowid;
1144 $row[$j][
'pamount'] = $obj->pamount;
1145 $row[$j][
'fk_bank'] = $obj->fk_bank;
1146 $row[$j][
'bamount'] = $obj->bamount;
1147 $row[$j][
'socid'] = $obj->socid;
1148 $row[$j][
'datec'] = $obj->datec;
1161 print $langs->trans(
'OrphelinsPaymentsDetectedByMethod', 2).
': '.count($row).
"<br>\n";
1165 for ($i = 0; $i < $num; $i++) {
1167 print
'* '.$row[$i][
'datec'].
' paymentid='.$row[$i][
'paymentid'].
' pamount='.$row[$i][
'pamount'].
' fk_bank='.$row[$i][
'fk_bank'].
' '.$row[$i][
'bamount'].
' socid='.$row[$i][
'socid'].
'<br>';
1171 $sql =
" SELECT DISTINCT f.rowid from ".MAIN_DB_PREFIX.
"facture as f";
1172 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"paiement_facture as pf ON f.rowid = pf.fk_facture";
1173 $sql .=
" WHERE f.fk_statut in (2,3) AND fk_soc = ".((int) $row[$i][
'socid']).
" AND total_ttc = ".((float) $row[$i][
'pamount']);
1174 $sql .=
" AND pf.fk_facture IS NULL";
1175 $sql .=
" ORDER BY f.fk_statut";
1177 $resql = $db->query($sql);
1179 $num = $db->num_rows($resql);
1182 $obj = $db->fetch_object($resql);
1183 $facid = $obj->rowid;
1185 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"paiement_facture (fk_facture, fk_paiement, amount)";
1186 $sql .=
" VALUES (".((int) $facid).
",".((int) $row[$i][
'paymentid']).
", ".((float) $row[$i][
'pamount']).
")";
1188 $res += $db->query($sql);
1190 print $langs->trans(
'MigrationProcessPaymentUpdate',
'facid='.$facid.
'-paymentid='.$row[$i][
'paymentid'].
'-amount='.$row[$i][
'pamount']).
"<br>\n";
1199 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1201 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1206 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1212 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"paiement DROP COLUMN fk_facture";
1222 print $langs->trans(
'MigrationPaymentsNothingUpdatable').
"<br>\n";
1239 print
'<tr><td colspan="4">';
1244 print
'<b>'.$langs->trans(
'MigrationContractsUpdate').
"</b><br>\n";
1246 $sql =
"SELECT c.rowid as cref, c.date_contrat, c.statut, c.fk_product, c.fk_facture, c.fk_user_author,";
1247 $sql .=
" p.ref, p.label, p.description, p.price, p.tva_tx, p.duration, cd.rowid";
1248 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contrat as c";
1249 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"product as p";
1250 $sql .=
" ON c.fk_product = p.rowid";
1251 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"contratdet as cd";
1252 $sql .=
" ON c.rowid=cd.fk_contrat";
1253 $sql .=
" WHERE cd.rowid IS NULL AND p.rowid IS NOT NULL";
1254 $resql = $db->query($sql);
1260 $num = $db->num_rows($resql);
1263 print $langs->trans(
'MigrationContractsNumberToUpdate', $num).
"<br>\n";
1267 $obj = $db->fetch_object($resql);
1269 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"contratdet (";
1270 $sql .=
"fk_contrat, fk_product, statut, label, description,";
1271 $sql .=
"date_ouverture_prevue, date_ouverture, date_fin_validite, tva_tx, qty,";
1272 $sql .=
"subprice, price_ht, fk_user_author, fk_user_ouverture)";
1273 $sql .=
" VALUES (";
1274 $sql .= ((int) $obj->cref).
", ".($obj->fk_product ? ((int) $obj->fk_product) : 0).
", ";
1276 $sql .=
"'".$db->escape($obj->label).
"', null, ";
1277 $sql .= ($obj->date_contrat ?
"'".$db->idate($db->jdate($obj->date_contrat)).
"'" :
"null").
", ";
1280 $sql .= ((float) $obj->tva_tx).
", 1, ";
1281 $sql .= ((float) $obj->price).
", ".((float) $obj->price).
", ".((int) $obj->fk_user_author).
",";
1285 if ($db->query($sql)) {
1286 print $langs->trans(
'MigrationContractsLineCreation', $obj->cref).
"<br>\n";
1298 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1301 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
1304 print $langs->trans(
'MigrationContractsNothingToUpdate').
"<br>\n";
1307 print $langs->trans(
'MigrationContractsFieldDontExist').
"<br>\n";
1324 print
'<tr><td colspan="4">';
1329 print
'<b>'.$langs->trans(
'MigrationBankTransfertsUpdate').
"</b><br>\n";
1331 $sql =
"SELECT ba.rowid as barowid, bb.rowid as bbrowid";
1332 $sql .=
" FROM ".MAIN_DB_PREFIX.
"bank as bb, ".MAIN_DB_PREFIX.
"bank as ba";
1333 $sql .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"bank_url as bu ON bu.fk_bank = ba.rowid";
1334 $sql .=
" WHERE ba.amount = -bb.amount AND ba.fk_account <> bb.fk_account";
1335 $sql .=
" AND ba.datev = bb.datev AND ba.datec = bb.datec";
1336 $sql .=
" AND bu.fk_bank IS NULL";
1337 $resql = $db->query($sql);
1343 $num = $db->num_rows($resql);
1346 print $langs->trans(
'MigrationBankTransfertsToUpdate', $num).
"<br>\n";
1350 $obj = $db->fetch_object($resql);
1352 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"bank_url (";
1353 $sql .=
"fk_bank, url_id, url, label, type";
1355 $sql .=
" VALUES (";
1356 $sql .= $obj->barowid.
",".$obj->bbrowid.
", '/compta/bank/line.php?rowid=', '(banktransfert)', 'banktransfert'";
1362 if (!$db->query($sql)) {
1373 print $langs->trans(
'MigrationSuccessfullUpdate').
"<br>";
1376 print $langs->trans(
'MigrationUpdateFailed').
'<br>';
1379 print $langs->trans(
'MigrationBankTransfertsNothingToUpdate').
"<br>\n";
1398 print
'<tr><td colspan="4">';
1401 print
'<b>'.$langs->trans(
'MigrationContractsEmptyDatesUpdate').
"</b><br>\n";
1403 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set date_contrat=tms where date_contrat is null";
1405 $resql = $db->query($sql);
1409 if ($db->affected_rows($resql) > 0) {
1410 print $langs->trans(
'MigrationContractsEmptyDatesUpdateSuccess').
"<br>\n";
1412 print $langs->trans(
'MigrationContractsEmptyDatesNothingToUpdate').
"<br>\n";
1415 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set datec=tms where datec is null";
1417 $resql = $db->query($sql);
1421 if ($db->affected_rows($resql) > 0) {
1422 print $langs->trans(
'MigrationContractsEmptyCreationDatesUpdateSuccess').
"<br>\n";
1424 print $langs->trans(
'MigrationContractsEmptyCreationDatesNothingToUpdate').
"<br>\n";
1440 print
'<tr><td colspan="4">';
1445 print
'<b>'.$langs->trans(
'MigrationContractsInvalidDatesUpdate').
"</b><br>\n";
1447 $sql =
"SELECT c.rowid as cref, c.datec, c.date_contrat, MIN(cd.date_ouverture) as datemin";
1448 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contrat as c,";
1449 $sql .=
" ".MAIN_DB_PREFIX.
"contratdet as cd";
1450 $sql .=
" WHERE c.rowid=cd.fk_contrat AND cd.date_ouverture IS NOT NULL";
1451 $sql .=
" GROUP BY c.rowid, c.date_contrat";
1452 $resql = $db->query($sql);
1458 $num = $db->num_rows($resql);
1461 $nbcontratsmodifie = 0;
1465 $obj = $db->fetch_object($resql);
1466 if ($obj->date_contrat > $obj->datemin) {
1467 $datemin = $db->jdate($obj->datemin);
1469 print $langs->trans(
'MigrationContractsInvalidDateFix', $obj->cref, $obj->date_contrat, $obj->datemin).
"<br>\n";
1470 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"contrat";
1471 $sql .=
" SET date_contrat='".$db->idate($datemin).
"'";
1472 $sql .=
" WHERE rowid = ".((int) $obj->cref);
1473 $resql2 = $db->query($sql);
1478 $nbcontratsmodifie++;
1485 if ($nbcontratsmodifie) {
1486 print $langs->trans(
'MigrationContractsInvalidDatesNumber', $nbcontratsmodifie).
"<br>\n";
1488 print $langs->trans(
'MigrationContractsInvalidDatesNothingToUpdate').
"<br>\n";
1508 print
'<tr><td colspan="4">';
1511 print
'<b>'.$langs->trans(
'MigrationContractsIncoherentCreationDateUpdate').
"</b><br>\n";
1513 $sql =
"update ".MAIN_DB_PREFIX.
"contrat set datec=date_contrat where datec is null or datec > date_contrat";
1515 $resql = $db->query($sql);
1519 if ($db->affected_rows($resql) > 0) {
1520 print $langs->trans(
'MigrationContractsIncoherentCreationDateUpdateSuccess').
"<br>\n";
1522 print $langs->trans(
'MigrationContractsIncoherentCreationDateNothingToUpdate').
"<br>\n";
1538 print
'<tr><td colspan="4">';
1541 print
'<b>'.$langs->trans(
'MigrationReopeningContracts').
"</b><br>\n";
1543 $sql =
"SELECT c.rowid as cref FROM ".MAIN_DB_PREFIX.
"contrat as c, ".MAIN_DB_PREFIX.
"contratdet as cd";
1544 $sql .=
" WHERE cd.statut = 4 AND c.statut=2 AND c.rowid=cd.fk_contrat";
1546 $resql = $db->query($sql);
1550 if ($db->affected_rows($resql) > 0) {
1553 $num = $db->num_rows($resql);
1556 $nbcontratsmodifie = 0;
1560 $obj = $db->fetch_object($resql);
1562 print $langs->trans(
'MigrationReopenThisContract', $obj->cref).
"<br>\n";
1563 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"contrat";
1564 $sql .=
" SET statut = 1";
1565 $sql .=
" WHERE rowid = ".((int) $obj->cref);
1566 $resql2 = $db->query($sql);
1571 $nbcontratsmodifie++;
1578 if ($nbcontratsmodifie) {
1579 print $langs->trans(
'MigrationReopenedContractsNumber', $nbcontratsmodifie).
"<br>\n";
1581 print $langs->trans(
'MigrationReopeningContractsNothingToUpdate').
"<br>\n";
1585 print $langs->trans(
'MigrationReopeningContractsNothingToUpdate').
"<br>\n";
1603 print
'<tr><td colspan="4">';
1605 print
'<b>'.$langs->trans(
'SuppliersInvoices').
"</b><br>\n";
1608 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"paiementfourn",
"fk_facture_fourn");
1609 $obj = $db->fetch_object($result);
1614 $select_sql =
'SELECT rowid, fk_facture_fourn, amount';
1615 $select_sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn';
1616 $select_sql .=
' WHERE fk_facture_fourn IS NOT NULL';
1619 $select_resql = $db->query($select_sql);
1620 if ($select_resql) {
1621 $select_num = $db->num_rows($select_resql);
1625 while (($i < $select_num) && (!$error)) {
1626 $select_obj = $db->fetch_object($select_resql);
1629 $check_sql =
'SELECT fk_paiementfourn, fk_facturefourn';
1630 $check_sql .=
' FROM '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn';
1631 $check_sql .=
' WHERE fk_paiementfourn = '.((int) $select_obj->rowid).
' AND fk_facturefourn = '.((int) $select_obj->fk_facture_fourn);
1632 $check_resql = $db->query($check_sql);
1634 $check_num = $db->num_rows($check_resql);
1635 if ($check_num == 0) {
1639 print
'<tr><td colspan="4" class="nowrap"><b>'.$langs->trans(
'SuppliersInvoices').
'</b></td></tr>';
1640 print
'<tr><td>fk_paiementfourn</td><td>fk_facturefourn</td><td>'.$langs->trans(
'Amount').
'</td><td> </td></tr>';
1643 print
'<tr class="oddeven">';
1644 print
'<td>'.$select_obj->rowid.
'</td><td>'.$select_obj->fk_facture_fourn.
'</td><td>'.$select_obj->amount.
'</td>';
1646 $insert_sql =
'INSERT INTO '.MAIN_DB_PREFIX.
'paiementfourn_facturefourn SET ';
1647 $insert_sql .=
' fk_paiementfourn = \''.$select_obj->rowid.
'\',
';
1648 $insert_sql .= ' fk_facturefourn = \
''.$select_obj->fk_facture_fourn.
'\',
';
1649 $insert_sql .= ' amount = \
''.$select_obj->amount.
'\'';
1650 $insert_resql = $db->query($insert_sql);
1652 if ($insert_resql) {
1654 print
'<td><span class="ok">'.$langs->trans(
"OK").
'</span></td>';
1656 print
'<td><span class="error">Error on insert</span></td>';
1672 print
'<tr><td>'.$langs->trans(
"AlreadyDone").
'</td></tr>';
1676 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"paiementfourn DROP COLUMN fk_facture_fourn";
1679 print
'<tr><td>'.$langs->trans(
"Error").
'</td></tr>';
1683 print
'<tr><td>'.$langs->trans(
"AlreadyDone").
'</td></tr>';
1700 $tmpmysoc->setMysoc($conf);
1704 print
'<tr><td colspan="4">';
1707 print
'<b>'.$langs->trans(
'MigrationInvoice').
"</b><br>\n";
1710 $sql =
"SELECT fd.rowid, fd.qty, fd.subprice, fd.remise_percent, fd.tva_tx as vatrate, fd.total_ttc, fd.info_bits,";
1711 $sql .=
" f.rowid as facid, f.remise_percent as remise_percent_global, f.total_ttc as total_ttc_f";
1712 $sql .=
" FROM ".MAIN_DB_PREFIX.
"facturedet as fd, ".MAIN_DB_PREFIX.
"facture as f";
1713 $sql .=
" WHERE fd.fk_facture = f.rowid";
1714 $sql .=
" AND (((fd.total_ttc = 0 AND fd.remise_percent != 100) or fd.total_ttc IS NULL) or f.total_ttc IS NULL)";
1718 $resql = $db->query($sql);
1720 $num = $db->num_rows($resql);
1724 $obj = $db->fetch_object($resql);
1726 $rowid = $obj->rowid;
1728 $pu = $obj->subprice;
1729 $vatrate = $obj->vatrate;
1730 $remise_percent = $obj->remise_percent;
1731 $remise_percent_global = $obj->remise_percent_global;
1732 $total_ttc_f = $obj->total_ttc_f;
1733 $info_bits = $obj->info_bits;
1737 $facligne->fetch($rowid);
1739 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $facligne->product_type, $tmpmysoc);
1740 $total_ht = $result[0];
1741 $total_tva = $result[1];
1742 $total_ttc = $result[2];
1744 $facligne->total_ht = (float) $total_ht;
1745 $facligne->total_tva = (float) $total_tva;
1746 $facligne->total_ttc = (float) $total_ttc;
1748 dolibarr_install_syslog(
"upgrade2: line ".$rowid.
": facid=".$obj->facid.
" pu=".$pu.
" qty=".$qty.
" vatrate=".$vatrate.
" remise_percent=".$remise_percent.
" remise_global=".$remise_percent_global.
" -> ".$total_ht.
", ".$total_tva.
", ".$total_ttc);
1750 $facligne->update_total();
1754 if (!$total_ttc_f) {
1756 $facture->id = $obj->facid;
1758 if ($facture->fetch($facture->id) >= 0) {
1759 if ($facture->update_price() > 0) {
1762 print
"Error id=".$facture->id;
1775 print $langs->trans(
"AlreadyDone");
1781 print
"Error #1 ".$db->error();
1803 $tmpmysoc->setMysoc($conf);
1807 print
'<tr><td colspan="4">';
1810 print
'<b>'.$langs->trans(
'MigrationProposal').
"</b><br>\n";
1813 $sql =
"SELECT pd.rowid, pd.qty, pd.subprice, pd.remise_percent, pd.tva_tx as vatrate, pd.info_bits,";
1814 $sql .=
" p.rowid as propalid, p.remise_percent as remise_percent_global";
1815 $sql .=
" FROM ".MAIN_DB_PREFIX.
"propaldet as pd, ".MAIN_DB_PREFIX.
"propal as p";
1816 $sql .=
" WHERE pd.fk_propal = p.rowid";
1817 $sql .=
" AND ((pd.total_ttc = 0 AND pd.remise_percent != 100) or pd.total_ttc IS NULL)";
1820 $resql = $db->query($sql);
1822 $num = $db->num_rows($resql);
1826 $obj = $db->fetch_object($resql);
1828 $rowid = $obj->rowid;
1830 $pu = $obj->subprice;
1831 $vatrate = $obj->vatrate;
1832 $remise_percent = $obj->remise_percent;
1833 $remise_percent_global = $obj->remise_percent_global;
1834 $info_bits = $obj->info_bits;
1838 $propalligne->fetch($rowid);
1840 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $propalligne->product_type, $tmpmysoc);
1841 $total_ht = $result[0];
1842 $total_tva = $result[1];
1843 $total_ttc = $result[2];
1845 $propalligne->total_ht = (float) $total_ht;
1846 $propalligne->total_tva = (float) $total_tva;
1847 $propalligne->total_ttc = (float) $total_ttc;
1849 dolibarr_install_syslog(
"upgrade2: Line ".$rowid.
": propalid=".$obj->rowid.
" pu=".$pu.
" qty=".$qty.
" vatrate=".$vatrate.
" remise_percent=".$remise_percent.
" remise_global=".$remise_percent_global.
" -> ".$total_ht.
", ".$total_tva.
", ".$total_ttc);
1851 $propalligne->update_total();
1856 print $langs->trans(
"AlreadyDone");
1863 print
"Error #1 ".$db->error();
1886 $tmpmysoc->setMysoc($conf);
1887 if (empty($tmpmysoc->country_id)) {
1888 $tmpmysoc->country_id = 0;
1891 print
'<tr><td colspan="4">';
1894 print
'<b>'.$langs->trans(
'MigrationContract').
"</b><br>\n";
1897 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
1898 $sql .=
" c.rowid as contratid";
1899 $sql .=
" FROM ".MAIN_DB_PREFIX.
"contratdet as cd, ".MAIN_DB_PREFIX.
"contrat as c";
1900 $sql .=
" WHERE cd.fk_contrat = c.rowid";
1901 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100 AND cd.subprice > 0) or cd.total_ttc IS NULL)";
1904 $resql = $db->query($sql);
1906 $num = $db->num_rows($resql);
1910 $obj = $db->fetch_object($resql);
1912 $rowid = $obj->rowid;
1914 $pu = $obj->subprice;
1915 $vatrate = $obj->vatrate;
1916 $remise_percent = $obj->remise_percent;
1917 $info_bits = $obj->info_bits;
1922 $contratligne->fetch($rowid);
1924 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, 0,
'HT', $info_bits, $contratligne->product_type, $tmpmysoc);
1925 $total_ht = $result[0];
1926 $total_tva = $result[1];
1927 $total_ttc = $result[2];
1929 $contratligne->total_ht = (float) $total_ht;
1930 $contratligne->total_tva = (float) $total_tva;
1931 $contratligne->total_ttc = (float) $total_ttc;
1933 dolibarr_install_syslog(
"upgrade2: Line ".$rowid.
": contratdetid=".$obj->rowid.
" pu=".$pu.
" qty=".$qty.
" vatrate=".$vatrate.
" remise_percent=".$remise_percent.
" -> ".$total_ht.
", ".$total_tva.
" , ".$total_ttc);
1935 $contratligne->update_total();
1940 print $langs->trans(
"AlreadyDone");
1947 print
"Error #1 ".$db->error();
1970 $tmpmysoc->setMysoc($conf);
1972 print
'<tr><td colspan="4">';
1975 print
'<b>'.$langs->trans(
'MigrationOrder').
"</b><br>\n";
1978 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
1979 $sql .=
" c.rowid as commandeid, c.remise_percent as remise_percent_global";
1980 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commandedet as cd, ".MAIN_DB_PREFIX.
"commande as c";
1981 $sql .=
" WHERE cd.fk_commande = c.rowid";
1982 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100) or cd.total_ttc IS NULL)";
1985 $resql = $db->query($sql);
1987 $num = $db->num_rows($resql);
1991 $obj = $db->fetch_object($resql);
1993 $rowid = $obj->rowid;
1995 $pu = $obj->subprice;
1996 $vatrate = $obj->vatrate;
1997 $remise_percent = $obj->remise_percent;
1998 $remise_percent_global = $obj->remise_percent_global;
1999 $info_bits = $obj->info_bits;
2003 $commandeligne->fetch($rowid);
2005 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $commandeligne->product_type, $tmpmysoc);
2006 $total_ht = $result[0];
2007 $total_tva = $result[1];
2008 $total_ttc = $result[2];
2010 $commandeligne->total_ht = (float) $total_ht;
2011 $commandeligne->total_tva = (float) $total_tva;
2012 $commandeligne->total_ttc = (float) $total_ttc;
2014 dolibarr_install_syslog(
"upgrade2: Line ".$rowid.
" : commandeid=".$obj->rowid.
" pu=".$pu.
" qty=".$qty.
" vatrate=".$vatrate.
" remise_percent=".$remise_percent.
" remise_global=".$remise_percent_global.
" -> ".$total_ht.
", ".$total_tva.
", ".$total_ttc);
2016 $commandeligne->update_total();
2021 print $langs->trans(
"AlreadyDone");
2038 print
"Error #1 ".$db->error();
2063 $tmpmysoc->setMysoc($conf);
2065 print
'<tr><td colspan="4">';
2068 print
'<b>'.$langs->trans(
'MigrationSupplierOrder').
"</b><br>\n";
2071 $sql =
"SELECT cd.rowid, cd.qty, cd.subprice, cd.remise_percent, cd.tva_tx as vatrate, cd.info_bits,";
2072 $sql .=
" c.rowid as commandeid, c.remise_percent as remise_percent_global";
2073 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commande_fournisseurdet as cd, ".MAIN_DB_PREFIX.
"commande_fournisseur as c";
2074 $sql .=
" WHERE cd.fk_commande = c.rowid";
2075 $sql .=
" AND ((cd.total_ttc = 0 AND cd.remise_percent != 100) or cd.total_ttc IS NULL)";
2078 $resql = $db->query($sql);
2080 $num = $db->num_rows($resql);
2084 $obj = $db->fetch_object($resql);
2086 $rowid = $obj->rowid;
2088 $pu = $obj->subprice;
2089 $vatrate = $obj->vatrate;
2090 $remise_percent = $obj->remise_percent;
2091 $remise_percent_global = $obj->remise_percent_global;
2092 $info_bits = $obj->info_bits;
2096 $commandeligne->fetch($rowid);
2098 $result =
calcul_price_total($qty, $pu, $remise_percent, $vatrate, 0, 0, $remise_percent_global,
'HT', $info_bits, $commandeligne->product_type,
$mysoc);
2099 $total_ht = $result[0];
2100 $total_tva = $result[1];
2101 $total_ttc = $result[2];
2103 $commandeligne->total_ht = (float) $total_ht;
2104 $commandeligne->total_tva = (float) $total_tva;
2105 $commandeligne->total_ttc = (float) $total_ttc;
2107 dolibarr_install_syslog(
"upgrade2: Line ".$rowid.
": commandeid=".$obj->rowid.
" pu=".$pu.
" qty=".$qty.
" vatrate=".$vatrate.
" remise_percent=".$remise_percent.
" remise_global=".$remise_percent_global.
" -> ".$total_ht.
", ".$total_tva.
", ".$total_ttc);
2109 $commandeligne->update_total();
2114 print $langs->trans(
"AlreadyDone");
2131 print
"Error #1 ".$db->error();
2157 include_once DOL_DOCUMENT_ROOT.
'/core/modules/facture/modules_facture.php';
2159 if (count($modellist) == 0) {
2161 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('crabe','invoice')";
2162 $resql = $db->query($sql);
2170 include_once DOL_DOCUMENT_ROOT.
'/core/modules/commande/modules_commande.php';
2172 if (count($modellist) == 0) {
2174 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('einstein','order')";
2175 $resql = $db->query($sql);
2183 include_once DOL_DOCUMENT_ROOT.
'/core/modules/expedition/modules_expedition.php';
2185 if (count($modellist) == 0) {
2187 $sql =
" insert into ".MAIN_DB_PREFIX.
"document_model(nom,type) values('rouget','shipping')";
2188 $resql = $db->query($sql);
2211 print
'<tr><td colspan="4">';
2214 print
'<b>'.$langs->trans(
'MigrationShipmentOrderMatching').
"</b><br>\n";
2216 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"fk_commande");
2217 $obj = $db->fetch_object($result);
2223 $sql =
"SELECT e.rowid, e.fk_commande FROM ".MAIN_DB_PREFIX.
"expedition as e";
2224 $resql = $db->query($sql);
2227 $num = $db->num_rows($resql);
2231 $obj = $db->fetch_object($resql);
2233 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"co_exp (fk_expedition,fk_commande)";
2234 $sql .=
" VALUES (".((int) $obj->rowid).
", ".((int) $obj->fk_commande).
")";
2235 $resql2 = $db->query($sql);
2248 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition DROP COLUMN fk_commande";
2249 print $langs->trans(
'FieldRenamed').
"<br>\n";
2259 print $langs->trans(
'AlreadyDone').
"<br>\n";
2276 print
'<tr><td colspan="4">';
2279 print
'<b>'.$langs->trans(
'MigrationDeliveryOrderMatching').
"</b><br>\n";
2281 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraison",
"fk_commande");
2282 $obj = $db->fetch_object($result);
2288 $sql =
"SELECT l.rowid, l.fk_commande,";
2289 $sql .=
" c.ref_client, c.date_livraison as delivery_date";
2290 $sql .=
" FROM ".MAIN_DB_PREFIX.
"livraison as l, ".MAIN_DB_PREFIX.
"commande as c";
2291 $sql .=
" WHERE c.rowid = l.fk_commande";
2292 $resql = $db->query($sql);
2295 $num = $db->num_rows($resql);
2299 $obj = $db->fetch_object($resql);
2301 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"co_liv (fk_livraison,fk_commande)";
2302 $sql .=
" VALUES (".((int) $obj->rowid).
", ".((int) $obj->fk_commande).
")";
2303 $resql2 = $db->query($sql);
2306 $delivery_date = $db->jdate($obj->delivery_date);
2308 $sqlu =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
2309 $sqlu .=
" ref_client = '".$db->escape($obj->ref_client).
"'";
2310 $sqlu .=
", date_livraison = '".$db->idate($delivery_date).
"'";
2311 $sqlu .=
" WHERE rowid = ".((int) $obj->rowid);
2312 $resql3 = $db->query($sqlu);
2328 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraison DROP COLUMN fk_commande";
2329 print $langs->trans(
'FieldRenamed').
"<br>\n";
2339 print $langs->trans(
'AlreadyDone').
"<br>\n";
2356 print
'<tr><td colspan="4">';
2359 print
'<b>'.$langs->trans(
'MigrationDeliveryDetail').
"</b><br>\n";
2363 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraisondet",
"fk_commande_ligne");
2364 $obj = $db->fetch_object($result);
2370 $sql =
"SELECT cd.rowid, cd.fk_product, cd.description, cd.subprice, cd.total_ht";
2371 $sql .=
", ld.fk_livraison";
2372 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commandedet as cd, ".MAIN_DB_PREFIX.
"livraisondet as ld";
2373 $sql .=
" WHERE ld.fk_commande_ligne = cd.rowid";
2374 $resql = $db->query($sql);
2377 $num = $db->num_rows($resql);
2381 $obj = $db->fetch_object($resql);
2383 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"livraisondet SET";
2384 $sql .=
" fk_product = ".((int) $obj->fk_product);
2385 $sql .=
",description = '".$db->escape($obj->description).
"'";
2386 $sql .=
",subprice = ".price2num($obj->subprice);
2387 $sql .=
",total_ht = ".price2num($obj->total_ht);
2388 $sql .=
" WHERE fk_commande_ligne = ".((int) $obj->rowid);
2389 $resql2 = $db->query($sql);
2392 $sql =
"SELECT total_ht";
2393 $sql .=
" FROM ".MAIN_DB_PREFIX.
"livraison";
2394 $sql .=
" WHERE rowid = ".((int) $obj->fk_livraison);
2395 $resql3 = $db->query($sql);
2398 $obju = $db->fetch_object($resql3);
2399 $total_ht = $obju->total_ht + $obj->total_ht;
2401 $sqlu =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
2402 $sqlu .=
" total_ht = ".price2num($total_ht,
'MT');
2403 $sqlu .=
" WHERE rowid = ".((int) $obj->fk_livraison);
2404 $resql4 = $db->query($sqlu);
2424 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraisondet CHANGE fk_commande_ligne fk_origin_line integer";
2425 print $langs->trans(
'FieldRenamed').
"<br>\n";
2435 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraisondet",
"fk_origin_line");
2436 $obj = $db->fetch_object($result);
2438 $sql =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraisondet ADD COLUMN fk_origin_line integer after fk_livraison";
2441 print $langs->trans(
'AlreadyDone').
"<br>\n";
2458 print
'<tr><td colspan="4">';
2461 print
'<b>'.$langs->trans(
'MigrationStockDetail').
"</b><br>\n";
2467 $sql =
"SELECT SUM(reel) as total, fk_product";
2468 $sql .=
" FROM ".MAIN_DB_PREFIX.
"product_stock as ps";
2469 $sql .=
" GROUP BY fk_product";
2470 $resql = $db->query($sql);
2473 $num = $db->num_rows($resql);
2477 $obj = $db->fetch_object($resql);
2479 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"product SET";
2480 $sql .=
" stock = ".price2num($obj->total,
'MS');
2481 $sql .=
" WHERE rowid = ".((int) $obj->fk_product);
2483 $resql2 = $db->query($sql);
2520 print
'<tr><td colspan="4">';
2523 print
'<b>'.$langs->trans(
'MigrationMenusDetail').
"</b><br>\n";
2527 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"menu_constraint")) {
2530 $sql =
"SELECT m.rowid, mc.action";
2531 $sql .=
" FROM ".MAIN_DB_PREFIX.
"menu_constraint as mc, ".MAIN_DB_PREFIX.
"menu_const as md, ".MAIN_DB_PREFIX.
"menu as m";
2532 $sql .=
" WHERE md.fk_menu = m.rowid AND md.fk_constraint = mc.rowid";
2533 $sql .=
" AND m.enabled = '1'";
2534 $resql = $db->query($sql);
2537 $num = $db->num_rows($resql);
2540 $obj = $db->fetch_object($resql);
2542 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"menu SET";
2543 $sql .=
" enabled = '".$db->escape($obj->action).
"'";
2544 $sql .=
" WHERE rowid = ".((int) $obj->rowid);
2545 $sql .=
" AND enabled = '1'";
2547 $resql2 = $db->query($sql);
2568 print $langs->trans(
'AlreadyDone').
"<br>\n";
2587 print
'<tr><td colspan="4">';
2590 print
'<b>'.$langs->trans(
'MigrationDeliveryAddress').
"</b><br>\n";
2594 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"co_exp")) {
2597 $sql =
"SELECT c.fk_adresse_livraison, ce.fk_expedition";
2598 $sql .=
" FROM ".MAIN_DB_PREFIX.
"commande as c";
2599 $sql .=
", ".MAIN_DB_PREFIX.
"co_exp as ce";
2600 $sql .=
" WHERE c.rowid = ce.fk_commande";
2601 $sql .=
" AND c.fk_adresse_livraison IS NOT NULL AND c.fk_adresse_livraison != 0";
2603 $resql = $db->query($sql);
2606 $num = $db->num_rows($resql);
2610 $obj = $db->fetch_object($resql);
2612 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"expedition SET";
2613 $sql .=
" fk_adresse_livraison = '".$db->escape($obj->fk_adresse_livraison).
"'";
2614 $sql .=
" WHERE rowid = ".((int) $obj->fk_expedition);
2616 $resql2 = $db->query($sql);
2625 print $langs->trans(
'AlreadyDone').
"<br>\n";
2638 print $langs->trans(
'AlreadyDone').
"<br>\n";
2657 if (($db->type ==
'mysql' || $db->type ==
'mysqli')) {
2659 dolibarr_install_syslog(
"upgrade2::migrate_restore_missing_links Version of database too old to make this migrate action");
2663 print
'<tr><td colspan="4">';
2666 print
'<b>'.$langs->trans(
'MigrationFixData').
"</b> (1)<br>\n";
2672 $table1 =
'facturedet';
2673 $field1 =
'fk_remise_except';
2674 $table2 =
'societe_remise_except';
2675 $field2 =
'fk_facture_line';
2679 $sql =
"SELECT t1.rowid, t1.".$field1.
" as field";
2680 $sql .=
" FROM ".MAIN_DB_PREFIX.$table1.
" as t1";
2681 $sql .=
" WHERE t1.".$field1.
" IS NOT NULL AND t1.".$field1.
" NOT IN";
2682 $sql .=
" (SELECT t2.rowid FROM ".MAIN_DB_PREFIX.$table2.
" as t2";
2683 $sql .=
" WHERE t1.rowid = t2.".$field2.
")";
2686 $resql = $db->query($sql);
2689 $num = $db->num_rows($resql);
2693 $obj = $db->fetch_object($resql);
2695 print
'Line '.$obj->rowid.
' in '.$table1.
' is linked to record '.$obj->field.
' in '.$table2.
' that has no link to '.$table1.
'. We fix this.<br>';
2697 $sql =
"UPDATE ".MAIN_DB_PREFIX.$db->sanitize($table2).
" SET";
2698 $sql .=
" ".$db->sanitize($field2).
" = '".$db->escape($obj->rowid).
"'";
2699 $sql .=
" WHERE rowid = ".((int) $obj->field);
2701 $resql2 = $db->query($sql);
2710 print $langs->trans(
'AlreadyDone').
"<br>\n";
2726 print
'<tr><td colspan="4">';
2729 print
'<b>'.$langs->trans(
'MigrationFixData').
"</b> (2)<br>\n";
2732 $table2 =
'facturedet';
2733 $field2 =
'fk_remise_except';
2734 $table1 =
'societe_remise_except';
2735 $field1 =
'fk_facture_line';
2739 $sql =
"SELECT t1.rowid, t1.".$field1.
" as field";
2740 $sql .=
" FROM ".MAIN_DB_PREFIX.$table1.
" as t1";
2741 $sql .=
" WHERE t1.".$field1.
" IS NOT NULL AND t1.".$field1.
" NOT IN";
2742 $sql .=
" (SELECT t2.rowid FROM ".MAIN_DB_PREFIX.$table2.
" as t2";
2743 $sql .=
" WHERE t1.rowid = t2.".$field2.
")";
2746 $resql = $db->query($sql);
2749 $num = $db->num_rows($resql);
2753 $obj = $db->fetch_object($resql);
2755 print
'Line '.$obj->rowid.
' in '.$table1.
' is linked to record '.$obj->field.
' in '.$table2.
' that has no link to '.$table1.
'. We fix this.<br>';
2757 $sql =
"UPDATE ".MAIN_DB_PREFIX.$db->sanitize($table2).
" SET";
2758 $sql .=
" ".$db->sanitize($field2).
" = '".$db->escape($obj->rowid).
"'";
2759 $sql .=
" WHERE rowid = ".((int) $obj->field);
2761 $resql2 = $db->query($sql);
2770 print $langs->trans(
'AlreadyDone').
"<br>\n";
2785 return ($error ? -1 : 1);
2800 print
'<tr><td colspan="4">';
2803 print
'<b>'.$langs->trans(
'MigrationProjectUserResp').
"</b><br>\n";
2805 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"projet",
"fk_user_resp");
2806 $obj = $db->fetch_object($result);
2812 $sql =
"SELECT rowid, fk_user_resp FROM ".MAIN_DB_PREFIX.
"projet";
2813 $resql = $db->query($sql);
2816 $num = $db->num_rows($resql);
2820 $obj = $db->fetch_object($resql);
2822 $sql2 =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_contact (";
2823 $sql2 .=
"datecreate";
2824 $sql2 .=
", statut";
2825 $sql2 .=
", element_id";
2826 $sql2 .=
", fk_c_type_contact";
2827 $sql2 .=
", fk_socpeople";
2828 $sql2 .=
") VALUES (";
2829 $sql2 .=
"'".$db->idate(
dol_now()).
"'";
2831 $sql2 .=
", ".$obj->rowid;
2833 $sql2 .=
", ".$obj->fk_user_resp;
2836 if ($obj->fk_user_resp > 0) {
2837 $resql2 = $db->query($sql2);
2850 $sqlDrop =
"ALTER TABLE ".MAIN_DB_PREFIX.
"projet DROP COLUMN fk_user_resp";
2851 if ($db->query($sqlDrop)) {
2864 print $langs->trans(
'AlreadyDone').
"<br>\n";
2881 print
'<tr><td colspan="4">';
2884 print
'<b>'.$langs->trans(
'MigrationProjectTaskActors').
"</b><br>\n";
2886 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"projet_task_actors")) {
2891 $sql =
"SELECT fk_projet_task as fk_project_task, fk_user FROM ".MAIN_DB_PREFIX.
"projet_task_actors";
2892 $resql = $db->query($sql);
2895 $num = $db->num_rows($resql);
2899 $obj = $db->fetch_object($resql);
2901 $sql2 =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_contact (";
2902 $sql2 .=
"datecreate";
2903 $sql2 .=
", statut";
2904 $sql2 .=
", element_id";
2905 $sql2 .=
", fk_c_type_contact";
2906 $sql2 .=
", fk_socpeople";
2907 $sql2 .=
") VALUES (";
2908 $sql2 .=
"'".$db->idate(
dol_now()).
"'";
2910 $sql2 .=
", ".$obj->fk_project_task;
2912 $sql2 .=
", ".$obj->fk_user;
2915 $resql2 = $db->query($sql2);
2927 $sqlDrop =
"DROP TABLE ".MAIN_DB_PREFIX.
"projet_task_actors";
2928 if ($db->query($sqlDrop)) {
2941 print $langs->trans(
'AlreadyDone').
"<br>\n";
2961 print
'<tr><td colspan="4">';
2964 print
'<b>'.$langs->trans(
'MigrationRelationshipTables', MAIN_DB_PREFIX.$table).
"</b><br>\n";
2968 if ($db->DDLInfoTable(MAIN_DB_PREFIX.$table)) {
2973 $sqlSelect =
"SELECT ".$fk_source.
", ".$fk_target;
2974 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.$table;
2976 $resql = $db->query($sqlSelect);
2979 $num = $db->num_rows($resql);
2983 $obj = $db->fetch_object($resql);
2985 $sqlInsert =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_element (";
2986 $sqlInsert .=
"fk_source";
2987 $sqlInsert .=
", sourcetype";
2988 $sqlInsert .=
", fk_target";
2989 $sqlInsert .=
", targettype";
2990 $sqlInsert .=
") VALUES (";
2991 $sqlInsert .= $obj->$fk_source;
2992 $sqlInsert .=
", '".$db->escape($sourcetype).
"'";
2993 $sqlInsert .=
", ".$obj->$fk_target;
2994 $sqlInsert .=
", '".$db->escape($targettype).
"'";
2997 $result = $db->query($sqlInsert);
3006 print $langs->trans(
'AlreadyDone').
"<br>\n";
3010 $sqlDrop =
"DROP TABLE ".MAIN_DB_PREFIX.$table;
3011 if ($db->query($sqlDrop)) {
3024 print $langs->trans(
'AlreadyDone').
"<br>\n";
3042 print
'<tr><td colspan="4">';
3045 print
'<b>'.$langs->trans(
'MigrationProjectTaskTime').
"</b><br>\n";
3051 $sql =
"SELECT rowid, fk_element, element_duration";
3052 $sql .=
" FROM ".MAIN_DB_PREFIX.
"element_time";
3053 $resql = $db->query($sql);
3056 $num = $db->num_rows($resql);
3059 $totaltime = array();
3063 $obj = $db->fetch_object($resql);
3065 if ($obj->element_duration > 0) {
3068 list($hour, $min) = explode(
'.', $obj->element_duration);
3069 $hour = (int) $hour * 60 * 60;
3070 $min = (int) ((
float) (
'.'.$min)) * 3600;
3071 $newtime = $hour + $min;
3073 $sql2 =
"UPDATE ".MAIN_DB_PREFIX.
"element_time SET";
3074 $sql2 .=
" element_duration = ".((int) $newtime);
3075 $sql2 .=
" WHERE rowid = ".((int) $obj->rowid);
3077 $resql2 = $db->query($sql2);
3084 if (!empty($totaltime[$obj->fk_element])) {
3085 $totaltime[$obj->fk_element] += $newtime;
3087 $totaltime[$obj->fk_element] = $newtime;
3090 if (!empty($totaltime[$obj->fk_element])) {
3091 $totaltime[$obj->fk_element] += $obj->element_duration;
3093 $totaltime[$obj->fk_element] = $obj->element_duration;
3102 foreach ($totaltime as $taskid => $total_duration) {
3103 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"projet_task SET";
3104 $sql .=
" duration_effective = ".((int) $total_duration);
3105 $sql .=
" WHERE rowid = ".((int) $taskid);
3107 $resql = $db->query($sql);
3114 print $langs->trans(
'AlreadyDone').
"<br>\n";
3120 print $langs->trans(
'AlreadyDone').
"<br>\n";
3145 print
'<tr><td colspan="4">';
3148 print
'<b>'.$langs->trans(
'MigrationCustomerOrderShipping').
"</b><br>\n";
3152 $result1 = $db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"ref_customer");
3153 $result2 = $db->DDLDescTable(MAIN_DB_PREFIX.
"expedition",
"date_delivery");
3154 $obj1 = $db->fetch_object($result1);
3155 $obj2 = $db->fetch_object($result2);
3156 if (!$obj1 && !$obj2) {
3161 $sqlAdd1 =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition ADD COLUMN ref_customer varchar(30) AFTER entity";
3162 $sqlAdd2 =
"ALTER TABLE ".MAIN_DB_PREFIX.
"expedition ADD COLUMN date_delivery date DEFAULT NULL AFTER date_expedition";
3164 if ($db->query($sqlAdd1) && $db->query($sqlAdd2)) {
3165 $sqlSelect =
"SELECT e.rowid as shipping_id, c.ref_client, c.date_livraison as delivery_date";
3166 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"expedition as e";
3167 $sqlSelect .=
", ".MAIN_DB_PREFIX.
"element_element as el";
3168 $sqlSelect .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"commande as c ON c.rowid = el.fk_source AND el.sourcetype = 'commande'";
3169 $sqlSelect .=
" WHERE e.rowid = el.fk_target";
3170 $sqlSelect .=
" AND el.targettype = 'shipping'";
3172 $resql = $db->query($sqlSelect);
3175 $num = $db->num_rows($resql);
3179 $obj = $db->fetch_object($resql);
3181 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"expedition SET";
3182 $sqlUpdate .=
" ref_customer = '".$db->escape($obj->ref_client).
"'";
3183 $sqlUpdate .=
", date_delivery = '".$db->escape($obj->delivery_date ? $obj->delivery_date :
'null').
"'";
3184 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->shipping_id);
3186 $result = $db->query($sqlUpdate);
3195 print $langs->trans(
'AlreadyDone').
"<br>\n";
3213 print $langs->trans(
'AlreadyDone').
"<br>\n";
3229 print
'<tr><td colspan="4">';
3232 print
'<b>'.$langs->trans(
'MigrationShippingDelivery').
"</b><br>\n";
3236 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"livraison",
"fk_expedition");
3237 $obj = $db->fetch_object($result);
3243 $sqlSelect =
"SELECT rowid, fk_expedition";
3244 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"livraison";
3245 $sqlSelect .=
" WHERE fk_expedition is not null";
3247 $resql = $db->query($sqlSelect);
3250 $num = $db->num_rows($resql);
3254 $obj = $db->fetch_object($resql);
3256 $sqlInsert =
"INSERT INTO ".MAIN_DB_PREFIX.
"element_element (";
3257 $sqlInsert .=
"fk_source";
3258 $sqlInsert .=
", sourcetype";
3259 $sqlInsert .=
", fk_target";
3260 $sqlInsert .=
", targettype";
3261 $sqlInsert .=
") VALUES (";
3262 $sqlInsert .= $obj->fk_expedition;
3263 $sqlInsert .=
", 'shipping'";
3264 $sqlInsert .=
", ".$obj->rowid;
3265 $sqlInsert .=
", 'delivery'";
3268 $result = $db->query($sqlInsert);
3270 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET fk_expedition = NULL";
3271 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
3273 $result = $db->query($sqlUpdate);
3286 print $langs->trans(
'AlreadyDone').
"<br>\n";
3290 $sqlDelete =
"DELETE FROM ".MAIN_DB_PREFIX.
"element_element WHERE sourcetype = 'commande' AND targettype = 'delivery'";
3291 $db->query($sqlDelete);
3296 $sqlDrop =
"ALTER TABLE ".MAIN_DB_PREFIX.
"livraison DROP COLUMN fk_expedition";
3297 $db->query($sqlDrop);
3307 print $langs->trans(
'AlreadyDone').
"<br>\n";
3324 print
'<tr><td colspan="4">';
3327 print
'<b>'.$langs->trans(
'MigrationShippingDelivery2').
"</b><br>\n";
3335 $sqlSelect =
"SELECT l.rowid as delivery_id, e.ref_customer, e.date_delivery";
3336 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"livraison as l,";
3337 $sqlSelect .=
" ".MAIN_DB_PREFIX.
"element_element as el,";
3338 $sqlSelect .=
" ".MAIN_DB_PREFIX.
"expedition as e";
3339 $sqlSelect .=
" WHERE l.rowid = el.fk_target";
3340 $sqlSelect .=
" AND el.targettype = 'delivery'";
3341 $sqlSelect .=
" AND e.rowid = el.fk_source AND el.sourcetype = 'shipping'";
3342 $sqlSelect .=
" AND (e.ref_customer IS NOT NULL OR e.date_delivery IS NOT NULL)";
3344 $sqlSelect .=
" AND (l.ref_customer IS NULL".($db->type !=
'pgsql' ?
" or l.ref_customer = ''" :
"").
")";
3345 $sqlSelect .=
" AND (l.date_delivery IS NULL".($db->type !=
'pgsql' ?
" or l.date_delivery = ''" :
"").
")";
3347 $resql = $db->query($sqlSelect);
3350 $num = $db->num_rows($resql);
3354 $obj = $db->fetch_object($resql);
3356 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"livraison SET";
3357 $sqlUpdate .=
" ref_customer = '".$db->escape($obj->ref_customer).
"',";
3358 $sqlUpdate .=
" date_delivery = ".($obj->date_delivery ?
"'".$db->escape($obj->date_delivery).
"'" :
'null');
3359 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->delivery_id);
3361 $result = $db->query($sqlUpdate);
3370 print $langs->trans(
'AlreadyDone').
"<br>\n";
3397 print
'<tr><td colspan="4">';
3400 print
'<b>'.$langs->trans(
'MigrationActioncommElement').
"</b><br>\n";
3403 'propal' =>
'propalrowid',
3404 'order' =>
'fk_commande',
3405 'invoice' =>
'fk_facture',
3406 'contract' =>
'fk_contract',
3407 'order_supplier' =>
'fk_supplier_order',
3408 'invoice_supplier' =>
'fk_supplier_invoice'
3411 foreach ($elements as $type => $field) {
3412 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"actioncomm", $field);
3413 $obj = $db->fetch_object($result);
3419 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"actioncomm SET ";
3420 $sql .=
"fk_element = ".$db->sanitize($field).
", elementtype = '".$db->escape($type).
"'";
3421 $sql .=
" WHERE ".$db->sanitize($field).
" IS NOT NULL";
3422 $sql .=
" AND fk_element IS NULL";
3423 $sql .=
" AND elementtype IS NULL";
3425 $resql = $db->query($sql);
3439 print $langs->trans(
'AlreadyDone').
"<br>\n";
3456 print
'<tr><td colspan="4">';
3459 print
'<b>'.$langs->trans(
'MigrationPaymentMode').
"</b><br>\n";
3462 'old_id' => array(5, 8, 9, 10, 11),
3463 'new_id' => array(50, 51, 52, 53, 54),
3464 'code' => array(
'VAD',
'TRA',
'LCR',
'FAC',
'PRO'),
3465 'tables' => array(
'commande_fournisseur',
'commande',
'facture_rec',
'facture',
'propal')
3469 foreach ($elements[
'old_id'] as $key => $old_id) {
3474 $sqlSelect =
"SELECT id";
3475 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"c_paiement";
3476 $sqlSelect .=
" WHERE id = ".((int) $old_id);
3477 $sqlSelect .=
" AND code = '".$db->escape($elements[
'code'][$key]).
"'";
3479 $resql = $db->query($sqlSelect);
3481 $num = $db->num_rows($resql);
3487 $sqla =
"UPDATE ".MAIN_DB_PREFIX.
"paiement SET";
3488 $sqla .=
" fk_paiement = ".((int) $elements[
'new_id'][$key]);
3489 $sqla .=
" WHERE fk_paiement = ".((int) $old_id);
3490 $sqla .=
" AND fk_paiement IN (SELECT id FROM ".MAIN_DB_PREFIX.
"c_paiement WHERE id = ".((int) $old_id).
" AND code = '".$db->escape($elements[
'code'][$key]).
"')";
3491 $resqla = $db->query($sqla);
3493 $sql =
"UPDATE ".MAIN_DB_PREFIX.
"c_paiement SET";
3494 $sql .=
" id = ".((int) $elements[
'new_id'][$key]);
3495 $sql .=
" WHERE id = ".((int) $old_id);
3496 $sql .=
" AND code = '".$db->escape($elements[
'code'][$key]).
"'";
3497 $resql = $db->query($sql);
3499 if ($resqla && $resql) {
3500 foreach ($elements[
'tables'] as $table) {
3501 $sql =
"UPDATE ".MAIN_DB_PREFIX.$table.
" SET ";
3502 $sql .=
"fk_mode_reglement = ".((int) $elements[
'new_id'][$key]);
3503 $sql .=
" WHERE fk_mode_reglement = ".((int) $old_id);
3505 $resql = $db->query($sql);
3528 print $langs->trans(
'AlreadyDone').
"<br>\n";
3546 $result = $db->DDLDescTable(MAIN_DB_PREFIX.
"categorie_association");
3548 $obj = $db->fetch_object($result);
3551 $children = array();
3552 $sql =
"SELECT fk_categorie_mere, fk_categorie_fille";
3553 $sql .=
" FROM ".MAIN_DB_PREFIX.
"categorie_association";
3555 $resql = $db->query($sql);
3557 $num = $db->num_rows($resql);
3558 while ($obj = $db->fetch_object($resql)) {
3559 if (!isset($children[$obj->fk_categorie_fille])) {
3560 if ($obj->fk_categorie_mere != $obj->fk_categorie_fille) {
3561 $children[$obj->fk_categorie_fille] = 1;
3562 $couples[$obj->fk_categorie_mere.
'_'.$obj->fk_categorie_fille] = array(
'mere' => $obj->fk_categorie_mere,
'fille' => $obj->fk_categorie_fille);
3570 if (count($couples) > 0 && $num > count($couples)) {
3576 $sql =
"DELETE FROM ".MAIN_DB_PREFIX.
"categorie_association";
3578 $resqld = $db->query($sql);
3581 foreach ($couples as $key => $val) {
3582 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"categorie_association(fk_categorie_mere,fk_categorie_fille)";
3583 $sql .=
" VALUES(".((int) $val[
'mere']).
", ".((int) $val[
'fille']).
")";
3585 $resqli = $db->query($sql);
3593 print
'<tr><td>'.$langs->trans(
"MigrationCategorieAssociation").
'</td>';
3594 print
'<td class="right">'.$langs->trans(
"RemoveDuplicates").
' '.$langs->trans(
"Success").
' ('.$num.
'=>'.count($couples).
')</td></tr>';
3597 print
'<tr><td>'.$langs->trans(
"MigrationCategorieAssociation").
'</td>';
3598 print
'<td class="right">'.$langs->trans(
"RemoveDuplicates").
' '.$langs->trans(
"Failed").
'</td></tr>';
3603 print
'<tr><td>'.$langs->trans(
"Error").
'</td>';
3604 print
'<td class="right"><div class="error">'.$db->lasterror().
'</div></td></tr>';
3621 print
'<tr><td colspan="4">';
3624 print
'<b>'.$langs->trans(
'MigrationCategorieAssociation').
"</b><br>\n";
3628 if ($db->DDLInfoTable(MAIN_DB_PREFIX.
"categorie_association")) {
3633 $sqlSelect =
"SELECT fk_categorie_mere, fk_categorie_fille";
3634 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"categorie_association";
3636 $resql = $db->query($sqlSelect);
3639 $num = $db->num_rows($resql);
3643 $obj = $db->fetch_object($resql);
3645 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"categorie SET ";
3646 $sqlUpdate .=
"fk_parent = ".((int) $obj->fk_categorie_mere);
3647 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->fk_categorie_fille);
3649 $result = $db->query($sqlUpdate);
3658 print $langs->trans(
'AlreadyDone').
"<br>\n";
3671 print $langs->trans(
'AlreadyDone').
"<br>\n";
3687 print
'<tr><td colspan="4">';
3690 print
'<b>'.$langs->trans(
'MigrationEvents').
"</b><br>\n";
3698 $sqlSelect =
"SELECT a.id, a.fk_user_action";
3699 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"actioncomm as a";
3700 $sqlSelect .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"actioncomm_resources as ar ON ar.fk_actioncomm = a.id AND ar.element_type = 'user' AND ar.fk_element = a.fk_user_action";
3701 $sqlSelect .=
" WHERE fk_user_action > 0 AND fk_user_action NOT IN (SELECT fk_element FROM ".MAIN_DB_PREFIX.
"actioncomm_resources as ar WHERE ar.fk_actioncomm = a.id AND ar.element_type = 'user')";
3702 $sqlSelect .=
" ORDER BY a.id";
3705 $resql = $db->query($sqlSelect);
3708 $num = $db->num_rows($resql);
3712 $obj = $db->fetch_object($resql);
3714 $sqlUpdate =
"INSERT INTO ".MAIN_DB_PREFIX.
"actioncomm_resources(fk_actioncomm, element_type, fk_element) ";
3715 $sqlUpdate .=
"VALUES(".((int) $obj->id).
", 'user', ".((int) $obj->fk_user_action).
")";
3717 $result = $db->query($sqlUpdate);
3726 print $langs->trans(
'AlreadyDone').
"<br>\n";
3753 print
'<tr><td colspan="4">';
3756 print
'<b>'.$langs->trans(
'MigrationEventsContact').
"</b><br>\n";
3764 $sqlSelect =
"SELECT a.id, a.fk_contact";
3765 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"actioncomm as a";
3766 $sqlSelect .=
" LEFT JOIN ".MAIN_DB_PREFIX.
"actioncomm_resources as ar ON ar.fk_actioncomm = a.id AND ar.element_type = 'socpeople' AND ar.fk_element = a.fk_contact";
3767 $sqlSelect .=
" WHERE fk_contact > 0 AND fk_contact NOT IN (SELECT fk_element FROM ".MAIN_DB_PREFIX.
"actioncomm_resources as ar WHERE ar.fk_actioncomm = a.id AND ar.element_type = 'socpeople')";
3768 $sqlSelect .=
" ORDER BY a.id";
3771 $resql = $db->query($sqlSelect);
3774 $num = $db->num_rows($resql);
3778 $obj = $db->fetch_object($resql);
3780 $sqlUpdate =
"INSERT INTO ".MAIN_DB_PREFIX.
"actioncomm_resources(fk_actioncomm, element_type, fk_element) ";
3781 $sqlUpdate .=
"VALUES(".((int) $obj->id).
", 'socpeople', ".((int) $obj->fk_contact).
")";
3783 $result = $db->query($sqlUpdate);
3792 print $langs->trans(
'AlreadyDone').
"<br>\n";
3822 require_once DOL_DOCUMENT_ROOT.
'/blockedlog/class/blockedlog.class.php';
3824 print
'<tr><td colspan="4">';
3827 print
'<b>'.$langs->trans(
'MigrationResetBlockedLog').
"</b><br>\n";
3835 $sqlSelect =
"SELECT DISTINCT entity";
3836 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"blockedlog";
3840 $resql = $db->query($sqlSelect);
3843 $num = $db->num_rows($resql);
3847 $obj = $db->fetch_object($resql);
3849 print
'Process entity '.$obj->entity;
3851 $sqlSearch =
"SELECT count(rowid) as nb FROM ".MAIN_DB_PREFIX.
"blockedlog WHERE action = 'MODULE_SET' and entity = ".((int) $obj->entity);
3852 $resqlSearch = $db->query($sqlSearch);
3854 $objSearch = $db->fetch_object($resqlSearch);
3856 if ($objSearch && $objSearch->nb == 0) {
3857 print
' - Record for entity must be reset...';
3859 $sqlUpdate =
"DELETE FROM ".MAIN_DB_PREFIX.
"blockedlog";
3860 $sqlUpdate .=
" WHERE entity = ".((int) $obj->entity);
3861 $resqlUpdate = $db->query($sqlUpdate);
3862 if (!$resqlUpdate) {
3871 $object->entity = $obj->entity;
3875 $b->setObjectData(
$object,
'MODULE_SET', 0, $user,
null);
3877 $res = $b->create($user);
3883 print
' - '.$langs->trans(
'AlreadyInV7').
'<br>';
3892 print $langs->trans(
'NothingToDo').
"<br>\n";
3919 print
'<tr><td colspan="4">';
3922 print
'<b>'.$langs->trans(
'MigrationRemiseEntity').
"</b><br>\n";
3930 $sqlSelect =
"SELECT sr.rowid, s.entity";
3931 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise as sr, ".MAIN_DB_PREFIX.
"societe as s";
3932 $sqlSelect .=
" WHERE sr.fk_soc = s.rowid and sr.entity != s.entity";
3936 $resql = $db->query($sqlSelect);
3939 $num = $db->num_rows($resql);
3943 $obj = $db->fetch_object($resql);
3945 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"societe_remise SET";
3946 $sqlUpdate .=
" entity = ".$obj->entity;
3947 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
3949 $result = $db->query($sqlUpdate);
3959 print $langs->trans(
'AlreadyDone').
"<br>\n";
3985 print
'<tr><td colspan="4">';
3988 print
'<b>'.$langs->trans(
'MigrationRemiseExceptEntity').
"</b><br>\n";
3996 $sqlSelect =
"SELECT sr.rowid, sr.fk_soc, sr.fk_facture_source, sr.fk_facture, sr.fk_facture_line";
3997 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"societe_remise_except as sr";
4000 $resql = $db->query($sqlSelect);
4003 $num = $db->num_rows($resql);
4007 $obj = $db->fetch_object($resql);
4009 if (!empty($obj->fk_facture_source) || !empty($obj->fk_facture)) {
4010 $fk_facture = (!empty($obj->fk_facture_source) ? $obj->fk_facture_source : $obj->fk_facture);
4012 $sqlSelect2 =
"SELECT f.entity";
4013 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"facture as f";
4014 $sqlSelect2 .=
" WHERE f.rowid = ".((int) $fk_facture);
4015 } elseif (!empty($obj->fk_facture_line)) {
4016 $sqlSelect2 =
"SELECT f.entity";
4017 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"facture as f, ".MAIN_DB_PREFIX.
"facturedet as fd";
4018 $sqlSelect2 .=
" WHERE fd.rowid = ".((int) $obj->fk_facture_line);
4019 $sqlSelect2 .=
" AND fd.fk_facture = f.rowid";
4021 $sqlSelect2 =
"SELECT s.entity";
4022 $sqlSelect2 .=
" FROM ".MAIN_DB_PREFIX.
"societe as s";
4023 $sqlSelect2 .=
" WHERE s.rowid = ".((int) $obj->fk_soc);
4026 $resql2 = $db->query($sqlSelect2);
4028 if ($db->num_rows($resql2) > 0) {
4029 $obj2 = $db->fetch_object($resql2);
4031 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"societe_remise_except SET";
4032 $sqlUpdate .=
" entity = ".((int) $obj2->entity);
4033 $sqlUpdate .=
" WHERE rowid = ".((int) $obj->rowid);
4035 $result = $db->query($sqlUpdate);
4050 print $langs->trans(
'AlreadyDone').
"<br>\n";
4090 array(
'to' => array(
'produit',
'product_advance',
'read_supplier_prices'),
'from' => array(array(
'produit',
'lire',
''), array(
'produit',
'creer',
''))),
4091 array(
'to' => array(
'produit',
'product_advance',
'write_supplier_prices'),
'from' => array(array(
'produit',
'creer',
''))),
4092 array(
'to' => array(
'service',
'service_advance',
'read_supplier_prices'),
'from' => array(array(
'service',
'lire',
''))),
4098 foreach ($rules as $rule) {
4101 if ($targetid <= 0) {
4106 $sourceids = array();
4107 foreach ($rule[
'from'] as $from) {
4113 if (empty($sourceids)) {
4116 $sourcelist = implode(
',', $sourceids);
4119 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"usergroup_rights (entity, fk_usergroup, fk_id)";
4120 $sql .=
" SELECT DISTINCT gr.entity, gr.fk_usergroup, ".((int) $targetid);
4121 $sql .=
" FROM ".MAIN_DB_PREFIX.
"usergroup_rights as gr";
4122 $sql .=
" WHERE gr.fk_id IN (".$db->sanitize($sourcelist).
")";
4123 $sql .=
" AND NOT EXISTS (SELECT 1 FROM ".MAIN_DB_PREFIX.
"usergroup_rights as ex WHERE ex.fk_usergroup = gr.fk_usergroup AND ex.entity = gr.entity AND ex.fk_id = ".((int) $targetid).
")";
4124 if (!$db->query($sql)) {
4130 $sql =
"INSERT INTO ".MAIN_DB_PREFIX.
"user_rights (entity, fk_user, fk_id)";
4131 $sql .=
" SELECT DISTINCT ur.entity, ur.fk_user, ".((int) $targetid);
4132 $sql .=
" FROM ".MAIN_DB_PREFIX.
"user_rights as ur";
4133 $sql .=
" WHERE ur.fk_id IN (".$db->sanitize($sourcelist).
")";
4134 $sql .=
" AND NOT EXISTS (SELECT 1 FROM ".MAIN_DB_PREFIX.
"user_rights as ex WHERE ex.fk_user = ur.fk_user AND ex.entity = ur.entity AND ex.fk_id = ".((int) $targetid).
")";
4135 if (!$db->query($sql)) {
4160 $sql =
"SELECT id FROM ".MAIN_DB_PREFIX.
"rights_def";
4161 $sql .=
" WHERE module = '".$db->escape($module).
"'";
4162 $sql .=
" AND perms = '".$db->escape($perms).
"'";
4163 if ($subperms ===
'') {
4164 $sql .=
" AND (subperms IS NULL OR subperms = '')";
4166 $sql .=
" AND subperms = '".$db->escape($subperms).
"'";
4168 $resql = $db->query($sql);
4172 $obj = $db->fetch_object($resql);
4173 return $obj ? (int) $obj->id : 0;
4186 print
'<tr><td colspan="4">';
4188 print
'<b>'.$langs->trans(
'MigrationUserRightsEntity').
"</b><br>\n";
4196 $sqlSelect =
"SELECT u.rowid, u.entity";
4197 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"user as u";
4198 $sqlSelect .=
" WHERE u.entity > 1";
4201 $resql = $db->query($sqlSelect);
4204 $num = $db->num_rows($resql);
4208 $obj = $db->fetch_object($resql);
4210 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"user_rights SET";
4211 $sqlUpdate .=
" entity = ".((int) $obj->entity);
4212 $sqlUpdate .=
" WHERE fk_user = ".((int) $obj->rowid);
4214 $result = $db->query($sqlUpdate);
4224 print $langs->trans(
'AlreadyDone').
"<br>\n";
4251 print
'<tr><td colspan="4">';
4253 print
'<b>'.$langs->trans(
'MigrationUserGroupRightsEntity').
"</b><br>\n";
4261 $sqlSelect =
"SELECT u.rowid, u.entity";
4262 $sqlSelect .=
" FROM ".MAIN_DB_PREFIX.
"usergroup as u";
4263 $sqlSelect .=
" WHERE u.entity > 1";
4266 $resql = $db->query($sqlSelect);
4269 $num = $db->num_rows($resql);
4273 $obj = $db->fetch_object($resql);
4275 $sqlUpdate =
"UPDATE ".MAIN_DB_PREFIX.
"usergroup_rights SET";
4276 $sqlUpdate .=
" entity = ".((int) $obj->entity);
4277 $sqlUpdate .=
" WHERE fk_usergroup = ".((int) $obj->rowid);
4279 $result = $db->query($sqlUpdate);
4289 print $langs->trans(
'AlreadyDone').
"<br>\n";
4320 if (is_dir(DOL_DATA_ROOT.$oldname) && !file_exists(DOL_DATA_ROOT.$newname)) {
4321 dolibarr_install_syslog(
"upgrade2::migrate_rename_directories move ".DOL_DATA_ROOT.$oldname.
' into '.DOL_DATA_ROOT.$newname);
4322 @rename(DOL_DATA_ROOT.$oldname, DOL_DATA_ROOT.$newname);
4342 $filetodeletearray = array(
4343 '/core/ajax/ajaxcompanies.php',
4344 '/core/triggers/interface_demo.class.php',
4345 '/core/menus/barre_left/default.php',
4346 '/core/menus/barre_top/default.php',
4347 '/core/modules/modComptabiliteExpert.class.php',
4348 '/core/modules/modCommercial.class.php',
4349 '/core/modules/modProduit.class.php',
4350 '/core/modules/modSkype.class.php',
4351 '/core/modules/modactivite.class.php',
4352 '/core/triggers/interface_modWebcalendar_Webcalsynchro.class.php',
4353 '/core/triggers/interface_modCommande_Ecotax.class.php',
4354 '/core/triggers/interface_modCommande_fraisport.class.php',
4355 '/core/triggers/interface_modPropale_PropalWorkflow.class.php',
4356 '/core/triggers/interface_99_modWebhook_WebhookTriggers.class.php',
4357 '/core/triggers/interface_99_modZapier_ZapierTriggers.class.php',
4358 '/core/menus/smartphone/iphone.lib.php',
4359 '/core/menus/smartphone/iphone_backoffice.php',
4360 '/core/menus/smartphone/iphone_frontoffice.php',
4361 '/core/menus/standard/auguria_backoffice.php',
4362 '/core/menus/standard/auguria_frontoffice.php',
4363 '/core/menus/standard/eldy_backoffice.php',
4364 '/core/menus/standard/eldy_frontoffice.php',
4365 '/core/modules/export/export_excel.modules.php',
4366 '/core/modules/export/export_csv.modules.php',
4367 '/core/modules/export/exportcsv.modules.php',
4368 '/core/modules/export/export_excel2007new.modules.php',
4369 '/core/modules/facture/pdf_crabe.modules.php',
4370 '/core/modules/facture/pdf_oursin.modules.php',
4371 '/core/modules/mailings/contacts2.modules.php',
4372 '/core/modules/mailings/contacts3.modules.php',
4373 '/core/modules/mailings/contacts4.modules.php',
4374 '/core/modules/mailings/framboise.modules.php',
4375 '/core/modules/mailings/dolibarr_services_expired.modules.php',
4376 '/core/modules/mailings/peche.modules.php',
4377 '/core/modules/mailings/poire.modules.php',
4378 '/core/modules/mailings/kiwi.modules.php',
4379 '/core/modules/syslog/mod_syslog_chromephp.php',
4380 '/core/modules/syslog/mod_syslog_firephp.php',
4381 '/core/modules/syslog/logHandlerInterface.php',
4382 '/core/boxes/box_members.php',
4384 '/includes/restler/framework/Luracast/Restler/Data/Object.php',
4385 '/includes/nusoap/lib/class.*',
4386 '/phenix/inc/triggers/interface_modPhenix_Phenixsynchro.class.php',
4387 '/webcalendar/inc/triggers/interface_modWebcalendar_webcalsynchro.class.php',
4389 '/api/class/api_generic.class.php',
4390 '/asterisk/cidlookup.php',
4391 '/categories/class/api_category.class.php',
4392 '/categories/class/api_deprecated_category.class.php',
4393 '/compta/facture/class/api_invoice.class.php',
4394 '/commande/class/api_commande.class.php',
4395 '/partnership/class/api_partnership.class.php',
4396 '/product/class/api_product.class.php',
4397 '/recruitment/class/api_recruitment.class.php',
4398 '/societe/class/api_contact.class.php',
4399 '/societe/class/api_thirdparty.class.php',
4400 '/support/online.php',
4401 '/takepos/class/actions_takepos.class.php',
4402 '/user/class/api_user.class.php',
4404 '/install/mysql/tables/llx_c_ticketsup_category.key.sql',
4405 '/install/mysql/tables/llx_c_ticketsup_category.sql',
4406 '/install/mysql/tables/llx_c_ticketsup_severity.key.sql',
4407 '/install/mysql/tables/llx_c_ticketsup_severity.sql',
4408 '/install/mysql/tables/llx_c_ticketsup_type.key.sql',
4409 '/install/mysql/tables/llx_c_ticketsup_type.sql'
4418 foreach ($filetodeletearray as $filetodelete) {
4420 if (preg_match(
'/\*/', $filetodelete) || file_exists(DOL_DOCUMENT_ROOT.$filetodelete)) {
4422 $result =
dol_delete_file(DOL_DOCUMENT_ROOT.$filetodelete, 0, (preg_match(
'/\*/', $filetodelete) ? 1 : 0), 0,
null,
true, 0);
4424 $langs->load(
"errors");
4425 print
'<div class="error">'.$langs->trans(
"Error").
': '.$langs->trans(
"ErrorFailToDeleteFile", DOL_DOCUMENT_ROOT.$filetodelete);
4426 print
' '.$langs->trans(
"RemoveItManuallyAndPressF5ToContinue").
'</div>';
4451 $filetodeletearray = array(
4452 DOL_DOCUMENT_ROOT.
'/core/modules/facture/terre',
4453 DOL_DOCUMENT_ROOT.
'/core/modules/facture/mercure',
4457 if (!empty($_SERVER[
"WINDIR"])) {
4458 $filetodeletearray[] = DOL_DOCUMENT_ROOT.
'/includes/phpoffice/PhpSpreadsheet';
4461 foreach ($filetodeletearray as $filetodelete) {
4463 if (file_exists($filetodelete)) {
4467 $langs->load(
"errors");
4468 print
'<div class="error">'.$langs->trans(
"Error").
': '.$langs->trans(
"ErrorFailToDeleteDir", $filetodelete);
4469 print
' '.$langs->trans(
"RemoveItManuallyAndPressF5ToContinue").
'</div>';
4493 if (count($listofmodule) == 0) {
4497 if (!is_object($user)) {
4498 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4499 $user =
new User($db);
4502 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules force=".$force.
", listofmodule=".implode(
',', array_keys($listofmodule)), LOG_NOTICE);
4504 $reloadactionformodules = array(
4505 'MAIN_MODULE_AGENDA' => array(
'class' =>
'modAgenda',
'remove' => 1),
4506 'MAIN_MODULE_API' => array(
'class' =>
'modApi'),
4507 'MAIN_MODULE_BARCODE' => array(
'class' =>
'modBarcode',
'remove' => 1),
4508 'MAIN_MODULE_BLOCKEDLOG' => array(
'class' =>
'modBlockedLog',
'deleteinsertmenus' => 1),
4509 'MAIN_MODULE_CRON' => array(
'class' =>
'modCron',
'remove' => 1),
4510 'MAIN_MODULE_SOCIETE' => array(
'class' =>
'modSociete',
'remove' => 1),
4511 'MAIN_MODULE_PRODUIT' => array(
'class' =>
'modProduct'),
4512 'MAIN_MODULE_SERVICE' => array(
'class' =>
'modService'),
4513 'MAIN_MODULE_COMMANDE' => array(
'class' =>
'modCommande'),
4514 'MAIN_MODULE_DON' => array(
'class' =>
'modDon'),
4515 'MAIN_MODULE_FACTURE' => array(
'class' =>
'modFacture'),
4516 'MAIN_MODULE_FICHEINTER' => array(
'class' =>
'modFicheinter'),
4517 'MAIN_MODULE_FOURNISSEUR' => array(
'class' =>
'modFournisseur'),
4518 'MAIN_MODULE_EXPEDITION' => array(
'class' =>
'modExpedition'),
4519 'MAIN_MODULE_EXPENSEREPORT' => array(
'class' =>
'modExpenseReport'),
4520 'MAIN_MODULE_EVENTORGANIZATION' => array(
'class' =>
'modEventOrganization',
'remove' => 1),
4521 'MAIN_MODULE_ECM' => array(
'class' =>
'modECM',
'remove' => 1),
4522 'MAIN_MODULE_HOLIDAY' => array(
'class' =>
'modHoliday',
'remove' => 1),
4523 'MAIN_MODULE_KNOWLEDGEMANAGEMENT' => array(
'class' =>
'modKnowledgeManagement',
'remove' => 1),
4524 'MAIN_MODULE_LOAN' => array(
'class' =>
'modLoan',
'remove' => 1),
4525 'MAIN_MODULE_PAYBOX' => array(
'class' =>
'modPaybox',
'remove' => 1),
4526 'MAIN_MODULE_PROPAL' => array(
'class' =>
'modPropale'),
4527 'MAIN_MODULE_SUPPLIERPROPOSAL' => array(
'class' =>
'modSupplierProposal',
'remove' => 1),
4528 'MAIN_MODULE_OPENSURVEY' => array(
'class' =>
'modOpenSurvey',
'remove' => 1),
4529 'MAIN_MODULE_PRODUCTBATCH' => array(
'class' =>
'modProductBatch',
'remove' => 1),
4530 'MAIN_MODULE_TAKEPOS' => array(
'class' =>
'modTakePos',
'remove' => 1),
4531 'MAIN_MODULE_VARIANTS' => array(
'class' =>
'modVariants',
'remove' => 1),
4532 'MAIN_MODULE_EMAILCOLLECTOR' => array(
'class' =>
'modEmailCollector',
'remove' => 1),
4535 foreach ($listofmodule as $moduletoreload => $reloadmode) {
4536 $modulekey = preg_replace(
'/^MAIN_MODULE_/',
'', $moduletoreload);
4538 if (empty($moduletoreload) || (!
isModEnabled(strtolower($modulekey)) && !$force)) {
4544 if (!empty($reloadactionformodules[$moduletoreload])) {
4545 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules Reactivate module ".$moduletoreload.
" with mode ".$reloadmode);
4547 $val = $reloadactionformodules[$moduletoreload];
4548 $classformodule = $val[
'class'];
4549 $res = @include_once DOL_DOCUMENT_ROOT.
'/core/modules/'.$classformodule.
'.class.php';
4551 $mod =
new $classformodule($db);
4552 if (!empty($val[
'remove'])) {
4553 $mod->remove(
'noboxes');
4555 if (!empty($val[
'deleteinsertmenus'])) {
4557 $mod->delete_menus();
4558 $mod->insert_menus();
4560 $mod->init($reloadmode);
4565 preg_match(
'/([a-zA-Z0-9]+)/', $modulekey, $reg);
4566 if (!empty($reg[1])) {
4567 if (strtoupper($moduletoreload) == $moduletoreload) {
4568 $moduletoreloadshort = ucfirst(strtolower($reg[1]));
4570 $moduletoreloadshort = $reg[1];
4573 dolibarr_install_syslog(
"upgrade2::migrate_reload_modules Reactivate module ".$moduletoreloadshort.
" with mode ".$reloadmode.
" (generic code)", LOG_NOTICE);
4575 $res = @include_once DOL_DOCUMENT_ROOT.
'/core/modules/mod'.$moduletoreloadshort.
'.class.php';
4577 $classname =
'mod'.$moduletoreloadshort;
4578 $mod =
new $classname($db);
4579 '@phan-var-force DolibarrModules $mod';
4582 $mod->delete_menus();
4583 $mod->init($reloadmode);
4585 dolibarr_install_syslog(
'Failed to include '.DOL_DOCUMENT_ROOT.
'/core/modules/mod'.$moduletoreloadshort.
'.class.php', LOG_ERR);
4587 $res = @
dol_include_once(strtolower($moduletoreloadshort).
'/core/modules/mod'.$moduletoreloadshort.
'.class.php');
4589 $classname =
'mod'.$moduletoreloadshort;
4590 $mod =
new $classname($db);
4591 '@phan-var-force DolibarrModules $mod';
4592 $mod->init($reloadmode);
4594 dolibarr_install_syslog(
'Failed to include '.strtolower($moduletoreloadshort).
'/core/modules/mod'.$moduletoreloadshort.
'.class.php', LOG_ERR);
4595 print
"Error, can't find module with name ".$moduletoreload.
"\n";
4601 print
"Error, can't find module with name ".$moduletoreload.
"\n";
4606 if (!empty($mod) && is_object($mod)) {
4607 print
'<tr class="trforrunsql"><td colspan="4">';
4608 print
'<b>'.$langs->trans(
'Upgrade').
'</b>: ';
4609 print $langs->trans(
'MigrationReloadModule').
' '.$mod->getName();
4610 print
"<!-- (".$reloadmode.
") -->";
4635 $listofmenuhandler = array();
4638 $listofmenuhandler[
'auguria'] = 1;
4641 foreach ($listofmenuhandler as $key => $val) {
4642 print
'<tr class="trforrunsql"><td colspan="4">';
4646 print
'<b>'.$langs->trans(
'Upgrade').
'</b>: '.$langs->trans(
'MenuHandler').
" ".$key.
"<br>\n";
4649 $dir = DOL_DOCUMENT_ROOT.
"/core/menus/";
4650 $file =
'init_menu_'.$key.
'.sql';
4651 if (file_exists($dir.$file)) {
4652 $result =
run_sql($dir.$file, 1, 0, 1, $key);
4668 global $conf, $db, $langs, $user;
4670 if (!is_object($user)) {
4671 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4672 $user =
new User($db);
4675 print
'<tr><td colspan="4">';
4677 print
'<b>'.$langs->trans(
'MigrationProductLotPath').
"</b><br>\n";
4679 $sql =
"SELECT rowid, entity, batch, fk_product from ".MAIN_DB_PREFIX.
"product_lot";
4680 $resql = $db->query($sql);
4683 $modulepart=
"product_batch";
4687 while ($obj = $db->fetch_object($resql)) {
4688 $entity = (empty($obj->entity) ? 1 : $obj->entity);
4690 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/'.$conf->productbatch->multidir_output[$entity];
4692 $dir = $conf->productbatch->multidir_output[$entity];
4696 $lot->id = (int) $obj->rowid;
4697 $lot->ref = (string) $obj->rowid;
4698 $lot->batch = $obj->batch;
4699 $lot->entity = $obj->entity;
4700 $lot->fk_product = $obj->fk_product;
4702 $savref = $lot->ref;
4704 $lot->ref = $obj->batch;
4705 $origin = $dir .
'/' .
get_exdir(0, 0, 0, 1, $lot, $modulepart);
4707 $lot->ref = $savref;
4708 $destin = $dir .
'/' .
get_exdir(0, 0, 0, 1, $lot, $modulepart);
4730 global $conf, $db, $langs, $user;
4732 print
'<tr><td colspan="4">';
4734 print
'<b>'.$langs->trans(
'MigrationUserPhotoPath').
"</b><br>\n";
4736 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4737 $fuser =
new User($db);
4738 if (!is_object($user)) {
4742 $sql =
"SELECT rowid as uid, entity from ".MAIN_DB_PREFIX.
"user";
4743 $resql = $db->query($sql);
4745 while ($obj = $db->fetch_object($resql)) {
4747 $fuser->id = $obj->uid;
4748 $fuser->entity = $obj->entity;
4751 $entity = (empty($fuser->entity) ? 1 : $fuser->entity);
4753 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/users';
4755 $dir = $conf->user->multidir_output[$entity];
4760 $origin = $dir.
'/'.
get_exdir($fuser->id, 2, 0, 1, $fuser,
'user');
4761 $destin = $dir.
'/'.$fuser->id;
4769 $handle = opendir($origin_osencoded);
4770 if (is_resource($handle)) {
4771 while (($file = readdir($handle)) !==
false) {
4772 if ($file ==
'.' || $file ==
'..') {
4777 $thumbs = opendir($origin_osencoded.
'/'.$file);
4778 if (is_resource($thumbs)) {
4780 while (($thumb = readdir($thumbs)) !==
false) {
4782 if ($thumb ==
'.' || $thumb ==
'..') {
4788 dol_copy($origin.
'/'.$file.
'/'.$thumb, $destin.
'/'.$file.
'/'.$thumb,
'0', 0);
4798 dol_copy($origin.
'/'.$file, $destin.
'/'.$file,
'0', 0);
4819 global $db, $langs, $user;
4821 print
'<tr><td colspan="4">';
4823 print
'<b>'.$langs->trans(
'MigrationUserPhotoPath').
"</b><br>\n";
4825 include_once DOL_DOCUMENT_ROOT.
'/user/class/user.class.php';
4826 $fuser =
new User($db);
4827 if (!is_object($user)) {
4831 $sql =
"SELECT rowid as uid, entity, photo from ".MAIN_DB_PREFIX.
"user";
4832 $resql = $db->query($sql);
4834 while ($obj = $db->fetch_object($resql)) {
4836 $fuser->id = $obj->uid;
4837 $fuser->entity = $obj->entity;
4838 $fuser->photo = $obj->photo;
4841 $entity = (empty($fuser->entity) ? 1 : $fuser->entity);
4843 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/users';
4845 $dir = DOL_DATA_ROOT.
'/users';
4850 $origin = $dir.
'/'.$fuser->id;
4851 $destin = $dir.
'/'.$fuser->id.
'/photos';
4859 $handle = opendir($origin_osencoded);
4860 if (is_resource($handle)) {
4861 while (($file = readdir($handle)) !==
false) {
4862 if ($file ==
'.' || $file ==
'..' || $file ==
'photos') {
4865 if (!empty($fuser->photo) && ($file != $fuser->photo && $file !=
'thumbs')) {
4870 $thumbs = opendir($origin_osencoded.
'/'.$file);
4871 if (is_resource($thumbs)) {
4873 while (($thumb = readdir($thumbs)) !==
false) {
4875 if ($thumb ==
'.' || $thumb ==
'..') {
4881 dol_copy($origin.
'/'.$file.
'/'.$thumb, $destin.
'/'.$file.
'/'.$thumb,
'0', 0);
4890 dol_copy($origin.
'/'.$file, $destin.
'/'.$file,
'0', 0);
4912 global $conf, $db, $langs;
4914 print
'<tr class="trforrunsql"><td>';
4916 print
'<b>'.$langs->trans(
'MigrationHolidayPath').
"</b><br>\n";
4918 include_once DOL_DOCUMENT_ROOT.
'/holiday/class/holiday.class.php';
4921 $sql =
"SELECT rowid as uid, ref, entity from ".MAIN_DB_PREFIX.
"holiday";
4923 $resql = $db->query($sql);
4925 while ($obj = $db->fetch_object($resql)) {
4927 $holiday->id = $obj->uid;
4928 $holiday->ref = $obj->ref;
4929 $holiday->entity = $obj->entity;
4932 $entity = (empty($holiday->entity) ? 1 : $holiday->entity);
4934 $dir = DOL_DATA_ROOT.
'/'.$entity.
'/holiday';
4936 $dir = $conf->holiday->multidir_output[$entity];
4941 $origin = $dir.
'/'.
get_exdir($holiday->id, 2, 0, 1, $holiday,
'holiday');
4942 $destin = $dir.
'/'.$holiday->ref;
4950 $handle = opendir($origin_osencoded);
4951 if (is_resource($handle)) {
4952 while (($file = readdir($handle)) !==
false) {
4953 if ($file ==
'.' || $file ==
'..') {
4958 $thumbs = opendir($origin_osencoded.
'/'.$file);
4959 if (is_resource($thumbs)) {
4961 while (($thumb = readdir($thumbs)) !==
false) {
4963 if ($thumb ==
'.' || $thumb ==
'..') {
4969 dol_copy($origin.
'/'.$file.
'/'.$thumb, $destin.
'/'.$file.
'/'.$thumb,
'0', 0);
4979 dol_copy($origin.
'/'.$file, $destin.
'/'.$file,
'0', 0);
5017 print
'<tr><td colspan="4">';
5018 $sql =
'SELECT rowid, socialnetworks';
5019 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'user WHERE';
5020 $sql .=
" skype IS NOT NULL OR skype <> ''";
5021 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
5022 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
5023 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
5024 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
5025 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
5026 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
5027 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
5028 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
5030 $resql = $db->query($sql);
5032 while ($obj = $db->fetch_object($resql)) {
5033 $arraysocialnetworks = array();
5034 if (!empty($obj->skype)) {
5035 $arraysocialnetworks[
'skype'] = $obj->skype;
5037 if (!empty($obj->twitter)) {
5038 $arraysocialnetworks[
'twitter'] = $obj->twitter;
5040 if (!empty($obj->facebook)) {
5041 $arraysocialnetworks[
'facebook'] = $obj->facebook;
5043 if (!empty($obj->linkedin)) {
5044 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
5046 if (!empty($obj->instagram)) {
5047 $arraysocialnetworks[
'instagram'] = $obj->instagram;
5049 if (!empty($obj->snapchat)) {
5050 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
5052 if (!empty($obj->googleplus)) {
5053 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
5055 if (!empty($obj->youtube)) {
5056 $arraysocialnetworks[
'youtube'] = $obj->youtube;
5058 if (!empty($obj->whatsapp)) {
5059 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
5061 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
5062 $obj->socialnetworks =
'[]';
5064 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
5065 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"user SET socialnetworks='".$db->escape(json_encode($socialnetworks)).
"'";
5066 $sqlupd .=
', skype=null';
5067 $sqlupd .=
', twitter=null';
5068 $sqlupd .=
', facebook=null';
5069 $sqlupd .=
', linkedin=null';
5070 $sqlupd .=
', instagram=null';
5071 $sqlupd .=
', snapchat=null';
5072 $sqlupd .=
', googleplus=null';
5073 $sqlupd .=
', youtube=null';
5074 $sqlupd .=
', whatsapp=null';
5075 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5077 $resqlupd = $db->query($sqlupd);
5092 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Users').
"</b><br>\n";
5106 print
'<tr><td colspan="4">';
5109 print
'<tr><td colspan="4">';
5110 $sql =
'SELECT rowid, socialnetworks';
5111 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'adherent WHERE ';
5112 $sql .=
" skype IS NOT NULL OR skype <> ''";
5113 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
5114 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
5115 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
5116 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
5117 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
5118 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
5119 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
5120 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
5122 $resql = $db->query($sql);
5124 while ($obj = $db->fetch_object($resql)) {
5125 $arraysocialnetworks = array();
5126 if (!empty($obj->skype)) {
5127 $arraysocialnetworks[
'skype'] = $obj->skype;
5129 if (!empty($obj->twitter)) {
5130 $arraysocialnetworks[
'twitter'] = $obj->twitter;
5132 if (!empty($obj->facebook)) {
5133 $arraysocialnetworks[
'facebook'] = $obj->facebook;
5135 if (!empty($obj->linkedin)) {
5136 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
5138 if (!empty($obj->instagram)) {
5139 $arraysocialnetworks[
'instagram'] = $obj->instagram;
5141 if (!empty($obj->snapchat)) {
5142 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
5144 if (!empty($obj->googleplus)) {
5145 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
5147 if (!empty($obj->youtube)) {
5148 $arraysocialnetworks[
'youtube'] = $obj->youtube;
5150 if (!empty($obj->whatsapp)) {
5151 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
5153 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
5154 $obj->socialnetworks =
'[]';
5156 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
5157 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"adherent SET socialnetworks='".$db->escape(json_encode($socialnetworks)).
"'";
5158 $sqlupd .=
', skype=null';
5159 $sqlupd .=
', twitter=null';
5160 $sqlupd .=
', facebook=null';
5161 $sqlupd .=
', linkedin=null';
5162 $sqlupd .=
', instagram=null';
5163 $sqlupd .=
', snapchat=null';
5164 $sqlupd .=
', googleplus=null';
5165 $sqlupd .=
', youtube=null';
5166 $sqlupd .=
', whatsapp=null';
5167 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5169 $resqlupd = $db->query($sqlupd);
5184 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Members').
"</b><br>\n";
5200 print
'<tr><td colspan="4">';
5201 $sql =
'SELECT rowid, socialnetworks';
5202 $sql .=
', jabberid, skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'socpeople WHERE';
5203 $sql .=
" jabberid IS NOT NULL OR jabberid <> ''";
5204 $sql .=
" OR skype IS NOT NULL OR skype <> ''";
5205 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
5206 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
5207 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
5208 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
5209 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
5210 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
5211 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
5212 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
5214 $resql = $db->query($sql);
5216 while ($obj = $db->fetch_object($resql)) {
5217 $arraysocialnetworks = array();
5218 if (!empty($obj->jabberid)) {
5219 $arraysocialnetworks[
'jabber'] = $obj->jabberid;
5221 if (!empty($obj->skype)) {
5222 $arraysocialnetworks[
'skype'] = $obj->skype;
5224 if (!empty($obj->twitter)) {
5225 $arraysocialnetworks[
'twitter'] = $obj->twitter;
5227 if (!empty($obj->facebook)) {
5228 $arraysocialnetworks[
'facebook'] = $obj->facebook;
5230 if (!empty($obj->linkedin)) {
5231 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
5233 if (!empty($obj->instagram)) {
5234 $arraysocialnetworks[
'instagram'] = $obj->instagram;
5236 if (!empty($obj->snapchat)) {
5237 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
5239 if (!empty($obj->googleplus)) {
5240 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
5242 if (!empty($obj->youtube)) {
5243 $arraysocialnetworks[
'youtube'] = $obj->youtube;
5245 if (!empty($obj->whatsapp)) {
5246 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
5248 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
5249 $obj->socialnetworks =
'[]';
5251 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
5252 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"socpeople SET socialnetworks='".$db->escape(json_encode($socialnetworks)).
"'";
5253 $sqlupd .=
', jabberid=null';
5254 $sqlupd .=
', skype=null';
5255 $sqlupd .=
', twitter=null';
5256 $sqlupd .=
', facebook=null';
5257 $sqlupd .=
', linkedin=null';
5258 $sqlupd .=
', instagram=null';
5259 $sqlupd .=
', snapchat=null';
5260 $sqlupd .=
', googleplus=null';
5261 $sqlupd .=
', youtube=null';
5262 $sqlupd .=
', whatsapp=null';
5263 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5265 $resqlupd = $db->query($sqlupd);
5280 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Contacts').
"</b><br>\n";
5296 print
'<tr><td colspan="4">';
5297 $sql =
'SELECT rowid, socialnetworks';
5298 $sql .=
', skype, twitter, facebook, linkedin, instagram, snapchat, googleplus, youtube, whatsapp FROM '.MAIN_DB_PREFIX.
'societe WHERE ';
5299 $sql .=
" skype IS NOT NULL OR skype <> ''";
5300 $sql .=
" OR twitter IS NOT NULL OR twitter <> ''";
5301 $sql .=
" OR facebook IS NOT NULL OR facebook <> ''";
5302 $sql .=
" OR linkedin IS NOT NULL OR linkedin <> ''";
5303 $sql .=
" OR instagram IS NOT NULL OR instagram <> ''";
5304 $sql .=
" OR snapchat IS NOT NULL OR snapchat <> ''";
5305 $sql .=
" OR googleplus IS NOT NULL OR googleplus <> ''";
5306 $sql .=
" OR youtube IS NOT NULL OR youtube <> ''";
5307 $sql .=
" OR whatsapp IS NOT NULL OR whatsapp <> ''";
5309 $resql = $db->query($sql);
5311 while ($obj = $db->fetch_object($resql)) {
5312 $arraysocialnetworks = array();
5313 if (!empty($obj->skype)) {
5314 $arraysocialnetworks[
'skype'] = $obj->skype;
5316 if (!empty($obj->twitter)) {
5317 $arraysocialnetworks[
'twitter'] = $obj->twitter;
5319 if (!empty($obj->facebook)) {
5320 $arraysocialnetworks[
'facebook'] = $obj->facebook;
5322 if (!empty($obj->linkedin)) {
5323 $arraysocialnetworks[
'linkedin'] = $obj->linkedin;
5325 if (!empty($obj->instagram)) {
5326 $arraysocialnetworks[
'instagram'] = $obj->instagram;
5328 if (!empty($obj->snapchat)) {
5329 $arraysocialnetworks[
'snapchat'] = $obj->snapchat;
5331 if (!empty($obj->googleplus)) {
5332 $arraysocialnetworks[
'googleplus'] = $obj->googleplus;
5334 if (!empty($obj->youtube)) {
5335 $arraysocialnetworks[
'youtube'] = $obj->youtube;
5337 if (!empty($obj->whatsapp)) {
5338 $arraysocialnetworks[
'whatsapp'] = $obj->whatsapp;
5340 if ($obj->socialnetworks ==
'' || is_null($obj->socialnetworks)) {
5341 $obj->socialnetworks =
'[]';
5343 $socialnetworks = array_merge($arraysocialnetworks, json_decode($obj->socialnetworks,
true));
5344 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.
"societe SET socialnetworks='".$db->escape(json_encode($socialnetworks)).
"'";
5345 $sqlupd .=
', skype=null';
5346 $sqlupd .=
', twitter=null';
5347 $sqlupd .=
', facebook=null';
5348 $sqlupd .=
', linkedin=null';
5349 $sqlupd .=
', instagram=null';
5350 $sqlupd .=
', snapchat=null';
5351 $sqlupd .=
', googleplus=null';
5352 $sqlupd .=
', youtube=null';
5353 $sqlupd .=
', whatsapp=null';
5354 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5356 $resqlupd = $db->query($sqlupd);
5371 print
'<b>'.$langs->trans(
'MigrationFieldsSocialNetworks',
'Thirdparties').
"</b><br>\n";
5391 print
'<tr class="trforrunsql"><td colspan="4">';
5392 $sql =
'SELECT rowid, field';
5393 if ($mode ==
'export') {
5396 $sql .=
' FROM '.MAIN_DB_PREFIX.$mode.
'_model WHERE';
5397 $sql .=
" type LIKE 'propale_%' OR type LIKE 'commande_%' OR type LIKE 'facture_%'";
5399 $resql = $db->query($sql);
5401 while ($obj = $db->fetch_object($resql)) {
5402 $oldfield = $obj->field;
5403 $newfield = str_replace(array(
',f.facnumber',
'f.facnumber,',
'f.total,',
'f.tva,'), array(
',f.ref',
'f.ref,',
'f.total_ht,',
'f.total_tva,'), $oldfield);
5405 if ($mode ==
'export') {
5406 $oldfilter = $obj->filter;
5407 $newfilter = str_replace(array(
'f.facnumber=',
'f.total=',
'f.tva='), array(
'f.ref=',
'f.total_ht=',
'f.total_tva='), $oldfilter);
5413 if ($oldfield != $newfield || $oldfilter != $newfilter) {
5414 $sqlupd =
'UPDATE '.MAIN_DB_PREFIX.$mode.
"_model SET field = '".$db->escape($newfield).
"'";
5415 if ($mode ==
'export') {
5416 $sqlupd .=
", filter = '".$db->escape($newfilter).
"'";
5418 $sqlupd .=
' WHERE rowid = '.((int) $obj->rowid);
5419 $resultstring .=
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$sqlupd.
"</td></tr>\n";
5420 $resqlupd = $db->query($sqlupd);
5436 print
'<b>'.$langs->trans(
'MigrationImportOrExportProfiles', $mode).
"</b><br>\n";
5439 if ($resultstring) {
5440 print $resultstring;
5442 print
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$langs->trans(
"NothingToDo").
"</td></tr>\n";
5459 print
'<tr class="trforrunsql"><td colspan="4">';
5460 print
'<b>'.$langs->trans(
'MigrationContractLineRank').
"</b><br>\n";
5462 $sql =
"SELECT c.rowid as cid ,cd.rowid as cdid,cd.rang FROM ".$db->prefix().
"contratdet as cd INNER JOIN ".$db->prefix().
"contrat as c ON c.rowid=cd.fk_contrat AND cd.rang=0";
5463 $sql .=
" ORDER BY c.rowid,cd.rowid";
5465 $resql = $db->query($sql);
5468 $current_contract = 0;
5469 while ($obj = $db->fetch_object($resql)) {
5470 if (empty($current_contract) || $current_contract == $obj->cid) {
5476 $sqlUpd =
"UPDATE ".$db->prefix().
"contratdet SET rang=".(int) $currentRank.
" WHERE rowid=".(
int) $obj->cdid;
5477 $resultstring =
'.';
5478 print $resultstring;
5479 $resqlUpd = $db->query($sqlUpd);
5485 $current_contract = $obj->cid;
5498 if (!$resultstring) {
5499 print
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$langs->trans(
"NothingToDo").
"</td></tr>\n";
5514 $firstInstallVersion =
getDolGlobalString(
'MAIN_VERSION_FIRST_INSTALL', DOL_VERSION);
5515 $migrationNeeded = (
versioncompare(explode(
'.', $firstInstallVersion, 3), array(20, 0, -5)) < 0 && !$lock);
5517 print
'<tr class="trforrunsql"><td colspan="4">';
5518 print
'<b>'.$langs->trans(
'InvoiceExportModelsMigration').
"</b>: \n";
5520 if (! $migrationNeeded) {
5521 print $langs->trans(
"AlreadyDone");
5523 dolibarr_set_const($db,
'MIGRATION_FLAG_INVOICE_MODELS_V20', 1,
'chaine', 0,
'To flag the upgrade of invoice template has been set', 0);
5530 $sql1 =
"UPDATE ".$db->prefix().
"export_model SET type = 'facture_0' WHERE type = 'facture_1'";
5532 $resql1 = $db->query($sql1);
5541 $modified1 = $db->affected_rows($resql1);
5543 print str_repeat(
'.', $modified1);
5547 $sql2 =
"UPDATE ".$db->prefix().
"export_model SET type = 'facture_1' WHERE type = 'facture_2'";
5549 $resql2 = $db->query($sql2);
5558 $modified2 = $db->affected_rows($resql2);
5560 print str_repeat(
'.', $modified2);
5564 if (empty($modified1 + $modified2)) {
5565 print $langs->trans(
'NothingToDo');
5570 dolibarr_set_const($db,
'MIGRATION_FLAG_INVOICE_MODELS_V20', 1,
'chaine', 0,
'To flag the upgrade of invoice template has been set', 0);
5587 $bookKeepingAddon =
'';
5591 dolibarr_set_const($db,
'BOOKKEEPING_ADDON',
'mod_bookkeeping_neon',
'chaine', 0,
'', $entity);
5592 $bookKeepingAddon =
'mod_bookkeeping_neon';
5595 print
'<tr class="trforrunsql"><td colspan="4">';
5596 print
'<b>'.$langs->trans(
'MigrationAccountancyBookkeeping').
"</b><br>\n";
5599 if ($bookKeepingAddon ===
'mod_bookkeeping_argon') {
5602 $sql =
"SELECT DISTINCT YEAR(doc_date) as doc_year, MONTH(doc_date) as doc_month, code_journal, piece_num FROM ".$db->prefix().
"accounting_bookkeeping";
5603 $sql .=
" WHERE ref IS NULL AND entity = ".((int) $entity);
5604 $sql .=
" ORDER BY doc_year, doc_month, code_journal, piece_num";
5606 $resql = $db->query($sql);
5608 require_once DOL_DOCUMENT_ROOT .
'/accountancy/class/bookkeeping.class.php';
5611 while ($obj = $db->fetch_object($resql)) {
5612 $bookkeeping->doc_date =
dol_mktime(0, 0, 0, $obj->doc_month, 1, $obj->doc_year);
5613 $bookkeeping->code_journal = $obj->code_journal;
5614 $ref = $bookkeeping->getNextNumRef();
5616 $sqlUpd =
"UPDATE ".$db->prefix().
"accounting_bookkeeping SET ref = '".$db->escape($ref).
"' WHERE piece_num = '".$db->escape($obj->piece_num).
"' AND entity = ".((int) $entity);
5617 $resultstring =
'.';
5618 print $resultstring;
5619 $resqlUpd = $db->query($sqlUpd);
5638 if (!$resultstring) {
5639 print
'<tr class="trforrunsql" style=""><td class="wordbreak" colspan="4">'.$langs->trans(
"NothingToDo").
"</td></tr>\n";
5650 global $conf, $db, $langs;
5652 print
'<tr class="trforrunsql"><td colspan="4">';
5653 print
'<b>'.$langs->trans(
'MigrationApiRestTokens').
"</b>:\n";
5657 $allexistingtokens = array();
5661 $sqlforalltokens =
"SELECT oat.tokenstring";
5662 $sqlforalltokens .=
" FROM ".$db->prefix().
"oauth_token AS oat";
5663 $sqlforalltokens .=
" WHERE oat.service = 'dolibarr_rest_api'";
5665 $resalltoken = $db->query($sqlforalltokens);
5668 while ($tokenobj = $db->fetch_object($resalltoken)) {
5669 $allexistingtokens[] =
dolDecrypt($tokenobj->tokenstring);
5678 $sql =
"SELECT 'dolibarr_rest_api' AS service, u.api_key AS tokenstring, u.rowid AS fk_user, u.entity";
5679 $sql .=
" FROM llx_user AS u";
5680 $sql .=
" WHERE u.api_key IS NOT NULL AND u.api_key <> ''";
5682 $result = $db->query($sql);
5685 $tmpuser =
new User($db);
5687 while ($obj = $db->fetch_object($result)) {
5688 if (!in_array(
dolDecrypt($obj->tokenstring), $allexistingtokens)) {
5690 unset($tmpuser->conf); $tmpuser->conf =
new stdClass();
5691 $tmpuser->fetch((
int) $obj->fk_user,
'',
'', 1, ($obj->entity ? $obj->entity : $conf->entity));
5693 $sqlforinsert =
"INSERT INTO ".MAIN_DB_PREFIX.
"oauth_token (service, tokenstring, fk_user, datec, entity, apicount_total)";
5694 $sqlforinsert .=
" VALUES ('".$db->escape($obj->service).
"', '".$db->escape(
dolEncrypt(
dolDecrypt($obj->tokenstring))).
"', ";
5695 $sqlforinsert .= ((int) $obj->fk_user).
", '".$db->idate(
dol_now()).
"', ".((
int) $obj->entity).
", ";
5696 $sqlforinsert .=
getDolUserInt(
'API_COUNT_CALL', 0, $tmpuser);
5697 $sqlforinsert .=
")";
5699 $insertresult = $db->query($sqlforinsert);
5700 if (!$insertresult) {
5720 if (!$nbofmigration) {
5721 print $langs->trans(
"NothingToDo").
"\n";
5723 print $langs->trans(
'MigratedTokens', $nbofmigration);
5736 global $conf, $db, $langs;
5738 include_once DOL_DOCUMENT_ROOT.
'/core/lib/security.lib.php';
5739 include_once DOL_DOCUMENT_ROOT.
'/core/lib/security2.lib.php';
5741 print
'<tr class="trforrunsql"><td colspan="4">';
5742 print
'<b>'.$langs->trans(
'InitAHMACKeyForBlockedLog').
"</b>:\n";
5748 if (empty($hmac_encoded_secret_key)) {
5750 $hmac_secret_key =
'BLOCKEDLOGHMAC'.getRandomPassword(
true);
5752 $result =
dolibarr_set_const($db,
'BLOCKEDLOG_HMAC_KEY', $hmac_secret_key,
'chaine', 0,
'The secret key for HMAC used for blockedlog record', $conf->entity);
5762 print $langs->trans(
'Done');
5765 $hmac_secret_key =
dolDecrypt($hmac_encoded_secret_key);
5767 if (! preg_match(
'/^BLOCKEDLOGHMAC/', $hmac_secret_key)) {
5768 print
'Error: Failed to decode the crypted value of the parameter BLOCKEDLOG_HMAC_KEY using the $dolibarr_main_crypt_key. A value was found in config parameters in database but decoding failed. May be the database data were restored onto another environment and the coding/decoding key $dolibarr_main_dolcrypt_key was not restored with the same value in conf.php file.';
5769 print
'Restore the value of $dolibarr_main_crypt_key that was used for encryption in database and restart the migration.';
5770 print
'If you don\'t use the Unalterable Log module, you can also remove the BLOCKEDLOG_HMAC_KEY entry from llx_const table. If you use the Unalterable Log, this is not possible because this will invalidate all past record.';
5777 print $langs->trans(
"NothingToDo").
"\n";
$id
Support class for third parties, contacts, members, users or resources.
if(! $sortfield) if(! $sortorder) $object
run_sql($sqlfile, $silent=1, $entity=0, $usesavepoint=1, $handler='', $okerror='default', $linelengthlimit=32768, $nocommentremoval=0, $offsetforchartofaccount=0, $colspan=0, $onlysqltoimportwebsite=0, $database='')
Launch a sql file.
dolibarr_set_const($db, $name, $value, $type='chaine', $visible=0, $note='', $entity=1)
Insert a parameter (key,value) into database (delete old key then insert it again).
versioncompare($versionarray1, $versionarray2)
Compare 2 versions (stored into 2 arrays), to know if a version (a,b,c) is lower than (x,...
Class to manage Blocked Log.
Class to manage Ledger (General Ledger and Subledger)
Class to manage line orders.
Class to manage lines of contracts.
Class to manage invoices.
Class to manage invoice lines.
Class of the module paid holiday.
Parent class for log handlers.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
Class to manage order lines.
Class with list of lots and properties.
Class to manage commercial proposal lines.
Class to manage third parties objects (customers, suppliers, prospects...)
Class to manage Dolibarr users.
dol_copy($srcfile, $destfile, $newmask='0', $overwriteifexists=1, $testvirus=0, $indexdatabase=0)
Copy a file to another file.
dol_delete_file($file, $disableglob=0, $nophperrors=0, $nohook=0, $object=null, $allowdotdot=false, $indexdatabase=1, $nolog=0)
Remove a file or several files with a mask.
dol_move_dir($srcdir, $destdir, $overwriteifexists=1, $indexdatabase=1, $renamedircontent=1)
Move a directory into another name.
dol_delete_dir_recursive($dir, $count=0, $nophperrors=0, $onlysub=0, &$countdeleted=0, $indexdatabase=1, $nolog=0, $level=0)
Remove a directory $dir and its subdirectories (or only files and subdirectories)
dolCopyDir($srcfile, $destfile, $newmask, $overwriteifexists, $arrayreplacement=null, $excludesubdir=0, $excludefileext=null, $excludearchivefiles=0)
Copy a dir to another dir.
dol_is_file($pathoffile)
Return if path is a file.
dol_is_dir($folder)
Test if filename is a directory.
dol_now($mode='gmt')
Return date for now.
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed information (by default a local PHP server timestamp) Rep...
getDolUserInt($key, $default=0, $tmpuser=null)
Return Dolibarr user constant int value.
dol_osencode($str)
Return a string encoded into OS filesystem encoding.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return a Dolibarr global constant string value.
isModEnabled($module)
Is Dolibarr module enabled.
get_exdir($num, $level, $alpha, $withoutslash, $object, $modulepart='')
Return a path to have a the directory according to object where files are stored.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
dol_mkdir($dir, $dataroot='', $newmask='')
Creation of a directory (this can create recursive subdir)
getDoliDBInstance($type, $host, $user, $pass, $name, $port)
Return a DoliDB instance (database handler).
pHeader($subtitle, $next, $action='set', $param='', $forcejqueryurl='', $csstable='main-inside')
Show HTML header of install pages.
pFooter($nonext=0, $setuplang='', $jscheckfunction='', $withpleasewait=0, $morehtml='')
Print HTML footer of install pages.
dolibarr_install_syslog($message, $level=LOG_DEBUG)
Log function for install pages.
calcul_price_total($qty, $pu, $remise_percent_ligne, $txtva, $uselocaltax1_rate, $uselocaltax2_rate, $remise_percent_global, $price_base_type, $info_bits, $type, $seller=null, $localtaxes_array=[], $progress=100, $multicurrency_tx=1, $pu_devise=0, $multicurrency_code='')
Calculate totals (net, vat, ...) of a line.
if(getDolGlobalString( 'TAKEPOS_SHOW_CUSTOMER')) print $langs trans('Date')." left Label right Qty right Price right TotalHT right TotalTTC right right right right right right right right right centpercent right TotalHT right n right VAT right n right TotalVAT right n No sujeto a RE IRPF right TotalLT1 right n right TotalLT2 right n right TotalTTC right n takeposcustomercurrency takeposcustomercurrency takeposcustomercurrency takeposcustomercurrency right TotalTTC takeposcustomercurrency right takeposcustomercurrency n right PaymentTypeShortLIQ right SELECT p pos_change as p datep as p p num_paiement as f pf amount as amount
dolEncrypt($chain, $key='', $ciphering='', $forceseed='')
Encode a string with a symmetric encryption.
dol_decode($chain, $key='1')
Decode a base 64 encoded + specific delta change.
dolDecrypt($chain, $key='')
Decode a string with a symmetric encryption.
migrate_supplier_prices_permissions($db, $langs, $conf)
Grant the "supplier prices" advanced permissions introduced in 23.0 (product/service read_supplier_pr...
migrate_links_transfert($db, $langs, $conf)
Function to migrate links into llx_bank_url.
migrate_paiements_orphelins_1($db, $langs, $conf)
Repair orphan payments (lost relations due to bugs) Query to check if there are still orphans: select...
migrate_user_rights_entity($db, $langs, $conf)
Migrate to add entity value into llx_user_rights.
migrate_reload_modules($db, $langs, $conf, $listofmodule=array(), $force=0)
Disable/Re-enable features modules.
migrate_contracts_date3($db, $langs, $conf)
Mise a jour des dates de creation de contrat.
migrate_restore_missing_links($db, $langs, $conf)
Migration du champ fk_remise_except dans llx_facturedet doit correspondre a Link in llx_societe_remis...
migrate_rename_directories($db, $langs, $conf, $oldname, $newname)
Migration directory.
migrate_project_task_actors($db, $langs, $conf)
Migration de la table llx_projet_task_actors vers llx_element_contact.
migrate_holiday_path()
Migrate file from old path to new one for users.
migrate_commande_deliveryaddress($db, $langs, $conf)
Migration du champ fk_adresse_livraison dans expedition 2.6 -> 2.7.
if($db->connected) if( $ret) migrate_paiements($db, $langs, $conf)
Records payment links for an invoice in a join table (link n<-->n for payments<-->invoices)
migrate_project_user_resp($db, $langs, $conf)
Migration du champ fk_user_resp de llx_projet vers llx_element_contact.
migrate_contracts_open($db, $langs, $conf)
Reouverture des contrats qui ont au moins une ligne non fermee.
migrate_shipping_delivery($db, $langs, $conf)
Migrate link stored into fk_expedition into llx_element_element.
migrate_delete_old_dir($db, $langs, $conf)
Remove deprecated directories.
migrate_accountingbookkeeping(int $entity)
Migrate Ref in bookkeeping lines.
migrate_price_propal($db, $langs, $conf)
Update total of proposal lines.
migrate_stocks($db, $langs, $conf)
Migration du champ stock dans produits.
migrate_paiementfourn_facturefourn($db, $langs, $conf)
Factures fournisseurs.
migrate_contacts_socialnetworks()
Migrate contacts fields facebook and co to socialnetworks Can be called only when version is 10....
migrate_customerorder_shipping($db, $langs, $conf)
Migrate order ref_customer and date_delivery fields to llx_expedition.
migrate_detail_livraison($db, $langs, $conf)
Migration des details commandes dans les details livraisons.
migrate_remise_except_entity($db, $langs, $conf)
Migrate to add entity value into llx_societe_remise_except.
migrate_paiements_orphelins_2($db, $langs, $conf)
Repair orphan payments (lost relations due to bugs) Query to check if there are still orphans: select...
migrate_price_contrat($db, $langs, $conf)
Update total of contract lines.
migrate_users_socialnetworks()
Migrate users fields facebook and co to socialnetworks.
migrate_user_photospath2()
Migrate file from old path users/99/file.jpg into users/99/photos/file.jpg.
migrate_contracts_det($db, $langs, $conf)
Mise a jour des contrats (gestion du contrat + detail de contrat)
migrate_get_rights_def_id($db, $module, $perms, $subperms)
Return the permission id (llx_rights_def.id) matching a module/perms/subperms triplet,...
migrate_price_facture($db, $langs, $conf)
Update total of invoice lines.
migrate_usergroup_rights_entity($db, $langs, $conf)
Migrate to add entity value into llx_usergroup_rights.
migrate_relationship_tables($db, $langs, $conf, $table, $fk_source, $sourcetype, $fk_target, $targettype)
Migration des tables de relation.
migrate_modeles($db, $langs, $conf)
Mise a jour des modeles selectionnes.
migrate_reset_blocked_log($db, $langs, $conf)
Migrate to reset the blocked log for V7+ algorithm.
migrate_mode_reglement($db, $langs, $conf)
Migrate link stored into fk_mode_reglement.
migrate_export_import_profiles($mode='export')
Migrate export and import profiles to fix field name that was renamed.
migrate_contracts_date2($db, $langs, $conf)
Update contracts with date min real if service date is lower.
migrate_commande_expedition($db, $langs, $conf)
Correspondence des expeditions et des commandes clients dans la table llx_co_exp.
migrate_actioncomm_element($db, $langs, $conf)
Migrate link stored into fk_xxxx into fk_element and elementtype.
migrate_blockedlog_add_hmac_key()
Add the HMAC key for blockedlog v2.
migrate_productlot_path()
Migrate file from old path to new one for lot path.
migrate_user_photospath()
Migrate file from old path to new one for users.
migrate_invoice_export_models()
Invoice exports been shifted (facture_1 => facture_0, facture_2 => facture_1) in version 20,...
migrate_thirdparties_socialnetworks()
Migrate thirdparties fields facebook and co to socialnetworks Can be called only when version is 10....
migrate_event_assignement($db, $langs, $conf)
Migrate event assignment to owner.
migrate_clean_association($db, $langs, $conf)
Delete duplicates in table categorie_association.
migrate_commande_livraison($db, $langs, $conf)
Correspondence des livraisons et des commandes clients dans la table llx_co_liv.
migrate_event_assignement_contact($db, $langs, $conf)
Migrate event assignment to owner.
migrate_contracts_date1($db, $langs, $conf)
Mise a jour des date de contrats non renseignees.
migrate_remise_entity($db, $langs, $conf)
Migrate to add entity value into llx_societe_remise.
migrate_contractdet_rank()
Migrate Rank into contract line.
migrate_menus($db, $langs, $conf)
Migration of menus (use only 1 table instead of 3) 2.6 -> 2.7.
migrate_categorie_association($db, $langs, $conf)
Migrate categorie association.
migrate_delete_old_files($db, $langs, $conf)
Delete deprecated files.
migrate_price_commande_fournisseur($db, $langs, $conf)
Update total of purchase order lines.
migrate_element_time($db, $langs, $conf)
Migrate duration in seconds.
migrate_members_socialnetworks()
Migrate members fields facebook and co to socialnetworks Can be called only when version is 10....
migrate_reload_menu($db, $langs, $conf)
Reload SQL menu file (if dynamic menus, if modified by version)
migrate_price_commande($db, $langs, $conf)
Update total of sales order lines.
migrate_shipping_delivery2($db, $langs, $conf)
We try to complete field ref_customer and date_delivery that are empty into llx_livraison.
migrate_apiresttokens()
Migrate API key in oauth_token table.