Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions src/Umbraco.Infrastructure/Examine/ContentValueSetValidator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,10 @@ public override ValueSetValidationResult Validate(ValueSet valueSet)
return new ValueSetValidationResult(ValueSetValidationStatus.Failed, valueSet);
}

var isFiltered = baseValidate.Status == ValueSetValidationStatus.Filtered;
if (baseValidate.Status == ValueSetValidationStatus.Filtered)
{
return new ValueSetValidationResult(ValueSetValidationStatus.Filtered, valueSet);
}

var filteredValues = valueSet.Values.ToDictionary(x => x.Key, x => x.Value.ToList());
//check for published content
Expand All @@ -134,17 +137,16 @@ public override ValueSetValidationResult Validate(ValueSet valueSet)
{
//so this valueset is for a content that varies by culture, now check for non-published cultures and remove those values
foreach (KeyValuePair<string, IReadOnlyList<object>> publishField in valueSet.Values
.Where(x => x.Key.StartsWith($"{UmbracoExamineFieldNames.PublishedFieldName}_")).ToList())
.Where(x => x.Key.StartsWith($"{UmbracoExamineFieldNames.PublishedFieldName}_")).ToArray())
{
if (publishField.Value.Count <= 0 || !publishField.Value[0].Equals("y"))
{
//this culture is not published, so remove all of these culture values
var cultureSuffix = publishField.Key.Substring(publishField.Key.LastIndexOf('_'));
foreach (KeyValuePair<string, IReadOnlyList<object>> cultureField in valueSet.Values
.Where(x => x.Key.InvariantEndsWith(cultureSuffix)).ToList())
.Where(x => x.Key.InvariantEndsWith(cultureSuffix)).ToArray())
{
filteredValues.Remove(cultureField.Key);
isFiltered = true;
}
}
}
Expand All @@ -167,13 +169,12 @@ public override ValueSetValidationResult Validate(ValueSet valueSet)
return new ValueSetValidationResult(ValueSetValidationStatus.Failed, valueSet);
}

if (pathValues[0].ToString().IsNullOrWhiteSpace())
string? path = pathValues[0].ToString();
if (path.IsNullOrWhiteSpace())
{
return new ValueSetValidationResult(ValueSetValidationStatus.Failed, valueSet);
}

var path = pathValues[0].ToString();

var filteredValueSet = new ValueSet(valueSet.Id, valueSet.Category, valueSet.ItemType, filteredValues.ToDictionary(x => x.Key, x => (IEnumerable<object>)x.Value));
// We need to validate the path of the content based on ParentId, protected content and recycle bin rules.
// We cannot return FAILED here because we need the value set to get into the indexer and then deal with it from there
Expand All @@ -185,7 +186,6 @@ public override ValueSetValidationResult Validate(ValueSet valueSet)
return new ValueSetValidationResult(ValueSetValidationStatus.Filtered, filteredValueSet);
}

return new ValueSetValidationResult(
isFiltered ? ValueSetValidationStatus.Filtered : ValueSetValidationStatus.Valid, filteredValueSet);
return new ValueSetValidationResult(ValueSetValidationStatus.Valid, filteredValueSet);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -416,7 +416,7 @@ public void Published_Only_With_Variants()
Assert.IsTrue(valueSet.Values.ContainsKey("title_es-ES"));

result = validator.Validate(valueSet);
Assert.AreEqual(ValueSetValidationStatus.Filtered, result.Status);
Assert.AreEqual(ValueSetValidationStatus.Valid, result.Status);

Assert.AreEqual(7, result.ValueSet.Values.Count()); // filtered to 7 values (removes es-es values)
Assert.IsFalse(result.ValueSet.Values.ContainsKey($"{UmbracoExamineFieldNames.PublishedFieldName}_es-es"));
Expand Down