2017-05-27 13:46:34 +02:00
#!/usr/bin/env php
< ? php
2017-07-08 15:43:36 +02:00
/* Copyright ( C ) 2007 - 2017 Laurent Destailleur < eldy @ users . sourceforge . net >
2017-05-27 13:46:34 +02:00
* Copyright ( C ) --- Put here your own copyright and developer email ---
*
* 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-05-27 13:46:34 +02:00
*/
/**
2019-03-10 19:33:28 +01:00
* \file htdocs / modulebuilder / template / scripts / mymodule . php
2017-05-27 13:46:34 +02:00
* \ingroup mymodule
2019-03-10 19:33:28 +01:00
* \brief This file is an example for a command line script for module MyModule
2017-05-27 13:46:34 +02:00
*/
2021-03-10 13:12:28 +01:00
//if (! defined('NOREQUIREDB')) define('NOREQUIREDB', '1'); // Do not create database handler $db
//if (! defined('NOREQUIREUSER')) define('NOREQUIREUSER', '1'); // Do not load object $user
//if (! defined('NOREQUIRESOC')) define('NOREQUIRESOC', '1'); // Do not load object $mysoc
//if (! defined('NOREQUIRETRAN')) define('NOREQUIRETRAN', '1'); // Do not load object $langs
//if (! defined('NOSCANGETFORINJECTION')) define('NOSCANGETFORINJECTION', '1'); // Do not check injection attack on GET parameters
//if (! defined('NOSCANPOSTFORINJECTION')) define('NOSCANPOSTFORINJECTION', '1'); // Do not check injection attack on POST parameters
//if (! defined('NOCSRFCHECK')) define('NOCSRFCHECK', '1'); // Do not check CSRF attack (test on referer + on token if option MAIN_SECURITY_CSRF_WITH_TOKEN is on).
//if (! defined('NOTOKENRENEWAL')) define('NOTOKENRENEWAL', '1'); // Do not roll the Anti CSRF token (used if MAIN_SECURITY_CSRF_WITH_TOKEN is on)
//if (! defined('NOSTYLECHECK')) define('NOSTYLECHECK', '1'); // Do not check style html tag into posted data
//if (! defined('NOREQUIREMENU')) define('NOREQUIREMENU', '1'); // If there is no need to load and show top and left menu
//if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML', '1'); // If we don't need to load the html.form.class.php
//if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX', '1'); // Do not load ajax.lib.php library
//if (! defined("NOLOGIN")) define("NOLOGIN", '1'); // If this page is public (can be called outside logged session). This include the NOIPCHECK too.
//if (! defined('NOIPCHECK')) define('NOIPCHECK', '1'); // Do not check IP defined into conf $dolibarr_main_restrict_ip
//if (! defined("MAIN_LANG_DEFAULT")) define('MAIN_LANG_DEFAULT', 'auto'); // Force lang to a particular value
//if (! defined("MAIN_AUTHENTICATION_MODE")) define('MAIN_AUTHENTICATION_MODE', 'aloginmodule'); // Force authentication handler
//if (! defined("NOREDIRECTBYMAINTOLOGIN")) define('NOREDIRECTBYMAINTOLOGIN', 1); // The main.inc.php does not make a redirect if not logged, instead show simple error message
//if (! defined("FORCECSP")) define('FORCECSP', 'none'); // Disable all Content Security Policies
//if (! defined('CSRFCHECK_WITH_TOKEN')) define('CSRFCHECK_WITH_TOKEN', '1'); // Force use of CSRF protection with tokens even for GET
//if (! defined('NOBROWSERNOTIF')) define('NOBROWSERNOTIF', '1'); // Disable browser notification
if ( ! defined ( 'NOSESSION' )) define ( 'NOSESSION' , '1' ); // On CLI mode, no need to use web sessions
2017-05-27 13:46:34 +02:00
$sapi_type = php_sapi_name ();
$script_file = basename ( __FILE__ );
2020-04-10 10:59:32 +02:00
$path = __DIR__ . '/' ;
2017-05-27 13:46:34 +02:00
// Test if batch mode
if ( substr ( $sapi_type , 0 , 3 ) == 'cgi' ) {
2020-05-01 08:40:55 +02:00
echo " Error: You are using PHP for CGI. To execute " . $script_file . " from command line, you must use PHP for CLI mode. \n " ;
2017-05-27 13:46:34 +02:00
exit ( - 1 );
}
// Global variables
2020-04-10 10:59:32 +02:00
$version = '1.0' ;
$error = 0 ;
2017-05-27 13:46:34 +02:00
// -------------------- START OF YOUR CODE HERE --------------------
2020-04-10 10:59:32 +02:00
@ set_time_limit ( 0 ); // No timeout for this script
define ( 'EVEN_IF_ONLY_LOGIN_ALLOWED' , 1 ); // Set this define to 0 if you want to lock your script when dolibarr setup is "locked to admin user only".
2017-05-27 13:46:34 +02:00
2018-03-02 14:46:00 +01:00
// Load Dolibarr environment
2020-04-10 10:59:32 +02:00
$res = 0 ;
2018-05-23 17:16:58 +02:00
// Try master.inc.php into web root detected using web root calculated from SCRIPT_FILENAME
2020-04-10 10:59:32 +02:00
$tmp = empty ( $_SERVER [ 'SCRIPT_FILENAME' ]) ? '' : $_SERVER [ 'SCRIPT_FILENAME' ]; $tmp2 = realpath ( __FILE__ ); $i = strlen ( $tmp ) - 1 ; $j = strlen ( $tmp2 ) - 1 ;
2021-02-26 18:26:44 +01:00
while ( $i > 0 && $j > 0 && isset ( $tmp [ $i ]) && isset ( $tmp2 [ $j ]) && $tmp [ $i ] == $tmp2 [ $j ]) {
$i -- ; $j -- ;
}
if ( ! $res && $i > 0 && file_exists ( substr ( $tmp , 0 , ( $i + 1 )) . " /master.inc.php " )) {
$res = @ include substr ( $tmp , 0 , ( $i + 1 )) . " /master.inc.php " ;
}
if ( ! $res && $i > 0 && file_exists ( dirname ( substr ( $tmp , 0 , ( $i + 1 ))) . " /master.inc.php " )) {
$res = @ include dirname ( substr ( $tmp , 0 , ( $i + 1 ))) . " /master.inc.php " ;
}
2018-03-02 14:46:00 +01:00
// Try master.inc.php using relative path
2021-02-26 18:26:44 +01:00
if ( ! $res && file_exists ( " ../master.inc.php " )) {
$res = @ include " ../master.inc.php " ;
}
if ( ! $res && file_exists ( " ../../master.inc.php " )) {
$res = @ include " ../../master.inc.php " ;
}
if ( ! $res && file_exists ( " ../../../master.inc.php " )) {
$res = @ include " ../../../master.inc.php " ;
}
2020-06-24 09:55:10 +02:00
if ( ! $res ) {
print " Include of master fails " ;
exit ( - 1 );
}
2017-05-27 13:46:34 +02:00
// After this $db, $mysoc, $langs, $conf and $hookmanager are defined (Opened $db handler to database will be closed at end of file).
// $user is created but empty.
//$langs->setDefaultLang('en_US'); // To change default language of $langs
2020-04-10 10:59:32 +02:00
$langs -> load ( " main " ); // To load language file for default language
2017-05-27 13:46:34 +02:00
// Load user and its permissions
2020-04-10 10:59:32 +02:00
$result = $user -> fetch ( '' , 'admin' ); // Load user for login 'admin'. Comment line to run as anonymous user.
2021-02-26 18:26:44 +01:00
if ( ! $result > 0 ) {
dol_print_error ( '' , $user -> error ); exit ;
}
2017-05-27 13:46:34 +02:00
$user -> getrights ();
print " ***** " . $script_file . " ( " . $version . " ) pid= " . dol_getmypid () . " ***** \n " ;
2020-04-10 10:59:32 +02:00
if ( ! isset ( $argv [ 1 ])) { // Check parameters
2020-05-01 08:40:55 +02:00
print " Usage: " . $script_file . " param1 param2 ... \n " ;
2017-05-27 13:46:34 +02:00
exit ( - 1 );
}
print '--- start' . " \n " ;
print 'Argument 1=' . $argv [ 1 ] . " \n " ;
print 'Argument 2=' . $argv [ 2 ] . " \n " ;
// Start of transaction
$db -> begin ();
// Examples for manipulating class MyObject
2019-03-10 19:33:28 +01:00
//dol_include_once("/mymodule/class/myobject.class.php");
//$myobject=new MyObject($db);
2017-05-27 13:46:34 +02:00
// Example for inserting creating object in database
/*
dol_syslog ( $script_file . " CREATE " , LOG_DEBUG );
$myobject -> prop1 = 'value_prop1' ;
$myobject -> prop2 = 'value_prop2' ;
$id = $myobject -> create ( $user );
if ( $id < 0 ) { $error ++ ; dol_print_error ( $db , $myobject -> error ); }
else print " Object created with id= " . $id . " \n " ;
*/
// Example for reading object from database
/*
dol_syslog ( $script_file . " FETCH " , LOG_DEBUG );
$result = $myobject -> fetch ( $id );
if ( $result < 0 ) { $error ; dol_print_error ( $db , $myobject -> error ); }
else print " Object with id= " . $id . " loaded \n " ;
*/
// Example for updating object in database ($myobject must have been loaded by a fetch before)
/*
dol_syslog ( $script_file . " UPDATE " , LOG_DEBUG );
$myobject -> prop1 = 'newvalue_prop1' ;
$myobject -> prop2 = 'newvalue_prop2' ;
$result = $myobject -> update ( $user );
if ( $result < 0 ) { $error ++ ; dol_print_error ( $db , $myobject -> error ); }
else print " Object with id " . $myobject -> id . " updated \n " ;
*/
// Example for deleting object in database ($myobject must have been loaded by a fetch before)
/*
dol_syslog ( $script_file . " DELETE " , LOG_DEBUG );
$result = $myobject -> delete ( $user );
if ( $result < 0 ) { $error ++ ; dol_print_error ( $db , $myobject -> error ); }
else print " Object with id " . $myobject -> id . " deleted \n " ;
*/
// An example of a direct SQL read without using the fetch method
/*
$sql = " SELECT field1, field2 " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " myobject " ;
$sql .= " WHERE field3 = 'xxx' " ;
$sql .= " ORDER BY field1 ASC " ;
dol_syslog ( $script_file , LOG_DEBUG );
$resql = $db -> query ( $sql );
if ( $resql )
{
$num = $db -> num_rows ( $resql );
$i = 0 ;
if ( $num )
{
while ( $i < $num )
{
$obj = $db -> fetch_object ( $resql );
if ( $obj )
{
// You can use here results
print $obj -> field1 ;
print $obj -> field2 ;
}
$i ++ ;
}
}
}
else
{
$error ++ ;
dol_print_error ( $db );
}
*/
// -------------------- END OF YOUR CODE --------------------
2021-02-26 18:26:44 +01:00
if ( ! $error ) {
2017-05-27 13:46:34 +02:00
$db -> commit ();
print '--- end ok' . " \n " ;
2020-05-21 09:35:30 +02:00
} else {
2017-05-27 13:46:34 +02:00
print '--- end error code=' . $error . " \n " ;
$db -> rollback ();
}
2020-04-10 10:59:32 +02:00
$db -> close (); // Close $db database opened handler
2017-05-27 13:46:34 +02:00
exit ( $error );