2015-10-09 14:13:52 +02:00
< ? php
/**
*/
class PluginProcessmakerConfig extends CommonDBTM {
2018-07-04 11:24:29 +02:00
static $rightname = '' ;
2019-01-14 16:19:24 +01:00
static private $_instance = null ;
2015-10-09 14:13:52 +02:00
2017-05-06 18:38:24 +02:00
/**
* Summary of canCreate
* @ return boolean
*/
static function canCreate () {
return Session :: haveRight ( 'config' , UPDATE );
}
2015-10-09 14:13:52 +02:00
2017-05-06 18:38:24 +02:00
/**
* Summary of canView
* @ return boolean
*/
static function canView () {
return Session :: haveRight ( 'config' , READ );
}
2015-10-09 14:13:52 +02:00
2017-05-06 18:38:24 +02:00
/**
* Summary of canUpdate
* @ return boolean
*/
static function canUpdate () {
return Session :: haveRight ( 'config' , UPDATE );
}
2016-10-25 11:37:01 +02:00
2017-05-06 18:38:24 +02:00
/**
* Summary of getTypeName
* @ param mixed $nb plural
* @ return mixed
*/
2019-01-14 16:19:24 +01:00
static function getTypeName ( $nb = 0 ) {
2018-08-02 16:57:00 +02:00
return __ ( 'ProcessMaker setup' , 'processmaker' );
2017-05-06 18:38:24 +02:00
}
2015-10-09 14:13:52 +02:00
2017-05-06 18:38:24 +02:00
/**
* Summary of getName
* @ param mixed $with_comment with comment
* @ return mixed
*/
2019-01-14 16:19:24 +01:00
function getName ( $with_comment = 0 ) {
2018-08-02 16:57:00 +02:00
return __ ( 'ProcessMaker' , 'processmaker' );
2017-05-06 18:38:24 +02:00
}
2015-10-09 14:13:52 +02:00
2017-05-06 18:38:24 +02:00
/**
* Summary of getInstance
* @ return PluginProcessmakerConfig
*/
static function getInstance () {
2015-10-09 14:13:52 +02:00
2017-05-06 18:38:24 +02:00
if ( ! isset ( self :: $_instance )) {
self :: $_instance = new self ();
if ( ! self :: $_instance -> getFromDB ( 1 )) {
self :: $_instance -> getEmpty ();
}
}
return self :: $_instance ;
}
2015-10-09 14:13:52 +02:00
2016-10-25 11:37:01 +02:00
/**
* Prepare input datas for updating the item
2017-05-06 18:38:24 +02:00
* @ param array $input used to update the item
2016-10-25 11:37:01 +02:00
* @ return array the modified $input array
**/
function prepareInputForUpdate ( $input ) {
2017-04-28 14:57:49 +02:00
global $CFG_GLPI ;
2016-10-25 11:37:01 +02:00
2017-05-06 18:38:24 +02:00
if ( ! isset ( $input [ " maintenance " ])) {
$input [ " maintenance " ] = 0 ;
2016-10-25 11:37:01 +02:00
}
if ( isset ( $input [ " pm_dbserver_passwd " ])) {
if ( empty ( $input [ " pm_dbserver_passwd " ])) {
unset ( $input [ " pm_dbserver_passwd " ]);
} else {
$input [ " pm_dbserver_passwd " ] = Toolbox :: encrypt ( stripslashes ( $input [ " pm_dbserver_passwd " ]), GLPIKEY );
}
}
if ( isset ( $input [ " _blank_pm_dbserver_passwd " ]) && $input [ " _blank_pm_dbserver_passwd " ]) {
$input [ 'pm_dbserver_passwd' ] = '' ;
}
if ( isset ( $input [ " pm_admin_passwd " ])) {
if ( empty ( $input [ " pm_admin_passwd " ])) {
unset ( $input [ " pm_admin_passwd " ]);
} else {
$input [ " pm_admin_passwd " ] = Toolbox :: encrypt ( stripslashes ( $input [ " pm_admin_passwd " ]), GLPIKEY );
}
}
if ( isset ( $input [ " _blank_pm_admin_passwd " ]) && $input [ " _blank_pm_admin_passwd " ]) {
$input [ 'pm_admin_passwd' ] = '' ;
}
2018-08-03 11:12:11 +02:00
if ( isset ( $input [ 'pm_server_URL' ])) {
$input [ 'domain' ] = self :: getCommonDomain ( $CFG_GLPI [ 'url_base' ], $input [ 'pm_server_URL' ] );
}
2017-04-28 14:57:49 +02:00
2016-10-25 11:37:01 +02:00
return $input ;
}
2017-04-28 14:57:49 +02:00
/**
* Summary of getCommonDomain
2017-05-06 18:38:24 +02:00
* @ param mixed $url1 first url
* @ param mixed $url2 second url
2017-04-28 14:57:49 +02:00
* @ return string the common domain part of the given urls
*/
static function getCommonDomain ( $url1 , $url2 ) {
$domain = '' ;
try {
2017-05-06 18:38:24 +02:00
$glpi = explode ( " . " , parse_url ( $url1 , PHP_URL_HOST ));
$pm = explode ( " . " , parse_url ( $url2 , PHP_URL_HOST ));
$cglpi = array_pop ( $glpi );
$cpm = array_pop ( $pm );
while ( $cglpi && $cpm && $cglpi == $cpm ) {
$domain = $cglpi . ( $domain == '' ? '' : '.' . $domain );
$cglpi = array_pop ( $glpi );
$cpm = array_pop ( $pm );
2017-04-28 14:57:49 +02:00
}
2017-05-06 18:38:24 +02:00
if ( $domain != '' ) {
return $domain ;
2017-04-28 14:57:49 +02:00
}
2017-05-06 18:38:24 +02:00
} catch ( Exception $e ) {
$domain = '' ;
}
return $domain ;
2017-04-28 14:57:49 +02:00
}
2017-05-06 18:38:24 +02:00
/**
* Summary of showConfigForm
* @ param mixed $item is the config
* @ return boolean
*/
static function showConfigForm ( $item ) {
2018-08-02 16:57:00 +02:00
global $PM_DB , $CFG_GLPI , $PM_SOAP ;
2015-10-09 14:13:52 +02:00
2018-03-19 16:56:18 +01:00
$setup_ok = false ;
2019-01-14 16:19:24 +01:00
$ui_theme = [
2017-05-06 18:38:24 +02:00
'glpi_classic' => 'glpi_classic' ,
'glpi_neoclassic' => 'glpi_neoclassic'
2019-01-14 16:19:24 +01:00
];
2015-10-09 14:13:52 +02:00
2018-08-03 11:12:11 +02:00
$config = $PM_SOAP -> config ;
2018-03-19 16:56:18 +01:00
$config -> showFormHeader ([ 'colspan' => 4 ]);
2015-10-09 14:13:52 +02:00
2018-08-03 11:12:11 +02:00
if ( ! $config -> fields [ 'maintenance' ]) {
echo " <tr class='tab_bg_1'> " ;
echo " <td > " . __ ( 'Server URL (must be in same domain than GLPI)' , 'processmaker' ) . " </td><td > " ;
echo " <input size='50' type='text' name='pm_server_URL' value=' " . $config -> fields [ 'pm_server_URL' ] . " '> " ;
2019-05-21 10:47:15 +02:00
echo " </td></tr> \n " ;
2015-10-09 14:13:52 +02:00
2019-05-21 10:47:15 +02:00
echo " <tr class='tab_bg_1'> " ;
2018-08-03 11:12:11 +02:00
echo " <td> " . __ ( 'Common domain with GLPI' , 'processmaker' ) . " </td> " ;
echo " <td><font color='red'><div name='domain'> " . $config -> fields [ 'domain' ] . " </div></font> " ;
2017-04-28 14:57:49 +02:00
2018-08-03 11:12:11 +02:00
echo Html :: scriptBlock ( "
2017-04-28 14:57:49 +02:00
function setCommonDomain () {
2017-05-06 18:38:24 +02:00
function parseUrl ( url ) {
var a = document . createElement ( 'a' );
a . href = url ;
// debugger;
return { host : a . hostname , port : a . port , scheme : a . protocol . slice ( 0 , - 1 ), path : a . pathname , query : a . search . slice ( 1 ), fragment : a . hash . slice ( 1 ) } ;
}
2017-04-28 14:57:49 +02:00
var domain = '' ;
try {
2017-05-06 18:38:24 +02:00
var glpi = parseUrl ( '".$CFG_GLPI[' url_base ']."' ) . host . split ( '.' ) ;
var pm = parseUrl ( $ ( 'input[name=pm_server_URL]' ) . val ()) . host . split ( '.' );
var cglpi = glpi . pop () ;
var cpm = pm . pop () ;
2017-04-28 14:57:49 +02:00
while ( cglpi && cpm && cglpi == cpm ) {
domain = cglpi + ( domain == '' ? '' : '.' + domain ) ;
cglpi = glpi . pop () ;
cpm = pm . pop () ;
}
2018-07-04 11:24:29 +02:00
if ( domain != '' && domain . split ( '.' ) . length > 1 ) { // common domain must be at least 'domain.com' and not 'com', otherwise some browser will not accept the CORS javascript
2017-04-28 14:57:49 +02:00
$ ( 'div[name=domain]' ) . text ( domain ) ;
$ ( 'div[name=domain]' ) . parent () . attr ( 'color' , 'green' );
return ;
}
} catch ( ex ) {}
2018-08-02 16:57:00 +02:00
$ ( 'div[name=domain]' ) . text ( '".__(' None ! ', ' processmaker ')."' ) ;
2017-04-28 14:57:49 +02:00
$ ( 'div[name=domain]' ) . parent () . attr ( 'color' , 'red' );
};
$ ( 'input[name=pm_server_URL]' ) . on ( 'keyup' , setCommonDomain ) ;
setCommonDomain () ;
" );
2018-08-03 11:12:11 +02:00
echo " </td></tr> \n " ;
2019-01-14 16:19:24 +01:00
echo " <tr class='tab_bg_1'> " ;
echo " <td > " . __ ( 'Verify SSL certificate' , 'processmaker' ) . " </td><td > " ;
Dropdown :: showYesNo ( " ssl_verify " , $config -> fields [ 'ssl_verify' ]);
echo " </td></tr> " ;
2018-08-03 11:12:11 +02:00
echo " <tr class='tab_bg_1'> " ;
echo " <td > " . __ ( 'Workspace Name' , 'processmaker' ) . " </td><td > " ;
echo " <input type='text' name='pm_workspace' value=' " . $config -> fields [ 'pm_workspace' ] . " '> " ;
echo " </td></tr> \n " ;
echo " <tr class='tab_bg_1'> " ;
echo " <td > " . __ ( 'Server administrator name' , 'processmaker' ) . " </td> " ;
echo " <td ><input type='text' name='pm_admin_user' value=' " . $config -> fields [ " pm_admin_user " ] . " '> " ;
echo " </td></tr> \n " ;
echo " <tr class='tab_bg_1'> " ;
echo " <td > " . __ ( 'Server administrator password' , 'processmaker' ) . " </td> " ;
echo " <td ><input type='password' name='pm_admin_passwd' value='' autocomplete='off'> " ;
echo " <input type='checkbox' name='_blank_pm_admin_passwd'> " . __ ( 'Clear' );
echo " </td></tr> \n " ;
echo " <tr class='tab_bg_1'> " ;
echo " <td > " . __ ( 'Connection status' , 'processmaker' ) . " </td><td > " ;
//$pm = new PluginProcessmakerProcessmaker;
if ( $config -> fields [ 'pm_server_URL' ] != ''
&& $config -> fields [ 'pm_workspace' ] != ''
&& $config -> fields [ " pm_admin_user " ] != ''
2019-01-14 16:19:24 +01:00
// && ($pm->login(true))) {
2018-08-03 11:12:11 +02:00
&& ( $PM_SOAP -> login ( true ))) {
echo " <font color='green'> " . __ ( 'Test successful' );
$setup_ok = true ;
} else {
// echo "<font color='red'>".__('Test failed')."<br>".print_r($pm->lasterror, true);
echo " <font color='red'> " . __ ( 'Test failed' ) . " <br> " . print_r ( $PM_SOAP -> lasterror , true );
}
echo " </font></span></td></tr> \n " ;
echo " <tr><td colspan='4' class='center b'> " . __ ( 'SQL server setup' , 'processmaker' ) . " </td></tr> " ;
echo " <tr class='tab_bg_1'> " ;
echo " <td > " . __ ( 'SQL server (MariaDB or MySQL)' , 'processmaker' ) . " </td> " ;
echo " <td ><input type='text' size=50 name='pm_dbserver_name' value=' " . $config -> fields [ " pm_dbserver_name " ] . " '> " ;
echo " </td></tr> \n " ;
echo " <tr class='tab_bg_1'> " ;
echo " <td > " . __ ( 'Database name' , 'processmaker' ) . " </td> " ;
echo " <td ><input type='text' size=50 name='pm_dbname' value=' " . $config -> fields [ 'pm_dbname' ] . " '> " ;
echo " </td></tr> \n " ;
echo " <tr class='tab_bg_1'> " ;
echo " <td > " . __ ( 'SQL user' , 'processmaker' ) . " </td> " ;
echo " <td ><input type='text' name='pm_dbserver_user' value=' " . $config -> fields [ " pm_dbserver_user " ] . " '> " ;
echo " </td></tr> \n " ;
echo " <tr class='tab_bg_1'> " ;
echo " <td > " . __ ( 'SQL password' , 'processmaker' ) . " </td> " ;
echo " <td ><input type='password' name='pm_dbserver_passwd' value='' autocomplete='off'> " ;
echo " <input type='checkbox' name='_blank_pm_dbserver_passwd'> " . __ ( 'Clear' );
echo " </td></tr> \n " ;
echo " <tr class='tab_bg_1'> " ;
echo " <td > " . __ ( 'Connection status' , 'processmaker' ) . " </td><td > " ;
if ( $PM_DB -> connected && isset ( $PM_DB -> dbdefault ) && $PM_DB -> dbdefault != '' ) {
echo " <font color='green'> " . __ ( 'Test successful' );
} else {
echo " <font color='red'> " . __ ( 'Test failed' );
}
echo " </font></span></td></tr> \n " ;
echo " <tr><td colspan='4' class='center b'> " . __ ( 'Settings' ) . " </td></tr> " ;
echo " <tr class='tab_bg_1'> " ;
echo " <td > " . __ ( 'Theme Name' , 'processmaker' ) . " </td><td > " ;
Dropdown :: showFromArray ( 'pm_theme' , $ui_theme ,
2019-01-14 16:19:24 +01:00
[ 'value' => $config -> fields [ 'pm_theme' ]]);
2018-08-03 11:12:11 +02:00
echo " </td></tr> " ;
echo " <tr class='tab_bg_1'> " ;
echo " <td > " . __ ( 'Main Task Category (edit to change name)' , 'processmaker' ) . " </td><td > " ;
2019-01-14 16:19:24 +01:00
TaskCategory :: dropdown ([ 'name' => 'taskcategories_id' ,
2018-08-03 11:12:11 +02:00
'display_emptychoice' => true ,
2019-01-14 16:19:24 +01:00
'value' => $config -> fields [ 'taskcategories_id' ]]);
2018-08-03 11:12:11 +02:00
echo " </td></tr> \n " ;
echo " <tr class='tab_bg_1'> " ;
echo " <td > " . __ ( 'Task Writer (edit to change name)' , 'processmaker' ) . " </td><td > " ;
$rand = mt_rand ();
2019-01-14 16:19:24 +01:00
User :: dropdown ([ 'name' => 'users_id' ,
2018-08-03 11:12:11 +02:00
'display_emptychoice' => true ,
'right' => 'all' ,
'rand' => $rand ,
2019-01-14 16:19:24 +01:00
'value' => $config -> fields [ 'users_id' ]]);
2018-08-03 11:12:11 +02:00
// this code adds the + sign to the form
echo " <img alt='' title= \" " . __s ( 'Add' ) . " \" src=' " . $CFG_GLPI [ " root_doc " ] .
" /pics/add_dropdown.png' style='cursor:pointer; margin-left:2px;'
2017-04-28 14:57:49 +02:00
onClick = \ " " . Html :: jsGetElementbyID ( 'add_dropdown' . $rand ) . " .dialog('open'); \" > " ;
2018-08-03 11:12:11 +02:00
echo Ajax :: createIframeModalWindow ( 'add_dropdown' . $rand ,
User :: getFormURL (),
2019-01-14 16:19:24 +01:00
[ 'display' => false ]);
2018-08-03 11:12:11 +02:00
// end of + sign
echo " </td></tr> \n " ;
echo " <tr class='tab_bg_1'> " ;
echo " <td > " . __ ( 'Group in ProcessMaker which will contain all GLPI users' , 'processmaker' ) . " </td><td > " ;
2019-01-14 16:19:24 +01:00
$pmGroups = [ 0 => Dropdown :: EMPTY_VALUE ];
2019-07-19 16:17:53 +02:00
//$res = $PM_DB->request([
// 'SELECT DISTINCT' => 'CON_ID',
// 'FIELDS' => 'CON_VALUE',
// 'FROM' => 'CONTENT',
// 'WHERE' => ['CON_CATEGORY' => 'GRP_TITLE'],
// 'ORDER' => 'CON_VALUE'
// ]);
//$query = "SELECT DISTINCT CON_ID, CON_VALUE FROM CONTENT WHERE CON_CATEGORY='GRP_TITLE' ORDER BY CON_VALUE;";
2018-08-03 11:12:11 +02:00
if ( $PM_DB -> connected ) {
2019-07-19 16:17:53 +02:00
$res = $PM_DB -> request ([
'SELECT DISTINCT' => 'CON_ID' ,
'FIELDS' => 'CON_VALUE' ,
'FROM' => 'CONTENT' ,
'WHERE' => [ 'CON_CATEGORY' => 'GRP_TITLE' ],
'ORDER' => 'CON_VALUE'
]);
foreach ( $res as $row ) {
2018-08-03 11:12:11 +02:00
$pmGroups [ $row [ 'CON_ID' ] ] = $row [ 'CON_VALUE' ];
}
2019-01-14 16:19:24 +01:00
Dropdown :: showFromArray ( 'pm_group_guid' , $pmGroups , [ 'value' => $config -> fields [ 'pm_group_guid' ]] );
2018-08-03 11:12:11 +02:00
} else {
echo " <font color='red'> " . __ ( 'Not connected' );
2017-05-06 18:38:24 +02:00
}
2019-05-21 10:47:15 +02:00
echo " </td></tr> \n " ;
2018-08-03 11:12:11 +02:00
2019-05-21 10:47:15 +02:00
echo " <tr class='tab_bg_1'> " ;
echo " <td > " . __ ( 'Max cases per item (0=unlimited)' , 'processmaker' ) . " </td> " ;
echo " <td ><input type='text' name='max_cases_per_item' value=' " . $config -> fields [ " max_cases_per_item " ] . " '> " ;
2018-08-03 11:12:11 +02:00
echo " </td></tr> \n " ;
2019-05-21 10:47:15 +02:00
2017-05-06 18:38:24 +02:00
} else {
2018-08-03 11:12:11 +02:00
echo " <tr><td colspan='4' class='center b'> " ;
PluginProcessmakerProcessmaker :: showUnderMaintenance ();
echo " </td></tr> " ;
2017-05-06 18:38:24 +02:00
}
2015-10-09 14:13:52 +02:00
2019-05-21 10:47:15 +02:00
echo " <tr><td colspan='4' class='center b'> " . __ ( 'Maintenance' ) . " </td></tr> " ;
2016-10-25 11:37:01 +02:00
2019-05-21 10:47:15 +02:00
echo " <tr class='tab_bg_1'> " ;
echo " <td > " . __ ( 'Maintenance mode' ) . " </td><td > " ;
Dropdown :: showYesNo ( " maintenance " , $config -> fields [ 'maintenance' ]);
echo " </td></tr> " ;
2015-10-09 14:13:52 +02:00
2019-05-21 10:47:15 +02:00
echo " <tr><td colspan='4'></td></tr> " ;
2018-03-19 16:56:18 +01:00
2019-05-21 10:47:15 +02:00
echo " <tr><th colspan='4'> " . __ ( 'Processmaker system information' , 'processmaker' ) . " </th></tr> " ;
2019-01-14 16:19:24 +01:00
if ( $setup_ok ) {
$info = $PM_SOAP -> systemInformation ( );
echo '<tr><td>' . __ ( 'Version' , 'processmaker' ) . '</td><td>' . $info -> version . '</td></tr>' ;
echo '<tr><td>' . __ ( 'Web server' , 'processmaker' ) . '</td><td>' . $info -> webServer . '</td></tr>' ;
echo '<tr><td>' . __ ( 'Server name' , 'processmaker' ) . '</td><td>' . $info -> serverName . '</td></tr>' ;
echo '<tr><td>' . __ ( 'PHP version' , 'processmaker' ) . '</td><td>' . $info -> phpVersion . '</td></tr>' ;
echo '<tr><td>' . __ ( 'DB version' , 'processmaker' ) . '</td><td>' . $info -> databaseVersion . '</td></tr>' ;
echo '<tr><td>' . __ ( 'DB server IP' , 'processmaker' ) . '</td><td>' . $info -> databaseServerIp . '</td></tr>' ;
echo '<tr><td>' . __ ( 'DB name' , 'processmaker' ) . '</td><td>' . $info -> databaseName . '</td></tr>' ;
echo '<tr><td>' . __ ( 'User browser' , 'processmaker' ) . '</td><td>' . $info -> userBrowser . '</td></tr>' ;
echo '<tr><td>' . __ ( 'User IP' , 'processmaker' ) . '</td><td>' . $info -> userIp . '</td></tr>' ;
} else {
echo '<tr><td>' . __ ( 'Version' , 'processmaker' ) . '</td><td>' . __ ( 'Not yet!' , 'processmaker' ) . '</td></tr>' ;
}
2019-05-21 10:47:15 +02:00
$config -> showFormButtons ([ 'candel' => false ]);
2015-10-09 14:13:52 +02:00
2017-05-06 18:38:24 +02:00
return false ;
}
2015-10-09 14:13:52 +02:00
2019-01-14 16:19:24 +01:00
function getTabNameForItem ( CommonGLPI $item , $withtemplate = 0 ) {
2017-05-06 18:38:24 +02:00
if ( $item -> getType () == 'Config' ) {
2018-08-02 16:57:00 +02:00
return __ ( 'ProcessMaker' , 'processmaker' );
2017-05-06 18:38:24 +02:00
}
return '' ;
}
2015-10-09 14:13:52 +02:00
2019-01-14 16:19:24 +01:00
static function displayTabContentForItem ( CommonGLPI $item , $tabnum = 1 , $withtemplate = 0 ) {
2015-10-09 14:13:52 +02:00
2017-05-06 18:38:24 +02:00
if ( $item -> getType () == 'Config' ) {
self :: showConfigForm ( $item );
}
return true ;
}
2016-10-25 11:37:01 +02:00
2015-10-09 14:13:52 +02:00
}