2014-12-05 18:23:54 +01:00
< ? php
2024-11-04 23:53:20 +01:00
/* Copyright ( C ) 2013 - 2016 Laurent Destailleur < eldy @ users . sourceforge . net >
* Copyright ( C ) 2014 - 2024 Frédéric France < frederic . france @ free . fr >
2024-10-05 18:55:36 +02:00
* Copyright ( C ) 2024 MDW < mdeweerd @ users . noreply . github . com >
2014-12-05 18:23: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
* 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 />.
2014-12-05 18:23:54 +01:00
*/
/**
* \file htdocs / printing / admin / printing . php
* \ingroup printing
* \brief Page to setup printing module
*/
2022-09-07 20:08:59 +02:00
// Load Dolibarr environment
2014-12-05 18:23:54 +01:00
require '../../main.inc.php' ;
require_once DOL_DOCUMENT_ROOT . '/core/lib/admin.lib.php' ;
require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php' ;
2014-12-08 20:33:26 +01:00
require_once DOL_DOCUMENT_ROOT . '/core/modules/printing/modules_printing.php' ;
require_once DOL_DOCUMENT_ROOT . '/printing/lib/printing.lib.php' ;
2016-10-07 17:53:41 +02:00
use OAuth\Common\Storage\DoliStorage ;
2014-12-05 18:23:54 +01:00
2024-11-04 23:53:20 +01:00
/**
* @ var Conf $conf
* @ var DoliDB $db
* @ var HookManager $hookmanager
* @ var Translate $langs
* @ var User $user
*/
2018-05-26 17:57:30 +02:00
// Load translation files required by the page
$langs -> loadLangs ( array ( 'admin' , 'printing' , 'oauth' ));
2014-12-05 18:23:54 +01:00
2020-09-16 19:39:50 +02:00
$action = GETPOST ( 'action' , 'aZ09' );
2019-01-27 11:55:16 +01:00
$mode = GETPOST ( 'mode' , 'alpha' );
2019-11-12 00:15:34 +01:00
$value = GETPOST ( 'value' , 'alpha' , 0 , null , null , 1 ); // The value may be __google__docs so we force disable of replace
2014-12-08 20:33:26 +01:00
$varname = GETPOST ( 'varname' , 'alpha' );
$driver = GETPOST ( 'driver' , 'alpha' );
2021-02-26 15:26:09 +01:00
if ( ! empty ( $driver )) {
$langs -> load ( $driver );
}
2014-12-05 18:23:54 +01:00
2021-02-26 15:26:09 +01:00
if ( ! $mode ) {
$mode = 'config' ;
}
2014-12-05 18:23:54 +01:00
2016-10-07 17:53:41 +02:00
$OAUTH_SERVICENAME_GOOGLE = 'Google' ;
2021-03-19 12:15:46 +01:00
if ( ! $user -> admin ) {
accessforbidden ();
}
2015-11-13 02:11:47 +01:00
2014-12-05 18:23:54 +01:00
/*
* Action
*/
2024-11-10 11:16:23 +01:00
$error = 0 ;
2014-12-13 13:53:48 +01:00
2021-02-26 15:26:09 +01:00
if (( $mode == 'test' || $mode == 'setup' ) && empty ( $driver )) {
2020-10-31 14:32:18 +01:00
setEventMessages ( $langs -> trans ( 'PleaseSelectaDriverfromList' ), null );
header ( " Location: " . $_SERVER [ 'PHP_SELF' ] . '?mode=config' );
exit ;
2014-12-13 13:53:48 +01:00
}
2021-02-26 15:26:09 +01:00
if ( $action == 'setconst' && $user -> admin ) {
2020-10-31 14:32:18 +01:00
$db -> begin ();
foreach ( $_POST [ 'setupdriver' ] as $setupconst ) {
2024-10-05 18:55:36 +02:00
'@phan-var-force array<string,string> $setupconst' ;
2020-10-31 14:32:18 +01:00
//print '<pre>'.print_r($setupconst, true).'</pre>';
$result = dolibarr_set_const ( $db , $setupconst [ 'varname' ], $setupconst [ 'value' ], 'chaine' , 0 , '' , $conf -> entity );
2022-08-12 15:54:50 +02:00
if ( ! ( $result > 0 )) {
2021-02-26 15:26:09 +01:00
$error ++ ;
}
2020-10-31 14:32:18 +01:00
}
if ( ! $error ) {
$db -> commit ();
setEventMessages ( $langs -> trans ( " SetupSaved " ), null );
} else {
$db -> rollback ();
dol_print_error ( $db );
}
$action = '' ;
2014-12-08 20:33:26 +01:00
}
2014-12-05 18:23:54 +01:00
2021-02-26 15:26:09 +01:00
if ( $action == 'setvalue' && $user -> admin ) {
2020-10-31 14:32:18 +01:00
$db -> begin ();
$result = dolibarr_set_const ( $db , $varname , $value , 'chaine' , 0 , '' , $conf -> entity );
2022-08-12 15:54:50 +02:00
if ( ! ( $result > 0 )) {
2021-02-26 15:26:09 +01:00
$error ++ ;
}
2020-10-31 14:32:18 +01:00
if ( ! $error ) {
$db -> commit ();
setEventMessages ( $langs -> trans ( " SetupSaved " ), null );
} else {
$db -> rollback ();
dol_print_error ( $db );
}
$action = '' ;
2014-12-08 20:33:26 +01:00
}
2014-12-05 18:23:54 +01:00
2016-10-07 17:53:41 +02:00
2014-12-05 18:23:54 +01:00
/*
* View
*/
$form = new Form ( $db );
2018-09-13 11:13:32 +02:00
llxHeader ( '' , $langs -> trans ( " PrintingSetup " ));
2014-12-05 18:23:54 +01:00
2019-11-12 00:15:34 +01:00
$linkback = '<a href="' . DOL_URL_ROOT . '/admin/modules.php?restore_lastsearch_values=1">' . $langs -> trans ( " BackToModuleList " ) . '</a>' ;
2019-01-27 11:55:16 +01:00
print load_fiche_titre ( $langs -> trans ( " PrintingSetup " ), $linkback , 'title_setup' );
2014-12-05 18:23:54 +01:00
2018-09-13 11:13:32 +02:00
$head = printingAdminPrepareHead ( $mode );
2014-12-05 18:23:54 +01:00
2021-02-26 15:26:09 +01:00
if ( $mode == 'setup' && $user -> admin ) {
2020-10-31 14:32:18 +01:00
print '<form method="post" action="' . $_SERVER [ " PHP_SELF " ] . '?mode=setup&driver=' . $driver . '" autocomplete="off">' ;
print '<input type="hidden" name="token" value="' . newToken () . '">' ;
print '<input type="hidden" name="action" value="setconst">' ;
print dol_get_fiche_head ( $head , $mode , $langs -> trans ( " ModuleSetup " ), - 1 , 'technic' );
print $langs -> trans ( " PrintingDriverDesc " . $driver ) . " <br><br> \n " ;
print '<table class="noborder centpercent">' . " \n " ;
print '<tr class="liste_titre">' ;
print '<th>' . $langs -> trans ( " Parameters " ) . '</th>' ;
print '<th>' . $langs -> trans ( " Value " ) . '</th>' ;
print '<th> </th>' ;
print " </tr> \n " ;
$submit_enabled = 0 ;
if ( ! empty ( $driver )) {
2022-07-24 19:58:11 +02:00
if ( ! empty ( $conf -> modules_parts [ 'printing' ])) {
$dirmodels = array_merge ( array ( '/core/modules/printing/' ), ( array ) $conf -> modules_parts [ 'printing' ]);
} else {
$dirmodels = array ( '/core/modules/printing/' );
}
2020-10-31 14:32:18 +01:00
foreach ( $dirmodels as $dir ) {
if ( file_exists ( dol_buildpath ( $dir , 0 ) . $driver . '.modules.php' )) {
$classfile = dol_buildpath ( $dir , 0 ) . $driver . '.modules.php' ;
break ;
}
}
require_once $classfile ;
$classname = 'printing_' . $driver ;
$printer = new $classname ( $db );
2024-04-12 01:35:32 +02:00
$langs -> load ( 'printing' );
2020-10-31 14:32:18 +01:00
$i = 0 ;
$submit_enabled = 0 ;
2021-02-26 15:26:09 +01:00
foreach ( $printer -> conf as $key ) {
2020-10-31 14:32:18 +01:00
switch ( $key [ 'type' ]) {
case " text " :
case " password " :
print '<tr class="oddeven">' ;
print '<td' . ( $key [ 'required' ] ? ' class=required' : '' ) . '>' . $langs -> trans ( $key [ 'varname' ]) . '</td>' ;
2023-08-05 15:44:28 +02:00
print '<td><input class="width100" type="' . ( empty ( $key [ 'type' ]) ? 'text' : $key [ 'type' ]) . '" name="setupdriver[' . $i . '][value]" value="' . getDolGlobalString ( $key [ 'varname' ]) . '"' ;
2020-10-31 14:32:18 +01:00
print isset ( $key [ 'moreattributes' ]) ? ' ' . $key [ 'moreattributes' ] : '' ;
print '><input type="hidden" name="setupdriver[' . $i . '][varname]" value="' . $key [ 'varname' ] . '"></td>' ;
print '<td> ' . ( $key [ 'example' ] != '' ? $langs -> trans ( " Example " ) . ' : ' . $key [ 'example' ] : '' ) . '</td>' ;
print '</tr>' . " \n " ;
break ;
2024-04-12 01:25:30 +02:00
case " checkbox " :
print '<tr class="oddeven">' ;
print '<td' . ( $key [ 'required' ] ? ' class=required' : '' ) . '>' . $langs -> trans ( $key [ 'varname' ]) . '</td>' ;
print '<td><input class="width100" type="' . ( empty ( $key [ 'type' ]) ? 'text' : $key [ 'type' ]) . '" name="setupdriver[' . $i . '][value]" value="1" ' . (( getDolGlobalInt ( $key [ 'varname' ])) ? 'checked' : '' );
print isset ( $key [ 'moreattributes' ]) ? ' ' . $key [ 'moreattributes' ] : '' ;
print '><input type="hidden" name="setupdriver[' . $i . '][varname]" value="' . $key [ 'varname' ] . '"></td>' ;
print '<td> ' . ( $key [ 'example' ] != '' ? $langs -> trans ( " Example " ) . ' : ' . $key [ 'example' ] : '' ) . '</td>' ;
print '</tr>' . " \n " ;
break ;
2020-10-31 14:32:18 +01:00
case " info " : // Google Api setup or Google OAuth Token
print '<tr class="oddeven">' ;
print '<td' . ( $key [ 'required' ] ? ' class=required' : '' ) . '>' ;
2021-02-26 15:26:09 +01:00
if ( $key [ 'varname' ] == 'PRINTGCP_TOKEN_ACCESS' ) {
2020-10-31 14:32:18 +01:00
print $langs -> trans ( " IsTokenGenerated " );
} else {
print $langs -> trans ( $key [ 'varname' ]);
}
print '</td>' ;
print '<td>' . $langs -> trans ( $key [ 'info' ]) . '</td>' ;
print '<td>' ;
//var_dump($key);
2021-02-26 15:26:09 +01:00
if ( $key [ 'varname' ] == 'PRINTGCP_TOKEN_ACCESS' ) {
2020-10-31 14:32:18 +01:00
// Delete remote tokens
2021-02-26 15:26:09 +01:00
if ( ! empty ( $key [ 'delete' ])) {
print '<a class="button" href="' . $key [ 'delete' ] . '">' . $langs -> trans ( 'DeleteAccess' ) . '</a><br><br>' ;
}
2020-10-31 14:32:18 +01:00
// Request remote token
print '<a class="button" href="' . $key [ 'renew' ] . '">' . $langs -> trans ( 'RequestAccess' ) . '</a><br><br>' ;
// Check remote access
print $langs -> trans ( " ToCheckDeleteTokenOnProvider " , $OAUTH_SERVICENAME_GOOGLE ) . ': <a href="https://security.google.com/settings/security/permissions" target="_google">https://security.google.com/settings/security/permissions</a>' ;
}
print '</td>' ;
print '</tr>' . " \n " ;
break ;
case " submit " :
2021-02-26 15:26:09 +01:00
if ( $key [ 'enabled' ]) {
$submit_enabled = 1 ;
}
2020-10-31 14:32:18 +01:00
break ;
}
$i ++ ;
2021-02-26 15:26:09 +01:00
if ( $key [ 'varname' ] == 'PRINTGCP_TOKEN_ACCESS' ) {
2023-02-08 01:28:14 +01:00
$keyforprovider = '' ; // @BUG This must be set
2020-10-31 14:32:18 +01:00
// Token
print '<tr class="oddeven">' ;
print '<td>' . $langs -> trans ( " Token " ) . '</td>' ;
print '<td colspan="2">' ;
$tokenobj = null ;
// Dolibarr storage
2023-02-08 01:28:14 +01:00
$storage = new DoliStorage ( $db , $conf , $keyforprovider );
2020-10-31 14:32:18 +01:00
try {
$tokenobj = $storage -> retrieveAccessToken ( $OAUTH_SERVICENAME_GOOGLE );
2021-02-26 15:26:09 +01:00
} catch ( Exception $e ) {
2020-10-31 14:32:18 +01:00
// Return an error if token not found
}
2021-02-26 15:26:09 +01:00
if ( is_object ( $tokenobj )) {
2020-10-31 14:32:18 +01:00
//var_dump($tokenobj);
print $tokenobj -> getAccessToken () . '<br>' ;
//print 'Refresh: '.$tokenobj->getRefreshToken().'<br>';
//print 'EndOfLife: '.$tokenobj->getEndOfLife().'<br>';
//var_dump($tokenobj->getExtraParams());
/* print '<br>Extra: <br><textarea class="quatrevingtpercent">' ;
2021-02-26 15:26:09 +01:00
print '' . join ( ',' , $tokenobj -> getExtraParams ());
print '</textarea>' ; */
2020-10-31 14:32:18 +01:00
}
print '</td>' ;
print '</tr>' . " \n " ;
}
}
} else {
print $langs -> trans ( 'PleaseSelectaDriverfromList' );
}
print '</table>' ;
print dol_get_fiche_end ();
2021-02-26 15:26:09 +01:00
if ( ! empty ( $driver )) {
2020-10-31 14:32:18 +01:00
if ( $submit_enabled ) {
2023-05-02 05:53:20 +02:00
print '<div class="center"><input type="submit" class="button" value="' . dol_escape_htmltag ( $langs -> trans ( " Save " )) . '"></div>' ;
2020-10-31 14:32:18 +01:00
}
}
print '</form>' ;
2014-12-08 20:33:26 +01:00
}
2021-02-26 15:26:09 +01:00
if ( $mode == 'config' && $user -> admin ) {
2020-10-31 14:32:18 +01:00
print dol_get_fiche_head ( $head , $mode , $langs -> trans ( " ModuleSetup " ), - 1 , 'technic' );
print $langs -> trans ( " PrintingDesc " ) . " <br><br> \n " ;
print '<table class="noborder centpercent">' . " \n " ;
print '<tr class="liste_titre">' ;
print '<th>' . $langs -> trans ( " Description " ) . '</th>' ;
print '<th class="center">' . $langs -> trans ( " Active " ) . '</th>' ;
print '<th class="center">' . $langs -> trans ( " Setup " ) . '</th>' ;
print '<th class="center">' . $langs -> trans ( " TargetedPrinter " ) . '</th>' ;
print " </tr> \n " ;
$object = new PrintingDriver ( $db );
$result = $object -> listDrivers ( $db , 10 );
2022-07-24 19:58:11 +02:00
if ( ! empty ( $conf -> modules_parts [ 'printing' ])) {
$dirmodels = array_merge ( array ( '/core/modules/printing/' ), ( array ) $conf -> modules_parts [ 'printing' ]);
} else {
$dirmodels = array ( '/core/modules/printing/' );
}
2022-12-31 12:39:42 +01:00
foreach ( $result as $tmpdriver ) {
2020-10-31 14:32:18 +01:00
foreach ( $dirmodels as $dir ) {
2022-12-31 12:39:42 +01:00
if ( file_exists ( dol_buildpath ( $dir , 0 ) . $tmpdriver . '.modules.php' )) {
$classfile = dol_buildpath ( $dir , 0 ) . $tmpdriver . '.modules.php' ;
2020-10-31 14:32:18 +01:00
break ;
}
}
require_once $classfile ;
2022-12-31 12:39:42 +01:00
$classname = 'printing_' . $tmpdriver ;
2020-10-31 14:32:18 +01:00
$printer = new $classname ( $db );
2024-04-12 01:35:32 +02:00
$langs -> load ( 'printing' );
2020-10-31 14:32:18 +01:00
//print '<pre>'.print_r($printer, true).'</pre>';
print '<tr class="oddeven">' ;
print '<td>' . img_picto ( '' , $printer -> picto ) . ' ' . $langs -> trans ( $printer -> desc ) . '</td>' ;
print '<td class="center">' ;
if ( ! empty ( $conf -> use_javascript_ajax )) {
print ajax_constantonoff ( $printer -> active );
} else {
2023-08-05 15:44:28 +02:00
if ( ! getDolGlobalString ( $printer -> conf )) {
2021-09-19 18:03:38 +02:00
print '<a href="' . $_SERVER [ 'PHP_SELF' ] . '?action=setvalue&token=' . newToken () . '&varname=' . urlencode ( $printer -> active ) . '&value=1">' . img_picto ( $langs -> trans ( " Disabled " ), 'off' ) . '</a>' ;
2020-10-31 14:32:18 +01:00
} else {
2021-09-19 18:03:38 +02:00
print '<a href="' . $_SERVER [ 'PHP_SELF' ] . '?action=setvalue&token=' . newToken () . '&varname=' . urlencode ( $printer -> active ) . '&value=0">' . img_picto ( $langs -> trans ( " Enabled " ), 'on' ) . '</a>' ;
2020-10-31 14:32:18 +01:00
}
}
2021-09-19 18:03:38 +02:00
print '<td class="center"><a href="' . $_SERVER [ 'PHP_SELF' ] . '?mode=setup&token=' . newToken () . '&driver=' . urlencode ( $printer -> name ) . '">' . img_picto ( '' , 'setup' ) . '</a></td>' ;
print '<td class="center"><a href="' . $_SERVER [ 'PHP_SELF' ] . '?mode=test&token=' . newToken () . '&driver=' . urlencode ( $printer -> name ) . '">' . img_picto ( '' , 'setup' ) . '</a></td>' ;
2020-10-31 14:32:18 +01:00
print '</tr>' . " \n " ;
}
print '</table>' ;
print dol_get_fiche_end ();
2014-12-08 20:33:26 +01:00
}
2014-12-05 18:23:54 +01:00
2021-02-26 15:26:09 +01:00
if ( $mode == 'test' && $user -> admin ) {
2020-10-31 14:32:18 +01:00
print dol_get_fiche_head ( $head , $mode , $langs -> trans ( " ModuleSetup " ), - 1 , 'technic' );
print $langs -> trans ( 'PrintTestDesc' . $driver ) . " <br><br> \n " ;
print '<table class="noborder centpercent">' ;
if ( ! empty ( $driver )) {
2022-07-24 19:58:11 +02:00
if ( ! empty ( $conf -> modules_parts [ 'printing' ])) {
$dirmodels = array_merge ( array ( '/core/modules/printing/' ), ( array ) $conf -> modules_parts [ 'printing' ]);
} else {
$dirmodels = array ( '/core/modules/printing/' );
}
2020-10-31 14:32:18 +01:00
foreach ( $dirmodels as $dir ) {
if ( file_exists ( dol_buildpath ( $dir , 0 ) . $driver . '.modules.php' )) {
$classfile = dol_buildpath ( $dir , 0 ) . $driver . '.modules.php' ;
break ;
}
}
require_once $classfile ;
$classname = 'printing_' . $driver ;
$printer = new $classname ( $db );
2024-10-05 18:55:36 +02:00
'@phan-var-force PrintingDriver $printer' ;
2024-04-12 01:35:32 +02:00
$langs -> load ( $driver );
$langs -> load ( 'printing' );
2020-10-31 14:32:18 +01:00
//print '<pre>'.print_r($printer, true).'</pre>';
if ( count ( $printer -> getlistAvailablePrinters ())) {
if ( $printer -> listAvailablePrinters () == 0 ) {
print $printer -> resprint ;
} else {
setEventMessages ( $printer -> error , $printer -> errors , 'errors' );
}
} else {
print $langs -> trans ( 'PleaseConfigureDriverfromList' );
}
} else {
print $langs -> trans ( 'PleaseSelectaDriverfromList' );
}
print '</table>' ;
print dol_get_fiche_end ();
2014-12-05 18:23:54 +01:00
}
2021-02-26 15:26:09 +01:00
if ( $mode == 'userconf' && $user -> admin ) {
2020-10-31 14:32:18 +01:00
print dol_get_fiche_head ( $head , $mode , $langs -> trans ( " ModuleSetup " ), - 1 , 'technic' );
print $langs -> trans ( 'PrintUserConfDesc' . $driver ) . " <br><br> \n " ;
print '<table class="noborder centpercent">' ;
print '<tr class="liste_titre">' ;
print '<th>' . $langs -> trans ( " User " ) . '</th>' ;
print '<th>' . $langs -> trans ( " PrintModule " ) . '</th>' ;
print '<th>' . $langs -> trans ( " PrintDriver " ) . '</th>' ;
print '<th>' . $langs -> trans ( " Printer " ) . '</th>' ;
print '<th>' . $langs -> trans ( " PrinterLocation " ) . '</th>' ;
print '<th>' . $langs -> trans ( " PrinterId " ) . '</th>' ;
print '<th>' . $langs -> trans ( " NumberOfCopy " ) . '</th>' ;
print '<th class="center">' . $langs -> trans ( " Delete " ) . '</th>' ;
print " </tr> \n " ;
$sql = 'SELECT p.rowid, p.printer_name, p.printer_location, p.printer_id, p.copy, p.module, p.driver, p.userid, u.login FROM ' . MAIN_DB_PREFIX . 'printing as p, ' . MAIN_DB_PREFIX . 'user as u WHERE p.userid=u.rowid' ;
$resql = $db -> query ( $sql );
while ( $row = $db -> fetch_array ( $resql )) {
print '<tr class="oddeven">' ;
print '<td>' . $row [ 'login' ] . '</td>' ;
print '<td>' . $row [ 'module' ] . '</td>' ;
print '<td>' . $row [ 'driver' ] . '</td>' ;
print '<td>' . $row [ 'printer_name' ] . '</td>' ;
print '<td>' . $row [ 'printer_location' ] . '</td>' ;
print '<td>' . $row [ 'printer_id' ] . '</td>' ;
print '<td>' . $row [ 'copy' ] . '</td>' ;
print '<td class="center">' . img_picto ( $langs -> trans ( " Delete " ), 'delete' ) . '</td>' ;
print " </tr> \n " ;
}
print '</table>' ;
print dol_get_fiche_end ();
2014-12-11 21:58:56 +01:00
}
2014-12-05 18:23:54 +01:00
2018-08-14 09:55:58 +02:00
// End of page
2014-12-05 18:23:54 +01:00
llxFooter ();
$db -> close ();