Merge pull request #6693 from PerplexDaniel/pr/6691_vary-by-culture-set-unset-culture-flag-only
Properly set / unset Culture flag when "vary by Culture" is changed
This commit is contained in:
@@ -41,5 +41,43 @@ namespace Umbraco.Core
|
||||
|
||||
return (num & nums) > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets a flag of the given input enum
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="input">Enum to set flag of</param>
|
||||
/// <param name="flag">Flag to set</param>
|
||||
/// <returns>A new enum with the flag set</returns>
|
||||
public static T SetFlag<T>(this T input, T flag)
|
||||
where T : Enum
|
||||
{
|
||||
var i = Convert.ToUInt64(input);
|
||||
var f = Convert.ToUInt64(flag);
|
||||
|
||||
// bitwise OR to set flag f of enum i
|
||||
var result = i | f;
|
||||
|
||||
return (T)Enum.ToObject(typeof(T), result);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Unsets a flag of the given input enum
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="input">Enum to unset flag of</param>
|
||||
/// <param name="flag">Flag to unset</param>
|
||||
/// <returns>A new enum with the flag unset</returns>
|
||||
public static T UnsetFlag<T>(this T input, T flag)
|
||||
where T : Enum
|
||||
{
|
||||
var i = Convert.ToUInt64(input);
|
||||
var f = Convert.ToUInt64(flag);
|
||||
|
||||
// bitwise AND combined with bitwise complement to unset flag f of enum i
|
||||
var result = i & ~f;
|
||||
|
||||
return (T)Enum.ToObject(typeof(T), result);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,5 +51,47 @@ namespace Umbraco.Tests.CoreThings
|
||||
else
|
||||
Assert.IsFalse(value.HasFlagAny(test));
|
||||
}
|
||||
|
||||
[TestCase(TreeUse.None, TreeUse.None, TreeUse.None)]
|
||||
[TestCase(TreeUse.None, TreeUse.Main, TreeUse.Main)]
|
||||
[TestCase(TreeUse.None, TreeUse.Dialog, TreeUse.Dialog)]
|
||||
[TestCase(TreeUse.None, TreeUse.Main | TreeUse.Dialog, TreeUse.Main | TreeUse.Dialog)]
|
||||
[TestCase(TreeUse.Main, TreeUse.None, TreeUse.Main)]
|
||||
[TestCase(TreeUse.Main, TreeUse.Main, TreeUse.Main)]
|
||||
[TestCase(TreeUse.Main, TreeUse.Dialog, TreeUse.Main | TreeUse.Dialog)]
|
||||
[TestCase(TreeUse.Main, TreeUse.Main | TreeUse.Dialog, TreeUse.Main | TreeUse.Dialog)]
|
||||
[TestCase(TreeUse.Dialog, TreeUse.None, TreeUse.Dialog)]
|
||||
[TestCase(TreeUse.Dialog, TreeUse.Main, TreeUse.Main | TreeUse.Dialog)]
|
||||
[TestCase(TreeUse.Dialog, TreeUse.Dialog, TreeUse.Dialog)]
|
||||
[TestCase(TreeUse.Dialog, TreeUse.Main | TreeUse.Dialog, TreeUse.Main | TreeUse.Dialog)]
|
||||
[TestCase(TreeUse.Main | TreeUse.Dialog, TreeUse.None, TreeUse.Main | TreeUse.Dialog)]
|
||||
[TestCase(TreeUse.Main | TreeUse.Dialog, TreeUse.Main, TreeUse.Main | TreeUse.Dialog)]
|
||||
[TestCase(TreeUse.Main | TreeUse.Dialog, TreeUse.Dialog, TreeUse.Main | TreeUse.Dialog)]
|
||||
[TestCase(TreeUse.Main | TreeUse.Dialog, TreeUse.Main | TreeUse.Dialog, TreeUse.Main | TreeUse.Dialog)]
|
||||
public void SetFlagTests(TreeUse value, TreeUse flag, TreeUse expected)
|
||||
{
|
||||
Assert.AreEqual(expected, value.SetFlag(flag));
|
||||
}
|
||||
|
||||
[TestCase(TreeUse.None, TreeUse.None, TreeUse.None)]
|
||||
[TestCase(TreeUse.None, TreeUse.Main, TreeUse.None)]
|
||||
[TestCase(TreeUse.None, TreeUse.Dialog, TreeUse.None)]
|
||||
[TestCase(TreeUse.None, TreeUse.Main | TreeUse.Dialog, TreeUse.None)]
|
||||
[TestCase(TreeUse.Main, TreeUse.None, TreeUse.Main)]
|
||||
[TestCase(TreeUse.Main, TreeUse.Main, TreeUse.None)]
|
||||
[TestCase(TreeUse.Main, TreeUse.Dialog, TreeUse.Main)]
|
||||
[TestCase(TreeUse.Main, TreeUse.Main | TreeUse.Dialog, TreeUse.None)]
|
||||
[TestCase(TreeUse.Dialog, TreeUse.None, TreeUse.Dialog)]
|
||||
[TestCase(TreeUse.Dialog, TreeUse.Main, TreeUse.Dialog)]
|
||||
[TestCase(TreeUse.Dialog, TreeUse.Dialog, TreeUse.None)]
|
||||
[TestCase(TreeUse.Dialog, TreeUse.Main | TreeUse.Dialog, TreeUse.None)]
|
||||
[TestCase(TreeUse.Main | TreeUse.Dialog, TreeUse.None, TreeUse.Main | TreeUse.Dialog)]
|
||||
[TestCase(TreeUse.Main | TreeUse.Dialog, TreeUse.Main, TreeUse.Dialog)]
|
||||
[TestCase(TreeUse.Main | TreeUse.Dialog, TreeUse.Dialog, TreeUse.Main)]
|
||||
[TestCase(TreeUse.Main | TreeUse.Dialog, TreeUse.Main | TreeUse.Dialog, TreeUse.None)]
|
||||
public void UnsetFlagTests(TreeUse value, TreeUse flag, TreeUse expected)
|
||||
{
|
||||
Assert.AreEqual(expected, value.UnsetFlag(flag));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -225,8 +225,10 @@ namespace Umbraco.Web.Models.Mapping
|
||||
target.MandatoryMessage = source.Validation.MandatoryMessage;
|
||||
target.ValidationRegExp = source.Validation.Pattern;
|
||||
target.ValidationRegExpMessage = source.Validation.PatternMessage;
|
||||
target.Variations = source.AllowCultureVariant ? ContentVariation.Culture : ContentVariation.Nothing;
|
||||
|
||||
target.Variations = source.AllowCultureVariant
|
||||
? target.Variations.SetFlag(ContentVariation.Culture)
|
||||
: target.Variations.UnsetFlag(ContentVariation.Culture);
|
||||
|
||||
if (source.Id > 0)
|
||||
target.Id = source.Id;
|
||||
|
||||
@@ -397,9 +399,9 @@ namespace Umbraco.Web.Models.Mapping
|
||||
|
||||
if (!(target is IMemberType))
|
||||
{
|
||||
target.Variations = ContentVariation.Nothing;
|
||||
if (source.AllowCultureVariant)
|
||||
target.Variations |= ContentVariation.Culture;
|
||||
target.Variations = source.AllowCultureVariant
|
||||
? target.Variations.SetFlag(ContentVariation.Culture)
|
||||
: target.Variations.UnsetFlag(ContentVariation.Culture);
|
||||
}
|
||||
|
||||
// handle property groups and property types
|
||||
|
||||
Reference in New Issue
Block a user