Allan Thraen
Jul 8, 2011
  5342
(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! :-)

Please login to comment.
Latest blogs
CMS 13: The New Core Element of Your AI-First Optimizely Platform

CMS 13 is out and already brings solid AI-first foundations. With impressive features already shipped and an exciting roadmap ahead, this is the...

Michał Mitas | Apr 11, 2026 |

Deploying to Linux in SaaS (Configured) Commerce

With Optimizely SaaS (Configured) Commere now suporting net8.0 extensions dll, you will need to make a small tweak to how you distribute you...

Mark Hall | Apr 10, 2026 |

Optimizely CMS 13 and the Alloy demo site

The Alloy demo site now runs on Optimizely CMS 13. Here’s a quick guide to getting it up and running locally.

Tomas Hensrud Gulla | Apr 10, 2026 |

A day in the life of an Optimizely OMVP: Getting Up to Speed with Optimizely CMS 13 — A Free Learning Path

If you're working with Optimizely and haven't started exploring CMS 13 yet, now's the time. I've put together a dedicated CMS 13 course within the...

Graham Carr | Apr 10, 2026