About Me · Send mail to the author(s) E-mail · Twitter

At GROSSWEBER we practice what we preach. We offer trainings for modern software technologies like Behavior Driven Development, Clean Code and Git. Our staff is fluent in a variety of languages, including English.

Feed Icon


Open Source Projects


Blogs of friends

Now playing [?]

Error retrieving information from external service.
Page 1 of 1 in the GraffitiCMS category

Introducing Graffiti-UserGroups for Graffiti CMS

Posted in DNUG Leipzig | Graffiti CMS at Tuesday, 06 May 2008 19:22 W. Europe Daylight Time

It's been a while: Sometime last August the SharePoint hosting contract for the .NET User Group Leipzig ran out and since then we basically didn't have an online presence. Our .NET Summercamp 2007 conference and a couple of smaller User Group events took away their share of spare time so I didn't find time to create our new home page. Over the last couple of months I evaluated several Content Management Systems for our to-be-developed homepage and what can I say, I was a bit disappointed. One CMS to remain unnamed showed very buggy behavior when setting up basic navigation elements and DotNetNuke had some scary CSS to override for custom layouts and uses tables all over the place.

Two months ago I came across telligent's Graffiti CMS. Delightful! They really appear to be driven by their "Content Made Simple" concept. Not only do they have a nice Ajax-y administration UI, Graffiti also provides an extremely simple and efficient extensibility model. The NVelocity template engine is also very easy to grasp. (NVelocity is part of my beloved Castle project.)

I started implementing some macros for the User Group events, and soon it became clear that this might be something other User Groups might want to use as well. Thus, the open-source Graffiti-UserGroups project was born.

Basically we wanted to provide a list of recent and archived events with custom metadata and enable attendee registration. Speaking of metadata, this includes:

Event Detail

  • Start and end dates
    • and time, optionally
  • Speaker
  • Location
    • A default location should be set if no location was entered.
  • Maximum number of attendees (due to space limitations)
    • Again, a default maximum should be set if no value was given.
  • Registration recipient e-mail address
    • A default address should be used if no e-mail address was given. We sometimes host events in cooperation with the local Microsoft Student Partners (MSPs) so the address can change for MSP events.

This enables some neat use cases:

  • Registration for one or more events using a web form without needing to write an e-mail.
  • Automatic e-mails to the attendee and the event organizer.
  • The notion of waiting lists for events that are booked up.
  • iCalendar item downloads for Outlook that are created based on the metadata above.

Registration Page

All functionality can be implemented using Graffiti's extensibility points, a plug-in in this case. A plug-in can subscribe to certain events in the application, jump in and modify data (see default values above). Another extensibility point which is heavily used in Graffiti-UserGroups is the notion of custom "Chalk" macros compiled into .NET assemblies. For example, there's a set of macros to display and format event data without the need to write complex "standard" Chalk statements.

An extra bonus for the Graffiti-UserGroups newbie is the Demo Site Setup Wizard which configures your Graffiti site, including sample posts and a registration page. (Also see the video below where I demo the initial setup which is finished in minutes.)

Demo Site Setup Wizard

To make a long story short(er) I've recorded a screencast that shows you how to set up the demo site quickly on your local machine.

Click to watch video

Don't forget to take a look at the new .NET User Group Leipzig homepage to see the macros in action. Also check out the source code on Google Code!

Page 1 of 1 in the GraffitiCMS category