diff --git a/datamodels/2.x/itop-backup/datamodel.itop-backup.xml b/datamodels/2.x/itop-backup/datamodel.itop-backup.xml index 8076ad720..c3281411a 100644 --- a/datamodels/2.x/itop-backup/datamodel.itop-backup.xml +++ b/datamodels/2.x/itop-backup/datamodel.itop-backup.xml @@ -5,8 +5,7 @@ 15 AdminTools status.php - ResourceAdminMenu - UR_ACTION_MODIFY + 1 diff --git a/datamodels/2.x/itop-config/config.php b/datamodels/2.x/itop-config/config.php index c16a9db4f..ead77a7ea 100644 --- a/datamodels/2.x/itop-config/config.php +++ b/datamodels/2.x/itop-config/config.php @@ -84,10 +84,10 @@ function CheckDBPasswordInNewConfig($sSafeContent) { $bIsWindows = (array_key_exists('WINDIR', $_SERVER) || array_key_exists('windir', $_SERVER)); - if ($bIsWindows && (preg_match("@'db_pwd' => '[^%']+',@", $sSafeContent) === 0)) + if ($bIsWindows && (preg_match("@'db_pwd' => '[^%!\"]+',@U", $sSafeContent) === 0)) { // Unsupported Password - throw new Exception("Database password should not contain % character (backups won't work)..."); + throw new Exception("On Windows, database password must not contain %, ! or \" character (backups won't work)..."); } } diff --git a/datamodels/2.x/itop-config/datamodel.itop-config.xml b/datamodels/2.x/itop-config/datamodel.itop-config.xml index 28be1062a..98e97b2f1 100644 --- a/datamodels/2.x/itop-config/datamodel.itop-config.xml +++ b/datamodels/2.x/itop-config/datamodel.itop-config.xml @@ -5,8 +5,7 @@ 50 AdminTools config.php - ResourceAdminMenu - UR_ACTION_MODIFY + 1 diff --git a/js/linkswidget.js b/js/linkswidget.js index 775feb6cf..fa2655f86 100644 --- a/js/linkswidget.js +++ b/js/linkswidget.js @@ -44,17 +44,7 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix, bDuplicates, oWizH $('#dlg_'+me.id).remove(); }); - $('#linkedset_'+me.id+' :input').off('change').on('change', function() { - if (!($(this).hasClass('selection')) && !($(this).hasClass('select_all'))) { - var oCheckbox = $(this).closest('tr').find('.selection'); - var iLink = oCheckbox.attr('data-link-id'); - var iUniqueId = oCheckbox.attr('data-unique-id'); - var sAttCode = $(this).closest('.attribute-edit').attr('data-attcode'); - var value = $(this).val(); - return me.OnValueChange(iLink, iUniqueId, sAttCode, value); - } - return true; - }); + me.RegisterChange(); var oInput = $('#'+this.iInputId); oInput.bind('update_value', function() { $(this).val(me.GetUpdatedValue()); }); @@ -348,17 +338,7 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix, bDuplicates, oWizH this.OnLinkAdded = function(iAddedId, iRemote) { this.AddLink(iAddedId, iRemote); - $('#linkedset_'+me.id+' :input').off('change').on('change', function() { - if (!($(this).hasClass('selection'))) { - var oCheckbox = $(this).closest('tr').find('.selection'); - var iLink = oCheckbox.attr('data-link-id'); - var iUniqueId = oCheckbox.attr('data-unique-id'); - var sAttCode = $(this).closest('.attribute-edit').attr('data-attcode'); - var value = $(this).val(); - return me.OnValueChange(iLink, iUniqueId, sAttCode, value); - } - return true; - }); + me.RegisterChange(); }; this.UpdateSizes = function(event, ui) @@ -435,6 +415,22 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix, bDuplicates, oWizH return JSON.stringify(aValues); }; + this.RegisterChange = function() + { + // Listen only used inputs + $('#linkedset_'+me.id+' :input[name^="attr_'+me.sAttCode+'["]').off('change').on('change', function() { + if (!($(this).hasClass('selection'))) { + var oCheckbox = $(this).closest('tr').find('.selection'); + var iLink = oCheckbox.attr('data-link-id'); + var iUniqueId = oCheckbox.attr('data-unique-id'); + var sAttCode = $(this).closest('.attribute-edit').attr('data-attcode'); + var value = $(this).val(); + return me.OnValueChange(iLink, iUniqueId, sAttCode, value); + } + return true; + }); + }; + this.OnValueChange = function(iLink, iUniqueId, sAttCode, value) { var sFormPrefix = me.iInputId; @@ -476,5 +472,8 @@ function LinksWidget(id, sClass, sAttCode, iInputId, sSuffix, bDuplicates, oWizH }); var sToBeCreated = JSON.stringify(aToBeCreated); $('').val(sToBeCreated).appendTo(oDiv); + + // Remove unused inputs + $('#linkedset_'+me.id+' :input[name^="attr_'+me.sAttCode+'["]').prop("disabled", true); }; } diff --git a/setup/setuputils.class.inc.php b/setup/setuputils.class.inc.php index bf019d1da..ab3892245 100644 --- a/setup/setuputils.class.inc.php +++ b/setup/setuputils.class.inc.php @@ -1304,11 +1304,11 @@ EOF $sDBName = $aParameters['db_name']; $bIsWindows = (array_key_exists('WINDIR', $_SERVER) || array_key_exists('windir', $_SERVER)); - if ($bIsWindows && (strpos($sDBPwd, '%') !== false)) + if ($bIsWindows && (preg_match('@([%!"])@',$sDBPwd) > 0)) { // Unsuported Password, disable the "Next" button $oPage->add_ready_script('$("#wiz_form").data("db_connection", "error");'); - $oPage->add_ready_script('$("#db_info").html(" Database password cannot contain % character...");'); + $oPage->add_ready_script('$("#db_info").html(" On Windows, database password must not contain %, ! or " character");'); } else {