Summer of Code: XForm Criterion and updated CriteriaPack
So, to round off the first week in the Summer of Code series, I figured I’d do a little simple (but quite useful) Criterion for Visitor Groups. This time it’s the XForm Criterion, that will let you check if the current visitor has submitted any of the xforms on the site (in that session).
It’s available together with a few other minor updates in the CriteriaPack Project on Codeplex – and of course also as a separate NuGet package on the EPiServer NuGet feed.
One clever little details I learned while doing this, was how to make dropdownlists in the Visitor Group UI, with dynamically updated contents (like Form names or available roles). It’s really quite easy: just create your own ISelectionFactory and connect it to the Criterions data model like this:
public class XFormModel:CriterionModelBase
{
[Required]
[DojoWidget(SelectionFactoryType = typeof(EnumSelectionFactory),
LabelTranslationKey = "/shell/cms/visitorgroups/criteria/xform/submissionstatus",
AdditionalOptions = "{ selectOnClick: true }")]
public SubmissionStatus SubmissionStatus { get; set; }
[Required]
[DojoWidget(SelectionFactoryType = typeof(FormSelectionFactory),
LabelTranslationKey = "/shell/cms/visitorgroups/criteria/xform/selectedxform",
AdditionalOptions = "{ selectOnClick: true }")]
public string SelectedXForm { get; set; }
public override ICriterionModel Copy()
{
return base.ShallowCopy();
}
}
public class FormSelectionFactory : ISelectionFactory
{
#region ISelectionFactory Members
public IEnumerable<System.Web.Mvc.SelectListItem> GetSelectListItems(Type property)
{
//Return list of forms
return XForm.GetForms().Select(xf => new System.Web.Mvc.SelectListItem() { Text=xf.FormName, Value=xf.Id.ToString() });
}
#endregion
}
public enum SubmissionStatus
{
HasSubmitted,
HasNotSubmitted
}
Nice little series! Keep it up! :-)