2017-02-04 14:16:17 +01:00
< ? php
2017-05-26 10:28:10 +02:00
/* Copyright ( C ) 2017 Laurent Destailleur < eldy @ users . sourceforge . net >
2018-10-27 14:43:12 +02:00
* Copyright ( C ) 2017 Regis Houssin < regis . houssin @ inodbox . com >
2017-02-04 14:16:17 +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
* the Free Software Foundation ; either version 3 of the License , or
* ( 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 />.
2017-02-04 14:16:17 +01:00
*/
/**
2018-05-02 19:08:59 +02:00
* \file htdocs / admin / modulehelp . php
2017-02-04 14:16:17 +01:00
* \brief Page to activate / disable all modules
*/
2020-04-10 10:59:32 +02:00
if ( ! defined ( 'NOREQUIREMENU' )) define ( 'NOREQUIREMENU' , '1' ); // If there is no need to load and show top and left menu
if ( ! defined ( 'NOTOKENRENEWAL' )) define ( 'NOTOKENRENEWAL' , '1' ); // Disabled because this page is into a popup on module search page and we want to avoid to have an Anti CSRF token error (done if MAIN_SECURITY_CSRF_WITH_TOKEN is on) when we make a second search after closing popup.
2019-10-14 11:45:13 +02:00
2017-02-04 14:16:17 +01:00
require '../main.inc.php' ;
require_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php' ;
2017-08-26 15:46:18 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php' ;
require_once DOL_DOCUMENT_ROOT . '/core/lib/functions2.lib.php' ;
2017-02-04 14:16:17 +01:00
2018-05-26 18:41:16 +02:00
// Load translation files required by the page
2020-04-13 15:43:37 +02:00
$langs -> loadLangs ( array ( 'errors' , 'admin' , 'modulebuilder' ));
2017-02-04 14:16:17 +01:00
2020-04-10 10:59:32 +02:00
$mode = GETPOST ( 'mode' , 'alpha' );
$action = GETPOST ( 'action' , 'alpha' );
2017-02-04 14:16:17 +01:00
$id = GETPOST ( 'id' , 'int' );
2020-04-10 10:59:32 +02:00
if ( empty ( $mode )) $mode = 'desc' ;
2017-02-04 14:16:17 +01:00
2020-04-10 10:59:32 +02:00
if ( ! $user -> admin )
2017-02-04 14:16:17 +01:00
accessforbidden ();
/*
* Actions
*/
// Nothing
/*
* View
*/
$form = new Form ( $db );
2020-04-10 10:59:32 +02:00
$help_url = 'EN:First_setup|FR:Premiers_paramétrages|ES:Primeras_configuraciones' ;
2019-01-27 11:55:16 +01:00
llxHeader ( '' , $langs -> trans ( " Setup " ), $help_url );
2017-02-04 14:16:17 +01:00
print '<!-- Force style container -->' . " \n " . ' < style >
. id - container {
width : 100 % ;
2017-05-26 10:28:10 +02:00
}
2017-02-04 14:16:17 +01:00
</ style > ' ;
2020-04-10 10:59:32 +02:00
$arrayofnatures = array ( 'core' => $langs -> transnoentitiesnoconv ( " Core " ), 'external' => $langs -> transnoentitiesnoconv ( " External " ) . ' - ' . $langs -> trans ( " AllPublishers " ));
2017-02-04 14:16:17 +01:00
// Search modules dirs
$modulesdir = dolGetModulesDirs ();
$filename = array ();
$modules = array ();
$orders = array ();
$categ = array ();
$dirmod = array ();
2020-04-10 10:59:32 +02:00
$i = 0 ; // is a sequencer of modules found
$j = 0 ; // j is module number. Automatically affected if module number not defined.
$modNameLoaded = array ();
2017-02-04 14:16:17 +01:00
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) " );
2020-04-10 10:59:32 +02:00
$handle = @ opendir ( $dir );
2017-02-04 14:16:17 +01:00
if ( is_resource ( $handle ))
{
2020-04-10 10:59:32 +02:00
while (( $file = readdir ( $handle )) !== false )
2017-02-04 14:16:17 +01:00
{
//print "$i ".$file."\n<br>";
2020-04-10 10:59:32 +02:00
if ( is_readable ( $dir . $file ) && substr ( $file , 0 , 3 ) == 'mod' && substr ( $file , dol_strlen ( $file ) - 10 ) == '.class.php' )
2017-02-04 14:16:17 +01:00
{
$modName = substr ( $file , 0 , dol_strlen ( $file ) - 10 );
if ( $modName )
{
2020-04-10 10:59:32 +02:00
if ( ! empty ( $modNameLoaded [ $modName ]))
2017-02-04 14:16:17 +01:00
{
2020-04-10 10:59:32 +02:00
$mesg = " Error: Module " . $modName . " was found twice: Into " . $modNameLoaded [ $modName ] . " and " . $dir . " . You probably have an old file on your disk.<br> " ;
2017-02-04 14:16:17 +01:00
setEventMessages ( $mesg , null , 'warnings' );
dol_syslog ( $mesg , LOG_ERR );
continue ;
}
try
{
2020-04-10 10:59:32 +02:00
$res = include_once $dir . $file ;
2017-02-04 14:16:17 +01:00
if ( class_exists ( $modName ))
{
try {
$objMod = new $modName ( $db );
2020-04-10 10:59:32 +02:00
$modNameLoaded [ $modName ] = $dir ;
2017-02-04 14:16:17 +01:00
2020-04-10 10:59:32 +02:00
if ( ! $objMod -> numero > 0 && $modName != 'modUser' )
2017-02-04 14:16:17 +01:00
{
dol_syslog ( 'The module descriptor ' . $modName . ' must have a numero property' , LOG_ERR );
}
$j = $objMod -> numero ;
2020-04-10 10:59:32 +02:00
$modulequalified = 1 ;
2017-02-04 14:16:17 +01:00
// We discard modules according to features level (PS: if module is activated we always show it)
2019-01-27 11:55:16 +01:00
$const_name = 'MAIN_MODULE_' . strtoupper ( preg_replace ( '/^mod/i' , '' , get_class ( $objMod )));
2020-04-10 10:59:32 +02:00
if ( $objMod -> version == 'development' && ( empty ( $conf -> global -> $const_name ) && ( $conf -> global -> MAIN_FEATURES_LEVEL < 2 ))) $modulequalified = 0 ;
if ( $objMod -> version == 'experimental' && ( empty ( $conf -> global -> $const_name ) && ( $conf -> global -> MAIN_FEATURES_LEVEL < 1 ))) $modulequalified = 0 ;
if ( preg_match ( '/deprecated/' , $objMod -> version ) && ( empty ( $conf -> global -> $const_name ) && ( $conf -> global -> MAIN_FEATURES_LEVEL >= 0 ))) $modulequalified = 0 ;
2017-02-04 14:16:17 +01:00
// We discard modules according to property disabled
2019-10-29 10:45:57 +01:00
//if (! empty($objMod->hidden)) $modulequalified=0;
2017-02-04 14:16:17 +01:00
if ( $modulequalified > 0 )
{
2020-04-10 10:59:32 +02:00
$publisher = dol_escape_htmltag ( $objMod -> getPublisher ());
$external = ( $objMod -> isCoreOrExternalModule () == 'external' );
2017-02-04 14:16:17 +01:00
if ( $external )
{
if ( $publisher )
{
2020-04-10 10:59:32 +02:00
$arrayofnatures [ 'external_' . $publisher ] = $langs -> trans ( " External " ) . ' - ' . $publisher ;
2017-02-04 14:16:17 +01:00
}
else
{
2020-04-10 10:59:32 +02:00
$arrayofnatures [ 'external_' ] = $langs -> trans ( " External " ) . ' - ' . $langs -> trans ( " UnknownPublishers " );
2017-02-04 14:16:17 +01:00
}
}
ksort ( $arrayofnatures );
}
// Define array $categ with categ with at least one qualified module
if ( $modulequalified > 0 )
{
$modules [ $i ] = $objMod ;
2020-04-10 10:59:32 +02:00
$filename [ $i ] = $modName ;
2017-02-04 14:16:17 +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 )) {
2020-04-10 10:59:32 +02:00
if ( ! is_array ( $familyinfo )) $familyinfo = array ();
2017-02-04 14:16:17 +01:00
$familyinfo = array_merge ( $familyinfo , $objMod -> familyinfo );
$familykey = key ( $objMod -> familyinfo );
} else {
$familykey = $objMod -> family ;
}
2020-04-10 10:59:32 +02:00
$moduleposition = ( $objMod -> module_position ? $objMod -> module_position : '50' );
2018-10-06 11:57:53 +02:00
if ( $moduleposition == '50' && ( $objMod -> isCoreOrExternalModule () == 'external' ))
2017-02-04 14:16:17 +01:00
{
2020-04-10 10:59:32 +02:00
$moduleposition = '80' ; // External modules at end by default
2017-02-04 14:16:17 +01:00
}
2020-04-10 10:59:32 +02:00
$orders [ $i ] = $familyinfo [ $familykey ][ 'position' ] . " _ " . $familykey . " _ " . $moduleposition . " _ " . $j ; // Sort by family, then by module position then number
$dirmod [ $i ] = $dir ;
2017-02-04 14:16:17 +01:00
//print $i.'-'.$dirmod[$i].'<br>';
// Set categ[$i]
2018-02-25 10:55:02 +01:00
$specialstring = 'unknown' ;
2020-04-10 10:59:32 +02:00
if ( $objMod -> version == 'development' || $objMod -> version == 'experimental' ) $specialstring = 'expdev' ;
if ( isset ( $categ [ $specialstring ])) $categ [ $specialstring ] ++ ; // Array of all different modules categories
else $categ [ $specialstring ] = 1 ;
2017-02-04 14:16:17 +01:00
$j ++ ;
$i ++ ;
}
else dol_syslog ( " Module " . get_class ( $objMod ) . " not qualified " );
}
2020-04-10 10:59:32 +02:00
catch ( Exception $e )
2017-02-04 14:16:17 +01:00
{
dol_syslog ( " Failed to load " . $dir . $file . " " . $e -> getMessage (), LOG_ERR );
}
}
else
{
print " Warning bad descriptor file : " . $dir . $file . " (Class " . $modName . " not found into file)<br> " ;
}
}
2020-04-10 10:59:32 +02:00
catch ( Exception $e )
2017-02-04 14:16:17 +01:00
{
dol_syslog ( " Failed to load " . $dir . $file . " " . $e -> getMessage (), LOG_ERR );
}
}
}
}
closedir ( $handle );
}
else
{
dol_syslog ( " htdocs/admin/modulehelp.php: Failed to open directory " . $dir . " . See permission and open_basedir option. " , LOG_WARNING );
}
}
asort ( $orders );
//var_dump($orders);
//var_dump($categ);
//var_dump($modules);
2019-10-29 10:41:47 +01:00
unset ( $objMod );
2020-04-10 10:59:32 +02:00
$i = 0 ;
foreach ( $orders as $tmpkey => $tmpvalue )
2017-02-04 14:16:17 +01:00
{
2019-10-29 10:39:15 +01:00
$tmpMod = $modules [ $tmpkey ];
if ( $tmpMod -> numero == $id )
2017-02-04 14:16:17 +01:00
{
$key = $i ;
2017-03-21 16:02:54 +01:00
$modName = $filename [ $tmpkey ];
$dirofmodule = $dirmod [ $tmpkey ];
2019-10-29 10:41:47 +01:00
$objMod = $tmpMod ;
2017-02-04 14:16:17 +01:00
break ;
}
$i ++ ;
}
$value = $orders [ $key ];
2020-04-10 10:59:32 +02:00
$tab = explode ( '_' , $value );
$familyposition = $tab [ 0 ]; $familykey = $tab [ 1 ]; $module_position = $tab [ 2 ]; $numero = $tab [ 3 ];
2017-02-04 14:16:17 +01:00
2017-06-24 16:01:18 +02:00
2019-10-29 11:18:10 +01:00
$head = modulehelp_prepare_head ( $objMod );
2017-06-24 16:01:18 +02:00
2017-03-21 16:02:54 +01:00
// Check filters
2020-04-10 10:59:32 +02:00
$modulename = $objMod -> getName ();
$moduledesc = $objMod -> getDesc ();
$moduleauthor = $objMod -> getPublisher ();
$moduledir = strtolower ( preg_replace ( '/^mod/i' , '' , get_class ( $objMod )));
2017-02-04 14:16:17 +01:00
2020-04-06 15:12:42 +02:00
$const_name = 'MAIN_MODULE_' . strtoupper ( preg_replace ( '/^mod/i' , '' , get_class ( $objMod )));
$text = '<span class="opacitymedium">' . $langs -> trans ( " LastActivationDate " ) . ':</span> ' ;
2020-04-10 10:59:32 +02:00
if ( ! empty ( $conf -> global -> $const_name )) $text .= dol_print_date ( $objMod -> getLastActivationDate (), 'dayhour' );
else $text .= $langs -> trans ( " Disabled " );
2020-04-06 15:12:42 +02:00
$tmp = $objMod -> getLastActivationInfo ();
$authorid = $tmp [ 'authorid' ];
if ( $authorid > 0 )
{
$tmpuser = new User ( $db );
$tmpuser -> fetch ( $authorid );
2020-04-10 10:59:32 +02:00
$text .= '<br><span class="opacitymedium">' . $langs -> trans ( " LastActivationAuthor " ) . ':</span> ' ;
$text .= $tmpuser -> getNomUrl ( 1 );
2020-04-06 15:12:42 +02:00
}
$ip = $tmp [ 'ip' ];
if ( $ip )
{
2020-04-10 10:59:32 +02:00
$text .= '<br><span class="opacitymedium">' . $langs -> trans ( " LastActivationIP " ) . ':</span> ' ;
$text .= $ip ;
2020-04-06 15:12:42 +02:00
}
$moreinfo = $text ;
2020-04-10 10:59:32 +02:00
$title = ( $modulename ? $modulename : $moduledesc );
2017-02-04 14:16:17 +01:00
2017-03-21 16:02:54 +01:00
print '<div class="centpercent">' ;
2017-02-04 14:16:17 +01:00
2020-04-06 15:12:42 +02:00
$picto = 'object_' . $objMod -> picto ;
2020-08-03 14:32:42 +02:00
print load_fiche_titre (( $modulename ? $modulename : $moduledesc ), $moreinfo , $picto , 0 , '' , 'titlemodulehelp' );
2017-03-21 16:02:54 +01:00
print '<br>' ;
2017-02-04 14:16:17 +01:00
2020-04-08 17:56:24 +02:00
dol_fiche_head ( $head , $mode , '' , - 1 );
2017-02-04 14:16:17 +01:00
2020-04-10 10:59:32 +02:00
if ( ! $modulename )
2017-02-04 14:16:17 +01:00
{
dol_syslog ( " Error for module " . $key . " - Property name of module looks empty " , LOG_WARNING );
}
// Load all lang files of module
if ( isset ( $objMod -> langfiles ) && is_array ( $objMod -> langfiles ))
{
2020-04-10 10:59:32 +02:00
foreach ( $objMod -> langfiles as $domain )
2017-02-04 14:16:17 +01:00
{
$langs -> load ( $domain );
}
}
2017-04-14 11:22:48 +02:00
2017-02-04 14:16:17 +01:00
// Version (with picto warning or not)
2020-04-10 10:59:32 +02:00
$version = $objMod -> getVersion ( 0 );
$versiontrans = '' ;
if ( preg_match ( '/development/i' , $version )) $versiontrans .= img_warning ( $langs -> trans ( " Development " ), 'style="float: left"' );
if ( preg_match ( '/experimental/i' , $version )) $versiontrans .= img_warning ( $langs -> trans ( " Experimental " ), 'style="float: left"' );
if ( preg_match ( '/deprecated/i' , $version )) $versiontrans .= img_warning ( $langs -> trans ( " Deprecated " ), 'style="float: left"' );
$versiontrans .= $objMod -> getVersion ( 1 );
2017-02-04 14:16:17 +01:00
// Define imginfo
2020-04-10 10:59:32 +02:00
$imginfo = " info " ;
2017-02-04 14:16:17 +01:00
if ( $objMod -> isCoreOrExternalModule () == 'external' )
{
2020-04-10 10:59:32 +02:00
$imginfo = " info_black " ;
2017-02-04 14:16:17 +01:00
}
// Define text of description of module
2020-04-10 10:59:32 +02:00
$text = '' ;
2017-05-26 10:28:10 +02:00
2017-02-12 18:13:49 +01:00
if ( $mode == 'desc' )
2017-02-04 14:16:17 +01:00
{
2020-03-27 01:59:17 +01:00
if ( $moduledesc ) $text .= '<br>' . $moduledesc . '<br><br><br>' ;
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<span class="opacitymedium">' . $langs -> trans ( " Version " ) . ':</span> ' . $version ;
2017-05-26 10:28:10 +02:00
2020-04-13 15:43:37 +02:00
$moduledescriptorfile = get_class ( $objMod ) . '.class.php' ;
$text .= '<br><span class="opacitymedium">' . $langs -> trans ( " DescriptorFile " ) . ':</span> ' . $moduledescriptorfile ;
2020-04-10 10:59:32 +02:00
$textexternal = '' ;
2017-02-12 18:13:49 +01:00
if ( $objMod -> isCoreOrExternalModule () == 'external' )
{
2020-04-13 15:57:25 +02:00
$textexternal .= '<br><span class="opacitymedium">' . $langs -> trans ( " Origin " ) . ':</span> ' . $langs -> trans ( " ExternalModule " ) . ' - ' . $langs -> trans ( " InstalledInto " , $dirofmodule );
2020-04-10 10:59:32 +02:00
if ( $objMod -> editor_name != 'dolibarr' ) $textexternal .= '<br><span class="opacitymedium">' . $langs -> trans ( " Publisher " ) . ':</span> ' . ( empty ( $objMod -> editor_name ) ? $langs -> trans ( " Unknown " ) : $objMod -> editor_name );
2018-08-16 11:18:03 +02:00
$editor_url = $objMod -> editor_url ;
2020-04-10 10:59:32 +02:00
if ( ! preg_match ( '/^http/' , $editor_url )) $editor_url = 'http://' . $editor_url ;
if ( ! empty ( $objMod -> editor_url ) && ! preg_match ( '/dolibarr\.org/i' , $objMod -> editor_url )) $textexternal .= ( $objMod -> editor_name != 'dolibarr' ? ' - ' : '' ) . img_picto ( '' , 'globe' ) . ' <a href="' . $editor_url . '" target="_blank">' . $objMod -> editor_url . '</a>' ;
$text .= $textexternal ;
$text .= '<br>' ;
2017-02-12 18:13:49 +01:00
}
else
{
2020-04-10 10:59:32 +02:00
$text .= '<br><span class="opacitymedium">' . $langs -> trans ( " Origin " ) . ':</span> ' . $langs -> trans ( " Core " ) . '<br>' ;
2017-05-26 10:28:10 +02:00
}
2020-04-10 10:59:32 +02:00
$moduledesclong = $objMod -> getDescLong ();
if ( $moduledesclong ) $text .= '<br><hr><div class="moduledesclong">' . $moduledesclong . '<div>' ;
2017-02-04 14:16:17 +01:00
}
2017-02-12 18:13:49 +01:00
if ( $mode == 'feature' )
2017-02-04 14:16:17 +01:00
{
2020-04-10 10:59:32 +02:00
$text .= '<br><strong>' . $langs -> trans ( " DependsOn " ) . ':</strong> ' ;
if ( count ( $objMod -> depends )) $text .= join ( ',' , $objMod -> depends );
else $text .= $langs -> trans ( " None " );
$text .= '<br><strong>' . $langs -> trans ( " RequiredBy " ) . ':</strong> ' ;
if ( count ( $objMod -> requiredby )) $text .= join ( ',' , $objMod -> requiredby );
else $text .= $langs -> trans ( " None " );
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br><br>' ;
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br><strong>' . $langs -> trans ( " AddDataTables " ) . ':</strong> ' ;
2017-08-26 16:04:24 +02:00
$sqlfiles = dol_dir_list ( dol_buildpath ( $moduledir . '/sql/' ), 'files' , 0 , 'llx.*\.sql' , array ( '\.key\.sql' ));
if ( count ( $sqlfiles ) > 0 )
{
2020-04-10 10:59:32 +02:00
$text .= $langs -> trans ( " Yes " ) . ' (' ;
$i = 0 ;
foreach ( $sqlfiles as $val )
2017-08-26 16:04:24 +02:00
{
2020-04-10 10:59:32 +02:00
$text .= ( $i ? ', ' : '' ) . preg_replace ( '/\.sql$/' , '' , preg_replace ( '/llx_/' , '' , $val [ 'name' ]));
2017-08-26 16:04:24 +02:00
$i ++ ;
}
2020-04-10 10:59:32 +02:00
$text .= ')' ;
2017-08-26 16:04:24 +02:00
}
2020-04-10 10:59:32 +02:00
else $text .= $langs -> trans ( " No " );
2017-08-26 16:04:24 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br>' ;
2017-08-26 16:04:24 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br><strong>' . $langs -> trans ( " AddDictionaries " ) . ':</strong> ' ;
2017-08-26 15:46:18 +02:00
if ( isset ( $objMod -> dictionaries ) && isset ( $objMod -> dictionaries [ 'tablib' ]) && is_array ( $objMod -> dictionaries [ 'tablib' ]) && count ( $objMod -> dictionaries [ 'tablib' ]))
2017-02-04 14:16:17 +01:00
{
2020-04-10 10:59:32 +02:00
$i = 0 ;
foreach ( $objMod -> dictionaries [ 'tablib' ] as $val )
2017-02-12 18:13:49 +01:00
{
2020-04-10 10:59:32 +02:00
$text .= ( $i ? ', ' : '' ) . $val ;
2017-02-12 18:13:49 +01:00
$i ++ ;
}
2017-02-04 14:16:17 +01:00
}
2020-04-10 10:59:32 +02:00
else $text .= $langs -> trans ( " No " );
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br>' ;
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br><strong>' . $langs -> trans ( " AddData " ) . ':</strong> ' ;
2017-08-26 15:46:18 +02:00
$filedata = dol_buildpath ( $moduledir . '/sql/data.sql' );
if ( dol_is_file ( $filedata ))
2017-02-04 14:16:17 +01:00
{
2020-04-25 19:27:42 +02:00
$text .= $langs -> trans ( " Yes " ) . ' (' . $moduledir . '/sql/data.sql)' ;
2017-02-04 14:16:17 +01:00
}
2020-04-10 10:59:32 +02:00
else $text .= $langs -> trans ( " No " );
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br>' ;
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br><strong>' . $langs -> trans ( " AddRemoveTabs " ) . ':</strong> ' ;
2017-08-26 15:46:18 +02:00
if ( isset ( $objMod -> tabs ) && is_array ( $objMod -> tabs ) && count ( $objMod -> tabs ))
2017-02-04 14:16:17 +01:00
{
2020-04-10 10:59:32 +02:00
$i = 0 ;
foreach ( $objMod -> tabs as $val )
2017-02-12 18:13:49 +01:00
{
2020-04-10 10:59:32 +02:00
if ( is_array ( $val )) $val = $val [ 'data' ];
2017-10-26 03:35:57 +02:00
if ( is_string ( $val ))
{
2020-04-10 10:59:32 +02:00
$tmp = explode ( ':' , $val , 3 );
$text .= ( $i ? ', ' : '' ) . $tmp [ 0 ] . ':' . $tmp [ 1 ];
2017-10-26 03:35:57 +02:00
$i ++ ;
}
2017-02-12 18:13:49 +01:00
}
2017-02-04 14:16:17 +01:00
}
2020-04-10 10:59:32 +02:00
else $text .= $langs -> trans ( " No " );
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br>' ;
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br><strong>' . $langs -> trans ( " AddModels " ) . ':</strong> ' ;
2017-02-12 18:13:49 +01:00
if ( isset ( $objMod -> module_parts ) && isset ( $objMod -> module_parts [ 'models' ]) && $objMod -> module_parts [ 'models' ])
2017-02-04 14:16:17 +01:00
{
2020-04-10 10:59:32 +02:00
$text .= $langs -> trans ( " Yes " );
2017-02-04 14:16:17 +01:00
}
2020-04-10 10:59:32 +02:00
else $text .= $langs -> trans ( " No " );
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br>' ;
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br><strong>' . $langs -> trans ( " AddSubstitutions " ) . ':</strong> ' ;
2017-02-12 18:13:49 +01:00
if ( isset ( $objMod -> module_parts ) && isset ( $objMod -> module_parts [ 'substitutions' ]) && $objMod -> module_parts [ 'substitutions' ])
2017-02-04 14:16:17 +01:00
{
2020-04-10 10:59:32 +02:00
$text .= $langs -> trans ( " Yes " );
2017-02-04 14:16:17 +01:00
}
2020-04-10 10:59:32 +02:00
else $text .= $langs -> trans ( " No " );
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br>' ;
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br><strong>' . $langs -> trans ( " AddSheduledJobs " ) . ':</strong> ' ;
2017-02-12 18:13:49 +01:00
if ( isset ( $objMod -> cronjobs ) && is_array ( $objMod -> cronjobs ) && count ( $objMod -> cronjobs ))
2017-02-04 14:16:17 +01:00
{
2020-04-10 10:59:32 +02:00
$i = 0 ;
foreach ( $objMod -> cronjobs as $val )
2017-02-12 18:13:49 +01:00
{
2020-04-10 10:59:32 +02:00
$text .= ( $i ? ', ' : '' ) . ( $val [ 'label' ]);
2017-02-12 18:13:49 +01:00
$i ++ ;
}
2017-02-04 14:16:17 +01:00
}
2020-04-10 10:59:32 +02:00
else $text .= $langs -> trans ( " No " );
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br>' ;
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br><strong>' . $langs -> trans ( " AddTriggers " ) . ':</strong> ' ;
$moreinfoontriggerfile = '' ;
2017-02-12 18:13:49 +01:00
if ( isset ( $objMod -> module_parts ) && isset ( $objMod -> module_parts [ 'triggers' ]) && $objMod -> module_parts [ 'triggers' ])
2017-02-04 14:16:17 +01:00
{
2020-04-10 10:59:32 +02:00
$yesno = 'Yes' ;
2017-02-04 14:16:17 +01:00
}
2017-08-03 12:04:13 +02:00
else
{
2020-04-10 10:59:32 +02:00
$yesno = 'No' ;
2017-08-03 12:04:13 +02:00
}
2017-08-03 12:19:31 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php' ;
$interfaces = new Interfaces ( $db );
2020-04-10 10:59:32 +02:00
$triggers = $interfaces -> getTriggersList ( array ((( $objMod -> isCoreOrExternalModule () == 'external' ) ? '/' . $moduledir : '' ) . '/core/triggers' ));
foreach ( $triggers as $triggercursor )
2017-08-03 12:19:31 +02:00
{
if ( $triggercursor [ 'module' ] == $moduledir )
{
2020-04-10 10:59:32 +02:00
$yesno = 'Yes' ;
$moreinfoontriggerfile = ' (' . $triggercursor [ 'relpath' ] . ')' ;
2017-08-03 12:19:31 +02:00
}
}
2017-08-03 12:04:13 +02:00
2020-04-10 10:59:32 +02:00
$text .= $langs -> trans ( $yesno ) . $moreinfoontriggerfile ;
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br>' ;
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br><strong>' . $langs -> trans ( " AddBoxes " ) . ':</strong> ' ;
2017-08-26 15:46:18 +02:00
if ( isset ( $objMod -> boxes ) && is_array ( $objMod -> boxes ) && count ( $objMod -> boxes ))
{
2020-04-10 10:59:32 +02:00
$i = 0 ;
foreach ( $objMod -> boxes as $val )
2017-08-26 15:46:18 +02:00
{
2020-04-10 10:59:32 +02:00
$text .= ( $i ? ', ' : '' ) . ( $val [ 'file' ] ? $val [ 'file' ] : $val [ 0 ]);
2017-08-26 15:46:18 +02:00
$i ++ ;
}
}
2020-04-10 10:59:32 +02:00
else $text .= $langs -> trans ( " No " );
2017-08-26 15:46:18 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br>' ;
2017-08-26 15:46:18 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br><strong>' . $langs -> trans ( " AddHooks " ) . ':</strong> ' ;
2017-02-12 18:13:49 +01:00
if ( isset ( $objMod -> module_parts ) && is_array ( $objMod -> module_parts [ 'hooks' ]) && count ( $objMod -> module_parts [ 'hooks' ]))
{
2020-04-10 10:59:32 +02:00
$i = 0 ;
foreach ( $objMod -> module_parts [ 'hooks' ] as $key => $val )
2017-02-12 18:13:49 +01:00
{
2017-10-27 10:05:21 +02:00
if ( $key === 'entity' ) continue ;
2017-05-26 10:28:10 +02:00
// For special values
2017-10-27 10:05:21 +02:00
if ( $key === 'data' )
2017-05-26 10:28:10 +02:00
{
if ( is_array ( $val ))
{
2020-04-10 10:59:32 +02:00
foreach ( $val as $value )
2017-05-26 10:28:10 +02:00
{
2020-04-10 10:59:32 +02:00
$text .= ( $i ? ', ' : '' ) . ( $value );
2017-05-26 10:28:10 +02:00
$i ++ ;
}
continue ;
}
}
2020-04-10 10:59:32 +02:00
$text .= ( $i ? ', ' : '' ) . ( $val );
2017-05-26 10:28:10 +02:00
$i ++ ;
2017-02-12 18:13:49 +01:00
}
}
2020-04-10 10:59:32 +02:00
else $text .= $langs -> trans ( " No " );
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br>' ;
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br><strong>' . $langs -> trans ( " AddPermissions " ) . ':</strong> ' ;
2017-02-12 18:13:49 +01:00
if ( isset ( $objMod -> rights ) && is_array ( $objMod -> rights ) && count ( $objMod -> rights ))
{
2020-04-10 10:59:32 +02:00
$i = 0 ;
foreach ( $objMod -> rights as $val )
2017-02-12 18:13:49 +01:00
{
2020-04-10 10:59:32 +02:00
$text .= ( $i ? ', ' : '' ) . ( $val [ 1 ]);
2017-05-26 10:28:10 +02:00
$i ++ ;
2017-02-12 18:13:49 +01:00
}
}
2020-04-10 10:59:32 +02:00
else $text .= $langs -> trans ( " No " );
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br>' ;
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br><strong>' . $langs -> trans ( " AddMenus " ) . ':</strong> ' ;
if ( isset ( $objMod -> menu ) && ! empty ( $objMod -> menu )) // objMod can be an array or just an int 1
2017-02-12 18:13:49 +01:00
{
2020-04-10 10:59:32 +02:00
$text .= $langs -> trans ( " Yes " );
2017-02-12 18:13:49 +01:00
}
2020-04-10 10:59:32 +02:00
else $text .= $langs -> trans ( " No " );
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br>' ;
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br><strong>' . $langs -> trans ( " AddExportProfiles " ) . ':</strong> ' ;
2017-02-12 18:13:49 +01:00
if ( isset ( $objMod -> export_label ) && is_array ( $objMod -> export_label ) && count ( $objMod -> export_label ))
{
2020-04-10 10:59:32 +02:00
$i = 0 ;
foreach ( $objMod -> export_label as $val )
2017-02-12 18:13:49 +01:00
{
2020-04-10 10:59:32 +02:00
$text .= ( $i ? ', ' : '' ) . ( $val );
2017-02-12 18:13:49 +01:00
$i ++ ;
}
}
2020-04-10 10:59:32 +02:00
else $text .= $langs -> trans ( " No " );
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br>' ;
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br><strong>' . $langs -> trans ( " AddImportProfiles " ) . ':</strong> ' ;
2017-02-12 18:13:49 +01:00
if ( isset ( $objMod -> import_label ) && is_array ( $objMod -> import_label ) && count ( $objMod -> import_label ))
2017-02-04 14:16:17 +01:00
{
2020-04-10 10:59:32 +02:00
$i = 0 ;
foreach ( $objMod -> import_label as $val )
2017-02-12 18:13:49 +01:00
{
2020-04-10 10:59:32 +02:00
$text .= ( $i ? ', ' : '' ) . ( $val );
2017-02-12 18:13:49 +01:00
$i ++ ;
}
2017-02-04 14:16:17 +01:00
}
2020-04-10 10:59:32 +02:00
else $text .= $langs -> trans ( " No " );
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br>' ;
2017-05-26 10:28:10 +02:00
2020-04-10 10:59:32 +02:00
$text .= '<br><strong>' . $langs -> trans ( " AddOtherPagesOrServices " ) . ':</strong> ' ;
$text .= $langs -> trans ( " DetectionNotPossible " );
2017-02-04 14:16:17 +01:00
}
2017-06-24 16:01:18 +02:00
if ( $mode == 'changelog' )
{
2020-04-10 10:59:32 +02:00
$changelog = $objMod -> getChangeLog ();
if ( $changelog ) $text .= '<div class="moduledesclong">' . $changelog . '<div>' ;
else $text .= '<div class="moduledesclong">' . $langs -> trans ( " NotAvailable " ) . '</div>' ;
2017-06-24 16:01:18 +02:00
}
2017-02-04 14:16:17 +01:00
print $text ;
dol_fiche_end ();
print '</div>' ;
2018-07-28 18:03:14 +02:00
// End of page
2017-02-04 14:16:17 +01:00
llxFooter ();
$db -> close ();