2010-01-12 10:49:41 +01:00
< ? php
2014-09-29 11:08:50 +02:00
/* Copyright ( C ) 2010 - 2014 Regis Houssin < regis . houssin @ capnetworks . com >
2016-08-04 10:19:30 +02:00
* Copyright ( C ) 2011 - 2016 Laurent Destailleur < eldy @ users . sourceforge . net >
2018-03-14 09:48:39 +01:00
* Copyright ( C ) 2011 - 2015 Juanjo Menent < jmenent @ 2 byte . es >
2018-06-10 18:29:04 +02:00
* Copyright ( C ) 2011 - 2018 Philippe Grand < philippe . grand @ atoo - net . com >
2014-09-29 11:08:50 +02:00
* Copyright ( C ) 2013 Florian Henry < florian . henry @ open - concept . pro >
2015-06-15 10:04:36 +02:00
* Copyright ( C ) 2015 Marcos García < marcosgdf @ gmail . com >
2018-03-14 09:48:39 +01:00
* Copyright ( C ) 2018 Ferran Marcet < fmarcet @ 2 byte . es >
2013-03-25 19:31: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
* along with this program . If not , see < http :// www . gnu . org / licenses />.
2014-02-28 21:54:50 +01:00
*/
2010-01-12 10:49:41 +01:00
/**
* \file htdocs / admin / project . php
* \ingroup project
2011-08-31 20:47:29 +02:00
* \brief Page to setup project module
2014-02-28 21:54:50 +01:00
*/
2010-01-12 10:49:41 +01:00
2013-04-12 11:09:53 +02:00
require '../../main.inc.php' ;
2012-08-22 23:11:24 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php' ;
2013-04-12 11:09:53 +02:00
require_once DOL_DOCUMENT_ROOT . '/core/lib/project.lib.php' ;
2012-08-22 23:11:24 +02:00
require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php' ;
require_once DOL_DOCUMENT_ROOT . '/projet/class/task.class.php' ;
2010-01-12 10:49:41 +01:00
2018-05-26 21:11:25 +02:00
// Load translation files required by the page
$langs -> loadLangs ( array ( 'admin' , 'errors' , 'other' , 'projects' ));
2010-01-12 10:49:41 +01:00
2012-04-05 14:49:51 +02:00
if ( ! $user -> admin ) accessforbidden ();
2010-01-12 10:49:41 +01:00
2012-04-05 14:49:51 +02:00
$value = GETPOST ( 'value' , 'alpha' );
$action = GETPOST ( 'action' , 'alpha' );
$label = GETPOST ( 'label' , 'alpha' );
2017-08-23 10:07:00 +02:00
$scandir = GETPOST ( 'scan_dir' , 'alpha' );
2012-04-05 14:49:51 +02:00
$type = 'project' ;
2011-08-31 20:47:29 +02:00
2010-01-12 10:49:41 +01:00
/*
* Actions
2014-02-28 21:54:50 +01:00
*/
2010-01-12 10:49:41 +01:00
2017-06-01 12:11:45 +02:00
include DOL_DOCUMENT_ROOT . '/core/actions_setmoduleoptions.inc.php' ;
2015-06-29 16:57:32 +02:00
if ( $action == 'setmainoptions' )
{
if ( GETPOST ( 'PROJECT_USE_OPPORTUNITIES' )) dolibarr_set_const ( $db , " PROJECT_USE_OPPORTUNITIES " , GETPOST ( 'PROJECT_USE_OPPORTUNITIES' ), 'chaine' , 0 , '' , $conf -> entity );
else dolibarr_del_const ( $db , " PROJECT_USE_OPPORTUNITIES " , $conf -> entity );
2018-02-06 18:22:04 +01:00
// Warning, the constant saved and used in code is PROJECT_HIDE_TASKS
2018-03-14 09:48:39 +01:00
if ( GETPOST ( 'PROJECT_USE_TASKS' )) dolibarr_del_const ( $db , " PROJECT_HIDE_TASKS " , $conf -> entity );
2015-06-29 16:57:32 +02:00
else dolibarr_set_const ( $db , " PROJECT_HIDE_TASKS " , 1 , 'chaine' , 0 , '' , $conf -> entity );
}
else if ( $action == 'updateMask' )
2010-01-12 10:49:41 +01:00
{
2012-03-29 12:41:11 +02:00
$maskconstproject = GETPOST ( 'maskconstproject' , 'alpha' );
$maskproject = GETPOST ( 'maskproject' , 'alpha' );
2012-08-08 04:12:20 +02:00
2011-09-03 00:33:28 +02:00
if ( $maskconstproject ) $res = dolibarr_set_const ( $db , $maskconstproject , $maskproject , 'chaine' , 0 , '' , $conf -> entity );
2011-11-06 15:12:18 +01:00
2011-09-03 00:33:28 +02:00
if ( ! $res > 0 ) $error ++ ;
2013-03-25 19:28:34 +01:00
if ( ! $error )
{
2015-12-17 14:14:44 +01:00
setEventMessages ( $langs -> trans ( " SetupSaved " ), null , 'mesgs' );
2013-03-25 19:28:34 +01:00
}
else
{
2015-12-17 14:14:44 +01:00
setEventMessages ( $langs -> trans ( " Error " ), null , 'errors' );
2013-03-25 19:28:34 +01:00
}
2010-01-12 10:49:41 +01:00
}
2013-07-17 19:17:54 +02:00
if ( $action == 'updateMaskTask' )
{
$maskconstmasktask = GETPOST ( 'maskconsttask' , 'alpha' );
$masktaskt = GETPOST ( 'masktask' , 'alpha' );
if ( $maskconstmasktask ) $res = dolibarr_set_const ( $db , $maskconstmasktask , $masktaskt , 'chaine' , 0 , '' , $conf -> entity );
if ( ! $res > 0 ) $error ++ ;
if ( ! $error )
{
2015-12-17 14:14:44 +01:00
setEventMessages ( $langs -> trans ( " SetupSaved " ), null , 'mesgs' );
2013-07-17 19:17:54 +02:00
}
else
{
2015-12-17 14:14:44 +01:00
setEventMessages ( $langs -> trans ( " Error " ), null , 'errors' );
2013-07-17 19:17:54 +02:00
}
}
2013-03-22 17:10:17 +01:00
else if ( $action == 'specimen' )
2010-01-12 10:49:41 +01:00
{
2012-03-29 12:41:11 +02:00
$modele = GETPOST ( 'module' , 'alpha' );
2010-01-12 10:49:41 +01:00
$project = new Project ( $db );
$project -> initAsSpecimen ();
2017-06-01 12:11:45 +02:00
2012-04-05 11:46:56 +02:00
// Search template files
$file = '' ; $classname = '' ; $filefound = 0 ;
$dirmodels = array_merge ( array ( '/' ),( array ) $conf -> modules_parts [ 'models' ]);
foreach ( $dirmodels as $reldir )
2010-01-12 10:49:41 +01:00
{
2014-09-29 11:08:50 +02:00
$file = dol_buildpath ( $reldir . " core/modules/project/doc/pdf_ " . $modele . " .modules.php " , 0 );
2012-04-05 11:46:56 +02:00
if ( file_exists ( $file ))
{
$filefound = 1 ;
$classname = " pdf_ " . $modele ;
break ;
}
}
2012-08-08 04:12:20 +02:00
2012-04-05 11:46:56 +02:00
if ( $filefound )
{
2012-08-22 23:11:24 +02:00
require_once $file ;
2010-01-12 10:49:41 +01:00
2012-04-05 11:46:56 +02:00
$module = new $classname ( $db );
2010-01-12 10:49:41 +01:00
2012-04-05 11:46:56 +02:00
if ( $module -> write_file ( $project , $langs ) > 0 )
2010-01-12 10:49:41 +01:00
{
2013-03-25 19:28:34 +01:00
header ( " Location: " . DOL_URL_ROOT . " /document.php?modulepart=project&file=SPECIMEN.pdf " );
return ;
2010-01-12 10:49:41 +01:00
}
else
{
2015-12-17 14:14:44 +01:00
setEventMessages ( $obj -> error , $obj -> errors , 'errors' );
2010-01-12 10:49:41 +01:00
dol_syslog ( $obj -> error , LOG_ERR );
}
}
else
{
2015-12-17 14:14:44 +01:00
setEventMessages ( $langs -> trans ( " ErrorModuleNotFound " ), null , 'errors' );
2010-01-12 10:49:41 +01:00
dol_syslog ( $langs -> trans ( " ErrorModuleNotFound " ), LOG_ERR );
}
}
2013-07-17 18:45:58 +02:00
else if ( $action == 'specimentask' )
{
$modele = GETPOST ( 'module' , 'alpha' );
$project = new Project ( $db );
$project -> initAsSpecimen ();
// Search template files
$file = '' ; $classname = '' ; $filefound = 0 ;
$dirmodels = array_merge ( array ( '/' ),( array ) $conf -> modules_parts [ 'models' ]);
foreach ( $dirmodels as $reldir )
{
2014-09-29 11:08:50 +02:00
$file = dol_buildpath ( $reldir . " core/modules/project/task/doc/pdf_ " . $modele . " .modules.php " , 0 );
2013-07-17 18:45:58 +02:00
if ( file_exists ( $file ))
{
$filefound = 1 ;
$classname = " pdf_ " . $modele ;
break ;
}
}
if ( $filefound )
{
require_once $file ;
$module = new $classname ( $db );
if ( $module -> write_file ( $project , $langs ) > 0 )
{
header ( " Location: " . DOL_URL_ROOT . " /document.php?modulepart=project_task&file=SPECIMEN.pdf " );
return ;
}
else
{
2015-12-17 14:14:44 +01:00
setEventMessages ( $obj -> error , $obj -> errors , 'errors' );
2013-07-17 18:45:58 +02:00
dol_syslog ( $obj -> error , LOG_ERR );
}
}
else
{
2015-12-17 14:14:44 +01:00
setEventMessages ( $langs -> trans ( " ErrorModuleNotFound " ), null , 'errors' );
2013-07-17 18:45:58 +02:00
dol_syslog ( $langs -> trans ( " ErrorModuleNotFound " ), LOG_ERR );
}
}
2013-03-22 17:10:17 +01:00
// Activate a model
else if ( $action == 'set' )
2010-01-12 10:49:41 +01:00
{
2012-04-05 14:49:51 +02:00
$ret = addDocumentModel ( $value , $type , $label , $scandir );
2010-01-12 10:49:41 +01:00
}
2013-07-18 10:24:45 +02:00
// Activate a model for task
else if ( $action == 'settask' )
{
$ret = addDocumentModel ( $value , 'project_task' , $label , $scandir );
}
2010-01-12 10:49:41 +01:00
2013-03-22 17:10:17 +01:00
else if ( $action == 'del' )
2010-01-12 10:49:41 +01:00
{
2012-04-05 14:49:51 +02:00
$ret = delDocumentModel ( $value , $type );
if ( $ret > 0 )
2010-01-12 10:49:41 +01:00
{
2013-03-25 19:28:34 +01:00
if ( $conf -> global -> PROJECT_ADDON_PDF == " $value " ) dolibarr_del_const ( $db , 'PROJECT_ADDON_PDF' , $conf -> entity );
2010-01-12 10:49:41 +01:00
}
}
2013-07-17 18:45:58 +02:00
if ( $action == 'deltask' )
{
$ret = delDocumentModel ( $value , 'project_task' );
if ( $ret > 0 )
{
if ( $conf -> global -> PROJECT_TASK_ADDON_PDF == " $value " ) dolibarr_del_const ( $db , 'PROJECT_TASK_ADDON_PDF' , $conf -> entity );
}
}
2010-01-12 10:49:41 +01:00
2013-03-22 17:10:17 +01:00
// Set default model
else if ( $action == 'setdoc' )
2010-01-12 10:49:41 +01:00
{
2015-03-23 01:39:12 +01:00
dolibarr_set_const ( $db , " PROJECT_ADDON_PDF " , $value , 'chaine' , 0 , '' , $conf -> entity );
2010-01-12 10:49:41 +01:00
// On active le modele
2012-04-05 14:49:51 +02:00
$ret = delDocumentModel ( $value , $type );
if ( $ret > 0 )
2010-01-12 10:49:41 +01:00
{
2012-04-05 14:49:51 +02:00
$ret = addDocumentModel ( $value , $type , $label , $scandir );
2010-01-12 10:49:41 +01:00
}
}
2013-07-17 18:45:58 +02:00
else if ( $action == 'setdoctask' )
{
if ( dolibarr_set_const ( $db , " PROJECT_TASK_ADDON_PDF " , $value , 'chaine' , 0 , '' , $conf -> entity ))
{
// La constante qui a ete lue en avant du nouveau set
// on passe donc par une variable pour avoir un affichage coherent
$conf -> global -> PROJECT_TASK_ADDON_PDF = $value ;
}
// On active le modele
$ret = delDocumentModel ( $value , 'project_task' );
if ( $ret > 0 )
{
$ret = addDocumentModel ( $value , 'project_task' , $label , $scandir );
}
}
2013-03-22 17:10:17 +01:00
else if ( $action == 'setmod' )
2010-01-12 10:49:41 +01:00
{
2010-10-28 00:41:40 +02:00
// TODO Verifier si module numerotation choisi peut etre active
2010-01-12 10:49:41 +01:00
// par appel methode canBeActivated
2012-04-05 14:49:51 +02:00
dolibarr_set_const ( $db , " PROJECT_ADDON " , $value , 'chaine' , 0 , '' , $conf -> entity );
2010-01-12 10:49:41 +01:00
}
2013-04-09 21:58:25 +02:00
2013-07-17 18:45:58 +02:00
else if ( $action == 'setmodtask' )
{
// TODO Verifier si module numerotation choisi peut etre active
// par appel methode canBeActivated
dolibarr_set_const ( $db , " PROJECT_TASK_ADDON " , $value , 'chaine' , 0 , '' , $conf -> entity );
}
2015-06-29 16:57:32 +02:00
elseif ( $action == 'updateoptions' )
{
if ( GETPOST ( 'PROJECT_USE_SEARCH_TO_SELECT' ))
{
2015-06-15 10:04:36 +02:00
$companysearch = GETPOST ( 'activate_PROJECT_USE_SEARCH_TO_SELECT' , 'alpha' );
2015-06-29 16:57:32 +02:00
if ( dolibarr_set_const ( $db , " PROJECT_USE_SEARCH_TO_SELECT " , $companysearch , 'chaine' , 0 , '' , $conf -> entity ))
{
2015-06-15 10:04:36 +02:00
$conf -> global -> PROJECT_USE_SEARCH_TO_SELECT = $companysearch ;
}
}
2018-04-23 21:33:49 +02:00
if ( GETPOST ( 'PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY' ))
{
$projectToSelect = GETPOST ( 'projectToSelect' , 'alpha' );
dolibarr_set_const ( $db , 'PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY' , $projectToSelect , 'chaine' , 0 , '' , $conf -> entity ); //Allow to disable this configuration if empty value
}
2017-12-04 17:43:35 +01:00
}
2013-07-17 18:45:58 +02:00
2010-01-12 10:49:41 +01:00
/*
* View
2014-09-29 11:08:50 +02:00
*/
2010-01-12 10:49:41 +01:00
2012-04-05 11:46:56 +02:00
$dirmodels = array_merge ( array ( '/' ),( array ) $conf -> modules_parts [ 'models' ]);
2013-03-22 17:10:17 +01:00
llxHeader ( " " , $langs -> trans ( " ProjectsSetup " ));
2010-01-12 10:49:41 +01:00
2012-04-05 14:49:51 +02:00
$form = new Form ( $db );
2018-02-26 09:20:05 +01:00
$linkback = '<a href="' . DOL_URL_ROOT . '/admin/modules.php?restore_lastsearch_values=1">' . $langs -> trans ( " BackToModuleList " ) . '</a>' ;
2015-09-24 18:33:48 +02:00
print load_fiche_titre ( $langs -> trans ( " ProjectsSetup " ), $linkback , 'title_setup' );
2010-01-12 10:49:41 +01:00
2013-04-12 11:09:53 +02:00
$head = project_admin_prepare_head ();
2010-01-12 10:49:41 +01:00
2017-05-24 18:00:26 +02:00
dol_fiche_head ( $head , 'project' , $langs -> trans ( " Projects " ), - 1 , 'project' );
2013-03-22 17:10:17 +01:00
2015-06-29 16:57:32 +02:00
// Main options
$form = new Form ( $db );
print '<form method="POST" action="' . $_SERVER [ 'PHP_SELF' ] . '">' ;
print '<input type="hidden" name="token" value="' . $_SESSION [ 'newtoken' ] . '">' ;
print '<input type="hidden" name="action" value="setmainoptions">' ;
print '<table class="noborder" width="100%">' ;
print '<tr class="liste_titre">' ;
print " <td> " . $langs -> trans ( " Parameters " ) . " </td> \n " ;
print '<td align="right" width="60">' . $langs -> trans ( " Value " ) . '</td>' . " \n " ;
print '<td width="80"> </td></tr>' . " \n " ;
2017-04-14 11:22:48 +02:00
print '<tr class="oddeven">' ;
2015-06-29 16:57:32 +02:00
print '<td width="80%">' . $langs -> trans ( " ManageOpportunitiesStatus " ) . '</td>' ;
print '<td width="60" align="right">' ;
$arrval = array ( '0' => $langs -> trans ( " No " ),
'1' => $langs -> trans ( " Yes " ),
);
2016-03-25 15:53:44 +01:00
print $form -> selectyesno ( 'PROJECT_USE_OPPORTUNITIES' , $conf -> global -> PROJECT_USE_OPPORTUNITIES , 1 );
2015-06-29 16:57:32 +02:00
print '</td><td align="right">' ;
print '<input type="submit" class="button" name="modifyPROJECT_USE_OPPORTUNITIES" value="' . $langs -> trans ( " Modify " ) . '">' ;
print " </td> " ;
print '</tr>' ;
2017-04-14 11:22:48 +02:00
print '<tr class="oddeven">' ;
2015-06-29 16:57:32 +02:00
print '<td width="80%">' . $langs -> trans ( " ManageTasks " ) . '</td>' ;
print '<td width="60" align="right">' ;
$arrval = array ( '0' => $langs -> trans ( " No " ),
'1' => $langs -> trans ( " Yes " ),
);
2016-03-25 15:53:44 +01:00
print $form -> selectyesno ( 'PROJECT_USE_TASKS' , empty ( $conf -> global -> PROJECT_HIDE_TASKS ) ? 1 : 0 , 1 );
2015-06-29 16:57:32 +02:00
print '</td><td align="right">' ;
print '<input type="submit" class="button" name="modifyPROJECT_USE_TASKS" value="' . $langs -> trans ( " Modify " ) . '">' ;
print " </td> " ;
print '</tr>' ;
print '</table></form>' ;
print '<br>' ;
2013-03-22 17:10:17 +01:00
/*
* Projects Numbering model
2014-02-28 21:54:50 +01:00
*/
2013-03-25 19:28:34 +01:00
2016-08-04 10:19:30 +02:00
print load_fiche_titre ( $langs -> trans ( " ProjectsNumberingModules " ), '' , '' );
2010-01-12 10:49:41 +01:00
print '<table class="noborder" width="100%">' ;
print '<tr class="liste_titre">' ;
print '<td width="100">' . $langs -> trans ( " Name " ) . '</td>' ;
print '<td>' . $langs -> trans ( " Description " ) . '</td>' ;
print '<td>' . $langs -> trans ( " Example " ) . '</td>' ;
print '<td align="center" width="60">' . $langs -> trans ( " Activated " ) . '</td>' ;
2013-05-07 22:04:08 +02:00
print '<td align="center" width="80">' . $langs -> trans ( " ShortInfo " ) . '</td>' ;
2010-01-12 10:49:41 +01:00
print " </tr> \n " ;
clearstatcache ();
2012-04-05 11:46:56 +02:00
foreach ( $dirmodels as $reldir )
2010-01-12 10:49:41 +01:00
{
2012-04-05 11:46:56 +02:00
$dir = dol_buildpath ( $reldir . " core/modules/project/ " );
2010-01-12 10:49:41 +01:00
2012-04-05 11:46:56 +02:00
if ( is_dir ( $dir ))
2010-01-12 10:49:41 +01:00
{
2012-04-05 11:46:56 +02:00
$handle = opendir ( $dir );
if ( is_resource ( $handle ))
2010-01-12 10:49:41 +01:00
{
2012-04-05 11:46:56 +02:00
while (( $file = readdir ( $handle )) !== false )
2010-01-12 10:49:41 +01:00
{
2012-04-05 11:46:56 +02:00
if ( preg_match ( '/^(mod_.*)\.php$/i' , $file , $reg ))
2010-01-12 10:49:41 +01:00
{
2012-04-05 11:46:56 +02:00
$file = $reg [ 1 ];
$classname = substr ( $file , 4 );
2010-01-12 10:49:41 +01:00
2013-03-22 17:10:17 +01:00
require_once $dir . $file . '.php' ;
2010-01-12 10:49:41 +01:00
2012-04-05 11:46:56 +02:00
$module = new $file ;
2012-04-05 14:49:51 +02:00
// Show modules according to features level
if ( $module -> version == 'development' && $conf -> global -> MAIN_FEATURES_LEVEL < 2 ) continue ;
if ( $module -> version == 'experimental' && $conf -> global -> MAIN_FEATURES_LEVEL < 1 ) continue ;
2012-04-05 11:46:56 +02:00
2012-04-05 14:49:51 +02:00
if ( $module -> isEnabled ())
2012-08-08 04:12:20 +02:00
{
2017-04-14 13:02:29 +02:00
print '<tr class="oddeven"><td>' . $module -> name . " </td><td> \n " ;
2012-04-05 11:46:56 +02:00
print $module -> info ();
print '</td>' ;
2013-03-22 17:10:17 +01:00
// Show example of numbering model
2013-04-25 01:13:13 +02:00
print '<td class="nowrap">' ;
2012-04-05 11:46:56 +02:00
$tmp = $module -> getExample ();
2012-07-30 20:39:47 +02:00
if ( preg_match ( '/^Error/' , $tmp )) print '<div class="error">' . $langs -> trans ( $tmp ) . '</div>' ;
2012-04-05 11:46:56 +02:00
elseif ( $tmp == 'NotConfigured' ) print $langs -> trans ( $tmp );
else print $tmp ;
print '</td>' . " \n " ;
print '<td align="center">' ;
2012-04-12 11:02:11 +02:00
if ( $conf -> global -> PROJECT_ADDON == 'mod_' . $classname )
2012-04-05 11:46:56 +02:00
{
print img_picto ( $langs -> trans ( " Activated " ), 'switch_on' );
}
else
{
2012-04-12 11:02:11 +02:00
print '<a href="' . $_SERVER [ " PHP_SELF " ] . '?action=setmod&value=mod_' . $classname . '" alt="' . $langs -> trans ( " Default " ) . '">' . img_picto ( $langs -> trans ( " Disabled " ), 'switch_off' ) . '</a>' ;
2012-04-05 11:46:56 +02:00
}
print '</td>' ;
$project = new Project ( $db );
$project -> initAsSpecimen ();
// Info
$htmltooltip = '' ;
$htmltooltip .= '' . $langs -> trans ( " Version " ) . ': <b>' . $module -> getVersion () . '</b><br>' ;
$nextval = $module -> getNextValue ( $mysoc , $project );
if ( " $nextval " != $langs -> trans ( " NotAvailable " )) // Keep " on nextval
{
$htmltooltip .= '' . $langs -> trans ( " NextValue " ) . ': ' ;
if ( $nextval )
{
$htmltooltip .= $nextval . '<br>' ;
}
else
{
$htmltooltip .= $langs -> trans ( $module -> error ) . '<br>' ;
}
}
print '<td align="center">' ;
2016-03-25 15:24:57 +01:00
print $form -> textwithpicto ( '' , $htmltooltip , 1 , 0 );
2012-04-05 11:46:56 +02:00
print '</td>' ;
print '</tr>' ;
2010-01-12 10:49:41 +01:00
}
}
}
2012-04-05 11:46:56 +02:00
closedir ( $handle );
2010-01-12 10:49:41 +01:00
}
}
}
print '</table><br>' ;
2013-07-17 18:45:58 +02:00
2015-06-29 16:57:32 +02:00
if ( empty ( $conf -> global -> PROJECT_HIDE_TASKS ))
{
// Task numbering module
2016-08-04 10:19:30 +02:00
print load_fiche_titre ( $langs -> trans ( " TasksNumberingModules " ), '' , '' );
2013-07-17 18:45:58 +02:00
2015-06-29 16:57:32 +02:00
print '<table class="noborder" width="100%">' ;
print '<tr class="liste_titre">' ;
print '<td width="100">' . $langs -> trans ( " Name " ) . '</td>' ;
print '<td>' . $langs -> trans ( " Description " ) . '</td>' ;
print '<td>' . $langs -> trans ( " Example " ) . '</td>' ;
print '<td align="center" width="60">' . $langs -> trans ( " Activated " ) . '</td>' ;
print '<td align="center" width="80">' . $langs -> trans ( " ShortInfo " ) . '</td>' ;
print " </tr> \n " ;
2013-07-17 18:45:58 +02:00
2015-06-29 16:57:32 +02:00
clearstatcache ();
2013-07-17 18:45:58 +02:00
2015-06-29 16:57:32 +02:00
foreach ( $dirmodels as $reldir )
2013-07-17 18:45:58 +02:00
{
2015-06-29 16:57:32 +02:00
$dir = dol_buildpath ( $reldir . " core/modules/project/task/ " );
2013-07-17 18:45:58 +02:00
2015-06-29 16:57:32 +02:00
if ( is_dir ( $dir ))
{
$handle = opendir ( $dir );
if ( is_resource ( $handle ))
2013-07-17 18:45:58 +02:00
{
2015-06-29 16:57:32 +02:00
while (( $file = readdir ( $handle )) !== false )
{
if ( preg_match ( '/^(mod_.*)\.php$/i' , $file , $reg ))
2013-07-17 18:45:58 +02:00
{
2015-06-29 16:57:32 +02:00
$file = $reg [ 1 ];
$classname = substr ( $file , 4 );
2013-07-17 18:45:58 +02:00
2016-03-18 15:02:37 +01:00
require_once $dir . $file . '.php' ;
2013-07-17 18:45:58 +02:00
2015-06-29 16:57:32 +02:00
$module = new $file ;
2013-07-17 18:45:58 +02:00
2015-06-29 16:57:32 +02:00
// Show modules according to features level
if ( $module -> version == 'development' && $conf -> global -> MAIN_FEATURES_LEVEL < 2 ) continue ;
if ( $module -> version == 'experimental' && $conf -> global -> MAIN_FEATURES_LEVEL < 1 ) continue ;
2013-07-17 18:45:58 +02:00
2015-06-29 16:57:32 +02:00
if ( $module -> isEnabled ())
2013-07-17 18:45:58 +02:00
{
2017-04-14 13:02:29 +02:00
print '<tr class="oddeven"><td>' . $module -> name . " </td><td> \n " ;
2015-06-29 16:57:32 +02:00
print $module -> info ();
print '</td>' ;
// Show example of numbering module
print '<td class="nowrap">' ;
$tmp = $module -> getExample ();
if ( preg_match ( '/^Error/' , $tmp )) print '<div class="error">' . $langs -> trans ( $tmp ) . '</div>' ;
elseif ( $tmp == 'NotConfigured' ) print $langs -> trans ( $tmp );
else print $tmp ;
print '</td>' . " \n " ;
print '<td align="center">' ;
if ( $conf -> global -> PROJECT_TASK_ADDON == 'mod_' . $classname )
2013-07-17 18:45:58 +02:00
{
2015-06-29 16:57:32 +02:00
print img_picto ( $langs -> trans ( " Activated " ), 'switch_on' );
2013-07-17 18:45:58 +02:00
}
else
{
2015-06-29 16:57:32 +02:00
print '<a href="' . $_SERVER [ " PHP_SELF " ] . '?action=setmodtask&value=mod_' . $classname . '" alt="' . $langs -> trans ( " Default " ) . '">' . img_picto ( $langs -> trans ( " Disabled " ), 'switch_off' ) . '</a>' ;
2013-07-17 18:45:58 +02:00
}
2015-06-29 16:57:32 +02:00
print '</td>' ;
2013-07-17 18:45:58 +02:00
2015-06-29 16:57:32 +02:00
$project = new Project ( $db );
$project -> initAsSpecimen ();
2013-07-17 18:45:58 +02:00
2015-06-29 16:57:32 +02:00
// Info
$htmltooltip = '' ;
$htmltooltip .= '' . $langs -> trans ( " Version " ) . ': <b>' . $module -> getVersion () . '</b><br>' ;
$nextval = $module -> getNextValue ( $mysoc , $project );
if ( " $nextval " != $langs -> trans ( " NotAvailable " )) // Keep " on nextval
{
$htmltooltip .= '' . $langs -> trans ( " NextValue " ) . ': ' ;
if ( $nextval )
{
$htmltooltip .= $nextval . '<br>' ;
}
else
{
$htmltooltip .= $langs -> trans ( $module -> error ) . '<br>' ;
}
}
print '<td align="center">' ;
2016-03-25 15:24:57 +01:00
print $form -> textwithpicto ( '' , $htmltooltip , 1 , 0 );
2015-06-29 16:57:32 +02:00
print '</td>' ;
print '</tr>' ;
}
2013-07-17 18:45:58 +02:00
}
}
2015-06-29 16:57:32 +02:00
closedir ( $handle );
2013-07-17 18:45:58 +02:00
}
}
}
2015-06-29 16:57:32 +02:00
print '</table><br>' ;
2013-07-17 18:45:58 +02:00
}
2010-01-12 10:49:41 +01:00
/*
2013-03-22 17:10:17 +01:00
* Document templates generators
2015-06-29 16:57:32 +02:00
*/
2010-01-12 10:49:41 +01:00
2016-08-04 10:19:30 +02:00
print load_fiche_titre ( $langs -> trans ( " ProjectsModelModule " ), '' , '' );
2010-01-12 10:49:41 +01:00
// Defini tableau def de modele
$type = 'project' ;
$def = array ();
$sql = " SELECT nom " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " document_model " ;
$sql .= " WHERE type = ' " . $type . " ' " ;
$sql .= " AND entity = " . $conf -> entity ;
$resql = $db -> query ( $sql );
if ( $resql )
{
$i = 0 ;
$num_rows = $db -> num_rows ( $resql );
while ( $i < $num_rows )
{
$array = $db -> fetch_array ( $resql );
array_push ( $def , $array [ 0 ]);
$i ++ ;
}
}
else
{
dol_print_error ( $db );
}
print " <table class= \" noborder \" width= \" 100% \" > \n " ;
print " <tr class= \" liste_titre \" > \n " ;
print ' <td width="100">' . $langs -> trans ( " Name " ) . " </td> \n " ;
print " <td> " . $langs -> trans ( " Description " ) . " </td> \n " ;
print '<td align="center" width="60">' . $langs -> trans ( " Activated " ) . " </td> \n " ;
print '<td align="center" width="60">' . $langs -> trans ( " Default " ) . " </td> \n " ;
2013-05-07 22:04:08 +02:00
print '<td align="center" width="80">' . $langs -> trans ( " ShortInfo " ) . '</td>' ;
2014-03-11 13:15:14 +01:00
print '<td align="center" width="80">' . $langs -> trans ( " Preview " ) . '</td>' ;
2010-01-12 10:49:41 +01:00
print " </tr> \n " ;
clearstatcache ();
2012-04-05 11:46:56 +02:00
foreach ( $dirmodels as $reldir )
2010-01-12 10:49:41 +01:00
{
2014-09-29 11:08:50 +02:00
foreach ( array ( '' , '/doc' ) as $valdir )
2012-04-05 11:46:56 +02:00
{
2014-09-29 11:08:50 +02:00
$dir = dol_buildpath ( $reldir . " core/modules/project/ " . $valdir );
if ( is_dir ( $dir ))
2012-04-05 11:46:56 +02:00
{
2014-09-29 11:08:50 +02:00
$handle = opendir ( $dir );
if ( is_resource ( $handle ))
2012-04-05 11:46:56 +02:00
{
2014-09-29 11:08:50 +02:00
while (( $file = readdir ( $handle )) !== false )
2012-04-05 11:46:56 +02:00
{
2014-09-29 11:08:50 +02:00
$filelist [] = $file ;
}
closedir ( $handle );
arsort ( $filelist );
2013-03-25 19:28:34 +01:00
2014-09-29 11:08:50 +02:00
foreach ( $filelist as $file )
{
if ( preg_match ( '/\.modules\.php$/i' , $file ) && preg_match ( '/^(pdf_|doc_)/' , $file ))
{
if ( file_exists ( $dir . '/' . $file ))
2013-03-25 19:28:34 +01:00
{
2014-09-29 11:08:50 +02:00
$name = substr ( $file , 4 , dol_strlen ( $file ) - 16 );
$classname = substr ( $file , 0 , dol_strlen ( $file ) - 12 );
2013-03-25 19:28:34 +01:00
2014-09-29 11:08:50 +02:00
require_once $dir . '/' . $file ;
$module = new $classname ( $db );
2013-03-25 19:28:34 +01:00
2014-09-29 11:08:50 +02:00
$modulequalified = 1 ;
if ( $module -> version == 'development' && $conf -> global -> MAIN_FEATURES_LEVEL < 2 ) $modulequalified = 0 ;
if ( $module -> version == 'experimental' && $conf -> global -> MAIN_FEATURES_LEVEL < 1 ) $modulequalified = 0 ;
if ( $modulequalified )
2013-03-25 19:28:34 +01:00
{
2017-04-14 13:02:29 +02:00
print '<tr class="oddeven"><td width="100">' ;
2014-09-29 11:08:50 +02:00
print ( empty ( $module -> name ) ? $name : $module -> name );
print " </td><td> \n " ;
if ( method_exists ( $module , 'info' )) print $module -> info ( $langs );
else print $module -> description ;
print " </td> \n " ;
// Active
if ( in_array ( $name , $def ))
{
print " <td align= \" center \" > \n " ;
2017-08-23 10:07:00 +02:00
print '<a href="' . $_SERVER [ " PHP_SELF " ] . '?action=del&value=' . $name . '&scan_dir=' . $module -> scandir . '&label=' . urlencode ( $module -> name ) . '">' ;
2014-09-29 11:08:50 +02:00
print img_picto ( $langs -> trans ( " Enabled " ), 'switch_on' );
print '</a>' ;
print " </td> " ;
}
else
{
print " <td align= \" center \" > \n " ;
2017-08-23 10:07:00 +02:00
print '<a href="' . $_SERVER [ " PHP_SELF " ] . '?action=set&value=' . $name . '&scan_dir=' . $module -> scandir . '&label=' . urlencode ( $module -> name ) . '">' . img_picto ( $langs -> trans ( " Disabled " ), 'switch_off' ) . '</a>' ;
2014-09-29 11:08:50 +02:00
print " </td> " ;
}
// Default
print " <td align= \" center \" > " ;
if ( $conf -> global -> PROJECT_ADDON_PDF == " $name " )
{
print img_picto ( $langs -> trans ( " Default " ), 'on' );
}
else
{
2017-08-23 10:07:00 +02:00
print '<a href="' . $_SERVER [ " PHP_SELF " ] . '?action=setdoc&value=' . $name . '&scan_dir=' . $module -> scandir . '&label=' . urlencode ( $module -> name ) . '" alt="' . $langs -> trans ( " Default " ) . '">' . img_picto ( $langs -> trans ( " Disabled " ), 'off' ) . '</a>' ;
2014-09-29 11:08:50 +02:00
}
print '</td>' ;
// Info
$htmltooltip = '' . $langs -> trans ( " Name " ) . ': ' . $module -> name ;
$htmltooltip .= '<br>' . $langs -> trans ( " Type " ) . ': ' . ( $module -> type ? $module -> type : $langs -> trans ( " Unknown " ));
if ( $module -> type == 'pdf' )
{
$htmltooltip .= '<br>' . $langs -> trans ( " Width " ) . '/' . $langs -> trans ( " Height " ) . ': ' . $module -> page_largeur . '/' . $module -> page_hauteur ;
}
$htmltooltip .= '<br><br><u>' . $langs -> trans ( " FeaturesSupported " ) . ':</u>' ;
$htmltooltip .= '<br>' . $langs -> trans ( " Logo " ) . ': ' . yn ( $module -> option_logo , 1 , 1 );
print '<td align="center">' ;
2016-03-25 15:24:57 +01:00
print $form -> textwithpicto ( '' , $htmltooltip , 1 , 0 );
2014-09-29 11:08:50 +02:00
print '</td>' ;
// Preview
print '<td align="center">' ;
if ( $module -> type == 'pdf' )
{
print '<a href="' . $_SERVER [ " PHP_SELF " ] . '?action=specimen&module=' . $name . '">' . img_object ( $langs -> trans ( " Preview " ), 'bill' ) . '</a>' ;
}
else
{
print img_object ( $langs -> trans ( " PreviewNotAvailable " ), 'generic' );
}
print '</td>' ;
print " </tr> \n " ;
2013-03-25 19:28:34 +01:00
}
2014-09-29 11:08:50 +02:00
}
2013-07-17 18:45:58 +02:00
}
}
}
}
}
}
print '</table><br/>' ;
2015-06-29 16:57:32 +02:00
if ( empty ( $conf -> global -> PROJECT_HIDE_TASKS ))
{
/*
* Modeles documents for Task
*/
2013-07-17 18:45:58 +02:00
2016-08-04 10:19:30 +02:00
print load_fiche_titre ( $langs -> trans ( " TaskModelModule " ), '' , '' );
2013-07-17 18:45:58 +02:00
2015-06-29 16:57:32 +02:00
// Defini tableau def de modele
$type = 'project_task' ;
$def = array ();
$sql = " SELECT nom " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " document_model " ;
$sql .= " WHERE type = ' " . $type . " ' " ;
$sql .= " AND entity = " . $conf -> entity ;
$resql = $db -> query ( $sql );
if ( $resql )
2013-07-17 18:45:58 +02:00
{
2015-06-29 16:57:32 +02:00
$i = 0 ;
$num_rows = $db -> num_rows ( $resql );
while ( $i < $num_rows )
{
$array = $db -> fetch_array ( $resql );
array_push ( $def , $array [ 0 ]);
$i ++ ;
}
}
else
{
dol_print_error ( $db );
2013-07-17 18:45:58 +02:00
}
2015-06-29 16:57:32 +02:00
print " <table class= \" noborder \" width= \" 100% \" > \n " ;
print " <tr class= \" liste_titre \" > \n " ;
print ' <td width="100">' . $langs -> trans ( " Name " ) . " </td> \n " ;
print " <td> " . $langs -> trans ( " Description " ) . " </td> \n " ;
print '<td align="center" width="60">' . $langs -> trans ( " Activated " ) . " </td> \n " ;
print '<td align="center" width="60">' . $langs -> trans ( " Default " ) . " </td> \n " ;
print '<td align="center" width="80">' . $langs -> trans ( " ShortInfo " ) . '</td>' ;
print '<td align="center" width="80">' . $langs -> trans ( " Preview " ) . '</td>' ;
print " </tr> \n " ;
2013-07-17 18:45:58 +02:00
2015-06-29 16:57:32 +02:00
clearstatcache ();
2013-07-17 18:45:58 +02:00
2015-06-29 16:57:32 +02:00
foreach ( $dirmodels as $reldir )
2013-07-17 18:45:58 +02:00
{
2015-06-29 16:57:32 +02:00
foreach ( array ( '' , '/doc' ) as $valdir )
2013-07-17 18:45:58 +02:00
{
2015-06-29 16:57:32 +02:00
$dir = dol_buildpath ( $reldir . " core/modules/project/task/ " . $valdir );
if ( is_dir ( $dir ))
2013-07-17 18:45:58 +02:00
{
2015-06-29 16:57:32 +02:00
$handle = opendir ( $dir );
if ( is_resource ( $handle ))
2013-07-17 18:45:58 +02:00
{
2015-06-29 16:57:32 +02:00
while (( $file = readdir ( $handle )) !== false )
{
$filelist [] = $file ;
}
closedir ( $handle );
arsort ( $filelist );
2013-07-17 18:45:58 +02:00
2015-06-29 16:57:32 +02:00
foreach ( $filelist as $file )
2014-09-29 11:08:50 +02:00
{
2015-06-29 16:57:32 +02:00
if ( preg_match ( '/\.modules\.php$/i' , $file ) && preg_match ( '/^(pdf_|doc_)/' , $file ))
2013-07-17 18:45:58 +02:00
{
2015-06-29 16:57:32 +02:00
if ( file_exists ( $dir . '/' . $file ))
2013-07-17 18:45:58 +02:00
{
2015-06-29 16:57:32 +02:00
$name = substr ( $file , 4 , dol_strlen ( $file ) - 16 );
$classname = substr ( $file , 0 , dol_strlen ( $file ) - 12 );
2014-09-29 11:08:50 +02:00
2015-06-29 16:57:32 +02:00
require_once $dir . '/' . $file ;
$module = new $classname ( $db );
2014-09-29 11:08:50 +02:00
2015-06-29 16:57:32 +02:00
$modulequalified = 1 ;
if ( $module -> version == 'development' && $conf -> global -> MAIN_FEATURES_LEVEL < 2 ) $modulequalified = 0 ;
if ( $module -> version == 'experimental' && $conf -> global -> MAIN_FEATURES_LEVEL < 1 ) $modulequalified = 0 ;
2014-09-29 11:08:50 +02:00
2015-06-29 16:57:32 +02:00
if ( $modulequalified )
2014-09-29 11:08:50 +02:00
{
2017-04-14 13:02:29 +02:00
print '<tr class="oddeven"><td width="100">' ;
2015-06-29 16:57:32 +02:00
print ( empty ( $module -> name ) ? $name : $module -> name );
print " </td><td> \n " ;
if ( method_exists ( $module , 'info' )) print $module -> info ( $langs );
else print $module -> description ;
print " </td> \n " ;
// Active
if ( in_array ( $name , $def ))
{
print " <td align= \" center \" > \n " ;
2017-08-23 10:07:00 +02:00
print '<a href="' . $_SERVER [ " PHP_SELF " ] . '?action=deltask&value=' . $name . '&scan_dir=' . $module -> scandir . '&label=' . urlencode ( $module -> name ) . '">' ;
2015-06-29 16:57:32 +02:00
print img_picto ( $langs -> trans ( " Enabled " ), 'switch_on' );
print '</a>' ;
print " </td> " ;
}
else
{
print " <td align= \" center \" > \n " ;
2017-08-23 10:07:00 +02:00
print '<a href="' . $_SERVER [ " PHP_SELF " ] . '?action=settask&value=' . $name . '&scan_dir=' . $module -> scandir . '&label=' . urlencode ( $module -> name ) . '">' . img_picto ( $langs -> trans ( " Disabled " ), 'switch_off' ) . '</a>' ;
2015-06-29 16:57:32 +02:00
print " </td> " ;
}
// Defaut
print " <td align= \" center \" > " ;
if ( $conf -> global -> PROJECT_TASK_ADDON_PDF == " $name " )
{
print img_picto ( $langs -> trans ( " Default " ), 'on' );
}
else
{
2017-08-23 10:07:00 +02:00
print '<a href="' . $_SERVER [ " PHP_SELF " ] . '?action=setdoctask&value=' . $name . '&scan_dir=' . $module -> scandir . '&label=' . urlencode ( $module -> name ) . '" alt="' . $langs -> trans ( " Default " ) . '">' . img_picto ( $langs -> trans ( " Disabled " ), 'off' ) . '</a>' ;
2015-06-29 16:57:32 +02:00
}
print '</td>' ;
// Info
$htmltooltip = '' . $langs -> trans ( " Name " ) . ': ' . $module -> name ;
$htmltooltip .= '<br>' . $langs -> trans ( " Type " ) . ': ' . ( $module -> type ? $module -> type : $langs -> trans ( " Unknown " ));
if ( $module -> type == 'pdf' )
{
$htmltooltip .= '<br>' . $langs -> trans ( " Width " ) . '/' . $langs -> trans ( " Height " ) . ': ' . $module -> page_largeur . '/' . $module -> page_hauteur ;
}
$htmltooltip .= '<br><br><u>' . $langs -> trans ( " FeaturesSupported " ) . ':</u>' ;
$htmltooltip .= '<br>' . $langs -> trans ( " Logo " ) . ': ' . yn ( $module -> option_logo , 1 , 1 );
print '<td align="center">' ;
2016-03-25 15:24:57 +01:00
print $form -> textwithpicto ( '' , $htmltooltip , 1 , 0 );
2015-06-29 16:57:32 +02:00
print '</td>' ;
// Preview
print '<td align="center">' ;
if ( $module -> type == 'pdf' )
{
print '<a href="' . $_SERVER [ " PHP_SELF " ] . '?action=specimentask&module=' . $name . '">' . img_object ( $langs -> trans ( " Preview " ), 'bill' ) . '</a>' ;
}
else
{
print img_object ( $langs -> trans ( " PreviewNotAvailable " ), 'generic' );
}
print '</td>' ;
print " </tr> \n " ;
2014-09-29 11:08:50 +02:00
}
2013-07-17 18:45:58 +02:00
}
2013-03-25 19:28:34 +01:00
}
2012-04-05 11:46:56 +02:00
}
}
}
}
}
2015-06-29 16:57:32 +02:00
print '</table><br/>' ;
2010-01-12 10:49:41 +01:00
}
2016-08-04 10:19:30 +02:00
print load_fiche_titre ( $langs -> trans ( " Other " ), '' , '' );
2015-06-15 10:04:36 +02:00
// Other options
$form = new Form ( $db );
print '<form method="POST" action="' . $_SERVER [ 'PHP_SELF' ] . '">' ;
print '<input type="hidden" name="token" value="' . $_SESSION [ 'newtoken' ] . '">' ;
print '<input type="hidden" name="action" value="updateoptions">' ;
print '<table class="noborder" width="100%">' ;
print '<tr class="liste_titre">' ;
print " <td> " . $langs -> trans ( " Parameters " ) . " </td> \n " ;
print '<td align="right" width="60">' . $langs -> trans ( " Value " ) . '</td>' . " \n " ;
print '<td width="80"> </td></tr>' . " \n " ;
2017-04-14 11:22:48 +02:00
print '<tr class="oddeven">' ;
2015-06-15 10:04:36 +02:00
print '<td width="80%">' . $langs -> trans ( " UseSearchToSelectProject " ) . '</td>' ;
if ( ! $conf -> use_javascript_ajax )
{
print '<td class="nowrap" align="right" colspan="2">' ;
print $langs -> trans ( " NotAvailableWhenAjaxDisabled " );
print " </td> " ;
}
else
{
print '<td width="60" align="right">' ;
$arrval = array ( '0' => $langs -> trans ( " No " ),
'1' => $langs -> trans ( " Yes " ) . ' (' . $langs -> trans ( " NumberOfKeyToSearch " , 1 ) . ')' ,
'2' => $langs -> trans ( " Yes " ) . ' (' . $langs -> trans ( " NumberOfKeyToSearch " , 2 ) . ')' ,
'3' => $langs -> trans ( " Yes " ) . ' (' . $langs -> trans ( " NumberOfKeyToSearch " , 3 ) . ')' ,
);
2016-03-25 15:34:37 +01:00
print $form -> selectarray ( " activate_PROJECT_USE_SEARCH_TO_SELECT " , $arrval , $conf -> global -> PROJECT_USE_SEARCH_TO_SELECT );
2015-06-15 10:04:36 +02:00
print '</td><td align="right">' ;
print '<input type="submit" class="button" name="PROJECT_USE_SEARCH_TO_SELECT" value="' . $langs -> trans ( " Modify " ) . '">' ;
print " </td> " ;
}
2016-04-29 18:04:59 +02:00
print '</tr>' ;
2017-04-14 11:22:48 +02:00
print '<tr class="oddeven">' ;
2016-04-29 18:04:59 +02:00
print '<td>' . $langs -> trans ( " AllowToSelectProjectFromOtherCompany " ) . '</td>' ;
2017-12-04 17:43:35 +01:00
print '<td align="right" width="60" colspan="2">' ;
print '<input type="text" id="projectToSelect" name="projectToSelect" value="' . $conf -> global -> PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY . '"/> ' ;
print $form -> textwithpicto ( '' , $langs -> trans ( 'AllowToLinkFromOtherCompany' ));
print '<input type="submit" class="button" name="PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY" value="' . $langs -> trans ( " Modify " ) . '">' ;
2016-04-29 18:04:59 +02:00
print '</td>' ;
2017-12-12 10:13:48 +01:00
print '</table>' ;
print '</form>' ;
2016-04-29 18:04:59 +02:00
2011-08-27 16:24:16 +02:00
llxFooter ();
2015-12-11 19:37:12 +01:00
$db -> close ();