getFromDB(1)) { self::$_instance->getEmpty(); } } return self::$_instance; } /** * Prepare input datas for updating the item * @param array $input used to update the item * @return array the modified $input array **/ function prepareInputForUpdate($input) { global $CFG_GLPI; if (!isset($input["maintenance"])) { $input["maintenance"] = 0; } 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'] = ''; } if (isset($input['pm_server_URL'])) { $input['domain'] = self::getCommonDomain( $CFG_GLPI['url_base'], $input['pm_server_URL'] ); } return $input; } /** * Summary of getCommonDomain * @param mixed $url1 first url * @param mixed $url2 second url * @return string the common domain part of the given urls */ static function getCommonDomain($url1, $url2) { $domain = ''; try { $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 ); } if ($domain != '') { return $domain; } } catch (Exception $e) { $domain = ''; } return $domain; } /** * Summary of showConfigForm * @param mixed $item is the config * @return boolean */ static function showConfigForm($item) { global $PM_DB, $CFG_GLPI, $PM_SOAP; $setup_ok = false; $ui_theme = [ 'glpi_classic' => 'glpi_classic', 'glpi_neoclassic' => 'glpi_neoclassic' ]; $config = $PM_SOAP->config; $config->showFormHeader(['colspan' => 4]); if (!$config->fields['maintenance']) { echo ""; echo "".__('Server URL (must be in same domain than GLPI)', 'processmaker').""; echo ""; echo "\n"; echo ""; echo "".__('Common domain with GLPI', 'processmaker').""; echo "
".$config->fields['domain']."
"; echo Html::scriptBlock(" function setCommonDomain() { 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) } ; } var domain = ''; try { 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() ; while( cglpi && cpm && cglpi == cpm ) { domain = cglpi + (domain==''?'':'.' + domain) ; cglpi = glpi.pop() ; cpm = pm.pop() ; } 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 $('div[name=domain]').text(domain) ; $('div[name=domain]').parent().attr('color', 'green'); return; } } catch(ex) {} $('div[name=domain]').text('".__('None!', 'processmaker')."') ; $('div[name=domain]').parent().attr('color', 'red'); }; $('input[name=pm_server_URL]').on('keyup', setCommonDomain ) ; setCommonDomain() ; "); echo "\n"; echo ""; echo "".__('Verify SSL certificate', 'processmaker').""; Dropdown::showYesNo("ssl_verify", $config->fields['ssl_verify']); echo ""; echo ""; echo "".__('Workspace Name', 'processmaker').""; echo ""; echo "\n"; echo ""; echo "".__('Server administrator name', 'processmaker').""; echo ""; echo "\n"; echo ""; echo "".__('Server administrator password', 'processmaker').""; echo ""; echo "  ".__('Clear'); echo "\n"; echo ""; echo "".__('Connection status', 'processmaker').""; //$pm = new PluginProcessmakerProcessmaker; if ($config->fields['pm_server_URL'] != '' && $config->fields['pm_workspace'] != '' && $config->fields["pm_admin_user"] != '' // && ($pm->login(true))) { && ($PM_SOAP->login(true))) { echo "".__('Test successful'); $setup_ok = true; } else { // echo "".__('Test failed')."
".print_r($pm->lasterror, true); echo "".__('Test failed')."
".print_r($PM_SOAP->lasterror, true); } echo "
\n"; echo "".__('SQL server setup', 'processmaker').""; echo ""; echo "" . __('SQL server (MariaDB or MySQL)', 'processmaker') . ""; echo ""; echo "\n"; echo ""; echo "" . __('Database name', 'processmaker') . ""; echo ""; echo "\n"; echo ""; echo "" . __('SQL user', 'processmaker') . ""; echo ""; echo "\n"; echo ""; echo "" . __('SQL password', 'processmaker') . ""; echo ""; echo "  ".__('Clear'); echo "\n"; echo ""; echo "".__('Connection status', 'processmaker').""; if ($PM_DB->connected && isset($PM_DB->dbdefault) && $PM_DB->dbdefault != '') { echo "".__('Test successful'); } else { echo "".__('Test failed'); } echo "\n"; echo "".__('Settings').""; echo ""; echo "".__('Theme Name', 'processmaker').""; Dropdown::showFromArray('pm_theme', $ui_theme, ['value' => $config->fields['pm_theme']]); echo ""; echo ""; echo "".__('Main Task Category (edit to change name)', 'processmaker').""; TaskCategory::dropdown(['name' => 'taskcategories_id', 'display_emptychoice' => true, 'value' => $config->fields['taskcategories_id']]); echo "\n"; echo ""; echo "".__('Task Writer (edit to change name)', 'processmaker').""; $rand = mt_rand(); User::dropdown(['name' => 'users_id', 'display_emptychoice' => true, 'right' => 'all', 'rand' => $rand, 'value' => $config->fields['users_id']]); // this code adds the + sign to the form echo ""; echo Ajax::createIframeModalWindow('add_dropdown'.$rand, User::getFormURL(), ['display' => false]); // end of + sign echo "\n"; echo ""; echo "".__('Group in ProcessMaker which will contain all GLPI users', 'processmaker').""; $pmGroups = [ 0 => Dropdown::EMPTY_VALUE ]; //$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;"; if ($PM_DB->connected) { $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) { $pmGroups[ $row['CON_ID'] ] = $row['CON_VALUE']; } Dropdown::showFromArray( 'pm_group_guid', $pmGroups, ['value' => $config->fields['pm_group_guid']] ); } else { echo "".__('Not connected'); } echo "\n"; echo ""; echo "" . __('Max cases per item (0=unlimited)', 'processmaker') . ""; echo ""; echo "\n"; } else { echo ""; PluginProcessmakerProcessmaker::showUnderMaintenance(); echo ""; } echo "".__('Maintenance').""; echo ""; echo "".__('Maintenance mode').""; Dropdown::showYesNo("maintenance", $config->fields['maintenance']); echo ""; echo ""; echo "".__('Processmaker system information', 'processmaker').""; if ($setup_ok) { $info = $PM_SOAP->systemInformation( ); echo ''.__('Version', 'processmaker').''.$info->version.''; echo ''.__('Web server', 'processmaker').''.$info->webServer.''; echo ''.__('Server name', 'processmaker').''.$info->serverName.''; echo ''.__('PHP version', 'processmaker').''.$info->phpVersion.''; echo ''.__('DB version', 'processmaker').''.$info->databaseVersion.''; echo ''.__('DB server IP', 'processmaker').''.$info->databaseServerIp.''; echo ''.__('DB name', 'processmaker').''.$info->databaseName.''; echo ''.__('User browser', 'processmaker').''.$info->userBrowser.''; echo ''.__('User IP', 'processmaker').''.$info->userIp.''; } else { echo ''.__('Version', 'processmaker').''.__('Not yet!', 'processmaker').''; } $config->showFormButtons(['candel' => false]); return false; } function getTabNameForItem(CommonGLPI $item, $withtemplate = 0) { if ($item->getType()=='Config') { return __('ProcessMaker', 'processmaker'); } return ''; } static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $withtemplate = 0) { if ($item->getType()=='Config') { self::showConfigForm($item); } return true; } }