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
{