2004-10-19 20:58:50 +02:00
< ? php
2017-06-16 17:01:43 +02:00
/* Copyright ( C ) 2003 - 2007 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
* Copyright ( C ) 2003 Jean - Louis Bergamo < jlb @ j1b . org >
2024-10-19 13:16:13 +02:00
* Copyright ( C ) 2004 - 2024 Laurent Destailleur < eldy @ users . sourceforge . net >
2017-06-16 17:01:43 +02:00
* Copyright ( C ) 2004 Eric Seigne < eric . seigne @ ryxeo . com >
2018-10-27 14:43:12 +02:00
* Copyright ( C ) 2005 - 2017 Regis Houssin < regis . houssin @ inodbox . com >
2023-03-24 22:34:37 +01:00
* Copyright ( C ) 2011 - 2023 Juanjo Menent < jmenent @ 2 byte . es >
2017-06-16 17:01:43 +02:00
* Copyright ( C ) 2015 Jean - François Ferry < jfefe @ aternatik . fr >
* Copyright ( C ) 2015 Raphaël Doursenaud < rdoursenaud @ gpcsolutions . fr >
2018-05-30 00:20:31 +02:00
* Copyright ( C ) 2018 Nicolas ZABOURI < info @ inovea - conseil . com >
2024-07-09 19:28:09 +02:00
* Copyright ( C ) 2021 - 2024 Frédéric France < frederic . france @ free . fr >
2024-03-12 22:21:52 +01:00
* Copyright ( C ) 2024 MDW < mdeweerd @ users . noreply . github . com >
2018-07-26 18:22:16 +02:00
*
2003-03-11 17:18:54 +01:00
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
2013-01-16 15:36:08 +01:00
* the Free Software Foundation ; either version 3 of the License , or
2003-03-11 17:18:54 +01:00
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
2019-09-23 21:55:30 +02:00
* along with this program . If not , see < https :// www . gnu . org / licenses />.
2003-03-11 17:18:54 +01:00
*/
2009-01-21 14:20:26 +01:00
2005-04-07 00:36:44 +02:00
/**
2008-09-11 00:07:38 +02:00
* \file htdocs / admin / modules . php
2010-11-13 19:57:10 +01:00
* \brief Page to activate / disable all modules
2008-09-11 00:07:38 +02:00
*/
2004-08-29 14:01:58 +02:00
2024-03-28 17:10:22 +01:00
if ( ! defined ( 'CSRFCHECK_WITH_TOKEN' ) && ( empty ( $_GET [ 'action' ]) || $_GET [ 'action' ] != 'reset' )) { // We force security except to disable modules so we can do it if a problem occurs on a module
2020-12-04 20:28:05 +01:00
define ( 'CSRFCHECK_WITH_TOKEN' , '1' ); // Force use of CSRF protection with tokens even for GET
}
2020-10-17 14:01:09 +02:00
2022-09-07 20:08:59 +02:00
// Load Dolibarr environment
2012-08-22 23:24:21 +02:00
require '../main.inc.php' ;
2012-08-22 23:11:24 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php' ;
2017-02-11 15:41:01 +01:00
require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php' ;
require_once DOL_DOCUMENT_ROOT . '/core/lib/geturl.lib.php' ;
require_once DOL_DOCUMENT_ROOT . '/core/lib/functions2.lib.php' ;
2024-11-18 13:58:29 +01:00
require_once DOL_DOCUMENT_ROOT . '/core/modules/DolibarrModules.class.php' ;
2024-11-08 14:21:52 +01:00
require_once DOL_DOCUMENT_ROOT . '/admin/remotestore/class/dolistore.class.php' ;
2003-03-11 17:18:54 +01:00
2024-09-18 03:27:25 +02:00
'
@ phan - var - force string $dolibarr_main_url_root_alt
' ;
2024-11-04 23:53:20 +01:00
/**
* @ var Conf $conf
* @ var DoliDB $db
* @ var HookManager $hookmanager
* @ var Societe $mysoc
* @ var Translate $langs
* @ var User $user
*
* @ var string $dolibarr_main_url_root_alt
*/
2018-05-26 18:41:16 +02:00
// Load translation files required by the page
2019-12-16 13:06:25 +01:00
$langs -> loadLangs ( array ( " errors " , " admin " , " modulebuilder " ));
2009-08-24 14:05:41 +02:00
2022-08-11 09:01:55 +02:00
// if we set another view list mode, we keep it (till we change one more time)
if ( GETPOSTISSET ( 'mode' )) {
$mode = GETPOST ( 'mode' , 'alpha' );
2024-03-10 01:53:04 +01:00
if ( $mode == 'common' || $mode == 'commonkanban' ) {
2022-08-11 09:09:11 +02:00
dolibarr_set_const ( $db , " MAIN_MODULE_SETUP_ON_LIST_BY_DEFAULT " , $mode , 'chaine' , 0 , '' , $conf -> entity );
2023-12-04 11:41:14 +01:00
}
2022-08-11 09:01:55 +02:00
} else {
2024-10-19 11:39:56 +02:00
$mode = getDolGlobalString ( 'MAIN_MODULE_SETUP_ON_LIST_BY_DEFAULT' , 'commonkanban' );
2020-12-04 20:28:05 +01:00
}
2022-08-11 09:01:55 +02:00
2020-09-16 19:39:50 +02:00
$action = GETPOST ( 'action' , 'aZ09' );
2019-12-16 13:06:25 +01:00
$value = GETPOST ( 'value' , 'alpha' );
Fix: GETPOST(...,'int') to GETPOSTINT(...) (#28448)
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: Update spelling exceptions
* Qual: Ignore Phan Notice
2024-02-27 14:05:53 +01:00
$page_y = GETPOSTINT ( 'page_y' );
2019-12-16 13:06:25 +01:00
$search_keyword = GETPOST ( 'search_keyword' , 'alpha' );
$search_status = GETPOST ( 'search_status' , 'alpha' );
$search_nature = GETPOST ( 'search_nature' , 'alpha' );
$search_version = GETPOST ( 'search_version' , 'alpha' );
2006-03-31 21:30:08 +02:00
2017-08-22 14:47:01 +02:00
2024-11-08 14:21:52 +01:00
// For remotestore search
2017-08-22 14:47:01 +02:00
$options = array ();
2024-11-08 14:21:52 +01:00
$options [ 'per_page' ] = 10 ;
Fix: GETPOST(...,'int') to GETPOSTINT(...) (#28448)
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: GETPOST(...,'int') to GETPOSTINT(...)
# Fix: GETPOST(...,'int') to GETPOSTINT(...)
Converted using Phan plugin
* Fix: Update spelling exceptions
* Qual: Ignore Phan Notice
2024-02-27 14:05:53 +01:00
$options [ 'categorie' ] = (( int ) ( GETPOSTINT ( 'categorie' ) ? GETPOSTINT ( 'categorie' ) : 0 ));
$options [ 'start' ] = (( int ) ( GETPOSTINT ( 'start' ) ? GETPOSTINT ( 'start' ) : 0 ));
$options [ 'end' ] = (( int ) ( GETPOSTINT ( 'end' ) ? GETPOSTINT ( 'end' ) : 0 ));
2017-08-22 14:47:01 +02:00
$options [ 'search' ] = GETPOST ( 'search_keyword' , 'alpha' );
2024-11-08 14:21:52 +01:00
$remotestore = new Dolistore ( false );
2017-08-22 14:47:01 +02:00
2020-12-04 20:28:05 +01:00
if ( ! $user -> admin ) {
2012-10-09 09:34:12 +02:00
accessforbidden ();
2020-12-04 20:28:05 +01:00
}
2004-10-23 00:42:10 +02:00
2019-12-16 13:06:25 +01:00
$familyinfo = array (
2024-03-10 01:53:04 +01:00
'hr' => array ( 'position' => '001' , 'label' => $langs -> trans ( " ModuleFamilyHr " )),
'crm' => array ( 'position' => '006' , 'label' => $langs -> trans ( " ModuleFamilyCrm " )),
'srm' => array ( 'position' => '007' , 'label' => $langs -> trans ( " ModuleFamilySrm " )),
'financial' => array ( 'position' => '009' , 'label' => $langs -> trans ( " ModuleFamilyFinancial " )),
'products' => array ( 'position' => '012' , 'label' => $langs -> trans ( " ModuleFamilyProducts " )),
'projects' => array ( 'position' => '015' , 'label' => $langs -> trans ( " ModuleFamilyProjects " )),
'ecm' => array ( 'position' => '018' , 'label' => $langs -> trans ( " ModuleFamilyECM " )),
'technic' => array ( 'position' => '021' , 'label' => $langs -> trans ( " ModuleFamilyTechnic " )),
'portal' => array ( 'position' => '040' , 'label' => $langs -> trans ( " ModuleFamilyPortal " )),
'interface' => array ( 'position' => '050' , 'label' => $langs -> trans ( " ModuleFamilyInterface " )),
'base' => array ( 'position' => '060' , 'label' => $langs -> trans ( " ModuleFamilyBase " )),
'other' => array ( 'position' => '100' , 'label' => $langs -> trans ( " ModuleFamilyOther " )),
2015-10-07 07:57:09 +02:00
);
2019-12-16 13:06:25 +01:00
$param = '' ;
2020-12-04 20:28:05 +01:00
if ( ! GETPOST ( 'buttonreset' , 'alpha' )) {
if ( $search_keyword ) {
$param .= '&search_keyword=' . urlencode ( $search_keyword );
}
if ( $search_status && $search_status != '-1' ) {
$param .= '&search_status=' . urlencode ( $search_status );
}
if ( $search_nature && $search_nature != '-1' ) {
$param .= '&search_nature=' . urlencode ( $search_nature );
}
if ( $search_version && $search_version != '-1' ) {
$param .= '&search_version=' . urlencode ( $search_version );
}
2018-06-05 10:04:57 +02:00
}
2016-03-14 19:40:52 +01:00
2019-12-16 13:06:25 +01:00
$dirins = DOL_DOCUMENT_ROOT . '/custom' ;
$urldolibarrmodules = 'https://www.dolistore.com/' ;
2015-10-07 07:57:09 +02:00
2024-06-30 21:02:50 +02:00
// Initialize a technical object to manage hooks of page. Note that conf->hooks_modules contains an array of hook context
2019-12-16 13:06:25 +01:00
$hookmanager -> initHooks ( array ( 'adminmodules' , 'globaladmin' ));
2017-06-16 17:01:43 +02:00
2024-06-19 18:12:14 +02:00
// Increase limit of time. Works only if we are not in safe mode
$max_execution_time_for_deploy = getDolGlobalInt ( 'MODULE_UPLOAD_MAX_EXECUTION_TIME' , 300 ); // 5mn if not defined
if ( ! empty ( $max_execution_time_for_deploy )) {
$err = error_reporting ();
error_reporting ( 0 ); // Disable all errors
//error_reporting(E_ALL);
@ set_time_limit ( $max_execution_time_for_deploy );
error_reporting ( $err );
}
// Other method - TODO is this required ?
2023-08-04 14:48:18 +02:00
$max_time = @ ini_get ( " max_execution_time " );
if ( $max_time && $max_time < $max_execution_time_for_deploy ) {
dol_syslog ( " max_execution_time= " . $max_time . " is lower than max_execution_time_for_deploy= " . $max_execution_time_for_deploy . " . We try to increase it dynamically. " );
@ ini_set ( " max_execution_time " , $max_execution_time_for_deploy ); // This work only if safe mode is off. also web servers has timeout of 300
}
2024-06-19 18:12:14 +02:00
2024-04-04 16:06:21 +02:00
$dolibarrdataroot = preg_replace ( '/([\\/]+)$/i' , '' , DOL_DATA_ROOT );
$allowonlineinstall = true ;
$allowfromweb = 1 ;
if ( dol_is_file ( $dolibarrdataroot . '/installmodules.lock' )) {
$allowonlineinstall = false ;
}
2006-03-31 21:30:08 +02:00
2005-10-18 23:29:45 +02:00
/*
* Actions
*/
2003-03-11 17:18:54 +01:00
2017-12-05 11:34:07 +01:00
$formconfirm = '' ;
2019-12-16 13:06:25 +01:00
$parameters = array ();
$reshook = $hookmanager -> executeHooks ( 'doActions' , $parameters , $object , $action ); // Note that $action and $object may have been modified by some hooks
2020-12-04 20:28:05 +01:00
if ( $reshook < 0 ) {
setEventMessages ( $hookmanager -> error , $hookmanager -> errors , 'errors' );
}
2017-06-16 17:01:43 +02:00
2020-12-04 20:28:05 +01:00
if ( GETPOST ( 'buttonreset' , 'alpha' )) {
2020-04-05 02:44:59 +02:00
$search_keyword = '' ;
$search_status = '' ;
$search_nature = '' ;
$search_version = '' ;
2016-09-30 18:26:32 +02:00
}
2024-04-04 16:06:21 +02:00
if ( $action == 'install' && $allowonlineinstall ) {
2020-04-05 02:44:59 +02:00
$error = 0 ;
2024-09-26 17:43:23 +02:00
$modulenameval = '' ;
2020-04-05 02:44:59 +02:00
// $original_file should match format module_modulename-x.y[.z].zip
$original_file = basename ( $_FILES [ " fileinstall " ][ " name " ]);
2021-10-01 14:10:50 +02:00
$original_file = preg_replace ( '/\s*\(\d+\)\.zip$/i' , '.zip' , $original_file );
2020-04-05 02:44:59 +02:00
$newfile = $conf -> admin -> dir_temp . '/' . $original_file . '/' . $original_file ;
2020-12-04 20:28:05 +01:00
if ( ! $original_file ) {
2020-04-05 02:44:59 +02:00
$langs -> load ( " Error " );
setEventMessages ( $langs -> trans ( " ErrorModuleFileRequired " ), null , 'warnings' );
$error ++ ;
2020-05-21 09:35:30 +02:00
} else {
2020-12-04 20:28:05 +01:00
if ( ! $error && ! preg_match ( '/\.zip$/i' , $original_file )) {
2020-04-05 02:44:59 +02:00
$langs -> load ( " errors " );
setEventMessages ( $langs -> trans ( " ErrorFileMustBeADolibarrPackage " , $original_file ), null , 'errors' );
$error ++ ;
}
2024-09-07 02:13:53 +02:00
if ( ! $error && ! preg_match ( '/^(module[a-zA-Z0-9]*_|theme_|).*\-([0-9][0-9\.]*)(\s\(\d+\)\s)?\.zip$/i' , $original_file )) {
2017-02-13 01:36:02 +01:00
$langs -> load ( " errors " );
2024-09-07 02:13:53 +02:00
setEventMessages ( $langs -> trans ( " ErrorFilenameDosNotMatchDolibarrPackageRules " , $original_file , 'modulename-x[.y.z].zip' ), null , 'errors' );
2017-02-13 01:36:02 +01:00
$error ++ ;
}
2020-12-04 20:28:05 +01:00
if ( empty ( $_FILES [ 'fileinstall' ][ 'tmp_name' ])) {
2020-04-05 02:44:59 +02:00
$langs -> load ( " errors " );
setEventMessages ( $langs -> trans ( " ErrorFileNotUploaded " ), null , 'errors' );
$error ++ ;
}
}
2020-12-04 20:28:05 +01:00
if ( ! $error ) {
if ( $original_file ) {
2020-04-05 02:44:59 +02:00
@ dol_delete_dir_recursive ( $conf -> admin -> dir_temp . '/' . $original_file );
dol_mkdir ( $conf -> admin -> dir_temp . '/' . $original_file );
}
$tmpdir = preg_replace ( '/\.zip$/i' , '' , $original_file ) . '.dir' ;
2020-12-04 20:28:05 +01:00
if ( $tmpdir ) {
2020-04-05 02:44:59 +02:00
@ dol_delete_dir_recursive ( $conf -> admin -> dir_temp . '/' . $tmpdir );
dol_mkdir ( $conf -> admin -> dir_temp . '/' . $tmpdir );
2019-01-27 17:40:56 +01:00
}
2020-04-05 02:44:59 +02:00
$result = dol_move_uploaded_file ( $_FILES [ 'fileinstall' ][ 'tmp_name' ], $newfile , 1 , 0 , $_FILES [ 'fileinstall' ][ 'error' ]);
2020-12-04 20:28:05 +01:00
if ( $result > 0 ) {
2020-04-05 02:44:59 +02:00
$result = dol_uncompress ( $newfile , $conf -> admin -> dir_temp . '/' . $tmpdir );
2020-12-04 20:28:05 +01:00
if ( ! empty ( $result [ 'error' ])) {
2020-04-05 02:44:59 +02:00
$langs -> load ( " errors " );
setEventMessages ( $langs -> trans ( $result [ 'error' ], $original_file ), null , 'errors' );
$error ++ ;
2020-05-21 09:35:30 +02:00
} else {
2020-04-05 02:44:59 +02:00
// Now we move the dir of the module
$modulename = preg_replace ( '/module_/' , '' , $original_file );
$modulename = preg_replace ( '/\-([0-9][0-9\.]*)\.zip$/i' , '' , $modulename );
// Search dir $modulename
$modulenamedir = $conf -> admin -> dir_temp . '/' . $tmpdir . '/' . $modulename ; // Example ./mymodule
2020-12-04 20:28:05 +01:00
if ( ! dol_is_dir ( $modulenamedir )) {
2020-04-05 02:44:59 +02:00
$modulenamedir = $conf -> admin -> dir_temp . '/' . $tmpdir . '/htdocs/' . $modulename ; // Example ./htdocs/mymodule
//var_dump($modulenamedir);
2020-12-04 20:28:05 +01:00
if ( ! dol_is_dir ( $modulenamedir )) {
2020-04-05 02:44:59 +02:00
setEventMessages ( $langs -> trans ( " ErrorModuleFileSeemsToHaveAWrongFormat " ) . '<br>' . $langs -> trans ( " ErrorModuleFileSeemsToHaveAWrongFormat2 " , $modulename , 'htdocs/' . $modulename ), null , 'errors' );
$error ++ ;
}
}
2024-10-19 23:42:26 +02:00
dol_syslog ( " Uncompress of module file is a success. " );
// Load module into $objMod
/*
$modulesdir = array ( $modulenamedir . '/core/modules/' );
foreach ( $modulesdir as $dir ) {
// Load modules attributes in arrays (name, numero, orders) from dir directory
//print $dir."\n<br>";
dol_syslog ( " Scan directory " . $dir . " for module descriptor files (modXXX.class.php) " );
$handle = @ opendir ( $dir );
if ( is_resource ( $handle )) {
while (( $file = readdir ( $handle )) !== false ) {
print $dir . " " . $file . " \n <br> " ;
if ( is_readable ( $dir . $file ) && substr ( $file , 0 , 3 ) == 'mod' && substr ( $file , dol_strlen ( $file ) - 10 ) == '.class.php' ) {
$modName = substr ( $file , 0 , dol_strlen ( $file ) - 10 );
if ( $modName ) {
try {
$res = include_once $dir . $file ; // A class already exists in a different file will send a non catchable fatal error.
$modName = substr ( $file , 0 , dol_strlen ( $file ) - 10 );
if ( $modName ) {
if ( class_exists ( $modName )) {
$objMod = new $modName ( $db );
'@phan-var-force DolibarrModules $objMod' ;
//var_dump($objMod);
}
}
} catch ( Exception $e ) {
// Nothing done
}
}
}
}
}
}
*/
// Check if module is in the remote malware list
2020-12-04 20:28:05 +01:00
if ( ! $error ) {
2024-10-19 23:42:26 +02:00
if ( GETPOST ( 'checkforcompliance' ) == 'on' ) {
try {
$res = include_once DOL_DOCUMENT_ROOT . '/core/modules/DolibarrModules.class.php' ;
$dolibarrmodule = new DolibarrModules ( $db );
$checkRes = $dolibarrmodule -> checkForcompliance ( $modulename );
if ( ! is_numeric ( $checkRes ) && $checkRes != '' ) {
$langs -> load ( " errors " );
setEventMessages ( $modulename . ' : ' . $langs -> trans ( $checkRes ), null , 'errors' );
2024-11-29 14:46:21 +01:00
$error ++ ;
2024-10-19 23:42:26 +02:00
}
} catch ( Exception $e ) {
// Nothing done
}
}
2020-04-05 02:44:59 +02:00
}
2024-10-19 23:42:26 +02:00
if ( ! $error ) {
// TODO Make more test ???
}
2020-04-05 02:44:59 +02:00
2024-10-19 23:42:26 +02:00
// We check if this is a metapackage (and wecomplete with child packages)
2020-04-05 02:44:59 +02:00
$modulenamearrays = array ();
if ( dol_is_file ( $modulenamedir . '/metapackage.conf' )) {
// This is a meta package
$metafile = file_get_contents ( $modulenamedir . '/metapackage.conf' );
$modulenamearrays = explode ( " \n " , $metafile );
}
$modulenamearrays [ $modulename ] = $modulename ;
//var_dump($modulenamearrays);exit;
2024-10-19 23:42:26 +02:00
// Lop on each packages (can have several if package is a metapackage)
if ( ! $error ) {
foreach ( $modulenamearrays as $modulenameval ) {
if ( strpos ( $modulenameval , '#' ) === 0 ) {
continue ; // Discard comments
2023-03-27 11:22:51 +02:00
}
2024-10-19 23:42:26 +02:00
if ( strpos ( $modulenameval , '//' ) === 0 ) {
continue ; // Discard comments
}
if ( ! trim ( $modulenameval )) {
continue ;
}
// Now we install the module
if ( ! $error ) {
@ dol_delete_dir_recursive ( $dirins . '/' . $modulenameval ); // delete the target directory
$submodulenamedir = $conf -> admin -> dir_temp . '/' . $tmpdir . '/' . $modulenameval ;
if ( ! dol_is_dir ( $submodulenamedir )) {
$submodulenamedir = $conf -> admin -> dir_temp . '/' . $tmpdir . '/htdocs/' . $modulenameval ;
}
dol_syslog ( " We copy now directory " . $submodulenamedir . " into target dir " . $dirins . '/' . $modulenameval );
$result = dolCopyDir ( $submodulenamedir , $dirins . '/' . $modulenameval , '0444' , 1 );
if ( $result <= 0 ) {
dol_syslog ( 'Failed to call dolCopyDir result=' . $result . " with param " . $submodulenamedir . " and " . $dirins . '/' . $modulenameval , LOG_WARNING );
$langs -> load ( " errors " );
setEventMessages ( $langs -> trans ( " ErrorFailToCopyDir " , $submodulenamedir , $dirins . '/' . $modulenameval ), null , 'errors' );
$error ++ ;
}
2020-04-05 02:44:59 +02:00
}
}
}
}
2020-05-21 09:35:30 +02:00
} else {
2020-04-05 02:44:59 +02:00
setEventMessages ( $langs -> trans ( " ErrorFailToRenameFile " , $_FILES [ 'fileinstall' ][ 'tmp_name' ], $newfile ), null , 'errors' );
$error ++ ;
}
}
2024-10-19 20:46:10 +02:00
/*
if ( ! $error ) {
if ( GETPOST ( 'checkforcompliance' )) {
$dir = $dirins ;
$file = $modulenameval ;
// $installedmodule
try {
$res = include_once $dir . $file ; // A class already exists in a different file will send a non catchable fatal error.
$modName = substr ( $file , 0 , dol_strlen ( $file ) - 10 );
if ( $modName ) {
if ( class_exists ( $modName )) {
$objMod = new $modName ( $db );
'@phan-var-force DolibarrModules $objMod' ;
//var_dump($objMod);
}
}
} catch ( Exception $e ) {
// Nothing done
}
}
}
*/
2020-12-04 20:28:05 +01:00
if ( ! $error ) {
2024-09-26 17:43:23 +02:00
$searchParams = array (
'search_keyword' => $modulenameval ,
'search_status' => '-1' ,
'search_nature' => '-1' ,
'search_version' => '-1'
);
$queryString = http_build_query ( $searchParams );
$redirectUrl = DOL_URL_ROOT . '/admin/modules.php?' . $queryString ;
$message = $langs -> trans ( " SetupIsReadyForUse " , $redirectUrl , $langs -> transnoentitiesnoconv ( " Home " ) . ' - ' . $langs -> transnoentitiesnoconv ( " Setup " ) . ' - ' . $langs -> transnoentitiesnoconv ( " Modules " ));
2024-05-13 14:38:41 +02:00
setEventMessages ( $message , null , 'warnings' );
2020-04-05 02:44:59 +02:00
}
2024-04-04 16:06:21 +02:00
} elseif ( $action == 'install' && ! $allowonlineinstall ) {
httponly_accessforbidden ( " You try to bypass the protection to disallow deployment of an external module. Hack attempt ? " );
2017-02-11 15:41:01 +01:00
}
2020-12-04 20:28:05 +01:00
if ( $action == 'set' && $user -> admin ) {
2024-09-09 23:10:34 +02:00
// We made some check against evil eternal modules that try to low security options.
2023-02-04 19:11:59 +01:00
$checkOldValue = getDolGlobalInt ( 'CHECKLASTVERSION_EXTERNALMODULE' );
$csrfCheckOldValue = getDolGlobalInt ( 'MAIN_SECURITY_CSRF_WITH_TOKEN' );
2020-04-05 02:44:59 +02:00
$resarray = activateModule ( $value );
2023-02-04 19:11:59 +01:00
if ( $checkOldValue != getDolGlobalInt ( 'CHECKLASTVERSION_EXTERNALMODULE' )) {
setEventMessage ( $langs -> trans ( 'WarningModuleHasChangedLastVersionCheckParameter' , $value ), 'warnings' );
}
if ( $csrfCheckOldValue != getDolGlobalInt ( 'MAIN_SECURITY_CSRF_WITH_TOKEN' )) {
setEventMessage ( $langs -> trans ( 'WarningModuleHasChangedSecurityCsrfParameter' , $value ), 'warnings' );
}
2024-09-09 23:10:34 +02:00
2023-08-30 23:53:26 +02:00
dolibarr_set_const ( $db , " MAIN_IHM_PARAMS_REV " , getDolGlobalInt ( 'MAIN_IHM_PARAMS_REV' ) + 1 , 'chaine' , 0 , '' , $conf -> entity );
2020-12-04 20:28:05 +01:00
if ( ! empty ( $resarray [ 'errors' ])) {
setEventMessages ( '' , $resarray [ 'errors' ], 'errors' );
} else {
2020-04-05 02:44:59 +02:00
//var_dump($resarray);exit;
2020-12-04 20:28:05 +01:00
if ( $resarray [ 'nbperms' ] > 0 ) {
2020-04-05 02:44:59 +02:00
$tmpsql = " SELECT COUNT(rowid) as nb FROM " . MAIN_DB_PREFIX . " user WHERE admin <> 1 " ;
$resqltmp = $db -> query ( $tmpsql );
2020-12-04 20:28:05 +01:00
if ( $resqltmp ) {
2020-04-05 02:44:59 +02:00
$obj = $db -> fetch_object ( $resqltmp );
//var_dump($obj->nb);exit;
2020-12-04 20:28:05 +01:00
if ( $obj && $obj -> nb > 1 ) {
2020-04-05 02:44:59 +02:00
$msg = $langs -> trans ( 'ModuleEnabledAdminMustCheckRights' );
setEventMessages ( $msg , null , 'warnings' );
}
2020-12-04 20:28:05 +01:00
} else {
dol_print_error ( $db );
}
2020-04-05 02:44:59 +02:00
}
2016-06-04 13:25:39 +02:00
}
2020-04-05 02:44:59 +02:00
header ( " Location: " . $_SERVER [ " PHP_SELF " ] . " ?mode= " . $mode . $param . ( $page_y ? '&page_y=' . $page_y : '' ));
2006-03-23 00:44:46 +01:00
exit ;
2020-12-04 20:28:05 +01:00
} elseif ( $action == 'reset' && $user -> admin && GETPOST ( 'confirm' ) == 'yes' ) {
2020-04-05 02:44:59 +02:00
$result = unActivateModule ( $value );
2023-08-30 23:53:26 +02:00
dolibarr_set_const ( $db , " MAIN_IHM_PARAMS_REV " , getDolGlobalInt ( 'MAIN_IHM_PARAMS_REV' ) + 1 , 'chaine' , 0 , '' , $conf -> entity );
2020-12-04 20:28:05 +01:00
if ( $result ) {
setEventMessages ( $result , null , 'errors' );
}
2020-04-05 02:44:59 +02:00
header ( " Location: " . $_SERVER [ " PHP_SELF " ] . " ?mode= " . $mode . $param . ( $page_y ? '&page_y=' . $page_y : '' ));
2006-03-23 00:44:46 +01:00
exit ;
2023-01-12 16:26:39 +01:00
} elseif ( getDolGlobalInt ( " MAIN_FEATURES_LEVEL " ) > 1 && $action == 'reload' && $user -> admin && GETPOST ( 'confirm' ) == 'yes' ) {
$result = unActivateModule ( $value , 0 );
2024-09-05 16:05:37 +02:00
dolibarr_set_const ( $db , " MAIN_IHM_PARAMS_REV " , getDolGlobalInt ( 'MAIN_IHM_PARAMS_REV' ) + 1 , 'chaine' , 0 , '' , $conf -> entity );
2023-01-12 16:26:39 +01:00
if ( $result ) {
setEventMessages ( $result , null , 'errors' );
header ( " Location: " . $_SERVER [ " PHP_SELF " ] . " ?mode= " . $mode . $param . ( $page_y ? '&page_y=' . $page_y : '' ));
}
$resarray = activateModule ( $value , 0 , 1 );
2024-09-05 16:05:37 +02:00
dolibarr_set_const ( $db , " MAIN_IHM_PARAMS_REV " , ( getDolGlobalInt ( 'MAIN_IHM_PARAMS_REV' ) + 1 ), 'chaine' , 0 , '' , $conf -> entity );
2023-01-12 16:26:39 +01:00
if ( ! empty ( $resarray [ 'errors' ])) {
setEventMessages ( '' , $resarray [ 'errors' ], 'errors' );
} else {
if ( $resarray [ 'nbperms' ] > 0 ) {
$tmpsql = " SELECT COUNT(rowid) as nb FROM " . MAIN_DB_PREFIX . " user WHERE admin <> 1 " ;
$resqltmp = $db -> query ( $tmpsql );
if ( $resqltmp ) {
$obj = $db -> fetch_object ( $resqltmp );
if ( $obj && $obj -> nb > 1 ) {
$msg = $langs -> trans ( 'ModuleEnabledAdminMustCheckRights' );
setEventMessages ( $msg , null , 'warnings' );
}
} else {
dol_print_error ( $db );
}
}
}
header ( " Location: " . $_SERVER [ " PHP_SELF " ] . " ?mode= " . $mode . $param . ( $page_y ? '&page_y=' . $page_y : '' ));
exit ;
2004-02-28 00:11:26 +01:00
}
2016-03-14 19:40:52 +01:00
2004-02-28 00:11:26 +01:00
2023-01-12 16:26:39 +01:00
2005-10-18 23:29:45 +02:00
/*
2010-09-04 18:16:15 +02:00
* View
2005-10-18 23:29:45 +02:00
*/
2010-09-04 18:16:15 +02:00
2017-08-22 14:47:01 +02:00
$form = new Form ( $db );
2020-10-30 05:45:36 +01:00
$morejs = array ();
2024-11-08 14:21:52 +01:00
$morecss = array ( " /admin/remotestore/css/store.css " );
2017-08-22 14:47:01 +02:00
2017-02-11 15:41:01 +01:00
// Set dir where external modules are installed
2020-12-04 20:28:05 +01:00
if ( ! dol_is_dir ( $dirins )) {
2020-04-05 02:44:59 +02:00
dol_mkdir ( $dirins );
2017-02-11 15:41:01 +01:00
}
2019-12-16 13:06:25 +01:00
$dirins_ok = ( dol_is_dir ( $dirins ));
2017-02-11 15:41:01 +01:00
2019-12-16 13:06:25 +01:00
$help_url = 'EN:First_setup|FR:Premiers_paramétrages|ES:Primeras_configuraciones' ;
2024-09-05 16:05:37 +02:00
llxHeader ( '' , $langs -> trans ( " Setup " ), $help_url , '' , 0 , 0 , $morejs , $morecss , '' , 'mod-admin page-modules' );
2004-11-22 10:57:37 +01:00
2006-08-12 17:32:57 +02:00
2012-01-26 23:05:59 +01:00
// Search modules dirs
2015-08-31 17:42:08 +02:00
$modulesdir = dolGetModulesDirs ();
2004-10-23 00:42:10 +02:00
2024-04-03 13:20:26 +02:00
$arrayofnatures = array (
'core' => array ( 'label' => $langs -> transnoentitiesnoconv ( " NativeModules " )),
'external' => array ( 'label' => $langs -> transnoentitiesnoconv ( " External " ) . ' - [' . $langs -> trans ( " AllPublishers " ) . ']' )
);
2019-12-16 13:06:25 +01:00
$arrayofwarnings = array (); // Array of warning each module want to show when activated
$arrayofwarningsext = array (); // Array of warning each module want to show when we activate an external module
2012-01-26 23:05:59 +01:00
$filename = array ();
$modules = array ();
$orders = array ();
$categ = array ();
2024-04-03 13:20:26 +02:00
$publisherlogoarray = array ();
2020-04-08 17:56:24 +02:00
2019-12-16 13:06:25 +01:00
$i = 0 ; // is a sequencer of modules found
$j = 0 ; // j is module number. Automatically affected if module number not defined.
$modNameLoaded = array ();
2012-01-26 23:05:59 +01:00
2020-12-04 20:28:05 +01:00
foreach ( $modulesdir as $dir ) {
2008-12-02 15:16:18 +01:00
// Load modules attributes in arrays (name, numero, orders) from dir directory
2010-12-14 23:31:59 +01:00
//print $dir."\n<br>";
2012-07-30 21:43:40 +02:00
dol_syslog ( " Scan directory " . $dir . " for module descriptor files (modXXX.class.php) " );
2019-12-16 13:06:25 +01:00
$handle = @ opendir ( $dir );
2020-12-04 20:28:05 +01:00
if ( is_resource ( $handle )) {
while (( $file = readdir ( $handle )) !== false ) {
2008-12-02 15:16:18 +01:00
//print "$i ".$file."\n<br>";
2020-12-04 20:28:05 +01:00
if ( is_readable ( $dir . $file ) && substr ( $file , 0 , 3 ) == 'mod' && substr ( $file , dol_strlen ( $file ) - 10 ) == '.class.php' ) {
2020-04-05 02:44:59 +02:00
$modName = substr ( $file , 0 , dol_strlen ( $file ) - 10 );
2020-12-04 20:28:05 +01:00
if ( $modName ) {
if ( ! empty ( $modNameLoaded [ $modName ])) { // In cache of already loaded modules ?
2020-04-05 02:44:59 +02:00
$mesg = " Error: Module " . $modName . " was found twice: Into " . $modNameLoaded [ $modName ] . " and " . $dir . " . You probably have an old file on your disk.<br> " ;
setEventMessages ( $mesg , null , 'warnings' );
dol_syslog ( $mesg , LOG_ERR );
2012-05-08 15:00:46 +02:00
continue ;
2020-04-05 02:44:59 +02:00
}
2012-05-08 15:00:46 +02:00
2020-05-21 01:41:27 +02:00
try {
2020-04-05 02:44:59 +02:00
$res = include_once $dir . $file ; // A class already exists in a different file will send a non catchable fatal error.
2020-12-04 20:28:05 +01:00
if ( class_exists ( $modName )) {
2023-02-09 00:47:33 +01:00
$objMod = new $modName ( $db );
2024-03-10 01:53:04 +01:00
'@phan-var-force DolibarrModules $objMod' ;
2023-02-09 00:47:33 +01:00
$modNameLoaded [ $modName ] = $dir ;
if ( ! $objMod -> numero > 0 && $modName != 'modUser' ) {
dol_syslog ( 'The module descriptor ' . $modName . ' must have a numero property' , LOG_ERR );
}
$j = $objMod -> numero ;
2016-01-10 13:00:48 +01:00
2023-02-09 00:47:33 +01:00
$modulequalified = 1 ;
2013-12-08 02:32:04 +01:00
2023-02-09 00:47:33 +01:00
// We discard modules according to features level (PS: if module is activated we always show it)
$const_name = 'MAIN_MODULE_' . strtoupper ( preg_replace ( '/^mod/i' , '' , get_class ( $objMod )));
2023-10-16 21:15:03 +02:00
if ( $objMod -> version == 'development' && ( ! getDolGlobalString ( $const_name ) && ( getDolGlobalInt ( 'MAIN_FEATURES_LEVEL' ) < 2 ))) {
2023-02-09 00:47:33 +01:00
$modulequalified = 0 ;
}
2023-10-16 21:15:03 +02:00
if ( $objMod -> version == 'experimental' && ( ! getDolGlobalString ( $const_name ) && ( getDolGlobalInt ( 'MAIN_FEATURES_LEVEL' ) < 1 ))) {
2023-02-09 00:47:33 +01:00
$modulequalified = 0 ;
}
2023-10-16 21:15:03 +02:00
if ( preg_match ( '/deprecated/' , $objMod -> version ) && ( ! getDolGlobalString ( $const_name ) && ( getDolGlobalInt ( 'MAIN_FEATURES_LEVEL' ) >= 0 ))) {
2023-02-09 00:47:33 +01:00
$modulequalified = 0 ;
}
2016-04-06 16:45:22 +02:00
2023-02-09 00:47:33 +01:00
// We discard modules according to property ->hidden
if ( ! empty ( $objMod -> hidden )) {
$modulequalified = 0 ;
}
2020-04-05 02:44:59 +02:00
2023-02-09 00:47:33 +01:00
if ( $modulequalified > 0 ) {
$publisher = dol_escape_htmltag ( $objMod -> getPublisher ());
$external = ( $objMod -> isCoreOrExternalModule () == 'external' );
if ( $external ) {
if ( $publisher ) {
2024-04-03 13:20:26 +02:00
// Check if there is a logo forpublisher
/* Do not show the company logo in combo . Make combo list dirty .
if ( ! empty ( $objMod -> editor_squarred_logo )) {
$publisherlogoarray [ 'external_' . $publisher ] = img_picto ( '' , $objMod -> editor_squarred_logo , 'class="publisherlogoinline"' );
}
$publisherlogo = empty ( $publisherlogoarray [ 'external_' . $publisher ]) ? '' : $publisherlogoarray [ 'external_' . $publisher ];
*/
$arrayofnatures [ 'external_' . $publisher ] = array ( 'label' => $langs -> trans ( " External " ) . ' - ' . $publisher , 'data-html' => $langs -> trans ( " External " ) . ' - <span class="opacitymedium inine-block valignmiddle">' . $publisher . '</span>' );
2023-02-09 00:47:33 +01:00
} else {
2024-04-03 13:20:26 +02:00
$arrayofnatures [ 'external_' ] = array ( 'label' => $langs -> trans ( " External " ) . ' - [' . $langs -> trans ( " UnknownPublishers " ) . ']' );
2020-04-05 02:44:59 +02:00
}
2023-02-09 00:47:33 +01:00
}
ksort ( $arrayofnatures );
2020-04-05 02:44:59 +02:00
2024-06-30 21:02:50 +02:00
// Define an array $categ with categ with at least one qualified module
2023-02-09 00:47:33 +01:00
$filename [ $i ] = $modName ;
$modules [ $modName ] = $objMod ;
2020-04-05 02:44:59 +02:00
2023-02-09 00:47:33 +01:00
// Gives the possibility to the module, to provide his own family info and position of this family
if ( is_array ( $objMod -> familyinfo ) && ! empty ( $objMod -> familyinfo )) {
$familyinfo = array_merge ( $familyinfo , $objMod -> familyinfo );
$familykey = key ( $objMod -> familyinfo );
} else {
$familykey = $objMod -> family ;
}
2024-03-10 01:53:04 +01:00
'@phan-var-force string $familykey' ; // if not, phan considers $familykey may be null
2020-04-05 02:44:59 +02:00
2023-02-09 00:47:33 +01:00
$moduleposition = ( $objMod -> module_position ? $objMod -> module_position : '50' );
if ( $objMod -> isCoreOrExternalModule () == 'external' && $moduleposition < 100000 ) {
// an external module should never return a value lower than '80'.
$moduleposition = '80' ; // External modules at end by default
}
2020-04-05 02:44:59 +02:00
2023-02-09 00:47:33 +01:00
// Add list of warnings to show into arrayofwarnings and arrayofwarningsext
if ( ! empty ( $objMod -> warnings_activation )) {
$arrayofwarnings [ $modName ] = $objMod -> warnings_activation ;
}
if ( ! empty ( $objMod -> warnings_activation_ext )) {
$arrayofwarningsext [ $modName ] = $objMod -> warnings_activation_ext ;
}
2020-04-05 02:44:59 +02:00
2024-03-11 15:20:56 +01:00
$familyposition = ( empty ( $familyinfo [ $familykey ][ 'position' ]) ? '0' : $familyinfo [ $familykey ][ 'position' ]);
2023-02-09 00:47:33 +01:00
$listOfOfficialModuleGroups = array ( 'hr' , 'technic' , 'interface' , 'technic' , 'portal' , 'financial' , 'crm' , 'base' , 'products' , 'srm' , 'ecm' , 'projects' , 'other' );
if ( $external && ! in_array ( $familykey , $listOfOfficialModuleGroups )) {
// If module is extern and into a custom group (not into an official predefined one), it must appear at end (custom groups should not be before official groups).
if ( is_numeric ( $familyposition )) {
$familyposition = sprintf ( " %03d " , ( int ) $familyposition + 100 );
2020-04-05 02:44:59 +02:00
}
2023-02-09 00:47:33 +01:00
}
2020-04-05 02:44:59 +02:00
2023-02-09 00:47:33 +01:00
$orders [ $i ] = $familyposition . " _ " . $familykey . " _ " . $moduleposition . " _ " . $j ; // Sort by family, then by module position then number
2020-04-08 17:56:24 +02:00
2023-02-09 00:47:33 +01:00
// Set categ[$i]
$specialstring = 'unknown' ;
if ( $objMod -> version == 'development' || $objMod -> version == 'experimental' ) {
$specialstring = 'expdev' ;
}
if ( isset ( $categ [ $specialstring ])) {
$categ [ $specialstring ] ++ ; // Array of all different modules categories
2020-12-04 20:28:05 +01:00
} else {
2023-02-09 00:47:33 +01:00
$categ [ $specialstring ] = 1 ;
2020-12-04 20:28:05 +01:00
}
2023-02-09 00:47:33 +01:00
$j ++ ;
$i ++ ;
} else {
dol_syslog ( " Module " . get_class ( $objMod ) . " not qualified " );
2013-12-08 02:32:04 +01:00
}
2020-05-21 09:35:30 +02:00
} else {
2024-02-25 10:06:21 +01:00
print info_admin ( " admin/modules.php Warning bad descriptor file : " . $dir . $file . " (Class " . $modName . " not found into file) " , 0 , 0 , '1' , 'warning' );
2013-12-08 02:32:04 +01:00
}
2020-12-04 20:28:05 +01:00
} catch ( Exception $e ) {
2023-12-04 11:41:14 +01:00
dol_syslog ( " Failed to load " . $dir . $file . " " . $e -> getMessage (), LOG_ERR );
2020-04-05 02:44:59 +02:00
}
}
}
2008-12-02 15:16:18 +01:00
}
closedir ( $handle );
2020-05-21 09:35:30 +02:00
} else {
2009-04-30 00:11:08 +02:00
dol_syslog ( " htdocs/admin/modules.php: Failed to open directory " . $dir . " . See permission and open_basedir option. " , LOG_WARNING );
2009-03-03 19:25:48 +01:00
}
2008-04-19 22:48:59 +02:00
}
2007-04-10 20:54:34 +02:00
2024-09-18 03:27:25 +02:00
'@phan-var-force array<string,DolibarrModules> $modules' ;
2020-12-04 20:28:05 +01:00
if ( $action == 'reset_confirm' && $user -> admin ) {
2019-12-16 13:06:25 +01:00
if ( ! empty ( $modules [ $value ])) {
$objMod = $modules [ $value ];
2017-12-15 10:36:35 +01:00
2020-12-04 20:28:05 +01:00
if ( ! empty ( $objMod -> langfiles )) {
$langs -> loadLangs ( $objMod -> langfiles );
}
2017-12-15 10:36:35 +01:00
2017-12-05 11:34:07 +01:00
$form = new Form ( $db );
2019-12-16 13:06:25 +01:00
$formconfirm = $form -> formconfirm ( $_SERVER [ " PHP_SELF " ] . '?value=' . $value . '&mode=' . $mode . $param , $langs -> trans ( 'ConfirmUnactivation' ), $langs -> trans ( GETPOST ( 'confirm_message_code' )), 'reset' , '' , 'no' , 1 );
2017-12-05 11:34:07 +01:00
}
}
2023-01-12 16:26:39 +01:00
if ( $action == 'reload_confirm' && $user -> admin ) {
if ( ! empty ( $modules [ $value ])) {
$objMod = $modules [ $value ];
if ( ! empty ( $objMod -> langfiles )) {
$langs -> loadLangs ( $objMod -> langfiles );
}
$form = new Form ( $db );
$formconfirm = $form -> formconfirm ( $_SERVER [ " PHP_SELF " ] . '?value=' . $value . '&mode=' . $mode . $param , $langs -> trans ( 'ConfirmReload' ), $langs -> trans ( GETPOST ( 'confirm_message_code' )), 'reload' , '' , 'no' , 1 );
}
}
2017-12-05 11:34:07 +01:00
print $formconfirm ;
2008-03-10 00:14:08 +01:00
asort ( $orders );
2008-09-29 23:29:18 +02:00
//var_dump($orders);
2010-12-19 00:49:40 +01:00
//var_dump($categ);
//var_dump($modules);
2008-04-19 22:48:59 +02:00
2019-12-16 13:06:25 +01:00
$nbofactivatedmodules = count ( $conf -> modules );
2021-03-27 13:59:50 +01:00
2024-06-19 18:21:19 +02:00
// Define $nbmodulesnotautoenabled - TODO This code is at different places
2023-02-09 00:47:33 +01:00
$nbmodulesnotautoenabled = count ( $conf -> modules );
2024-06-19 18:21:19 +02:00
$listofmodulesautoenabled = array ( 'agenda' , 'fckeditor' , 'export' , 'import' );
foreach ( $listofmodulesautoenabled as $moduleautoenable ) {
if ( in_array ( $moduleautoenable , $conf -> modules )) {
$nbmodulesnotautoenabled -- ;
}
2023-12-04 11:41:14 +01:00
}
2019-10-08 16:41:03 +02:00
2020-04-06 15:12:42 +02:00
print load_fiche_titre ( $langs -> trans ( " ModulesSetup " ), '' , 'title_setup' );
2013-03-12 15:56:47 +01:00
2013-03-30 14:27:13 +01:00
// Start to show page
2021-02-05 14:11:34 +01:00
$deschelp = '' ;
2020-12-04 20:28:05 +01:00
if ( $mode == 'common' || $mode == 'commonkanban' ) {
$desc = $langs -> trans ( " ModulesDesc " , '{picto}' );
2021-07-12 10:50:37 +02:00
$desc .= ' ' . $langs -> trans ( " ModulesDesc2 " , '{picto2}' );
2022-03-31 17:07:13 +02:00
$desc = str_replace ( '{picto}' , img_picto ( '' , 'switch_off' , 'class="size15x"' ), $desc );
$desc = str_replace ( '{picto2}' , img_picto ( '' , 'setup' , 'class="size15x"' ), $desc );
2023-02-09 00:47:33 +01:00
if ( $nbmodulesnotautoenabled <= getDolGlobalInt ( 'MAIN_MIN_NB_ENABLED_MODULE_FOR_WARNING' , 1 )) { // If only minimal initial modules enabled
2023-06-22 16:07:53 +02:00
$deschelp .= '<div class="info hideonsmartphone">' . $desc . " <br></div> \n " ;
}
2023-10-24 17:00:13 +02:00
if ( getDolGlobalString ( 'MAIN_SETUP_MODULES_INFO' )) { // Show a custom message
2024-01-05 04:18:53 +01:00
$deschelp .= '<div class="info">' . $langs -> trans ( getDolGlobalString ( 'MAIN_SETUP_MODULES_INFO' )) . " <br></div> \n " ;
2023-06-22 16:07:53 +02:00
}
if ( $deschelp ) {
$deschelp .= '<br>' ;
2021-03-27 13:59:50 +01:00
}
2020-12-04 20:28:05 +01:00
}
2024-09-18 03:27:25 +02:00
//if ($mode == 'marketplace') {
// $deschelp = '<div class="info hideonsmartphone">'.$langs->trans("ModulesMarketPlaceDesc")."<br></div><br>\n";
//}
2020-12-04 20:28:05 +01:00
if ( $mode == 'deploy' ) {
2021-03-13 18:56:02 +01:00
$deschelp = '<div class="info hideonsmartphone">' . $langs -> trans ( " ModulesDeployDesc " , $langs -> transnoentitiesnoconv ( " AvailableModules " )) . " <br></div><br> \n " ;
2020-12-04 20:28:05 +01:00
}
if ( $mode == 'develop' ) {
2021-03-13 18:56:02 +01:00
$deschelp = '<div class="info hideonsmartphone">' . $langs -> trans ( " ModulesDevelopDesc " ) . " <br></div><br> \n " ;
2020-12-04 20:28:05 +01:00
}
2013-03-12 15:56:47 +01:00
2023-02-09 00:47:33 +01:00
$head = modules_prepare_head ( $nbofactivatedmodules , count ( $modules ), $nbmodulesnotautoenabled );
2013-01-02 18:43:59 +01:00
2020-12-04 20:28:05 +01:00
if ( $mode == 'common' || $mode == 'commonkanban' ) {
2020-04-05 02:44:59 +02:00
dol_set_focus ( '#search_keyword' );
print '<form method="POST" id="searchFormList" action="' . $_SERVER [ " PHP_SELF " ] . '">' ;
2020-12-29 16:43:41 +01:00
print '<input type="hidden" name="token" value="' . newToken () . '">' ;
if ( isset ( $optioncss ) && $optioncss != '' ) {
2020-12-04 20:28:05 +01:00
print '<input type="hidden" name="optioncss" value="' . $optioncss . '">' ;
}
2020-12-29 16:43:41 +01:00
if ( isset ( $sortfield ) && $sortfield != '' ) {
2021-02-26 22:04:03 +01:00
print '<input type="hidden" name="sortfield" value="' . $sortfield . '">' ;
2020-12-29 16:43:41 +01:00
}
if ( isset ( $sortorder ) && $sortorder != '' ) {
2021-02-26 22:04:03 +01:00
print '<input type="hidden" name="sortorder" value="' . $sortorder . '">' ;
2020-12-29 16:43:41 +01:00
}
if ( isset ( $page ) && $page != '' ) {
2021-02-26 22:04:03 +01:00
print '<input type="hidden" name="page" value="' . $page . '">' ;
2020-12-29 16:43:41 +01:00
}
2020-04-06 15:12:42 +02:00
print '<input type="hidden" name="mode" value="' . $mode . '">' ;
2020-04-05 02:44:59 +02:00
2020-12-04 20:28:05 +01:00
print dol_get_fiche_head ( $head , 'modules' , '' , - 1 );
2020-04-06 15:12:42 +02:00
2021-02-05 14:11:34 +01:00
print $deschelp ;
2021-04-18 22:26:27 +02:00
$moreforfilter = '<div class="valignmiddle">' ;
2020-07-20 03:29:22 +02:00
2021-11-22 17:54:29 +01:00
$moreforfilter .= '<div class="floatright right pagination paddingtop --module-list"><ul><li>' ;
2024-11-18 13:58:29 +01:00
$moreforfilter .= dolGetButtonTitle ( $langs -> trans ( 'CheckForModuleUpdate' ), $langs -> trans ( 'CheckForModuleUpdate' ) . '<br><br>' . img_warning ( '' , '' , 'paddingright' ) . $langs -> trans ( 'CheckForModuleUpdateHelp' ) . ' ' . $langs -> trans ( 'CheckForModuleUpdateHelp2' , DolibarrModules :: URL_FOR_BLACKLISTED_MODULES ) . '<br>' . $langs -> trans ( " YourIPWillBeRevealedToThisExternalProviders " ), 'fa fa-sync' , $_SERVER [ " PHP_SELF " ] . '?action=checklastversion&token=' . newToken () . '&mode=' . $mode . $param , '' , 1 , array ( 'morecss' => 'reposition' ));
2021-04-20 11:56:26 +02:00
$moreforfilter .= dolGetButtonTitleSeparator ();
2024-03-10 01:53:04 +01:00
$moreforfilter .= dolGetButtonTitle ( $langs -> trans ( 'ViewList' ), '' , 'fa fa-bars imgforviewmode' , $_SERVER [ " PHP_SELF " ] . '?mode=common' . $param , '' , ( $mode == 'common' ? 2 : 1 ), array ( 'morecss' => 'reposition' ));
$moreforfilter .= dolGetButtonTitle ( $langs -> trans ( 'ViewKanban' ), '' , 'fa fa-th-list imgforviewmode' , $_SERVER [ " PHP_SELF " ] . '?mode=commonkanban' . $param , '' , ( $mode == 'commonkanban' ? 2 : 1 ), array ( 'morecss' => 'reposition' ));
2020-07-20 03:29:22 +02:00
$moreforfilter .= '</li></ul></div>' ;
2022-01-23 02:06:47 +01:00
$moreforfilter .= '<div class="divfilteralone colorbacktimesheet float valignmiddle">' ;
$moreforfilter .= '<div class="divsearchfield paddingtop paddingbottom valignmiddle inline-block">' ;
2021-06-13 01:27:04 +02:00
$moreforfilter .= img_picto ( $langs -> trans ( " Filter " ), 'filter' , 'class="paddingright opacityhigh hideonsmartphone"' ) . '<input type="text" id="search_keyword" name="search_keyword" class="maxwidth125" value="' . dol_escape_htmltag ( $search_keyword ) . '" placeholder="' . dol_escape_htmltag ( $langs -> trans ( 'Keyword' )) . '">' ;
2020-04-05 02:44:59 +02:00
$moreforfilter .= '</div>' ;
2022-01-23 02:06:47 +01:00
$moreforfilter .= '<div class="divsearchfield paddingtop paddingbottom valignmiddle inline-block">' ;
2022-01-06 18:02:44 +01:00
$moreforfilter .= $form -> selectarray ( 'search_nature' , $arrayofnatures , dol_escape_htmltag ( $search_nature ), $langs -> trans ( 'Origin' ), 0 , 0 , '' , 0 , 0 , 0 , '' , 'maxwidth250' , 1 );
2020-04-05 02:44:59 +02:00
$moreforfilter .= '</div>' ;
2023-01-13 19:44:35 +01:00
2021-11-05 14:23:19 +01:00
if ( getDolGlobalInt ( 'MAIN_FEATURES_LEVEL' )) {
2024-03-10 01:53:04 +01:00
$array_version = array ( 'stable' => $langs -> transnoentitiesnoconv ( " Stable " ));
2023-04-28 16:05:25 +02:00
if ( getDolGlobalInt ( 'MAIN_FEATURES_LEVEL' ) < 0 ) {
2020-12-04 20:28:05 +01:00
$array_version [ 'deprecated' ] = $langs -> trans ( " Deprecated " );
}
2023-11-27 12:24:18 +01:00
if ( getDolGlobalInt ( 'MAIN_FEATURES_LEVEL' ) > 0 ) {
2020-12-04 20:28:05 +01:00
$array_version [ 'experimental' ] = $langs -> trans ( " Experimental " );
}
2023-11-27 12:24:18 +01:00
if ( getDolGlobalInt ( 'MAIN_FEATURES_LEVEL' ) > 1 ) {
2020-12-04 20:28:05 +01:00
$array_version [ 'development' ] = $langs -> trans ( " Development " );
}
2022-01-23 02:06:47 +01:00
$moreforfilter .= '<div class="divsearchfield paddingtop paddingbottom valignmiddle inline-block">' ;
2023-01-13 19:44:35 +01:00
$moreforfilter .= $form -> selectarray ( 'search_version' , $array_version , $search_version , $langs -> transnoentitiesnoconv ( 'Version' ), 0 , 0 , '' , 0 , 0 , 0 , '' , 'maxwidth150' , 1 );
2020-04-05 02:44:59 +02:00
$moreforfilter .= '</div>' ;
}
2024-03-10 01:53:04 +01:00
$array_status = array ( 'active' => $langs -> transnoentitiesnoconv ( " Enabled " ), 'disabled' => $langs -> transnoentitiesnoconv ( " Disabled " ));
2022-01-23 02:06:47 +01:00
$moreforfilter .= '<div class="divsearchfield paddingtop paddingbottom valignmiddle inline-block">' ;
2023-01-13 19:44:35 +01:00
$moreforfilter .= $form -> selectarray ( 'search_status' , $array_status , $search_status , $langs -> transnoentitiesnoconv ( 'Status' ), 0 , 0 , '' , 0 , 0 , 0 , '' , 'maxwidth150' , 1 );
2020-04-05 02:44:59 +02:00
$moreforfilter .= '</div>' ;
$moreforfilter .= ' ' ;
2022-01-23 02:06:47 +01:00
$moreforfilter .= '<div class="divsearchfield valignmiddle inline-block">' ;
2024-04-03 12:25:06 +02:00
$moreforfilter .= '<input type="submit" name="buttonsubmit" class="button small nomarginleft" value="' . dol_escape_htmltag ( $langs -> trans ( " Refresh " )) . '">' ;
2022-01-06 18:02:44 +01:00
if ( $search_keyword || ( $search_nature && $search_nature != '-1' ) || ( $search_version && $search_version != '-1' ) || ( $search_status && $search_status != '-1' )) {
2021-11-26 17:20:11 +01:00
$moreforfilter .= ' ' ;
$moreforfilter .= '<input type="submit" name="buttonreset" class="buttonreset noborderbottom" value="' . dol_escape_htmltag ( $langs -> trans ( " Reset " )) . '">' ;
}
2020-04-06 15:12:42 +02:00
$moreforfilter .= '</div>' ;
$moreforfilter .= '</div>' ;
2020-04-05 02:44:59 +02:00
$moreforfilter .= '</div>' ;
2024-11-04 23:53:20 +01:00
print $moreforfilter ;
$parameters = array ();
$reshook = $hookmanager -> executeHooks ( 'printFieldPreListTitle' , $parameters , $object , $action ); // Note that $action and $object may have been modified by hook
print $hookmanager -> resPrint ;
2020-04-05 02:44:59 +02:00
$moreforfilter = '' ;
print '<div class="clearboth"></div><br>' ;
$object = new stdClass ();
$parameters = array ();
$reshook = $hookmanager -> executeHooks ( 'insertExtraHeader' , $parameters , $object , $action ); // Note that $action and $object may have been modified by some hooks
2020-12-04 20:28:05 +01:00
if ( $reshook < 0 ) {
setEventMessages ( $hookmanager -> error , $hookmanager -> errors , 'errors' );
}
2020-04-05 02:44:59 +02:00
2021-08-29 20:42:14 +02:00
$disabled_modules = array ();
2021-08-29 20:36:08 +02:00
if ( ! empty ( $_SESSION [ " disablemodules " ])) {
$disabled_modules = explode ( ',' , $_SESSION [ " disablemodules " ]);
}
2020-04-05 02:44:59 +02:00
// Show list of modules
$oldfamily = '' ;
2021-04-20 11:56:26 +02:00
$foundoneexternalmodulewithupdate = 0 ;
2020-04-08 16:13:29 +02:00
$linenum = 0 ;
2021-11-25 10:28:37 +01:00
$atleastonequalified = 0 ;
$atleastoneforfamily = 0 ;
2020-12-04 20:28:05 +01:00
foreach ( $orders as $key => $value ) {
2020-04-08 16:13:29 +02:00
$linenum ++ ;
2020-04-05 02:44:59 +02:00
$tab = explode ( '_' , $value );
$familykey = $tab [ 1 ];
$module_position = $tab [ 2 ];
$modName = $filename [ $key ];
2021-04-18 20:12:24 +02:00
/** @var DolibarrModules $objMod */
2020-04-05 02:44:59 +02:00
$objMod = $modules [ $modName ];
2024-09-18 03:27:25 +02:00
if ( ! is_object ( $objMod )) {
continue ;
}
2020-04-05 02:44:59 +02:00
//print $objMod->name." - ".$key." - ".$objMod->version."<br>";
2020-12-04 20:28:05 +01:00
if ( $mode == 'expdev' && $objMod -> version != 'development' && $objMod -> version != 'experimental' ) {
continue ; // Discard if not for current tab
}
2020-04-05 02:44:59 +02:00
2020-12-04 20:28:05 +01:00
if ( ! $objMod -> getName ()) {
2020-04-05 02:44:59 +02:00
dol_syslog ( " Error for module " . $key . " - Property name of module looks empty " , LOG_WARNING );
2020-12-04 20:28:05 +01:00
continue ;
2020-04-05 02:44:59 +02:00
}
2021-08-29 20:36:08 +02:00
$modulenameshort = strtolower ( preg_replace ( '/^mod/i' , '' , get_class ( $objMod )));
2020-04-05 02:44:59 +02:00
$const_name = 'MAIN_MODULE_' . strtoupper ( preg_replace ( '/^mod/i' , '' , get_class ( $objMod )));
// Check filters
$modulename = $objMod -> getName ();
$moduletechnicalname = $objMod -> name ;
$moduledesc = $objMod -> getDesc ();
$moduledesclong = $objMod -> getDescLong ();
$moduleauthor = $objMod -> getPublisher ();
// We discard showing according to filters
2020-12-04 20:28:05 +01:00
if ( $search_keyword ) {
2020-04-05 02:44:59 +02:00
$qualified = 0 ;
2022-12-24 15:06:32 +01:00
if ( preg_match ( '/' . preg_quote ( $search_keyword , '/' ) . '/i' , $modulename )
|| preg_match ( '/' . preg_quote ( $search_keyword , '/' ) . '/i' , $moduletechnicalname )
|| ( $moduledesc && preg_match ( '/' . preg_quote ( $search_keyword , '/' ) . '/i' , $moduledesc ))
|| ( $moduledesclong && preg_match ( '/' . preg_quote ( $search_keyword , '/' ) . '/i' , $moduledesclong ))
|| ( $moduleauthor && preg_match ( '/' . preg_quote ( $search_keyword , '/' ) . '/i' , $moduleauthor ))
2024-03-10 01:53:04 +01:00
) {
2020-12-04 20:28:05 +01:00
$qualified = 1 ;
}
if ( ! $qualified ) {
continue ;
}
2020-04-05 02:44:59 +02:00
}
2020-12-04 20:28:05 +01:00
if ( $search_status ) {
2023-10-16 21:15:03 +02:00
if ( $search_status == 'active' && ! getDolGlobalString ( $const_name )) {
2020-12-04 20:28:05 +01:00
continue ;
}
2023-10-16 21:15:03 +02:00
if ( $search_status == 'disabled' && getDolGlobalString ( $const_name )) {
2020-12-04 20:28:05 +01:00
continue ;
}
2020-04-05 02:44:59 +02:00
}
2020-12-04 20:28:05 +01:00
if ( $search_nature ) {
if ( preg_match ( '/^external/' , $search_nature ) && $objMod -> isCoreOrExternalModule () != 'external' ) {
continue ;
}
2020-04-08 16:13:29 +02:00
$reg = array ();
2020-12-04 20:28:05 +01:00
if ( preg_match ( '/^external_(.*)$/' , $search_nature , $reg )) {
2020-04-05 02:44:59 +02:00
//print $reg[1].'-'.dol_escape_htmltag($objMod->getPublisher());
$publisher = dol_escape_htmltag ( $objMod -> getPublisher ());
2020-12-04 20:28:05 +01:00
if ( $reg [ 1 ] && dol_escape_htmltag ( $reg [ 1 ]) != $publisher ) {
continue ;
}
if ( ! $reg [ 1 ] && ! empty ( $publisher )) {
continue ;
}
}
if ( $search_nature == 'core' && $objMod -> isCoreOrExternalModule () == 'external' ) {
continue ;
2020-04-05 02:44:59 +02:00
}
}
2020-12-04 20:28:05 +01:00
if ( $search_version ) {
if (( $objMod -> version == 'development' || $objMod -> version == 'experimental' || preg_match ( '/deprecated/' , $objMod -> version )) && $search_version == 'stable' ) {
continue ;
}
if ( $objMod -> version != 'development' && ( $search_version == 'development' )) {
continue ;
}
if ( $objMod -> version != 'experimental' && ( $search_version == 'experimental' )) {
continue ;
}
if ( ! preg_match ( '/deprecated/' , $objMod -> version ) && ( $search_version == 'deprecated' )) {
continue ;
}
2020-04-05 02:44:59 +02:00
}
2021-11-25 10:28:37 +01:00
$atleastonequalified ++ ;
// Load all language files of the qualified module
2020-12-04 20:28:05 +01:00
if ( isset ( $objMod -> langfiles ) && is_array ( $objMod -> langfiles )) {
foreach ( $objMod -> langfiles as $domain ) {
2020-04-05 02:44:59 +02:00
$langs -> load ( $domain );
}
}
// Print a separator if we change family
if ( $familykey != $oldfamily ) {
if ( $oldfamily ) {
print '</table></div><br>' ;
}
$familytext = empty ( $familyinfo [ $familykey ][ 'label' ]) ? $familykey : $familyinfo [ $familykey ][ 'label' ];
2020-05-27 22:35:55 +02:00
print load_fiche_titre ( $familytext , '' , '' , 0 , '' , 'modulefamilygroup' );
2020-04-05 02:44:59 +02:00
2020-04-06 15:12:42 +02:00
if ( $mode == 'commonkanban' ) {
2023-02-19 02:39:39 +01:00
print '<div class="box-flex-container kanban">' ;
2020-04-05 02:44:59 +02:00
} else {
print '<div class="div-table-responsive">' ;
print '<table class="tagtable liste" summary="list_of_modules">' . " \n " ;
}
$atleastoneforfamily = 0 ;
}
$atleastoneforfamily ++ ;
2020-12-04 20:28:05 +01:00
if ( $familykey != $oldfamily ) {
2020-04-05 02:44:59 +02:00
$familytext = empty ( $familyinfo [ $familykey ][ 'label' ]) ? $familykey : $familyinfo [ $familykey ][ 'label' ];
$oldfamily = $familykey ;
}
// Version (with picto warning or not)
$version = $objMod -> getVersion ( 0 );
$versiontrans = '' ;
2023-01-13 14:09:54 +01:00
$warningstring = '' ;
2020-12-04 20:28:05 +01:00
if ( preg_match ( '/development/i' , $version )) {
2023-01-13 14:09:54 +01:00
$warningstring = $langs -> trans ( " Development " );
2020-12-04 20:28:05 +01:00
}
if ( preg_match ( '/experimental/i' , $version )) {
2023-01-13 14:09:54 +01:00
$warningstring = $langs -> trans ( " Experimental " );
2020-12-04 20:28:05 +01:00
}
if ( preg_match ( '/deprecated/i' , $version )) {
2023-01-13 14:09:54 +01:00
$warningstring = $langs -> trans ( " Deprecated " );
2020-12-04 20:28:05 +01:00
}
2023-01-13 14:09:54 +01:00
2020-05-14 15:42:37 +02:00
if ( $objMod -> isCoreOrExternalModule () == 'external' || preg_match ( '/development|experimental|deprecated/i' , $version )) {
$versiontrans .= $objMod -> getVersion ( 1 );
}
2020-04-05 02:44:59 +02:00
2024-07-28 20:05:10 +02:00
if ( $objMod -> isCoreOrExternalModule () == 'external' && ( $action == 'checklastversion' || getDolGlobalString ( 'CHECKLASTVERSION_EXTERNALMODULE' ))) {
// Setting CHECKLASTVERSION_EXTERNALMODULE to on is a bad practice to activate a check on an external access during the building of the admin page.
// 1 external module can hang the application.
// Adding a cron job could be a good idea: see DolibarrModules::checkForUpdate()
2021-04-18 22:13:37 +02:00
$checkRes = $objMod -> checkForUpdate ();
if ( $checkRes > 0 ) {
2024-09-10 02:02:16 +02:00
setEventMessages ( $objMod -> getName () . ' : ' . preg_replace ( '/[^a-z0-9_\.\-\s]/i' , '' , $versiontrans ) . ' -> ' . preg_replace ( '/[^a-z0-9_\.\-\s]/i' , '' , $objMod -> lastVersion ), null , 'warnings' );
2021-04-18 22:28:36 +02:00
} elseif ( $checkRes < 0 ) {
2024-07-28 20:05:10 +02:00
setEventMessages ( $objMod -> getName () . ' ' . $langs -> trans ( 'CheckVersionFail' ), null , 'errors' );
2021-04-18 22:13:37 +02:00
}
}
2024-10-19 20:46:10 +02:00
if ( $objMod -> isCoreOrExternalModule () == 'external' && $action == 'checklastversion' && ! getDolGlobalString ( 'DISABLE_CHECK_ON_MALWARE_MODULES' )) {
2024-10-19 13:16:13 +02:00
$checkRes = $objMod -> checkForCompliance (); // Check if module is reported as non compliant with Dolibarr rules and law
if ( ! is_numeric ( $checkRes ) && $checkRes != '' ) {
$langs -> load ( " errors " );
setEventMessages ( $objMod -> getName () . ' : ' . $langs -> trans ( $checkRes ), null , 'errors' );
2021-04-18 22:13:37 +02:00
}
}
2020-04-05 02:44:59 +02:00
// Define imginfo
$imginfo = " info " ;
2020-12-04 20:28:05 +01:00
if ( $objMod -> isCoreOrExternalModule () == 'external' ) {
2020-04-05 02:44:59 +02:00
$imginfo = " info_black " ;
}
2020-04-08 16:13:29 +02:00
$codeenabledisable = '' ;
$codetoconfig = '' ;
2021-08-29 20:36:08 +02:00
// Force disable of module disabled into session (for demo for example)
if ( in_array ( $modulenameshort , $disabled_modules )) {
$objMod -> disabled = true ;
}
2020-04-08 16:13:29 +02:00
// Activate/Disable and Setup (2 columns)
2023-12-23 19:47:10 +01:00
if ( getDolGlobalString ( $const_name )) { // If module is already activated
2020-12-04 20:31:53 +01:00
// Set $codeenabledisable
2020-04-08 16:13:29 +02:00
$disableSetup = 0 ;
2020-12-04 20:28:05 +01:00
if ( ! empty ( $arrayofwarnings [ $modName ])) {
2020-04-08 16:13:29 +02:00
$codeenabledisable .= '<!-- This module has a warning to show when we activate it (note: your country is ' . $mysoc -> country_code . ') -->' . " \n " ;
}
2021-08-29 20:36:08 +02:00
2020-12-04 20:28:05 +01:00
if ( ! empty ( $objMod -> disabled )) {
2020-04-08 16:13:29 +02:00
$codeenabledisable .= $langs -> trans ( " Disabled " );
2024-09-18 03:27:25 +02:00
} elseif ( is_object ( $objMod )
&& ( ! empty ( $objMod -> always_enabled ) || (( isModEnabled ( 'multicompany' ) && $objMod -> core_enabled ) && ( $user -> entity || $conf -> entity != 1 )))) {
2024-08-19 02:05:27 +02:00
// @phan-suppress-next-line PhanUndeclaredMethod
2020-12-04 20:28:05 +01:00
if ( method_exists ( $objMod , 'alreadyUsed' ) && $objMod -> alreadyUsed ()) {
$codeenabledisable .= $langs -> trans ( " Used " );
} else {
2024-09-25 22:21:31 +02:00
$codeenabledisable .= img_picto ( $langs -> trans ( " Required " ), 'switch_on' , '' , 0 , 0 , 0 , '' , 'opacitymedium valignmiddle' );
2020-04-08 16:13:29 +02:00
//print $langs->trans("Required");
}
2022-08-27 19:41:47 +02:00
if ( isModEnabled ( 'multicompany' ) && $user -> entity ) {
2020-12-04 20:28:05 +01:00
$disableSetup ++ ;
}
2020-05-21 09:35:30 +02:00
} else {
2024-08-19 02:05:27 +02:00
// @phan-suppress-next-line PhanUndeclaredMethod
2024-09-18 03:27:25 +02:00
if ( is_object ( $objMod ) && ! empty ( $objMod -> warnings_unactivation [ $mysoc -> country_code ]) && method_exists ( $objMod , 'alreadyUsed' ) && $objMod -> alreadyUsed ()) {
2021-03-13 18:56:02 +01:00
$codeenabledisable .= '<a class="reposition valignmiddle" href="' . $_SERVER [ " PHP_SELF " ] . '?id=' . $objMod -> numero . '&token=' . newToken () . '&module_position=' . $module_position . '&action=reset_confirm&confirm_message_code=' . urlencode ( $objMod -> warnings_unactivation [ $mysoc -> country_code ]) . '&value=' . $modName . '&mode=' . $mode . $param . '">' ;
2023-01-13 14:09:54 +01:00
$codeenabledisable .= img_picto ( $langs -> trans ( " Activated " ) . ( $warningstring ? ' ' . $warningstring : '' ), 'switch_on' );
2020-04-08 16:13:29 +02:00
$codeenabledisable .= '</a>' ;
2023-01-12 16:26:39 +01:00
if ( getDolGlobalInt ( " MAIN_FEATURES_LEVEL " ) > 1 ) {
$codeenabledisable .= ' ' ;
$codeenabledisable .= '<a class="reposition" href="' . $_SERVER [ " PHP_SELF " ] . '?id=' . $objMod -> numero . '&token=' . newToken () . '&module_position=' . $module_position . '&action=reload_confirm&value=' . $modName . '&mode=' . $mode . '&confirm=yes' . $param . '">' ;
2023-01-13 13:28:40 +01:00
$codeenabledisable .= img_picto ( $langs -> trans ( " Reload " ), 'refresh' , 'class="opacitymedium"' );
2023-01-12 16:26:39 +01:00
$codeenabledisable .= '</a>' ;
}
2020-05-21 09:35:30 +02:00
} else {
2020-10-17 14:01:09 +02:00
$codeenabledisable .= '<a class="reposition valignmiddle" href="' . $_SERVER [ " PHP_SELF " ] . '?id=' . $objMod -> numero . '&token=' . newToken () . '&module_position=' . $module_position . '&action=reset&value=' . $modName . '&mode=' . $mode . '&confirm=yes' . $param . '">' ;
2023-01-13 14:09:54 +01:00
$codeenabledisable .= img_picto ( $langs -> trans ( " Activated " ) . ( $warningstring ? ' ' . $warningstring : '' ), 'switch_on' );
2020-04-08 16:13:29 +02:00
$codeenabledisable .= '</a>' ;
2023-01-12 16:26:39 +01:00
if ( getDolGlobalInt ( " MAIN_FEATURES_LEVEL " ) > 1 ) {
$codeenabledisable .= ' ' ;
$codeenabledisable .= '<a class="reposition" href="' . $_SERVER [ " PHP_SELF " ] . '?id=' . $objMod -> numero . '&token=' . newToken () . '&module_position=' . $module_position . '&action=reload&value=' . $modName . '&mode=' . $mode . '&confirm=yes' . $param . '">' ;
2023-01-13 13:28:40 +01:00
$codeenabledisable .= img_picto ( $langs -> trans ( " Reload " ), 'refresh' , 'class="opacitymedium"' );
2023-01-12 16:26:39 +01:00
$codeenabledisable .= '</a>' ;
}
2020-04-08 16:13:29 +02:00
}
}
// Set $codetoconfig
2020-12-04 20:28:05 +01:00
if ( ! empty ( $objMod -> config_page_url ) && ! $disableSetup ) {
2020-04-08 16:13:29 +02:00
$backtourlparam = '' ;
2020-12-04 20:28:05 +01:00
if ( $search_keyword != '' ) {
2021-08-27 23:36:06 +02:00
$backtourlparam .= ( $backtourlparam ? '&' : '?' ) . 'search_keyword=' . urlencode ( $search_keyword ); // No urlencode here, done later
2020-12-04 20:28:05 +01:00
}
if ( $search_nature > - 1 ) {
2021-08-27 23:36:06 +02:00
$backtourlparam .= ( $backtourlparam ? '&' : '?' ) . 'search_nature=' . urlencode ( $search_nature ); // No urlencode here, done later
2020-12-04 20:28:05 +01:00
}
if ( $search_version > - 1 ) {
2021-08-27 23:36:06 +02:00
$backtourlparam .= ( $backtourlparam ? '&' : '?' ) . 'search_version=' . urlencode ( $search_version ); // No urlencode here, done later
2020-12-04 20:28:05 +01:00
}
if ( $search_status > - 1 ) {
2021-08-27 23:36:06 +02:00
$backtourlparam .= ( $backtourlparam ? '&' : '?' ) . 'search_status=' . urlencode ( $search_status ); // No urlencode here, done later
2020-12-04 20:28:05 +01:00
}
2020-04-08 16:13:29 +02:00
$backtourl = $_SERVER [ " PHP_SELF " ] . $backtourlparam ;
$regs = array ();
2020-12-04 20:28:05 +01:00
if ( is_array ( $objMod -> config_page_url )) {
2020-04-08 16:13:29 +02:00
$i = 0 ;
2020-12-04 20:28:05 +01:00
foreach ( $objMod -> config_page_url as $page ) {
2020-04-08 16:13:29 +02:00
$urlpage = $page ;
2020-12-04 20:28:05 +01:00
if ( $i ++ ) {
2020-04-08 16:13:29 +02:00
$codetoconfig .= '<a href="' . $urlpage . '" title="' . $langs -> trans ( $page ) . '">' . img_picto ( ucfirst ( $page ), " setup " ) . '</a>' ;
2023-12-13 12:46:23 +01:00
// print '<a href="'.$page.'">'.ucfirst($page).'</a> ';
2020-05-21 09:35:30 +02:00
} else {
2020-12-04 20:28:05 +01:00
if ( preg_match ( '/^([^@]+)@([^@]+)$/i' , $urlpage , $regs )) {
2020-04-08 16:13:29 +02:00
$urltouse = dol_buildpath ( '/' . $regs [ 2 ] . '/admin/' . $regs [ 1 ], 1 );
2024-09-25 22:21:31 +02:00
$codetoconfig .= '<a href="' . $urltouse . ( preg_match ( '/\?/' , $urltouse ) ? '&' : '?' ) . 'save_lastsearch_values=1&backtopage=' . urlencode ( $backtourl ) . '" title="' . $langs -> trans ( " Setup " ) . '">' . img_picto ( $langs -> trans ( " Setup " ), " setup " , 'style="padding-right: 6px"' , 0 , 0 , 0 , '' , 'fa-15' ) . '</a>' ;
2020-05-21 09:35:30 +02:00
} else {
2020-04-08 16:13:29 +02:00
$urltouse = $urlpage ;
2024-09-25 22:21:31 +02:00
$codetoconfig .= '<a href="' . $urltouse . ( preg_match ( '/\?/' , $urltouse ) ? '&' : '?' ) . 'save_lastsearch_values=1&backtopage=' . urlencode ( $backtourl ) . '" title="' . $langs -> trans ( " Setup " ) . '">' . img_picto ( $langs -> trans ( " Setup " ), " setup " , 'style="padding-right: 6px"' , 0 , 0 , 0 , '' , 'fa-15' ) . '</a>' ;
2020-04-08 16:13:29 +02:00
}
}
}
2022-12-30 01:58:13 +01:00
} elseif ( preg_match ( '/^([^@]+)@([^@]+)$/i' , ( string ) $objMod -> config_page_url , $regs )) {
2024-09-25 22:21:31 +02:00
$codetoconfig .= '<a class="valignmiddle" href="' . dol_buildpath ( '/' . $regs [ 2 ] . '/admin/' . $regs [ 1 ], 1 ) . '?save_lastsearch_values=1&backtopage=' . urlencode ( $backtourl ) . '" title="' . $langs -> trans ( " Setup " ) . '">' . img_picto ( $langs -> trans ( " Setup " ), " setup " , 'style="padding-right: 6px"' , 0 , 0 , 0 , '' , 'fa-15' ) . '</a>' ;
2020-05-21 09:35:30 +02:00
} else {
2024-09-25 22:21:31 +02:00
$codetoconfig .= '<a class="valignmiddle" href="' . (( string ) $objMod -> config_page_url ) . '?save_lastsearch_values=1&backtopage=' . urlencode ( $backtourl ) . '" title="' . $langs -> trans ( " Setup " ) . '">' . img_picto ( $langs -> trans ( " Setup " ), " setup " , 'style="padding-right: 6px"' , 0 , 0 , 0 , '' , 'fa-15' ) . '</a>' ;
2020-04-08 16:13:29 +02:00
}
2020-05-21 09:35:30 +02:00
} else {
2024-09-25 22:21:31 +02:00
$codetoconfig .= img_picto ( $langs -> trans ( " NothingToSetup " ), " setup " , 'class="opacitytransp" style="padding-right: 6px"' , 0 , 0 , 0 , '' , 'fa-15' );
2020-04-08 16:13:29 +02:00
}
2021-06-13 01:27:04 +02:00
} else { // Module not yet activated
2020-04-08 16:13:29 +02:00
// Set $codeenabledisable
2020-12-04 20:28:05 +01:00
if ( ! empty ( $objMod -> always_enabled )) {
2024-01-11 09:59:52 +01:00
// A 'always_enabled' module should not never be disabled. If this happen, we keep a link to re-enable it.
2024-01-08 12:19:57 +01:00
$codeenabledisable .= '<!-- Message to show: an always_enabled module has been disabled -->' . " \n " ;
$codeenabledisable .= '<a class="reposition" href="' . $_SERVER [ " PHP_SELF " ] . '?id=' . $objMod -> numero . '&token=' . newToken () . '&module_position=' . $module_position . '&action=set&token=' . newToken () . '&value=' . $modName . '&mode=' . $mode . $param . '"' ;
$codeenabledisable .= '>' ;
$codeenabledisable .= img_picto ( $langs -> trans ( " Disabled " ), 'switch_off' );
$codeenabledisable .= " </a> \n " ;
2020-12-04 20:28:05 +01:00
} elseif ( ! empty ( $objMod -> disabled )) {
2020-04-08 16:13:29 +02:00
$codeenabledisable .= $langs -> trans ( " Disabled " );
2020-05-21 09:35:30 +02:00
} else {
2020-04-08 16:13:29 +02:00
// Module qualified for activation
$warningmessage = '' ;
2020-12-04 20:28:05 +01:00
if ( ! empty ( $arrayofwarnings [ $modName ])) {
2020-04-08 16:13:29 +02:00
$codeenabledisable .= '<!-- This module is a core module and it may have a warning to show when we activate it (note: your country is ' . $mysoc -> country_code . ') -->' . " \n " ;
2020-12-04 20:28:05 +01:00
foreach ( $arrayofwarnings [ $modName ] as $keycountry => $cursorwarningmessage ) {
if ( preg_match ( '/^always/' , $keycountry ) || ( $mysoc -> country_code && preg_match ( '/^' . $mysoc -> country_code . '/' , $keycountry ))) {
2020-04-08 16:13:29 +02:00
$warningmessage .= ( $warningmessage ? " \n " : " " ) . $langs -> trans ( $cursorwarningmessage , $objMod -> getName (), $mysoc -> country_code );
}
}
}
2020-12-04 20:28:05 +01:00
if ( $objMod -> isCoreOrExternalModule () == 'external' && ! empty ( $arrayofwarningsext )) {
2020-04-08 16:13:29 +02:00
$codeenabledisable .= '<!-- This module is an external module and it may have a warning to show (note: your country is ' . $mysoc -> country_code . ') -->' . " \n " ;
2020-12-04 20:28:05 +01:00
foreach ( $arrayofwarningsext as $keymodule => $arrayofwarningsextbycountry ) {
2020-04-08 16:13:29 +02:00
$keymodulelowercase = strtolower ( preg_replace ( '/^mod/' , '' , $keymodule ));
2020-12-04 20:28:05 +01:00
if ( in_array ( $keymodulelowercase , $conf -> modules )) { // If module that request warning is on
foreach ( $arrayofwarningsextbycountry as $keycountry => $cursorwarningmessage ) {
if ( preg_match ( '/^always/' , $keycountry ) || ( $mysoc -> country_code && preg_match ( '/^' . $mysoc -> country_code . '/' , $keycountry ))) {
2020-04-08 16:13:29 +02:00
$warningmessage .= ( $warningmessage ? " \n " : " " ) . $langs -> trans ( $cursorwarningmessage , $objMod -> getName (), $mysoc -> country_code , $modules [ $keymodule ] -> getName ());
$warningmessage .= ( $warningmessage ? " \n " : " " ) . ( $warningmessage ? " \n " : " " ) . $langs -> trans ( " Module " ) . ' : ' . $objMod -> getName ();
2020-12-04 20:28:05 +01:00
if ( ! empty ( $objMod -> editor_name )) {
$warningmessage .= ( $warningmessage ? " \n " : " " ) . $langs -> trans ( " Publisher " ) . ' : ' . $objMod -> editor_name ;
}
if ( ! empty ( $objMod -> editor_name )) {
$warningmessage .= ( $warningmessage ? " \n " : " " ) . $langs -> trans ( " ModuleTriggeringThisWarning " ) . ' : ' . $modules [ $keymodule ] -> getName ();
}
2020-04-08 16:13:29 +02:00
}
}
}
}
}
$codeenabledisable .= '<!-- Message to show: ' . $warningmessage . ' -->' . " \n " ;
2021-09-26 20:26:20 +02:00
$codeenabledisable .= '<a class="reposition" href="' . $_SERVER [ " PHP_SELF " ] . '?id=' . $objMod -> numero . '&token=' . newToken () . '&module_position=' . $module_position . '&action=set&token=' . newToken () . '&value=' . $modName . '&mode=' . $mode . $param . '"' ;
2020-12-04 20:28:05 +01:00
if ( $warningmessage ) {
$codeenabledisable .= ' onclick="return confirm(\'' . dol_escape_js ( $warningmessage ) . '\');"' ;
}
2020-04-08 16:13:29 +02:00
$codeenabledisable .= '>' ;
$codeenabledisable .= img_picto ( $langs -> trans ( " Disabled " ), 'switch_off' );
$codeenabledisable .= " </a> \n " ;
}
// Set $codetoconfig
$codetoconfig .= img_picto ( $langs -> trans ( " NothingToSetup " ), " setup " , 'class="opacitytransp" style="padding-right: 6px"' );
}
2020-04-06 15:12:42 +02:00
if ( $mode == 'commonkanban' ) {
2020-04-05 02:44:59 +02:00
// Output Kanban
2021-04-18 22:13:37 +02:00
print $objMod -> getKanbanView ( $codeenabledisable , $codetoconfig );
2020-04-05 02:44:59 +02:00
} else {
2023-01-13 14:09:54 +01:00
print '<tr class="oddeven' . ( $warningstring ? ' info-box-content-warning' : '' ) . '">' . " \n " ;
2023-10-24 17:00:13 +02:00
if ( getDolGlobalString ( 'MAIN_MODULES_SHOW_LINENUMBERS' )) {
2021-06-13 01:27:04 +02:00
print '<td class="width50">' . $linenum . '</td>' ;
2020-12-04 20:28:05 +01:00
}
2020-04-05 02:44:59 +02:00
// Picto + Name of module
2023-08-08 14:09:06 +02:00
print ' <td class="tdoverflowmax200 minwidth200imp" title="' . dol_escape_htmltag ( $objMod -> getName ()) . '">' ;
2020-04-05 02:44:59 +02:00
$alttext = '' ;
//if (is_array($objMod->need_dolibarr_version)) $alttext.=($alttext?' - ':'').'Dolibarr >= '.join('.',$objMod->need_dolibarr_version);
//if (is_array($objMod->phpmin)) $alttext.=($alttext?' - ':'').'PHP >= '.join('.',$objMod->phpmin);
2020-12-04 20:28:05 +01:00
if ( ! empty ( $objMod -> picto )) {
if ( preg_match ( '/^\//i' , $objMod -> picto )) {
print img_picto ( $alttext , $objMod -> picto , 'class="valignmiddle pictomodule paddingrightonly"' , 1 );
} else {
print img_object ( $alttext , $objMod -> picto , 'class="valignmiddle pictomodule paddingrightonly"' );
}
2020-05-21 09:35:30 +02:00
} else {
2020-04-07 16:45:08 +02:00
print img_object ( $alttext , 'generic' , 'class="valignmiddle paddingrightonly"' );
2020-04-05 02:44:59 +02:00
}
print ' <span class="valignmiddle">' . $objMod -> getName () . '</span>' ;
print " </td> \n " ;
// Desc
2023-08-08 14:09:06 +02:00
print '<td class="valignmiddle tdoverflowmax300 minwidth200imp">' ;
2020-04-05 02:44:59 +02:00
print nl2br ( $objMod -> getDesc ());
print " </td> \n " ;
// Help
print '<td class="center nowrap" style="width: 82px;">' ;
//print $form->textwithpicto('', $text, 1, $imginfo, 'minheight20', 0, 2, 1);
2023-10-20 21:01:59 +02:00
print '<a href="javascript:document_preview(\'' . DOL_URL_ROOT . '/admin/modulehelp.php?id=' . (( int ) $objMod -> numero ) . '\',\'text/html\',\'' . dol_escape_js ( $langs -> trans ( " Module " )) . '\')">' . img_picto (( $objMod -> isCoreOrExternalModule () == 'external' ? $langs -> trans ( " ExternalModule " ) . ' - ' : '' ) . $langs -> trans ( " ClickToShowDescription " ), $imginfo ) . '</a>' ;
2020-04-05 02:44:59 +02:00
print '</td>' ;
// Version
2023-08-08 14:09:06 +02:00
print '<td class="center nowrap width150" title="' . dol_escape_htmltag ( dol_string_nohtmltag ( $versiontrans )) . '">' ;
2021-04-18 22:13:37 +02:00
if ( $objMod -> needUpdate ) {
$versionTitle = $langs -> trans ( 'ModuleUpdateAvailable' ) . ' : ' . $objMod -> lastVersion ;
print '<span class="badge badge-warning classfortooltip" title="' . dol_escape_htmltag ( $versionTitle ) . '">' . $versiontrans . '</span>' ;
2021-04-18 22:28:36 +02:00
} else {
2021-04-18 22:13:37 +02:00
print $versiontrans ;
2020-03-27 01:59:17 +01:00
}
2020-04-05 02:44:59 +02:00
print " </td> \n " ;
2020-04-08 16:13:29 +02:00
// Link enable/disable
2023-08-08 14:09:06 +02:00
print '<td class="center valignmiddle left nowraponall" width="60px">' ;
2020-04-08 16:13:29 +02:00
print $codeenabledisable ;
print " </td> \n " ;
2020-04-05 02:44:59 +02:00
2020-04-08 16:13:29 +02:00
// Link config
print '<td class="tdsetuppicto right valignmiddle" width="60px">' ;
print $codetoconfig ;
print '</td>' ;
2020-04-05 02:44:59 +02:00
print " </tr> \n " ;
}
2021-07-08 17:18:47 +02:00
if ( $objMod -> needUpdate ) {
$foundoneexternalmodulewithupdate ++ ;
}
2020-04-05 02:44:59 +02:00
}
2021-04-20 11:56:26 +02:00
if ( $action == 'checklastversion' ) {
if ( $foundoneexternalmodulewithupdate ) {
2024-09-30 14:30:28 +02:00
setEventMessages ( $langs -> trans ( " ModuleUpdateAvailable " ), null , 'warnings' , '' , 0 , 1 );
2021-04-20 11:56:26 +02:00
} else {
setEventMessages ( $langs -> trans ( " NoExternalModuleWithUpdate " ), null , 'mesgs' );
}
}
2020-12-04 20:28:05 +01:00
if ( $oldfamily ) {
2020-04-06 15:12:42 +02:00
if ( $mode == 'commonkanban' ) {
2020-04-05 02:44:59 +02:00
print '</div>' ;
} else {
print " </table> \n " ;
print '</div>' ;
}
}
2021-11-25 10:28:37 +01:00
if ( ! $atleastonequalified ) {
print '<br><span class="opacitymedium">' . $langs -> trans ( " NoDeployedModulesFoundWithThisSearchCriteria " ) . '</span><br><br>' ;
}
2020-10-27 18:19:31 +01:00
print dol_get_fiche_end ();
2020-04-05 02:44:59 +02:00
print '<br>' ;
// Show warning about external users
print info_admin ( showModulesExludedForExternal ( $modules )) . " \n " ;
print '</form>' ;
2004-10-23 00:42:10 +02:00
}
2017-02-11 15:41:01 +01:00
2020-12-04 20:28:05 +01:00
if ( $mode == 'marketplace' ) {
2020-10-22 22:50:03 +02:00
print dol_get_fiche_head ( $head , $mode , '' , - 1 );
2020-04-05 02:44:59 +02:00
2021-02-05 14:11:34 +01:00
print $deschelp ;
2021-01-28 16:31:32 +01:00
print '<br>' ;
2020-04-05 02:44:59 +02:00
// Marketplace
print '<div class="div-table-responsive-no-min">' ;
print '<table summary="list_of_modules" class="noborder centpercent">' . " \n " ;
print '<tr class="liste_titre">' . " \n " ;
print '<td class="hideonsmartphone">' . $form -> textwithpicto ( $langs -> trans ( " Provider " ), $langs -> trans ( " WebSiteDesc " )) . '</td>' ;
print '<td></td>' ;
print '<td>' . $langs -> trans ( " URL " ) . '</td>' ;
print '</tr>' ;
print '<tr class="oddeven">' . " \n " ;
$url = 'https://www.dolistore.com' ;
2021-11-22 02:35:55 +01:00
print '<td class="hideonsmartphone"><a href="' . $url . '" target="_blank" rel="noopener noreferrer external"><img border="0" class="imgautosize imgmaxwidth180" src="' . DOL_URL_ROOT . '/theme/dolistore_logo.png"></a></td>' ;
2021-03-13 18:56:02 +01:00
print '<td><span class="opacitymedium">' . $langs -> trans ( " DoliStoreDesc " ) . '</span></td>' ;
2021-11-22 02:35:55 +01:00
print '<td><a href="' . $url . '" target="_blank" rel="noopener noreferrer external">' . $url . '</a></td>' ;
2020-04-05 02:44:59 +02:00
print '</tr>' ;
print " </table> \n " ;
2019-10-08 16:49:10 +02:00
print '</div>' ;
2010-09-01 01:36:52 +02:00
2020-10-27 18:19:31 +01:00
print dol_get_fiche_end ();
2017-08-22 14:47:01 +02:00
2020-04-05 02:44:59 +02:00
print '<br>' ;
2017-08-22 14:47:01 +02:00
2025-01-22 05:40:50 +01:00
$conf -> global -> MAIN_DISABLE_DOLISTORE_SEARCH = 1 ; // avoid warning with the new Dolistore website
if ( ! getDolGlobalString ( 'MAIN_DISABLE_DOLISTORE_SEARCH' ) && getDolGlobalInt ( 'MAIN_FEATURES_LEVEL' ) >= 2 ) {
2024-01-11 09:59:52 +01:00
// $options is array with filter criteria
2024-11-08 14:21:52 +01:00
2025-01-12 03:22:47 +01:00
if ( getDolGlobalInt ( 'MAIN_ENANLE_OLD_DOLISTORE' )) {
$nbmaxtoshow = $options [ 'per_page' ];
$options [ 'per_page' ] ++ ;
$remotestore -> getRemoteCategories ();
$remotestore -> getRemoteProducts ( $options );
print '<span class="opacitymedium">' . $langs -> trans ( 'DOLISTOREdescriptionLong' ) . '</span><br><br>' ;
$previouslink = $remotestore -> get_previous_link ();
$nextlink = $remotestore -> get_next_link ();
print '<div class="liste_titre liste_titre_bydiv centpercent"><div class="divsearchfield">' ;
print '<form method="POST" class="centpercent" id="searchFormList" action="' . $remotestore -> url . '">' ; ?>
< input type = " hidden " name = " token " value = " <?php echo newToken(); ?> " >
< input type = " hidden " name = " mode " value = " marketplace " >
< div class = " divsearchfield " >
< input name = " search_keyword " placeholder = " <?php echo $langs->trans ('Keyword') ?> " id = " search_keyword " type = " text " class = " minwidth200 " value = " <?php echo dol_escape_htmltag( $options['search'] ) ?> " >< br >
</ div >
< div class = " divsearchfield " >
< input class = " button buttongen " value = " <?php echo $langs->trans ('Rechercher') ?> " type = " submit " >
< a class = " buttonreset " href = " <?php echo $_SERVER["PHP_SELF"] .'?mode=marketplace'; ?> " >< ? php echo $langs -> trans ( 'Reset' ) ?> </a>
& nbsp ;
</ div >
< ? php
print $previouslink ;
print $nextlink ;
print '</form>' ;
print '</div></div>' ;
print '<div class="clearboth"></div>' ;
?>
< div id = " category-tree-left " >
< ul class = " tree " >
< ? php
echo $remotestore -> get_categories (); // Do not use dol_escape_htmltag here, it is already a structured content?>
</ ul >
</ div >
< div id = " listing-content " >
< table summary = " list_of_modules " id = " list_of_modules " class = " productlist centpercent " >
< tbody id = " listOfModules " >
< ? php echo $remotestore -> get_products ( $nbmaxtoshow ); ?>
</ tbody >
</ table >
</ div >
< ? php
}
2020-04-05 02:44:59 +02:00
}
2017-02-11 15:41:01 +01:00
}
2024-10-19 15:16:50 +02:00
// Form to install an external module
2017-06-10 23:50:02 +02:00
2020-12-04 20:28:05 +01:00
if ( $mode == 'deploy' ) {
2020-10-22 22:50:03 +02:00
print dol_get_fiche_head ( $head , $mode , '' , - 1 );
2017-02-11 15:41:01 +01:00
2021-11-22 02:35:55 +01:00
$fullurl = '<a href="' . $urldolibarrmodules . '" target="_blank" rel="noopener noreferrer">' . $urldolibarrmodules . '</a>' ;
2020-04-10 10:59:32 +02:00
$message = '' ;
2023-04-25 19:50:15 +02:00
if ( $allowonlineinstall ) {
2020-12-04 20:28:05 +01:00
if ( ! in_array ( '/custom' , explode ( ',' , $dolibarr_main_url_root_alt ))) {
2020-04-10 10:59:32 +02:00
$message = info_admin ( $langs -> trans ( " ConfFileMustContainCustom " , DOL_DOCUMENT_ROOT . '/custom' , DOL_DOCUMENT_ROOT ));
$allowfromweb = - 1 ;
2020-05-21 09:35:30 +02:00
} else {
2020-12-04 20:28:05 +01:00
if ( $dirins_ok ) {
if ( ! is_writable ( dol_osencode ( $dirins ))) {
2017-09-01 08:20:33 +02:00
$langs -> load ( " errors " );
2020-04-10 10:59:32 +02:00
$message = info_admin ( $langs -> trans ( " ErrorFailedToWriteInDir " , $dirins ), 0 , 0 , '1' , 'warning' );
$allowfromweb = 0 ;
2017-09-01 08:20:33 +02:00
}
2020-05-21 09:35:30 +02:00
} else {
2020-04-10 10:59:32 +02:00
$message = info_admin ( $langs -> trans ( " NotExistsDirect " , $dirins ) . $langs -> trans ( " InfDirAlt " ) . $langs -> trans ( " InfDirExample " ));
$allowfromweb = 0 ;
2017-09-01 08:20:33 +02:00
}
}
2020-05-21 09:35:30 +02:00
} else {
2022-11-14 15:28:43 +01:00
if ( getDolGlobalString ( 'MAIN_MESSAGE_INSTALL_MODULES_DISABLED_CONTACT_US' )) {
// Show clean message
2023-04-25 19:50:15 +02:00
if ( ! is_numeric ( getDolGlobalString ( 'MAIN_MESSAGE_INSTALL_MODULES_DISABLED_CONTACT_US' ))) {
2024-05-13 14:38:41 +02:00
$message = info_admin ( $langs -> trans ( getDolGlobalString ( 'MAIN_MESSAGE_INSTALL_MODULES_DISABLED_CONTACT_US' )), 0 , 0 , 'warning' );
2023-03-15 14:44:32 +01:00
} else {
2024-05-13 14:38:41 +02:00
$message = info_admin ( $langs -> trans ( 'InstallModuleFromWebHasBeenDisabledContactUs' ), 0 , 0 , 'warning' );
2023-03-15 14:44:32 +01:00
}
2022-11-14 15:28:43 +01:00
} else {
// Show technical message
2024-05-13 14:38:41 +02:00
$message = info_admin ( $langs -> trans ( " InstallModuleFromWebHasBeenDisabledByFile " , $dolibarrdataroot . '/installmodules.lock' ), 0 , 0 , 'warning' );
2022-11-14 15:28:43 +01:00
}
2020-04-10 10:59:32 +02:00
$allowfromweb = 0 ;
2017-09-01 08:20:33 +02:00
}
2017-06-10 23:50:02 +02:00
2023-12-02 16:06:06 +01:00
print $deschelp ;
2020-12-04 20:28:05 +01:00
if ( $allowfromweb < 1 ) {
2017-09-01 08:20:33 +02:00
print $langs -> trans ( " SomethingMakeInstallFromWebNotPossible " );
print $message ;
//print $langs->trans("SomethingMakeInstallFromWebNotPossible2");
print '<br>' ;
}
2017-06-10 23:50:02 +02:00
2023-12-02 16:06:06 +01:00
// $allowfromweb = -1 if installation or setup not correct, 0 if not allowed, 1 if allowed
2020-12-04 20:28:05 +01:00
if ( $allowfromweb >= 0 ) {
if ( $allowfromweb == 1 ) {
2017-09-01 08:20:33 +02:00
//print $langs->trans("ThisIsProcessToFollow").'<br>';
2020-05-21 09:35:30 +02:00
} else {
2024-10-19 23:42:26 +02:00
print '<br>' ;
2017-09-01 08:20:33 +02:00
print $langs -> trans ( " ThisIsAlternativeProcessToFollow " ) . '<br>' ;
2019-01-27 11:55:16 +01:00
print '<b>' . $langs -> trans ( " StepNb " , 1 ) . '</b>: ' ;
2021-02-16 12:59:46 +01:00
print str_replace ( '{s1}' , $fullurl , $langs -> trans ( " FindPackageFromWebSite " , '{s1}' )) . '<br>' ;
2019-01-27 11:55:16 +01:00
print '<b>' . $langs -> trans ( " StepNb " , 2 ) . '</b>: ' ;
2021-02-16 12:59:46 +01:00
print str_replace ( '{s1}' , $fullurl , $langs -> trans ( " DownloadPackageFromWebSite " , '{s1}' )) . '<br>' ;
2019-01-27 11:55:16 +01:00
print '<b>' . $langs -> trans ( " StepNb " , 3 ) . '</b>: ' ;
2017-09-01 08:20:33 +02:00
}
2017-06-10 23:50:02 +02:00
2020-12-04 20:28:05 +01:00
if ( $allowfromweb == 1 ) {
2017-09-01 08:20:33 +02:00
print '<form enctype="multipart/form-data" method="POST" class="noborder" action="' . $_SERVER [ " PHP_SELF " ] . '" name="forminstall">' ;
2019-12-18 23:12:31 +01:00
print '<input type="hidden" name="token" value="' . newToken () . '">' ;
2017-09-01 08:20:33 +02:00
print '<input type="hidden" name="action" value="install">' ;
print '<input type="hidden" name="mode" value="deploy">' ;
2018-11-06 17:40:59 +01:00
2024-10-19 23:42:26 +02:00
print $langs -> trans ( " YouCanSubmitFile " ) . '<br><br><br>' ;
2018-11-06 17:40:59 +01:00
2024-10-19 20:26:15 +02:00
print '<span class="opacitymedium"><input class="paddingright" type="checkbox" name="checkforcompliance" id="checkforcompliance"' . ( getDolGlobalString ( 'DISABLE_CHECK_ON_MALWARE_MODULES' ) ? ' disabled="disabled"' : 'checked="checked"' ) . '>' ;
2024-10-19 23:42:26 +02:00
print '<label for="checkforcompliance">' . $form -> textwithpicto ( $langs -> trans ( " CheckIfModuleIsNotBlackListed " ), $langs -> trans ( " CheckIfModuleIsNotBlackListedHelp " )) . '</label>' ;
2024-10-19 15:16:50 +02:00
print '</span><br><br>' ;
2024-01-05 04:18:53 +01:00
$max = getDolGlobalString ( 'MAIN_UPLOAD_DOC' ); // In Kb
2019-12-16 13:06:25 +01:00
$maxphp = @ ini_get ( 'upload_max_filesize' ); // In unknown
2020-12-04 20:28:05 +01:00
if ( preg_match ( '/k$/i' , $maxphp )) {
2021-02-26 22:04:03 +01:00
$maxphp = preg_replace ( '/k$/i' , '' , $maxphp );
2024-03-12 22:21:52 +01:00
$maxphp *= 1 ;
2020-12-04 20:28:05 +01:00
}
if ( preg_match ( '/m$/i' , $maxphp )) {
2021-02-26 22:04:03 +01:00
$maxphp = preg_replace ( '/m$/i' , '' , $maxphp );
2024-03-12 22:21:52 +01:00
$maxphp *= 1024 ;
2020-12-04 20:28:05 +01:00
}
if ( preg_match ( '/g$/i' , $maxphp )) {
2021-02-26 22:04:03 +01:00
$maxphp = preg_replace ( '/g$/i' , '' , $maxphp );
2024-03-12 22:21:52 +01:00
$maxphp *= 1024 * 1024 ;
2020-12-04 20:28:05 +01:00
}
if ( preg_match ( '/t$/i' , $maxphp )) {
2021-02-26 22:04:03 +01:00
$maxphp = preg_replace ( '/t$/i' , '' , $maxphp );
2024-03-12 22:21:52 +01:00
$maxphp *= 1024 * 1024 * 1024 ;
2020-12-04 20:28:05 +01:00
}
2019-12-16 13:06:25 +01:00
$maxphp2 = @ ini_get ( 'post_max_size' ); // In unknown
2020-12-04 20:28:05 +01:00
if ( preg_match ( '/k$/i' , $maxphp2 )) {
2021-02-26 22:04:03 +01:00
$maxphp2 = preg_replace ( '/k$/i' , '' , $maxphp2 );
2024-03-12 22:21:52 +01:00
$maxphp2 *= 1 ;
2020-12-04 20:28:05 +01:00
}
if ( preg_match ( '/m$/i' , $maxphp2 )) {
2021-02-26 22:04:03 +01:00
$maxphp2 = preg_replace ( '/m$/i' , '' , $maxphp2 );
2024-03-12 22:21:52 +01:00
$maxphp2 *= 1024 ;
2020-12-04 20:28:05 +01:00
}
if ( preg_match ( '/g$/i' , $maxphp2 )) {
2021-02-26 22:04:03 +01:00
$maxphp2 = preg_replace ( '/g$/i' , '' , $maxphp2 );
2024-03-12 22:21:52 +01:00
$maxphp2 *= 1024 * 1024 ;
2020-12-04 20:28:05 +01:00
}
if ( preg_match ( '/t$/i' , $maxphp2 )) {
2021-02-26 22:04:03 +01:00
$maxphp2 = preg_replace ( '/t$/i' , '' , $maxphp2 );
2024-03-12 22:21:52 +01:00
$maxphp2 *= 1024 * 1024 * 1024 ;
2020-12-04 20:28:05 +01:00
}
2019-07-20 13:09:25 +02:00
// Now $max and $maxphp and $maxphp2 are in Kb
2018-11-06 17:40:59 +01:00
$maxmin = $max ;
2019-07-20 13:09:25 +02:00
$maxphptoshow = $maxphptoshowparam = '' ;
2020-12-04 20:28:05 +01:00
if ( $maxphp > 0 ) {
2019-12-16 13:06:25 +01:00
$maxmin = min ( $max , $maxphp );
2019-07-20 13:09:25 +02:00
$maxphptoshow = $maxphp ;
$maxphptoshowparam = 'upload_max_filesize' ;
}
2020-12-04 20:28:05 +01:00
if ( $maxphp2 > 0 ) {
2019-12-16 13:06:25 +01:00
$maxmin = min ( $max , $maxphp2 );
2020-12-04 20:28:05 +01:00
if ( $maxphp2 < $maxphp ) {
2019-07-20 13:09:25 +02:00
$maxphptoshow = $maxphp2 ;
$maxphptoshowparam = 'post_max_size' ;
}
}
2018-11-06 17:40:59 +01:00
2020-12-04 20:28:05 +01:00
if ( $maxmin > 0 ) {
2018-11-06 18:44:51 +01:00
print ' < script type = " text/javascript " >
$ ( document ) . ready ( function () {
jQuery ( " #fileinstall " ) . on ( " change " , function () {
2022-12-30 18:43:43 +01:00
if ( this . files [ 0 ] . size > '.($maxmin * 1024).' ) {
2024-10-20 00:11:53 +02:00
alert ( " '.dol_escape_js( $langs->transnoentitiesnoconv ( " ErrorFileSizeTooLarge " )).' " );
2018-11-06 18:44:51 +01:00
this . value = " " ;
2022-12-30 18:43:43 +01:00
}
2018-11-06 18:44:51 +01:00
});
});
</ script > ' . " \n " ;
2018-11-06 17:40:59 +01:00
// MAX_FILE_SIZE doit précéder le champ input de type file
2022-06-20 02:23:37 +02:00
print '<input type="hidden" name="MAX_FILE_SIZE" value="' . ( $maxmin * 1024 ) . '">' ;
2018-11-06 17:40:59 +01:00
}
2024-10-19 15:16:50 +02:00
print '<input class="flat minwidth400" type="file" name="fileinstall" id="fileinstall">' ;
2018-11-06 17:40:59 +01:00
2024-03-16 11:41:00 +01:00
print '<input type="submit" name="send" value="' . dol_escape_htmltag ( $langs -> trans ( " Upload " )) . '" class="button small">' ;
2018-11-06 17:40:59 +01:00
2023-10-24 17:00:13 +02:00
if ( getDolGlobalString ( 'MAIN_UPLOAD_DOC' )) {
2020-12-04 20:28:05 +01:00
if ( $user -> admin ) {
2020-04-05 02:44:59 +02:00
$langs -> load ( 'other' );
print ' ' ;
print info_admin ( $langs -> trans ( " ThisLimitIsDefinedInSetup " , $max , $maxphptoshow , $maxphptoshowparam ), 1 );
}
2020-05-21 09:35:30 +02:00
} else {
2020-04-05 02:44:59 +02:00
print ' (' . $langs -> trans ( " UploadDisabled " ) . ')' ;
2019-01-27 17:40:56 +01:00
}
2017-09-01 08:20:33 +02:00
print '</form>' ;
2017-06-10 23:50:02 +02:00
2017-09-01 08:20:33 +02:00
print '<br>' ;
print '<br>' ;
2017-06-10 23:50:02 +02:00
2017-09-01 08:20:33 +02:00
print '<div class="center"><div class="logo_setup"></div></div>' ;
2020-05-21 09:35:30 +02:00
} else {
2019-01-27 11:55:16 +01:00
print $langs -> trans ( " UnpackPackageInModulesRoot " , $dirins ) . '<br>' ;
print '<b>' . $langs -> trans ( " StepNb " , 4 ) . '</b>: ' ;
2024-05-13 14:38:41 +02:00
print $langs -> trans ( " SetupIsReadyForUse " , DOL_URL_ROOT . '/admin/modules.php?mainmenu=home' , $langs -> transnoentitiesnoconv ( " Home " ) . ' - ' . $langs -> transnoentitiesnoconv ( " Setup " ) . ' - ' . $langs -> transnoentitiesnoconv ( " Modules " )) . '<br>' ;
2017-09-01 08:20:33 +02:00
}
}
2017-02-11 15:41:01 +01:00
2020-12-04 20:28:05 +01:00
if ( ! empty ( $result [ 'return' ])) {
2017-09-01 08:20:33 +02:00
print '<br>' ;
2004-10-23 00:42:10 +02:00
2020-12-04 20:28:05 +01:00
foreach ( $result [ 'return' ] as $value ) {
2017-09-01 08:20:33 +02:00
echo $value . '<br>' ;
}
}
2005-10-14 23:05:13 +02:00
2020-10-27 18:19:31 +01:00
print dol_get_fiche_end ();
2017-09-01 08:20:33 +02:00
}
2013-02-01 17:34:19 +01:00
2020-12-04 20:28:05 +01:00
if ( $mode == 'develop' ) {
2020-10-22 22:50:03 +02:00
print dol_get_fiche_head ( $head , $mode , '' , - 1 );
2017-08-22 14:47:01 +02:00
2021-02-05 14:11:34 +01:00
print $deschelp ;
2021-01-28 16:31:32 +01:00
print '<br>' ;
2017-08-22 14:47:01 +02:00
// Marketplace
2023-12-02 16:10:58 +01:00
print '<table summary="list_of_modules" class="noborder centpercent">' . " \n " ;
print '<tr class="liste_titre">' . " \n " ;
2017-08-22 14:47:01 +02:00
//print '<td>'.$langs->trans("Logo").'</td>';
print '<td colspan="2">' . $langs -> trans ( " DevelopYourModuleDesc " ) . '</td>' ;
print '<td>' . $langs -> trans ( " URL " ) . '</td>' ;
print '</tr>' ;
2017-11-19 16:26:39 +01:00
print '<tr class="oddeven" height="80">' . " \n " ;
2023-12-02 16:10:58 +01:00
print '<td class="center">' ;
2017-11-19 16:26:39 +01:00
print '<div class="imgmaxheight50 logo_setup"></div>' ;
print '</td>' ;
2018-09-18 14:52:50 +02:00
print '<td>' . $langs -> trans ( " TryToUseTheModuleBuilder " , $langs -> transnoentitiesnoconv ( " ModuleBuilder " )) . '</td>' ;
2021-07-12 10:56:01 +02:00
print '<td class="maxwidth300">' ;
2022-08-27 19:41:47 +02:00
if ( isModEnabled ( 'modulebuilder' )) {
2021-07-12 10:56:01 +02:00
print $langs -> trans ( " SeeTopRightMenu " );
} else {
print '<span class="opacitymedium">' . $langs -> trans ( " ModuleMustBeEnabledFirst " , $langs -> transnoentitiesnoconv ( " ModuleBuilder " )) . '</span>' ;
}
print '</td>' ;
2017-11-19 16:26:39 +01:00
print '</tr>' ;
print '<tr class="oddeven" height="80">' . " \n " ;
2019-12-16 13:06:25 +01:00
$url = 'https://partners.dolibarr.org' ;
2023-12-02 16:10:58 +01:00
print '<td class="center">' ;
2021-11-22 02:35:55 +01:00
print '<a href="' . $url . '" target="_blank" rel="noopener noreferrer external"><img border="0" class="imgautosize imgmaxwidth180" src="' . DOL_URL_ROOT . '/theme/dolibarr_preferred_partner.png"></a>' ;
2017-11-19 16:26:39 +01:00
print '</td>' ;
2017-08-22 14:47:01 +02:00
print '<td>' . $langs -> trans ( " DoliPartnersDesc " ) . '</td>' ;
2023-12-02 16:10:58 +01:00
print '<td><a href="' . $url . '" target="_blank" rel="noopener noreferrer external">' ;
print img_picto ( '' , 'url' , 'class="pictofixedwidth"' );
print $url . '</a></td>' ;
2017-08-22 14:47:01 +02:00
print '</tr>' ;
print " </table> \n " ;
2020-10-27 18:19:31 +01:00
print dol_get_fiche_end ();
2017-08-22 14:47:01 +02:00
}
2018-07-28 18:03:14 +02:00
// End of page
2011-08-27 16:24:16 +02:00
llxFooter ();
2012-02-05 19:37:52 +01:00
$db -> close ();