mirror of
https://github.com/Combodo/iTop.git
synced 2026-06-12 10:52:20 +02:00
Compare commits
4 Commits
develop
...
feature/96
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
38533ffcd2 | ||
|
|
38b5414ab9 | ||
|
|
fd518a7eaa | ||
|
|
b557cb6eff |
@@ -20,6 +20,16 @@
|
||||
*
|
||||
*/
|
||||
|
||||
use Combodo\iTop\PhpParser\Evaluation\PhpExpressionEvaluator;
|
||||
use Combodo\iTop\Setup\ModuleDiscovery\ModuleFileReaderException;
|
||||
use PhpParser\Comment;
|
||||
use PhpParser\Error;
|
||||
use PhpParser\Node\Arg;
|
||||
use PhpParser\Node\Expr\Array_;
|
||||
use PhpParser\Node\Expr\Assign;
|
||||
use PhpParser\Node\Expr\Variable;
|
||||
use PhpParser\ParserFactory;
|
||||
|
||||
define('ITOP_APPLICATION', 'iTop');
|
||||
define('ITOP_APPLICATION_SHORT', 'iTop');
|
||||
|
||||
@@ -84,7 +94,7 @@ define('DEFAULT_HASH_ALGO', PASSWORD_DEFAULT);
|
||||
* @see utils::GetConfig() to load config from the current env, if metamodel is not loaded
|
||||
* @package iTopORM
|
||||
*/
|
||||
class Config
|
||||
#[AllowDynamicProperties] class Config
|
||||
{
|
||||
//protected $m_bIsLoaded = false;
|
||||
protected $m_sFile = '';
|
||||
@@ -2010,17 +2020,24 @@ class Config
|
||||
*/
|
||||
protected $m_sAppSecret;
|
||||
|
||||
private bool $bPreserveComments;
|
||||
private bool $bLegacyEvaluation;
|
||||
|
||||
/**
|
||||
* Config constructor.
|
||||
*
|
||||
* @param string|null $sConfigFile
|
||||
* @param bool $bLoadConfig
|
||||
* @param bool $bPreserveComments
|
||||
* @param bool $bLegacyEvaluation
|
||||
*
|
||||
* @throws \ConfigException
|
||||
* @throws \CoreException
|
||||
*/
|
||||
public function __construct($sConfigFile = null, $bLoadConfig = true)
|
||||
public function __construct($sConfigFile = null, $bLoadConfig = true, bool $bPreserveComments = false, bool $bLegacyEvaluation = false)
|
||||
{
|
||||
$this->bPreserveComments = $bPreserveComments;
|
||||
$this->bLegacyEvaluation = $bLegacyEvaluation;
|
||||
$this->oConfigPlaceholdersResolver = new ConfigPlaceholdersResolver();
|
||||
|
||||
$this->m_sFile = $sConfigFile;
|
||||
@@ -2075,6 +2092,7 @@ class Config
|
||||
}
|
||||
$this->Set('app_root_url', $sAppRootUrl);
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2121,9 +2139,39 @@ class Config
|
||||
// So, I've implemented a solution suggested in the PHP doc (search for phpWrapper)
|
||||
try {
|
||||
ob_start();
|
||||
/*file_put_contents(APPROOT . '/bugged-conf.php', '?'.'>'.trim($sConfigCode));
|
||||
$e = new \Exception('');
|
||||
var_dump($e->getTraceAsString());*/
|
||||
eval('?'.'>'.trim($sConfigCode));
|
||||
$sNoise = trim(ob_get_contents());
|
||||
ob_end_clean();
|
||||
|
||||
if ($this->bPreserveComments || ! $this->bLegacyEvaluation) {
|
||||
try {
|
||||
$oParser = (new ParserFactory())->createForNewestSupportedVersion();
|
||||
foreach ($oParser->parse($sConfigCode) as $oNode) {
|
||||
if ($oNode instanceof \PhpParser\Node\Stmt\Expression) {
|
||||
/** @var \PhpParser\Node\Stmt\Expression $oNode */
|
||||
$oExpr = $oNode->expr;
|
||||
if ($oExpr instanceof Assign) {
|
||||
/** @var Assign $oExpr */
|
||||
$oVar = $oExpr->var;
|
||||
if ($oVar instanceof Variable && $oVar->name === "MyModuleSettings") {
|
||||
if ($oExpr->expr instanceof Array_) {
|
||||
$oPhpExpressionEvaluator = new PhpExpressionEvaluator();
|
||||
if (! $this->bLegacyEvaluation) {
|
||||
$aArrayWithComments = $oPhpExpressionEvaluator->GetArray($oExpr->expr, $this->bPreserveComments);
|
||||
$MyModuleSettings = array_replace_recursive($aArrayWithComments, $MyModuleSettings);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Error $e) {
|
||||
var_dump($e);
|
||||
}
|
||||
}
|
||||
} catch (Error $e) {
|
||||
// PHP 7
|
||||
throw new ConfigException(
|
||||
@@ -2714,6 +2762,15 @@ class Config
|
||||
foreach ($this->m_aModuleSettings as $sModule => $aProperties) {
|
||||
fwrite($hFile, "\t'$sModule' => array (\n");
|
||||
foreach ($aProperties as $sProperty => $value) {
|
||||
if (is_string($value) && false !== strpos($value, 'PhpParserComment')) {
|
||||
$value = preg_replace(
|
||||
["/.*StartPhpParserComment/", "/EndPhpParserComment/"],
|
||||
['', ''],
|
||||
$value
|
||||
);
|
||||
fwrite($hFile, "\t\t$value\n");
|
||||
continue;
|
||||
}
|
||||
$sNiceExport = self::PrettyVarExport($this->oItopConfigParser->GetVarValue('MyModuleSettings', $sProperty), $value, "\t\t");
|
||||
fwrite($hFile, "\t\t'$sProperty' => $sNiceExport,\n");
|
||||
}
|
||||
@@ -2883,7 +2940,7 @@ class Config
|
||||
}
|
||||
|
||||
/**
|
||||
* Pretty format a var_export'ed value so that (if possible) the identation is preserved on every line
|
||||
* Pretty format a var_export'ed value so that (if possible) the indentation is preserved on every line
|
||||
*
|
||||
* @param array $aParserValue
|
||||
* @param mixed $value The value to export
|
||||
@@ -2900,12 +2957,19 @@ class Config
|
||||
}
|
||||
|
||||
$sExport = var_export($value, true);
|
||||
if (strpos($sExport, 'PhpParserComment')) {
|
||||
$sExport = preg_replace(
|
||||
["/.*StartPhpParserComment/", "/EndPhpParserComment',/"],
|
||||
['', ''],
|
||||
$sExport
|
||||
);
|
||||
}
|
||||
$sNiceExport = str_replace(["\r\n", "\n", "\r"], "\n".$sIndentation, trim($sExport));
|
||||
if (!$bForceIndentation) {
|
||||
/** @var array $aImported */
|
||||
$aImported = null;
|
||||
eval('$aImported='.$sNiceExport.';');
|
||||
// Check if adding the identations at the beginning of each line
|
||||
// Check if adding the indentations at the beginning of each line
|
||||
// did not modify the values (in case of a string containing a line break)
|
||||
if ($aImported != $value) {
|
||||
$sNiceExport = $sExport;
|
||||
@@ -2914,7 +2978,6 @@ class Config
|
||||
|
||||
return $sNiceExport;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class ConfigPlaceholdersResolver
|
||||
|
||||
@@ -260,6 +260,11 @@ class ModuleFileReader
|
||||
}
|
||||
|
||||
$aModuleConfig = $this->oPhpExpressionEvaluator->EvaluateExpression($oModuleConfigInfo->value);
|
||||
/*if (isset($aModuleConfig['settings'])) {
|
||||
$oPhpExpressionEvaluator = new PhpExpressionEvaluator();
|
||||
$aArrayWithComments = $oPhpExpressionEvaluator->GetArrayWithComments($oModuleConfigInfo->value);
|
||||
$aModuleConfig['settings'] = array_replace_recursive($aArrayWithComments['settings'], $aModuleConfig['settings']);
|
||||
}*/
|
||||
|
||||
if (! is_array($aModuleConfig)) {
|
||||
throw new ModuleFileReaderException("3rd parameter to SetupWebPage::AddModule not an array: ".get_class($oModuleConfigInfo->value), 0, null, $sModuleFilePath);
|
||||
|
||||
@@ -4,9 +4,11 @@ namespace Combodo\iTop\PhpParser\Evaluation;
|
||||
|
||||
use Combodo\iTop\Setup\ModuleDiscovery\ModuleFileParser;
|
||||
use Combodo\iTop\Setup\ModuleDiscovery\ModuleFileReaderException;
|
||||
use PhpParser\Comment;
|
||||
use PhpParser\ConstExprEvaluator;
|
||||
use PhpParser\ExprEvaluator;
|
||||
use PhpParser\Node\Expr;
|
||||
use PhpParser\Node\Expr\Array_;
|
||||
use PhpParser\ParserFactory;
|
||||
|
||||
/**
|
||||
@@ -55,4 +57,36 @@ PHP;
|
||||
throw new ModuleFileReaderException("Eval of '$sExpr' caused an error:".$t->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public function GetArray(Array_ $oArray, bool $bPreserveComments = true): array
|
||||
{
|
||||
$aRes = [];
|
||||
$i = 0;
|
||||
foreach ($oArray->items as $oItem) {
|
||||
/** @var \PhpParser\Node\ArrayItem $oItem **/
|
||||
if (is_null($oItem->key)) {
|
||||
$sKey = $i;
|
||||
$i++;
|
||||
} else {
|
||||
$sKey = $this->EvaluateExpression($oItem->key);
|
||||
}
|
||||
|
||||
if ($bPreserveComments) {
|
||||
foreach ($oItem->getComments() as $oComment) {
|
||||
/** @var \PhpParser\Comment $oComment */
|
||||
$aRes[] = 'StartPhpParserComment'.$oComment->getText().'EndPhpParserComment';
|
||||
}
|
||||
}
|
||||
if ($oItem->value instanceof Array_) {
|
||||
$aRes[$sKey] = $this->GetArray($oItem->value, $bPreserveComments);
|
||||
} elseif ($oItem->value instanceof Comment) {
|
||||
if ($bPreserveComments) {
|
||||
$aRes[$sKey] = $oItem->value;
|
||||
}
|
||||
} else {
|
||||
$aRes[$sKey] = $this->EvaluateExpression($oItem->value);
|
||||
}
|
||||
}
|
||||
return $aRes;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ namespace Combodo\iTop\Test\UnitTest\Module\iTopConfig;
|
||||
|
||||
use Combodo\iTop\Test\UnitTest\ItopTestCase;
|
||||
use Config;
|
||||
use http\Encoding\Stream\Inflate;
|
||||
|
||||
class ConfigTest extends ItopTestCase
|
||||
{
|
||||
@@ -72,7 +73,6 @@ class ConfigTest extends ItopTestCase
|
||||
'sExpectedContains' => "'app_root_url' => 'http://%server(SERVER_NAME)?:localhost%/itop/iTop/'",
|
||||
'aChanges' => [],
|
||||
],
|
||||
|
||||
'preserve set same value' => [
|
||||
'sConfigFile' => __DIR__.'/ConfigTest/config-itop-var.php',
|
||||
'sExpectedContains' => "'app_root_url' => 'http://' . (isset(\$_SERVER['SERVER_NAME']) ? \$_SERVER['SERVER_NAME'] : 'localhost') . '/itop/iTop/'",
|
||||
@@ -91,4 +91,58 @@ class ConfigTest extends ItopTestCase
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
private function GetModuleSettingSection(string $sFilePath): string
|
||||
{
|
||||
preg_match('/\$MyModuleSettings[\w\W]*\/\*\*/m', file_get_contents($sFilePath), $aMatches);
|
||||
return preg_replace(['/[ ]+/', '/[ ]+/'], [' ', ' '], $aMatches[0]);
|
||||
}
|
||||
|
||||
public static function ConfEvaluationIsTheSameWithPreviousAndCurrentAlgoProvider() {
|
||||
return [
|
||||
'comments in module settings' => ['config-with-comments.php'],
|
||||
'nominal case' => ['config-without-comments.php'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider ConfEvaluationIsTheSameWithPreviousAndCurrentAlgoProvider
|
||||
*/
|
||||
public function ConfEvaluationIsTheSameWithPreviousAndCurrentAlgo($sFile, $sExpectedContentFile)
|
||||
{
|
||||
$sTmpFile = $this->GetTemporaryFilePath();
|
||||
$sConfigFile = __DIR__."/ConfigTest/$sFile";
|
||||
$oConfig = new Config($sConfigFile, true, false, false);
|
||||
$oConfig->WriteToFile($sTmpFile);
|
||||
|
||||
$sExpected = file_get_contents(__DIR__."/ConfigTest/$sExpectedContentFile");
|
||||
$sExpected = preg_replace('|\?\>\n|', '?>', $sExpected);
|
||||
|
||||
$this->assertEquals($sExpected, file_get_contents($sTmpFile));
|
||||
}
|
||||
|
||||
public function testConfEvaluationIsTheSameWithPreviousAndCurrentAlgo()
|
||||
{
|
||||
$sFile = 'config-without-comments.php';
|
||||
$this->ConfEvaluationIsTheSameWithPreviousAndCurrentAlgo($sFile, $sFile);
|
||||
}
|
||||
|
||||
public function testConfEvaluationIsTheSameWithPreviousAndCurrentAlgoEvenWithCommentsInMopduleSettings()
|
||||
{
|
||||
$this->ConfEvaluationIsTheSameWithPreviousAndCurrentAlgo('config-without-comments.php', 'config-with-comments-afterevaluatonwithoutcomments.php');
|
||||
}
|
||||
|
||||
public function testConfSavePreserveCommentsInModuleSettings()
|
||||
{
|
||||
$sTmpFile = $this->GetTemporaryFilePath();
|
||||
$sConfigFile = __DIR__.'/ConfigTest/config-with-comments.php';
|
||||
$oConfig = new Config($sConfigFile, true, true);
|
||||
$oConfig->WriteToFile($sTmpFile);
|
||||
|
||||
$sExpected = file_get_contents($sConfigFile);
|
||||
$sExpected = preg_replace('|\?\>\n|', '?>', $sExpected);
|
||||
$sExpected = preg_replace('|.*COMMENT NOT PRESERVED HERE.*|', '', $sExpected);
|
||||
|
||||
$this->assertEquals($sExpected, file_get_contents($sTmpFile));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,272 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Configuration file, generated by the iTop configuration wizard
|
||||
*
|
||||
* The file is used in MetaModel::LoadConfig() which does all the necessary initialization job
|
||||
*
|
||||
*/
|
||||
$MySettings = array(
|
||||
|
||||
// access_message: Message displayed to the users when there is any access restriction
|
||||
// default: 'iTop is temporarily frozen, please wait... (the admin team)'
|
||||
'access_message' => 'iTop is temporarily frozen, please wait... (the admin team)',
|
||||
|
||||
// access_mode: Access mode: ACCESS_READONLY = 0, ACCESS_ADMIN_WRITE = 2, ACCESS_FULL = 3
|
||||
// default: 3
|
||||
'access_mode' => 3,
|
||||
|
||||
// activity_panel.entry_form_opened_by_default: Whether or not the new entry form will be automatically opened when viewing an object.
|
||||
// default: false
|
||||
'activity_panel.entry_form_opened_by_default' => false,
|
||||
|
||||
// activity_panel.show_author_name_below_entries: Whether or not to show the author friendlyname next to the date on the last entry.
|
||||
// default: false
|
||||
'activity_panel.show_author_name_below_entries' => false,
|
||||
|
||||
// allowed_login_types: List of login types allowed (separated by | ): form, external, basic, token
|
||||
// default: 'form|external|basic|token'
|
||||
'allowed_login_types' => 'form|external|basic|token',
|
||||
|
||||
// apc_cache.enabled: If set, the APC cache is allowed (the PHP extension must also be active)
|
||||
// default: true
|
||||
'apc_cache.enabled' => true,
|
||||
|
||||
// apc_cache.query_ttl: Time to live set in APC for the prepared queries (seconds - 0 means no timeout)
|
||||
// default: 3600
|
||||
'apc_cache.query_ttl' => 3600,
|
||||
|
||||
// app_root_url: Root URL used for navigating within the application, or from an email to the application (you can put $SERVER_NAME$ as a placeholder for the server's name)
|
||||
// default: ''
|
||||
'app_root_url' => '',
|
||||
|
||||
// behind_reverse_proxy: If true, then proxies custom header (X-Forwarded-*) are taken into account. Use only if the webserver is not publicly accessible (reachable only by the reverse proxy)
|
||||
// default: false
|
||||
'behind_reverse_proxy' => false,
|
||||
|
||||
// cron_max_execution_time: Duration (seconds) of the cron.php script : if exceeded the script will exit even if there are remaining tasks to process. Must be shorter than php max_execution_time setting (note than when using CLI, this is set to 0 by default which means unlimited). If cron.php is ran via web, it must be shorter than the web server response timeout.
|
||||
// default: 600
|
||||
'cron_max_execution_time' => 600,
|
||||
|
||||
// csv_file_default_charset: Character set used by default for downloading and uploading data as a CSV file. Warning: it is case sensitive (uppercase is preferable).
|
||||
// default: 'ISO-8859-1'
|
||||
'csv_file_default_charset' => 'ISO-8859-1',
|
||||
|
||||
'csv_import_charsets' => array (
|
||||
),
|
||||
|
||||
// csv_import_history_display: Display the history tab in the import wizard
|
||||
// default: false
|
||||
'csv_import_history_display' => false,
|
||||
|
||||
// date_and_time_format: Format for date and time display (per language)
|
||||
// default: array (
|
||||
// 'default' =>
|
||||
// array (
|
||||
// 'date' => 'Y-m-d',
|
||||
// 'time' => 'H:i:s',
|
||||
// 'date_time' => '$date $time',
|
||||
// ),
|
||||
// )
|
||||
'date_and_time_format' => ['default' => ['date' => 'Y-m-d', 'time' => 'H:i:s', 'date_time' => '$date $time']],
|
||||
|
||||
'db_host' => null,
|
||||
|
||||
'db_name' => null,
|
||||
|
||||
'db_pwd' => null,
|
||||
|
||||
'db_subname' => null,
|
||||
|
||||
'db_user' => null,
|
||||
|
||||
// deadline_format: The format used for displaying "deadline" attributes: any string with the following placeholders: $date$, $difference$
|
||||
// default: '$difference$'
|
||||
'deadline_format' => '$difference$',
|
||||
|
||||
'default_language' => 'EN US',
|
||||
|
||||
// email_asynchronous: If set, the emails are sent off line, which requires cron.php to be activated. Exception: some features like the email test utility will force the serialized mode
|
||||
// default: false
|
||||
'email_asynchronous' => false,
|
||||
|
||||
// email_default_sender_address: Default address provided in the email from header field.
|
||||
// default: ''
|
||||
'email_default_sender_address' => '',
|
||||
|
||||
// email_default_sender_label: Default label provided in the email from header field.
|
||||
// default: ''
|
||||
'email_default_sender_label' => '',
|
||||
|
||||
// email_transport: Mean to send emails: PHPMail (uses the function mail()), SMTP (implements the client protocol) or SMTP_OAuth (connect to the server using OAuth 2.0)
|
||||
// default: 'PHPMail'
|
||||
'email_transport' => 'PHPMail',
|
||||
|
||||
// email_validation_pattern: Regular expression to validate/detect the format of an eMail address
|
||||
// default: '[a-zA-Z0-9._&\'-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z0-9-]{2,}'
|
||||
'email_validation_pattern' => '[a-zA-Z0-9._&\'-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,}',
|
||||
|
||||
'encryption_key' => 'af1615adfaa712f0efa19e4d8c14ecb4a1d6d0cdecb3f9e611d3b6f2109c5469',
|
||||
|
||||
'encryption_library' => 'Sodium',
|
||||
|
||||
'fast_reload_interval' => '60',
|
||||
|
||||
// graphviz_path: Path to the Graphviz "dot" executable for graphing objects lifecycle
|
||||
// default: '/usr/bin/dot'
|
||||
'graphviz_path' => '/usr/bin/dot',
|
||||
|
||||
// high_cardinality_classes: List of classes with high cardinality (Force manual submit of search)
|
||||
// default: array (
|
||||
// )
|
||||
'high_cardinality_classes' => [],
|
||||
|
||||
// inline_image_max_display_width: The maximum width (in pixels) when displaying images inside an HTML formatted attribute. Images will be displayed using this this maximum width.
|
||||
// default: '250'
|
||||
'inline_image_max_display_width' => '250',
|
||||
|
||||
// inline_image_max_storage_width: The maximum width (in pixels) when uploading images to be used inside an HTML formatted attribute. Images larger than the given size will be downsampled before storing them in the database.
|
||||
// default: '1600'
|
||||
'inline_image_max_storage_width' => '1600',
|
||||
|
||||
// lifecycle.transitions_sort_type: How transitions will be sorted in the GUI. Possible values are "xml", "alphabetical", "fixed" or "relative"
|
||||
// default: 'relative'
|
||||
'lifecycle.transitions_sort_type' => 'relative',
|
||||
|
||||
// link_set_attribute_qualifier: Link set from string: attribute qualifier (encloses both the attcode and the value)
|
||||
// default: '\''
|
||||
'link_set_attribute_qualifier' => '\'',
|
||||
|
||||
// link_set_attribute_separator: Link set from string: attribute separator
|
||||
// default: ';'
|
||||
'link_set_attribute_separator' => ';',
|
||||
|
||||
// link_set_item_separator: Link set from string: line separator
|
||||
// default: '|'
|
||||
'link_set_item_separator' => '|',
|
||||
|
||||
// link_set_max_edit_ext_key: Maximum number of items in the link that allow editing the remote external key. Above that limit, remote external key cannot be edited. Mind that setting this limit too high can have a negative impact on performances.
|
||||
// default: 50
|
||||
'link_set_max_edit_ext_key' => 50,
|
||||
|
||||
// link_set_value_separator: Link set from string: value separator (between the attcode and the value itself
|
||||
// default: ':'
|
||||
'link_set_value_separator' => ':',
|
||||
|
||||
'log_global' => true,
|
||||
|
||||
'log_issue' => true,
|
||||
|
||||
'log_notification' => true,
|
||||
|
||||
'log_web_service' => true,
|
||||
|
||||
'max_display_limit' => '30',
|
||||
|
||||
// max_linkset_output: Maximum number of items shown when getting a list of related items in an email, using the form $this->some_list$. 0 means no limit.
|
||||
// default: 100
|
||||
'max_linkset_output' => 100,
|
||||
|
||||
// mentions.allowed_classes: Classes which can be mentioned through the autocomplete in the caselogs. Key of the array must be a single character that will trigger the autocomplete, value must be a DM class (eg. "@" => "Person", "?" => "FAQ")
|
||||
// default: array (
|
||||
// '@' => 'Person',
|
||||
// )
|
||||
'mentions.allowed_classes' => ['@' => 'Person'],
|
||||
|
||||
'min_display_limit' => '20',
|
||||
|
||||
// online_help: Hyperlink to the online-help web page
|
||||
// default: 'http://www.combodo.com/itop-help'
|
||||
'online_help' => 'http://www.combodo.com/itop-help',
|
||||
|
||||
// optimize_requests_for_join_count: Optimize request joins to minimize the count (default is true, try to set it to false in case of performance issues)
|
||||
// default: true
|
||||
'optimize_requests_for_join_count' => true,
|
||||
|
||||
'password_hash_algo' => '2y',
|
||||
|
||||
// php_path: Path to the php executable in CLI mode
|
||||
// default: 'php'
|
||||
'php_path' => 'php',
|
||||
|
||||
// search_manual_submit: Force manual submit of search all requests
|
||||
// default: false
|
||||
'search_manual_submit' => false,
|
||||
|
||||
'secure_connection_required' => false,
|
||||
|
||||
// session_name: The name of the cookie used to store the PHP session id
|
||||
// default: 'iTop'
|
||||
'session_name' => 'iTop',
|
||||
|
||||
// shortcut_actions: Actions that are available as direct buttons next to the "Actions" menu
|
||||
// default: 'UI:Menu:Modify,UI:Menu:New,UI:Menu:impacts_down,UI:Menu:impacts_up'
|
||||
'shortcut_actions' => 'UI:Menu:Modify,UI:Menu:New,UI:Menu:impacts_down,UI:Menu:impacts_up',
|
||||
|
||||
// source_dir: Source directory for the datamodel files. (which gets compiled to env-production).
|
||||
// default: ''
|
||||
'source_dir' => '',
|
||||
|
||||
'standard_reload_interval' => '300',
|
||||
|
||||
// synchro_obsolete_replica_locks_object: Obsolete synchro replicas prevent object modification by any mean (eg. anonymization)
|
||||
// default: true
|
||||
'synchro_obsolete_replica_locks_object' => true,
|
||||
|
||||
// synchro_trace: Synchronization details: none, display, save (includes 'display')
|
||||
// default: 'none'
|
||||
'synchro_trace' => 'none',
|
||||
|
||||
// tag_set_item_separator: Tag set from string: tag label separator
|
||||
// default: '|'
|
||||
'tag_set_item_separator' => '|',
|
||||
|
||||
// timezone: Timezone (reference: http://php.net/manual/en/timezones.php). If empty, it will be left unchanged and MUST be explicitly configured in PHP
|
||||
// default: 'Europe/Paris'
|
||||
'timezone' => 'Europe/Paris',
|
||||
|
||||
// url_validation_pattern: Regular expression to validate/detect the format of an URL (URL attributes and Wiki formatting for Text attributes)
|
||||
// default: '(https?|ftp)\\://([a-zA-Z0-9+!*(),;?&=\\$_.-]+(\\:[a-zA-Z0-9+!*(),;?&=\\$_.-]+)?@)?([a-zA-Z0-9-.]{3,})(\\:[0-9]{2,5})?(/([a-zA-Z0-9:%@+\\$_-]\\.?)+)*/?(\\?[a-zA-Z+&\\$_.-][a-zA-Z0-9;:[\\]@&%=+/\\$_.,-]*)?(#[a-zA-Z0-9_.-][a-zA-Z0-9+\\$_.-]*)?'
|
||||
'url_validation_pattern' => '(https?|ftp)\://([a-zA-Z0-9+!*(),;?&=\$_.-]+(\:[a-zA-Z0-9+!*(),;?&=\$_.-]+)?@)?([a-zA-Z0-9-.]{3,})(\:[0-9]{2,5})?(/([a-zA-Z0-9:%@+\$_-]\.?)+)*/?(\?[a-zA-Z+&\$_.-][a-zA-Z0-9;:[\]@&%=+/\$_.,-]*)?(#[a-zA-Z0-9_.-][a-zA-Z0-9+\$_.-]*)?',
|
||||
);
|
||||
|
||||
/**
|
||||
*
|
||||
* Modules specific settings
|
||||
*
|
||||
*/
|
||||
$MyModuleSettings = array(
|
||||
'combodo-hybridauth' => array (
|
||||
//debug to add traces...
|
||||
'debug' => false,
|
||||
'providers' => array (
|
||||
'Keycloak' =>
|
||||
/* COMMENT NOT PRESERVED HERE*/
|
||||
array (
|
||||
'keys' =>
|
||||
array (
|
||||
/**
|
||||
* sha
|
||||
*
|
||||
* dok
|
||||
*/
|
||||
'id' => 'my-clientid',
|
||||
'secret' => 'my-secret',
|
||||
),
|
||||
'enabled' => false,
|
||||
),
|
||||
//url to access IdP
|
||||
'url' => 'keycloak_url',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
*
|
||||
* Data model modules to be loaded. Names are specified as relative paths
|
||||
*
|
||||
*/
|
||||
$MyModules = array(
|
||||
);
|
||||
?>
|
||||
@@ -0,0 +1,272 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Configuration file, generated by the iTop configuration wizard
|
||||
*
|
||||
* The file is used in MetaModel::LoadConfig() which does all the necessary initialization job
|
||||
*
|
||||
*/
|
||||
$MySettings = array(
|
||||
|
||||
// access_message: Message displayed to the users when there is any access restriction
|
||||
// default: 'iTop is temporarily frozen, please wait... (the admin team)'
|
||||
'access_message' => 'iTop is temporarily frozen, please wait... (the admin team)',
|
||||
|
||||
// access_mode: Access mode: ACCESS_READONLY = 0, ACCESS_ADMIN_WRITE = 2, ACCESS_FULL = 3
|
||||
// default: 3
|
||||
'access_mode' => 3,
|
||||
|
||||
// activity_panel.entry_form_opened_by_default: Whether or not the new entry form will be automatically opened when viewing an object.
|
||||
// default: false
|
||||
'activity_panel.entry_form_opened_by_default' => false,
|
||||
|
||||
// activity_panel.show_author_name_below_entries: Whether or not to show the author friendlyname next to the date on the last entry.
|
||||
// default: false
|
||||
'activity_panel.show_author_name_below_entries' => false,
|
||||
|
||||
// allowed_login_types: List of login types allowed (separated by | ): form, external, basic, token
|
||||
// default: 'form|external|basic|token'
|
||||
'allowed_login_types' => 'form|external|basic|token',
|
||||
|
||||
// apc_cache.enabled: If set, the APC cache is allowed (the PHP extension must also be active)
|
||||
// default: true
|
||||
'apc_cache.enabled' => true,
|
||||
|
||||
// apc_cache.query_ttl: Time to live set in APC for the prepared queries (seconds - 0 means no timeout)
|
||||
// default: 3600
|
||||
'apc_cache.query_ttl' => 3600,
|
||||
|
||||
// app_root_url: Root URL used for navigating within the application, or from an email to the application (you can put $SERVER_NAME$ as a placeholder for the server's name)
|
||||
// default: ''
|
||||
'app_root_url' => '',
|
||||
|
||||
// behind_reverse_proxy: If true, then proxies custom header (X-Forwarded-*) are taken into account. Use only if the webserver is not publicly accessible (reachable only by the reverse proxy)
|
||||
// default: false
|
||||
'behind_reverse_proxy' => false,
|
||||
|
||||
// cron_max_execution_time: Duration (seconds) of the cron.php script : if exceeded the script will exit even if there are remaining tasks to process. Must be shorter than php max_execution_time setting (note than when using CLI, this is set to 0 by default which means unlimited). If cron.php is ran via web, it must be shorter than the web server response timeout.
|
||||
// default: 600
|
||||
'cron_max_execution_time' => 600,
|
||||
|
||||
// csv_file_default_charset: Character set used by default for downloading and uploading data as a CSV file. Warning: it is case sensitive (uppercase is preferable).
|
||||
// default: 'ISO-8859-1'
|
||||
'csv_file_default_charset' => 'ISO-8859-1',
|
||||
|
||||
'csv_import_charsets' => array (
|
||||
),
|
||||
|
||||
// csv_import_history_display: Display the history tab in the import wizard
|
||||
// default: false
|
||||
'csv_import_history_display' => false,
|
||||
|
||||
// date_and_time_format: Format for date and time display (per language)
|
||||
// default: array (
|
||||
// 'default' =>
|
||||
// array (
|
||||
// 'date' => 'Y-m-d',
|
||||
// 'time' => 'H:i:s',
|
||||
// 'date_time' => '$date $time',
|
||||
// ),
|
||||
// )
|
||||
'date_and_time_format' => ['default' => ['date' => 'Y-m-d', 'time' => 'H:i:s', 'date_time' => '$date $time']],
|
||||
|
||||
'db_host' => null,
|
||||
|
||||
'db_name' => null,
|
||||
|
||||
'db_pwd' => null,
|
||||
|
||||
'db_subname' => null,
|
||||
|
||||
'db_user' => null,
|
||||
|
||||
// deadline_format: The format used for displaying "deadline" attributes: any string with the following placeholders: $date$, $difference$
|
||||
// default: '$difference$'
|
||||
'deadline_format' => '$difference$',
|
||||
|
||||
'default_language' => 'EN US',
|
||||
|
||||
// email_asynchronous: If set, the emails are sent off line, which requires cron.php to be activated. Exception: some features like the email test utility will force the serialized mode
|
||||
// default: false
|
||||
'email_asynchronous' => false,
|
||||
|
||||
// email_default_sender_address: Default address provided in the email from header field.
|
||||
// default: ''
|
||||
'email_default_sender_address' => '',
|
||||
|
||||
// email_default_sender_label: Default label provided in the email from header field.
|
||||
// default: ''
|
||||
'email_default_sender_label' => '',
|
||||
|
||||
// email_transport: Mean to send emails: PHPMail (uses the function mail()), SMTP (implements the client protocol) or SMTP_OAuth (connect to the server using OAuth 2.0)
|
||||
// default: 'PHPMail'
|
||||
'email_transport' => 'PHPMail',
|
||||
|
||||
// email_validation_pattern: Regular expression to validate/detect the format of an eMail address
|
||||
// default: '[a-zA-Z0-9._&\'-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z0-9-]{2,}'
|
||||
'email_validation_pattern' => '[a-zA-Z0-9._&\'-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,}',
|
||||
|
||||
'encryption_key' => 'af1615adfaa712f0efa19e4d8c14ecb4a1d6d0cdecb3f9e611d3b6f2109c5469',
|
||||
|
||||
'encryption_library' => 'Sodium',
|
||||
|
||||
'fast_reload_interval' => '60',
|
||||
|
||||
// graphviz_path: Path to the Graphviz "dot" executable for graphing objects lifecycle
|
||||
// default: '/usr/bin/dot'
|
||||
'graphviz_path' => '/usr/bin/dot',
|
||||
|
||||
// high_cardinality_classes: List of classes with high cardinality (Force manual submit of search)
|
||||
// default: array (
|
||||
// )
|
||||
'high_cardinality_classes' => [],
|
||||
|
||||
// inline_image_max_display_width: The maximum width (in pixels) when displaying images inside an HTML formatted attribute. Images will be displayed using this this maximum width.
|
||||
// default: '250'
|
||||
'inline_image_max_display_width' => '250',
|
||||
|
||||
// inline_image_max_storage_width: The maximum width (in pixels) when uploading images to be used inside an HTML formatted attribute. Images larger than the given size will be downsampled before storing them in the database.
|
||||
// default: '1600'
|
||||
'inline_image_max_storage_width' => '1600',
|
||||
|
||||
// lifecycle.transitions_sort_type: How transitions will be sorted in the GUI. Possible values are "xml", "alphabetical", "fixed" or "relative"
|
||||
// default: 'relative'
|
||||
'lifecycle.transitions_sort_type' => 'relative',
|
||||
|
||||
// link_set_attribute_qualifier: Link set from string: attribute qualifier (encloses both the attcode and the value)
|
||||
// default: '\''
|
||||
'link_set_attribute_qualifier' => '\'',
|
||||
|
||||
// link_set_attribute_separator: Link set from string: attribute separator
|
||||
// default: ';'
|
||||
'link_set_attribute_separator' => ';',
|
||||
|
||||
// link_set_item_separator: Link set from string: line separator
|
||||
// default: '|'
|
||||
'link_set_item_separator' => '|',
|
||||
|
||||
// link_set_max_edit_ext_key: Maximum number of items in the link that allow editing the remote external key. Above that limit, remote external key cannot be edited. Mind that setting this limit too high can have a negative impact on performances.
|
||||
// default: 50
|
||||
'link_set_max_edit_ext_key' => 50,
|
||||
|
||||
// link_set_value_separator: Link set from string: value separator (between the attcode and the value itself
|
||||
// default: ':'
|
||||
'link_set_value_separator' => ':',
|
||||
|
||||
'log_global' => true,
|
||||
|
||||
'log_issue' => true,
|
||||
|
||||
'log_notification' => true,
|
||||
|
||||
'log_web_service' => true,
|
||||
|
||||
'max_display_limit' => '30',
|
||||
|
||||
// max_linkset_output: Maximum number of items shown when getting a list of related items in an email, using the form $this->some_list$. 0 means no limit.
|
||||
// default: 100
|
||||
'max_linkset_output' => 100,
|
||||
|
||||
// mentions.allowed_classes: Classes which can be mentioned through the autocomplete in the caselogs. Key of the array must be a single character that will trigger the autocomplete, value must be a DM class (eg. "@" => "Person", "?" => "FAQ")
|
||||
// default: array (
|
||||
// '@' => 'Person',
|
||||
// )
|
||||
'mentions.allowed_classes' => ['@' => 'Person'],
|
||||
|
||||
'min_display_limit' => '20',
|
||||
|
||||
// online_help: Hyperlink to the online-help web page
|
||||
// default: 'http://www.combodo.com/itop-help'
|
||||
'online_help' => 'http://www.combodo.com/itop-help',
|
||||
|
||||
// optimize_requests_for_join_count: Optimize request joins to minimize the count (default is true, try to set it to false in case of performance issues)
|
||||
// default: true
|
||||
'optimize_requests_for_join_count' => true,
|
||||
|
||||
'password_hash_algo' => '2y',
|
||||
|
||||
// php_path: Path to the php executable in CLI mode
|
||||
// default: 'php'
|
||||
'php_path' => 'php',
|
||||
|
||||
// search_manual_submit: Force manual submit of search all requests
|
||||
// default: false
|
||||
'search_manual_submit' => false,
|
||||
|
||||
'secure_connection_required' => false,
|
||||
|
||||
// session_name: The name of the cookie used to store the PHP session id
|
||||
// default: 'iTop'
|
||||
'session_name' => 'iTop',
|
||||
|
||||
// shortcut_actions: Actions that are available as direct buttons next to the "Actions" menu
|
||||
// default: 'UI:Menu:Modify,UI:Menu:New,UI:Menu:impacts_down,UI:Menu:impacts_up'
|
||||
'shortcut_actions' => 'UI:Menu:Modify,UI:Menu:New,UI:Menu:impacts_down,UI:Menu:impacts_up',
|
||||
|
||||
// source_dir: Source directory for the datamodel files. (which gets compiled to env-production).
|
||||
// default: ''
|
||||
'source_dir' => '',
|
||||
|
||||
'standard_reload_interval' => '300',
|
||||
|
||||
// synchro_obsolete_replica_locks_object: Obsolete synchro replicas prevent object modification by any mean (eg. anonymization)
|
||||
// default: true
|
||||
'synchro_obsolete_replica_locks_object' => true,
|
||||
|
||||
// synchro_trace: Synchronization details: none, display, save (includes 'display')
|
||||
// default: 'none'
|
||||
'synchro_trace' => 'none',
|
||||
|
||||
// tag_set_item_separator: Tag set from string: tag label separator
|
||||
// default: '|'
|
||||
'tag_set_item_separator' => '|',
|
||||
|
||||
// timezone: Timezone (reference: http://php.net/manual/en/timezones.php). If empty, it will be left unchanged and MUST be explicitly configured in PHP
|
||||
// default: 'Europe/Paris'
|
||||
'timezone' => 'Europe/Paris',
|
||||
|
||||
// url_validation_pattern: Regular expression to validate/detect the format of an URL (URL attributes and Wiki formatting for Text attributes)
|
||||
// default: '(https?|ftp)\\://([a-zA-Z0-9+!*(),;?&=\\$_.-]+(\\:[a-zA-Z0-9+!*(),;?&=\\$_.-]+)?@)?([a-zA-Z0-9-.]{3,})(\\:[0-9]{2,5})?(/([a-zA-Z0-9:%@+\\$_-]\\.?)+)*/?(\\?[a-zA-Z+&\\$_.-][a-zA-Z0-9;:[\\]@&%=+/\\$_.,-]*)?(#[a-zA-Z0-9_.-][a-zA-Z0-9+\\$_.-]*)?'
|
||||
'url_validation_pattern' => '(https?|ftp)\://([a-zA-Z0-9+!*(),;?&=\$_.-]+(\:[a-zA-Z0-9+!*(),;?&=\$_.-]+)?@)?([a-zA-Z0-9-.]{3,})(\:[0-9]{2,5})?(/([a-zA-Z0-9:%@+\$_-]\.?)+)*/?(\?[a-zA-Z+&\$_.-][a-zA-Z0-9;:[\]@&%=+/\$_.,-]*)?(#[a-zA-Z0-9_.-][a-zA-Z0-9+\$_.-]*)?',
|
||||
);
|
||||
|
||||
/**
|
||||
*
|
||||
* Modules specific settings
|
||||
*
|
||||
*/
|
||||
$MyModuleSettings = array(
|
||||
'combodo-hybridauth' => array (
|
||||
//debug to add traces...
|
||||
'debug' => false,
|
||||
'providers' => array (
|
||||
'Keycloak' =>
|
||||
/* COMMENT NOT PRESERVED HERE*/
|
||||
array (
|
||||
'keys' =>
|
||||
array (
|
||||
/**
|
||||
* sha
|
||||
*
|
||||
* dok
|
||||
*/
|
||||
'id' => 'my-clientid',
|
||||
'secret' => 'my-secret',
|
||||
),
|
||||
'enabled' => false,
|
||||
),
|
||||
//url to access IdP
|
||||
'url' => 'keycloak_url',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
*
|
||||
* Data model modules to be loaded. Names are specified as relative paths
|
||||
*
|
||||
*/
|
||||
$MyModules = array(
|
||||
);
|
||||
?>
|
||||
@@ -0,0 +1,292 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
* Configuration file, generated by the iTop configuration wizard
|
||||
*
|
||||
* The file is used in MetaModel::LoadConfig() which does all the necessary initialization job
|
||||
*
|
||||
*/
|
||||
$MySettings = array(
|
||||
|
||||
// access_message: Message displayed to the users when there is any access restriction
|
||||
// default: 'iTop is temporarily frozen, please wait... (the admin team)'
|
||||
'access_message' => 'iTop is temporarily frozen, please wait... (the admin team)',
|
||||
|
||||
// access_mode: Access mode: ACCESS_READONLY = 0, ACCESS_ADMIN_WRITE = 2, ACCESS_FULL = 3
|
||||
// default: 3
|
||||
'access_mode' => 3,
|
||||
|
||||
// activity_panel.entry_form_opened_by_default: Whether or not the new entry form will be automatically opened when viewing an object.
|
||||
// default: false
|
||||
'activity_panel.entry_form_opened_by_default' => false,
|
||||
|
||||
// activity_panel.show_author_name_below_entries: Whether or not to show the author friendlyname next to the date on the last entry.
|
||||
// default: false
|
||||
'activity_panel.show_author_name_below_entries' => false,
|
||||
|
||||
// allowed_login_types: List of login types allowed (separated by | ): form, external, basic, token
|
||||
// default: 'form|external|basic|token'
|
||||
'allowed_login_types' => 'form|external|basic|token',
|
||||
|
||||
// apc_cache.enabled: If set, the APC cache is allowed (the PHP extension must also be active)
|
||||
// default: true
|
||||
'apc_cache.enabled' => true,
|
||||
|
||||
// apc_cache.query_ttl: Time to live set in APC for the prepared queries (seconds - 0 means no timeout)
|
||||
// default: 3600
|
||||
'apc_cache.query_ttl' => 3600,
|
||||
|
||||
// app_env_label: Label displayed to describe the current application environment, defaults to the environment name (e.g. "production")
|
||||
// default: ''
|
||||
'app_env_label' => 'production (built on 2026-06-05)',
|
||||
|
||||
// app_root_url: Root URL used for navigating within the application, or from an email to the application (you can put $SERVER_NAME$ as a placeholder for the server's name)
|
||||
// default: ''
|
||||
'app_root_url' => 'https://app_root_url/iTop/',
|
||||
|
||||
// behind_reverse_proxy: If true, then proxies custom header (X-Forwarded-*) are taken into account. Use only if the webserver is not publicly accessible (reachable only by the reverse proxy)
|
||||
// default: false
|
||||
'behind_reverse_proxy' => false,
|
||||
|
||||
// cron_max_execution_time: Duration (seconds) of the cron.php script : if exceeded the script will exit even if there are remaining tasks to process. Must be shorter than php max_execution_time setting (note than when using CLI, this is set to 0 by default which means unlimited). If cron.php is ran via web, it must be shorter than the web server response timeout.
|
||||
// default: 600
|
||||
'cron_max_execution_time' => 600,
|
||||
|
||||
// csv_file_default_charset: Character set used by default for downloading and uploading data as a CSV file. Warning: it is case sensitive (uppercase is preferable).
|
||||
// default: 'ISO-8859-1'
|
||||
'csv_file_default_charset' => 'ISO-8859-1',
|
||||
|
||||
'csv_import_charsets' => array (
|
||||
),
|
||||
|
||||
// csv_import_history_display: Display the history tab in the import wizard
|
||||
// default: false
|
||||
'csv_import_history_display' => false,
|
||||
|
||||
// date_and_time_format: Format for date and time display (per language)
|
||||
// default: array (
|
||||
// 'default' =>
|
||||
// array (
|
||||
// 'date' => 'Y-m-d',
|
||||
// 'time' => 'H:i:s',
|
||||
// 'date_time' => '$date $time',
|
||||
// ),
|
||||
// )
|
||||
'date_and_time_format' => array('default' => array('date' => 'Y-m-d', 'time' => 'H:i:s', 'date_time' => '$date $time')),
|
||||
|
||||
'db_host' => 'localhost',
|
||||
|
||||
'db_name' => 'db_name',
|
||||
|
||||
'db_pwd' => 'db_pwd',
|
||||
|
||||
'db_subname' => '',
|
||||
|
||||
'db_user' => 'db_user',
|
||||
|
||||
// deadline_format: The format used for displaying "deadline" attributes: any string with the following placeholders: $date$, $difference$
|
||||
// default: '$difference$'
|
||||
'deadline_format' => '$difference$',
|
||||
|
||||
'default_language' => 'EN US',
|
||||
|
||||
// email_asynchronous: If set, the emails are sent off line, which requires cron.php to be activated. Exception: some features like the email test utility will force the serialized mode
|
||||
// default: false
|
||||
'email_asynchronous' => false,
|
||||
|
||||
// email_default_sender_address: Default address provided in the email from header field.
|
||||
// default: ''
|
||||
'email_default_sender_address' => '',
|
||||
|
||||
// email_default_sender_label: Default label provided in the email from header field.
|
||||
// default: ''
|
||||
'email_default_sender_label' => '',
|
||||
|
||||
// email_transport: Mean to send emails: PHPMail (uses the function mail()), SMTP (implements the client protocol) or SMTP_OAuth (connect to the server using OAuth 2.0)
|
||||
// default: 'PHPMail'
|
||||
'email_transport' => 'PHPMail',
|
||||
|
||||
// email_validation_pattern: Regular expression to validate/detect the format of an eMail address
|
||||
// default: '[a-zA-Z0-9._&\'-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z0-9-]{2,}'
|
||||
'email_validation_pattern' => '[a-zA-Z0-9._&\'-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,}',
|
||||
|
||||
'encryption_key' => 'a85b',
|
||||
|
||||
'encryption_library' => 'Sodium',
|
||||
|
||||
'fast_reload_interval' => '60',
|
||||
|
||||
// graphviz_path: Path to the Graphviz "dot" executable for graphing objects lifecycle
|
||||
// default: '/usr/bin/dot'
|
||||
'graphviz_path' => '/usr/bin/dot',
|
||||
|
||||
// high_cardinality_classes: List of classes with high cardinality (Force manual submit of search)
|
||||
// default: array (
|
||||
// )
|
||||
'high_cardinality_classes' => array(),
|
||||
|
||||
// inline_image_max_display_width: The maximum width (in pixels) when displaying images inside an HTML formatted attribute. Images will be displayed using this this maximum width.
|
||||
// default: '250'
|
||||
'inline_image_max_display_width' => '250',
|
||||
|
||||
// inline_image_max_storage_width: The maximum width (in pixels) when uploading images to be used inside an HTML formatted attribute. Images larger than the given size will be downsampled before storing them in the database.
|
||||
// default: '1600'
|
||||
'inline_image_max_storage_width' => '1600',
|
||||
|
||||
// lifecycle.transitions_sort_type: How transitions will be sorted in the GUI. Possible values are "xml", "alphabetical", "fixed" or "relative"
|
||||
// default: 'relative'
|
||||
'lifecycle.transitions_sort_type' => 'relative',
|
||||
|
||||
// link_set_attribute_qualifier: Link set from string: attribute qualifier (encloses both the attcode and the value)
|
||||
// default: '\''
|
||||
'link_set_attribute_qualifier' => '\'',
|
||||
|
||||
// link_set_attribute_separator: Link set from string: attribute separator
|
||||
// default: ';'
|
||||
'link_set_attribute_separator' => ';',
|
||||
|
||||
// link_set_item_separator: Link set from string: line separator
|
||||
// default: '|'
|
||||
'link_set_item_separator' => '|',
|
||||
|
||||
// link_set_max_edit_ext_key: Maximum number of items in the link that allow editing the remote external key. Above that limit, remote external key cannot be edited. Mind that setting this limit too high can have a negative impact on performances.
|
||||
// default: 50
|
||||
'link_set_max_edit_ext_key' => 50,
|
||||
|
||||
// link_set_value_separator: Link set from string: value separator (between the attcode and the value itself
|
||||
// default: ':'
|
||||
'link_set_value_separator' => ':',
|
||||
|
||||
'log_global' => true,
|
||||
|
||||
'log_issue' => true,
|
||||
|
||||
'log_notification' => true,
|
||||
|
||||
'log_web_service' => true,
|
||||
|
||||
'max_display_limit' => '30',
|
||||
|
||||
// max_linkset_output: Maximum number of items shown when getting a list of related items in an email, using the form $this->some_list$. 0 means no limit.
|
||||
// default: 100
|
||||
'max_linkset_output' => 100,
|
||||
|
||||
// mentions.allowed_classes: Classes which can be mentioned through the autocomplete in the caselogs. Key of the array must be a single character that will trigger the autocomplete, value must be a DM class (eg. "@" => "Person", "?" => "FAQ")
|
||||
// default: array (
|
||||
// '@' => 'Person',
|
||||
// )
|
||||
'mentions.allowed_classes' => array('@' => 'Person'),
|
||||
|
||||
'min_display_limit' => '20',
|
||||
|
||||
// online_help: Hyperlink to the online-help web page
|
||||
// default: 'http://www.combodo.com/itop-help'
|
||||
'online_help' => 'http://www.combodo.com/itop-help',
|
||||
|
||||
// optimize_requests_for_join_count: Optimize request joins to minimize the count (default is true, try to set it to false in case of performance issues)
|
||||
// default: true
|
||||
'optimize_requests_for_join_count' => true,
|
||||
|
||||
'password_hash_algo' => '2y',
|
||||
|
||||
// php_path: Path to the php executable in CLI mode
|
||||
// default: 'php'
|
||||
'php_path' => 'php',
|
||||
|
||||
// search_manual_submit: Force manual submit of search all requests
|
||||
// default: false
|
||||
'search_manual_submit' => false,
|
||||
|
||||
'secure_connection_required' => false,
|
||||
|
||||
// session_name: The name of the cookie used to store the PHP session id
|
||||
// default: 'iTop'
|
||||
'session_name' => 'iTop',
|
||||
|
||||
// shortcut_actions: Actions that are available as direct buttons next to the "Actions" menu
|
||||
// default: 'UI:Menu:Modify,UI:Menu:New,UI:Menu:impacts_down,UI:Menu:impacts_up'
|
||||
'shortcut_actions' => 'UI:Menu:Modify,UI:Menu:New,UI:Menu:impacts_down,UI:Menu:impacts_up',
|
||||
|
||||
// source_dir: Source directory for the datamodel files. (which gets compiled to env-production).
|
||||
// default: ''
|
||||
'source_dir' => 'datamodels/2.x/',
|
||||
|
||||
'standard_reload_interval' => '300',
|
||||
|
||||
// synchro_obsolete_replica_locks_object: Obsolete synchro replicas prevent object modification by any mean (eg. anonymization)
|
||||
// default: true
|
||||
'synchro_obsolete_replica_locks_object' => true,
|
||||
|
||||
// synchro_trace: Synchronization details: none, display, save (includes 'display')
|
||||
// default: 'none'
|
||||
'synchro_trace' => 'none',
|
||||
|
||||
// tag_set_item_separator: Tag set from string: tag label separator
|
||||
// default: '|'
|
||||
'tag_set_item_separator' => '|',
|
||||
|
||||
// timezone: Timezone (reference: http://php.net/manual/en/timezones.php). If empty, it will be left unchanged and MUST be explicitly configured in PHP
|
||||
// default: 'Europe/Paris'
|
||||
'timezone' => 'Europe/Paris',
|
||||
|
||||
// url_validation_pattern: Regular expression to validate/detect the format of an URL (URL attributes and Wiki formatting for Text attributes)
|
||||
// default: '(https?|ftp)\\://([a-zA-Z0-9+!*(),;?&=\\$_.-]+(\\:[a-zA-Z0-9+!*(),;?&=\\$_.-]+)?@)?([a-zA-Z0-9-.]{3,})(\\:[0-9]{2,5})?(/([a-zA-Z0-9:%@+\\$_-]\\.?)+)*/?(\\?[a-zA-Z+&\\$_.-][a-zA-Z0-9;:[\\]@&%=+/\\$_.,-]*)?(#[a-zA-Z0-9_.-][a-zA-Z0-9+\\$_.-]*)?'
|
||||
'url_validation_pattern' => '(https?|ftp)\://([a-zA-Z0-9+!*(),;?&=\$_.-]+(\:[a-zA-Z0-9+!*(),;?&=\$_.-]+)?@)?([a-zA-Z0-9-.]{3,})(\:[0-9]{2,5})?(/([a-zA-Z0-9:%@+\$_-]\.?)+)*/?(\?[a-zA-Z+&\$_.-][a-zA-Z0-9;:[\]@&%=+/\$_.,-]*)?(#[a-zA-Z0-9_.-][a-zA-Z0-9+\$_.-]*)?',
|
||||
);
|
||||
|
||||
/**
|
||||
*
|
||||
* Modules specific settings
|
||||
*
|
||||
*/
|
||||
$MyModuleSettings = array(
|
||||
'authent-cas' => array (
|
||||
'cas_debug' => false,
|
||||
'cas_host' => '',
|
||||
'cas_port' => '',
|
||||
'cas_context' => '',
|
||||
'cas_version' => '',
|
||||
'service_base_url' => '',
|
||||
),
|
||||
'authent-ldap' => array (
|
||||
'uri' => 'ldap://localhost',
|
||||
'default_user' => '',
|
||||
'default_pwd' => '',
|
||||
'base_dn' => 'dc=yourcompany,dc=com',
|
||||
'user_query' => '(&(uid=%1$s)(inetuserstatus=ACTIVE))',
|
||||
'options' => array (
|
||||
17 => 3,
|
||||
8 => 0,
|
||||
),
|
||||
'start_tls' => false,
|
||||
'debug' => false,
|
||||
'servers' => array (
|
||||
),
|
||||
),
|
||||
'itop-attachments' => array (
|
||||
'allowed_classes' => array (
|
||||
0 => 'Ticket',
|
||||
),
|
||||
'position' => 'relations',
|
||||
'preview_max_width' => 290,
|
||||
'icon_preview_max_size' => 500000,
|
||||
),
|
||||
'itop-backup' => array (
|
||||
'mysql_bindir' => '',
|
||||
'week_days' => 'monday, tuesday, wednesday, thursday, friday',
|
||||
'time' => '23:30',
|
||||
'retention_count' => 5,
|
||||
'enabled' => true,
|
||||
'itop_backup_incident' => '',
|
||||
),
|
||||
);
|
||||
|
||||
/**
|
||||
*
|
||||
* Data model modules to be loaded. Names are specified as relative paths
|
||||
*
|
||||
*/
|
||||
$MyModules = array(
|
||||
);
|
||||
?>
|
||||
Reference in New Issue
Block a user