Allan Thraen
OMVPCommerce Connect 14 Developer CertificationOpal Tools Certification +1
Jul 8, 2011
visibility 5543
star star star star star
(0 votes)

Summer of Code: XForm Criterion and updated CriteriaPack

image

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
}
Enjoy!
Jul 08, 2011

Comments

Jul 8, 2011 03:18 PM

Nice little series! Keep it up! :-)

error Please login to comment.
Latest blogs
Surviving a Dirty Feed. Part 3: Error Handling and Event Batching

Committing a 250,000-row Optimizely catalog import row by row, returning a per-row failure report, and coalescing catalog events into one per batch.

Stanisław Szołkowski | Oct 16, 2026 |

Building UI Extensions for Optimizely SaaS CMS

Introduction Developers have been extending the functionality of Optimizely PaaS CMS for years using addons built in C# and deployed as NuGet...

Mark Stott | Oct 15, 2026

Cheapskate AI Translator: Because Translation Should Not Require a Second Mortgage

There is a particular kind of software project that begins with a detailed architecture document, a product roadmap, and a carefully assembled...

Linh Doan Cuu | Oct 15, 2026

Computed Fields in CMS 13 Content Contracts with Optimizely Graph

Content Contracts in Optimizely CMS 13 allow different content types to share a common structure when querying Optimizely Graph. But what if the...

Mardy | Oct 14, 2026