CS Nuggets

This blog is for addons, bugs, fixes, and issues pertaining to Community Server.
Replacement for CS and Graffiti

Hey Guys,

I wanted to let everyone know that I have found a replacement for Community Server and Graffiti CMS, so there is absolutely no reason to put up with Telligent anymore.  The product is Sitefinity from Telerik.  It is a full fledged CMS that that should be 100% compatible with any fully compliant ASP.NET application that you have.  You can use it stand-alone, in parallel with any other application, or with an application of your own design.  It has blogs, galleries, forums, and about 50 other features, plus the entire Telerik ASP.NET control suite, all in one product.  I comes in a free community version and a standard version that is $899/domain.

When I saw everything that it can do, I nearly died.  The client that asked me to look into using a CMS, is still salivating at all of its features.  Telerik has some partner programs for Sitefinity, so I may work something out with them for future projects.  If you want more information, take a look at the following links.  I guarantee that you will be impressed:


Take it easy,

P.S.  This may be the end of everything Telligent as far as this site is concerned.

Almost 2 years later, and still no solution in sight for small to mid sized communities...

Telligent has completely failed the small to mid sized communities.  The original promise was for Graffiti CMS to take over this roll, but it is now almost 2 years later and there is still no solution in sight to replace CS 2007 for these communities.  Here is the latest post (4/14/2009) on the subject from Telligent, What is the future of Graffiti?  After reading the comments, I agree that Telligent has completely lost its focus.  In less than a year it appears that they have squandered the $20 million from Intel, just like the failed .COMs of the '90s.

The only viable solution is to make Graffiti CMS an open source project on CodePlex, if it is to survive at all.  However, I seriously doubt that that will ever happen.  In the comments section of What is the future of Graffiti?, Scott Watermasysk states that they discussed releasing it as open source, but decided against it.  Community Server is 100% based on Microsoft's ASP.NET Forums open source project, and we've seen where that has gone.  I still have hopes that Telligent will open its eyes and smell the air, or that Intel will do it for them, but this current policy is doomed to fail.  Been there, done that, no need to repeat it.

.NET Tweeks

The latest .NET Tweeks post is now out and is the first of a multi-part series of Tweeks that developers can use in their everyday development of ASP.NET applications.  This week it covers the PageBase idea and how to integrate it with master pages.  Next week will cover an abstract method of accessing the business tier from a static class as opposed to directly accessing the business tier.

.NET Tweeks

CS2008: This blog is now WIDER!

I haven't been happy with the crappy width that this blog had, but I didn't want to widen the width of the header image and ruin the aspect ratio.  Well, I decided to go ahead and do it anyway.  If I hadn't told you that I had widened the pictures, you'd never know the difference.  When I get a chance I'll take some real pix to use up there, but this is good for now.  Since I rarely get to the mountains down here in Southern California, I may have to rely on Dave Burke for some snowy pix.  Big Smile

P.S. YES, it does snow in California.  Even the high deserts get snow in the Winter.

Posted: Tue, Jun 16 2009 03:44 PM by Will Bosacker | with no comments
Filed under: ,
CS2008: SP2 issues

If you've upgraded to SP2, you may have noticed that some previous issues have resurfaced.  The patch that I wrote to allow the file storage location to relative to the application, and go outside of the application, no longer works as written due to changes to the CSContext object again.  Since my sites won't run without the patch, I did fix that issue.  Here is the patch to make entries like basePath="~/../_filestorage" in your CommunityServer.config or CommunityServer_override.config file work:


Change the following around line 498:

calculatedFileSystemStorageLocation = Globals.ApplicationPath + fileSystemStorageLocation.Substring(1);
calculatedFileSystemStorageLocation = CSContext.Current.PhysicalPath(fileSystemStorageLocation.Substring(1).Replace('/', '\\'));

There appears to be a bug with BBCodes too, but it's not consistant and I don't have the time to waste on looking into it at this time.  If I do fix it, I'll create another post with the fix.

Posted: Tue, Jun 16 2009 01:39 PM by Will Bosacker | with no comments
Filed under: ,
CS 2009 Pricing

Some one forwarded a link to the Community Server 2009: Final Thoughts on Role, Pricing and Adoption article to me today and I nearly fell out of my chair.  Here is a snip from that post:

Community Server Licensing (updated June, 2009):


One Time

Product Code





10 Blogs, 10 Forums, 10 Media Galleries, 5 Groups and unlimited WIKIS




25 Blogs, 25 Forums, 25 Media Galleries, 10 Groups and unlimited WIKIS




50 Blogs, 50 Forums, 50 Media Galleries, 15 Groups and unlimited WIKIS




UNLIMITED Blogs, Forums, Media Galleries, Groups and WIKIS along with the ENT Mail Gateway, ENT RSS Feed Syndication & Job Server

All annual licenses include updates/upgrades and technical support, for the year. The perpetual (one-time) licensing includes first-year support and maintenance; on-going support and maintenance is priced at the standard 20% per annum. Their à-la-cart pricing offers much needed flexibility in fine-tuning the licensing to match your immediate needs, relieving customers of the burden of having to pay for features that will remain dormant for the foreseeable future. Promotional pricing is occasionally available as well;  for instance, a 4-CPU enterprise license was offered at a one-time price of 216K (a 25% discount) if purchased before the end of June (‘09).

CPU-based licensing (…Software Licensing Gets Complicated):

1 physical CPU 1 core = 1 CPU license

1 physical CPU 2 core = 1 CPU license

1 physical CPU 4 core = 2 CPU license

CPU-based licensing can impose a significant penalty on high-volume sites. For instance, deploying the Enterprise edition on a 6-server farm that I’ve previously worked on (5 dual-core duo servers and 1 quad-core duo) would cost 72x2x5+72x4 = $1,008,000 + ~200K/year. In this vein, it’s worth highlighting that hardware can be configured to keep a CPU dormant for licensing purposes, until such time that volume necessitates it.

Many of you might be interested to know that Microsoft's Multicore Processor Licensing practices treats multicore processors as a single CPU and does not charge-by-the-core.  A 3 server MOSS 2007 farm will only cost you $250K + a development investment for your functionality, which I would seriously consider as a better investment.  For the 99% of you who can't afford $250K+ there are several open source products available and 2009 is proving to be a great year for them.  YAF is by far the forum leader now, and their forums are far superior to those of CS.  The BLOG arena is still quite diverse, but some winners are arising.  Check out the following sites for open source projects:

  • CodePlex - Microsoft's open source web site that gives free access to a TFS store.
  • SourceForge - An open source web site for multiple platforms.
  • The Code Project - An open source web site for multiple platforms, primarily Microsoft based.
  • CSharp-Source.Net - This is mainly an index of open source projects.

The bottom line is, do what works best for you and your company.  If spending a million dollars is best for your company, then more power to you.  If it isn't, there are several alternatives that will yield better results in the long term.

Posted: Tue, Jun 16 2009 11:44 AM by Will Bosacker | with no comments
Filed under: ,
CS2008: CFS and the removal of BLOBs from the database. The unbelievable blunder!

Back in June of 2008 I wrote CS2008: CFS: The deal breaker where I talk about why removing all BLOBs from the database was a HUGE mistake, and here is why:

FILESTREAM Storage in SQL Server 2008

By removing BLOBs from the database you open up the problem of orphaned records, disconnected records, and backups being out of sync as the file system backup is now part of the database backup.  The whole design is an obsolete concept and complete mess.  In the past, BLOBs could be very taxing on the database and cause bottlenecks if not designed properly.  Microsoft knew this and had been working on the issues since SQL 7.  The major changes to the core design of SQL Server 2008 are what makes FILESTREAMs possible and addresses the last two issues that  BLOB database storage exhibited, size and performance.

FILESTREAMs were announced over 2 years ago, so I have no idea why Telligent removed BLOBs from the database, but their removal has created the biggest problem that I have seen in years.  Almost every client that I have worked with is wondering why their Avatars seem to get deleted, why their pictures are showing red X's, and why their media keeps disappearing.  It's because they are not preserving the ~/filestorage/ folders, which now contain the ONLY copy of these files, when they rollout updates to the site.  If you make any change that affects the ~/filestorage/ folders, or the files it contains, you are actually making changes to your database as the file system IS NOW your database for all BLOBs.

Prior to CS2008, you had the option of storing BLOBs in the database and/or on the file system.  Anyone who new anything about databases and application administration would setup CS to use both.  The database gives you referential integrity and an easy backup solution, while file system storage (cache) gives you great performance.  FILESTREAMs give you the referential integrity of the database and the speed of a file system storage.  It would have been more inTelligent to deploy CFS without removing BLOBs from the database and to provide an update for those that move to SQL Server 2008 that makes full use of FILESTREAMs, but I guess that was too inTelligent of an idea.

I've heard that Telligent is working on a new CFS module for Enterprise clients only.  It sounded like it may be making use of FILESTREAMs, and that Enterprise clients may again have the option of storing BLOBs in the database.  I tried to get more information at the time, but the information that I was given is very unclear.

On a good note, Dave Burke is working hard on Sueetie to consolidate the "Console" to give admins a better UI experience.  Be on the watch out for BeHeard.com.  We are currently in the design phase with the client, and it will be based on Sueetie.  I'll post more about teh project on my personal blog as the project progresses.

Posted: Wed, Apr 1 2009 06:28 PM by Will Bosacker | with no comments
Filed under: ,
Custom themes and source control

After reading Breaking Themes in 2008.5 upgrade by Chris Shawn, I had an epiphany when I started to think about how I had setup the CS SDK in my TFS store.  You will be able to do this with any of the major commercial source control applications (i.e. TFS, ClearCase, CVS, etc), it won't work with VSS, and I'm not sure about SVN as it is the most screwy source control application that I have ever used.

In TFS I have a CS SDK root branch, a base branch which incorporates additions/changes that I have made to the SDK that is a direct branch from the root, and then a separate branch for each individual site that is branched from the base branch.  The epiphany that occurred to me is that you can have branches within branches and even change the name of the folder that is being branched.

The last release of CS contains only one theme, Hawaii.  If I were to create a branch of the Hawaii theme folder from the base branch to one of the site branches with a different name (i.e. MyTheme), then that site would contain 2 copies of the Hawaii theme named Hawaii and MyTheme.  I could then customize MyTheme to meet my needs.  The next time that the Hawaii theme is updated I could propagate the changes down the merge tree to MyTheme and merge them in, which would save me a hell of a lot of time.

Using the merge capabilities of a well written source control application is a million times easier than using WinDiff, WinMerge or Beyond Compare to make these changes.  I can't believe that I had never considered this before, but if it wasn't for Chris Shawn's post, it may have taken me even longer.

P.S.  I know that this is going to put a HUGE smile on Dave Burke's face, but only after he hits himself in the head a few times.  Surprise

Posted: Mon, Sep 29 2008 11:42 PM by Will Bosacker | with 1 comment(s) |
Filed under:
CS2008: A first look at the CS2008.5 SDK

From a user POV, CS2008.5 is just a bunch of bug fixes with the addition of a new application type, Wikis.  But, this is a major step for developers.  Here is a cursory list of the changes:

  • The SDK has been converted to Visual Studio 2008, but it appears that Telligent has not installed the latest service pack as the project files now store the Visual Studio build number.
  • The projects all target the 2.0 .NET Framework, but they are also using some of the compiler changes that were made available with the release of the 3.5 .NET Framework.
    • This means that it will not compile under Visual Studio 2005.
    • Some small, but rather significant, additions were made to the compiler that do not work under Visual Studio 2005; however, they do work when used at the command line.
  • Almost all of the projects have been renamed and the data projects have also been moved.
  • The SDK is no longer 1 solution for all.  The search, mail gateways, and OpenId projects are now in separate solutions.
  • There are hundreds of compiler warning messages, which means that this was a rushed release as they didn't have time to clean them up.
  • Portions of the SDK have been marked obsolete, while others skipped the entire obsoletion process and are just gone.  The CSContext object is a perfect example of the later as CSContect.Current.UserID has been removed and will very definitely break many 3rd party addons.
  • The Upgrader is not included in the SDK and hasn't been included in previous versions, but it should be.  So, you will need to download the upgrader sperarately as it is the only safe way to upgrade a database.

When I upgraded to CS2007.1 back in December of 2007 I also switched over to Team Foundation Server (TFS) for Application Lifecyle Management (ALM).  There were some hiccups during the initial conversion from VSS to TFS which included some loss of history (nothing new for VSS users), but it is so much faster and nicer to use that it more than made up.  With the way that branching works, I have created several branches that are rooted from the CS SDK.  I have a base branch from the SDK that has all of the additions/fixes that I have made.  Then each web site has its own branch from this base.

When a new SDK is released, I upgrade the root and make sure that the history is preserved, which can be rather complicated.  Once this is done, I merge the root down to the base which is nothing more than just SWEET!  From there its a one-by-one merge from the base to each web site, which again is SWEET!  Web sites can be based off of any version of the CS SDK and if I work on something for one web site that I'd like to become a part of the base I can do a merge up from the web site to base, which I'm sure you know is SWEET!

I'll probably write another post on the CS2008.5 SDK once I've used it more and have learned about its issues.  For now, enjoy the changes...

CS2008: Code base issues

Hey All,

I've been running into some rather significant issues with CS2008 since I started the process of updating all the code that I had written for CS2007 and prior, to work with CS2008.  A lot of code is either just missing from the code base, or it has been bypassed by what looks like test code.  I've been finding these very specific code bypasses all over the place, all of which cause failures of some sort.

I reported one of these a week or so ago when we discovered that permissions were being completely ignored if a View test was being performed on an object.  The result of that is that everyone can view everything without limitation.  I found a bypass for BLOG Pages being listed in a roller control that always returns the excerpt and will never return the body.  Another issue is that the post code for BLOGs and Forums has been isolated even more, leading to the preview of BLOG posts to not fire events.

I've been trying to keep a list of all the bugs that I've been forced to correct, but the list is getting out of hand.  I can very definitely state that CS2008 is a somewhat stable alpha release with major performance issues.  Since I have other work that needs to be done, this update conversion is going on the back burner and is going to take quite a bit of time to complete.  What normally took 12-16 hours to do, has now exceeded a week with no end in site.  I certainly hope that the CS2008.1 release addresses most of these issues.

I was able to get my calendar control to partially work with the ComponentArts DLLs, but a stand alone version is still a very long way off.  I've been thinking about releasing a beta upgrade version for those who were using the CS2007 version, but that is looking very doubtful at this point.  It would not work for those who have fresh CS2008 installations and would only be a short term stop-gap for those who upgraded to CS2008 before learning that the control does not work.

Take it easy,

Posted: Thu, Jul 24 2008 09:18 AM by Will Bosacker | with no comments
Filed under: ,
CS2008: Good news for .NET Community Program sites

Last night I sent Rob Howard an email about some concerns that I had with Community Server, one of them being the .NET Community Program.  As for this concern, here is his response:

"The “.NET Community Program” absolutely still exists. I’m sorry, we need to do a better job of making sure people know about this."

A few email exchanges later, I received the CS 2008 .NET Community Program license for this site.  Which means that we will be switching over to CS 2008 very shortly, after I write a CFS module to store objects in the database.  This is also good for those concerned about the Calendar module as it will make it much easier for me to work on it.

Rob said a few other things that made me a lot more comfortable with where Telligent is taking their Community Server and Graffiti CMS products.  Graffiti CMS is targetted for small to mid-sized companies, but it currently isn't ready for this customer base and it was a mistake to release CS 2008 as niether product is ready for release.  Telligent's investment in Graffiti CMS is starting to increase and the first realization of this increase will include forums and wikis.  Once the forums and wikis are available, this customer base will be able to easily move away from Community Server.  Also, Telligent has recently slashed the price of Graffiti CMS from $399 to $99.

He also said, "I can’t provide a lot of details right now, but we’re going to announce some significant business news in the coming weeks that will hopefully make all these pieces fit together for you."  One of the most import things that will be coming up is a true roadmap the includes what they are currently working on, and where they plan to be.  This is something that they completely dropped about a year ago, and he agreed that they need to publish a roadmap and keep it up to date.

Posted: Wed, Jul 9 2008 05:30 PM by Will Bosacker | with no comments
Filed under: ,
CS2008: CFS: The deal breaker

When I first read about CFS a number of months ago and learned that objects are no longer going to be stored in the database, I thought, "What are these guys thinking."  I knew that there were going to be problems, and sure enough, there are.  The ideal situation stores all objects in the database and the application caches those objects locally on the file system.  This is the way that the old system worked for the most part, it just wasn't normallized.  The current system is normallized, but they removed the database storage completely.  This is something that an enterprise level application should never do.

For one, you are now required to not only backup the database, you now need to backup the IIS Server / file store.  By definition the two systems (file store and database) will always be out of sync.  Backing up the IIS server is something that just isn't done in most enterprise applications as the application is stored in source control and can easily be rebuild.  Think of it this way, if there is a possibility that your site has been hacked, which do you want to use?  A backup, or the code in source control?  That should be a no brainer.

Since objects are ONLY stored in the file system, you are required to back them up seperately and the store can NEVER be rebuilt.  I have a client who upgraded to CS2008 and some of the objects that were in the CS2007.1 database, but had not been cached to the file system, are now not accessable after the upgrade.  I am sorry, but this type of change is not at all acceptable for a supposed Enterprise Level application.  I can see what Telligent what thinking, but they obviously did not fully think it through, nor did they do their due diligence.

The next version of SQL Server (2008) has totally changed the way that it stores BLOBS (images).  This new way of storage makes them available in many different ways and faster to lookup than if they were individual files on the file system.  YES, BLOBs on SQL Server 2008 are FASTER than files stored in NTFS (file system).  PLUS, they are backed up as a part of the normal SQL Server backup, thus they are always in sync, AND you no longer need a local cache!  Yes, you read that last statement correctly, no caching is required to improve performance.

So, the bottom line here is that until CS2008 supports database storage for all objects, I cannot recommend its use to anyone.  Stick with CS2007 if you have it and do not upgrade.  If you upgrade, there is a very good chance that you will lose quite a few objects just like my client did.  Also, the URLs for all objects have changed, which means any existing links to CS2007 or ealier objects would be broken after the upgrade.  That in itself could cost you hundreds of hours of lost time to correct on large systems.

Take it easy,

Posted: Mon, Jun 30 2008 11:30 AM by Will Bosacker | with no comments
Filed under: ,
CS2008: The good news and the not so good news

Hey Everyone,

It's been quite a while since I've had much news about CS as I've been working on other projects, but that should be changing for at least the next few months, which is part of the good news.  I'm going to be working on a CS related contract and I will also be working on the CS2008 version of the calendar control in my spare time.  The not so good news is that I am seriously considering the option of not upgrading any of my CS sites to CS2008, though I do have one internal CS2008 site for development purposes.

The project that I will be working on is using CS2007 and the customer has made a firm decision to not move to CS2008.  The major reason that I and others are considering this is because upgrading to CS2008 is a major undertaking and it is also a major change from the original direction of CS.  Performance issues aside (as they can be worked out), CS 2008 doesn't feel like a full product release.  It feels more like a stepping stone to an unknown future.  The current licensing model has made it impossible for small businesses and some mid-sized businesses to afford CS, and if I upgrade this site to CS2008, I will no longer have the .NET Community license that I have with CS2007.  I would be in direct violation of the current CS2008 license.

What does this mean to you?  Well, it means that this next release of the calendar control may be the last.  The initial release may have more bugs than usual as I'll be the only tester prior to it being released, and bug fixes may take longer to find and fix.  I have a feeling that Telligent is going to add some sort of calendar functionality to CS in the not to distant future, so this may only be a short lived issue, though there will definitely need to be some sort of conversion from this control to whatever Telligent may provide.  As things progress, I'll try to keep everyone up-to-date.

My next blog post will cover how I am using TFS to manage multiple branches of CS and how it makes it easier to selectively merge SDK updates into these branches.  TFS has 2 way merging, which means that you can merge up to the root (inverted tree) or down to any branch while only affecting the 2 branches that are being merged.  Source control covers only about 25-30% of what TFS is as it is an Application Lifecycle Management (ALM) application that covers builds, documentation, testing, tracking, and a lot more.

Take it easy,

CS SDK SqlDataProvider: Software Abstraction Layer

Anyone who has looked at the SqlDataProvider project in the SDK has probably asked themselves, "What were they smoking when they designed this?"  I don't know if Rob Howard is the creator of this technology, but he is one of the major influences that created ASP.NET and most of what it consists of.  The idea of software abstraction layers is very similar to the ASP.NET module system and has been around at least as long, but nothing has ever been published by Microsoft about it until now.  In fact, you can implement software abstraction layers in your web.config by using the module system or the provider system.

The Software Abstraction Layer article by Danut Prisacaru goes into exactly how it works and why you should be using it.  The implementation in the CS SDK is actually built around the Provider Model, as CS does not support N-Tier separations out of the box.  However, you can see the overlap and were the initial design came from if you read the article and download the prototype from CodePlex.  Anyone who needs to write an application that needs to run on 1-N Tiers should be using software abstraction layers.

Posted: Tue, May 27 2008 06:27 PM by Will Bosacker | with 2 comment(s)
Filed under:
CS2008: Released! What does that mean?

Community Server 2008 is a major upgrade and change in how Telligent is doing business.  The audience for Community Server is changing slightly as it really is no longer a good fit for very small communities, especially if you need features that are not a part of the free version.  However, Telligent does have another product that is more suited for that audience, Graffiti.  Both products support a new widget technology, which I need to take a closer look at.

That being said, many addons that were written for prior versions of Community Server will not work in Community Server 2008, including the calendar control that I wrote.  Due to other obligations I won't be able to even look at what needs to be done to get it to work, until sometime in May.  Once I am able to, I will be removing all references to the ComponentArt controls, adding AJAX.NET to Community Server, and using AJAX.NET in the new calendar control.

I don't have a time frame for this, but I wouldn't expect anything before July and most likely much later.  I may have something available for beta testing before then, but I'm not making any promises.

Take it easy,

CS2008: Update

Hey All,

The final release of Community Server 2008 is slowly aproaching, which means rebuilds / reworks of existing addons.  I will be reworking the Calendar Control slightly to make it work better and be a little more flexable.  The project that I'm currently working on had me making a templated control that supports skins, so I'm going to use that knowledge to make it a little nicer.  As for the other addons, we'll have to wait and see.  I know that one is no longer needed.

Take it easy,

BTW, it's time to start ragging on Dave Burke again...Devil...666

Posted: Thu, Mar 27 2008 05:50 PM by Will Bosacker | with no comments
Filed under: ,
CS2007: What features would you like to see in the Event Calendar control?

Ok, I just created the forum thread, What features would you like to see in the Event Calendar control?  I'd like everyone to chime in here.  Most of the requests will most likely only be possible in the commercial version of the control, but if I can add a feature rather easily to the free version, I'll do it.  I'd like Dave Burke, Dan Bartels, and maybe even Jose Lima and Scott Watermask to chime in here.  Lets see if I we can get them to post some thoughts.  Devil

Comments to this post have been disabled so that all posts will be added to the forum thread (link above).

CS2007: Temporary Bug Fix for Forum Posts

UPDATE 06/12/2007:  Telligent has released SP2 for CS 2007 which contains this fix. 

There is a bug in CS 2007 where many of the properties of a forum post are not set prior to executing the post events.  If you are using the SDK, you can make the following changes yourself to correct the issue until Telligent is able to provide a patch.  If you are not using the SDK, you will have to wait for Telligent to provide a patch as it is a license violation for me to do this for you.  Here is the change:

File: CommunityServerForums20/Controls/Forms/CreateEditForumPostForm.cs:

Around line 909:

After the following lines:

post.Username = editedPost.Username;
post.UserID = editedPost.UserID;
post.IsIgnoredPost = editedPost.IsIgnoredPost;

insert the following lines:

//TODO: Missing properties
post.Categories = editedPost.Categories;
post.FormattedBody = editedPost.FormattedBody;
post.ParentID = editedPost.ParentID;
post.SectionID = editedPost.SectionID;
post.ThreadID = editedPost.ThreadID;
post.ThreadDate = editedPost.ThreadDate;
post.ThreadStartDate = editedPost.ThreadStartDate;
post.ThreadStarterUsername = editedPost.ThreadStarterUsername;
post.ThreadIDNext = editedPost.ThreadIDNext;
post.ThreadIDPrev = editedPost.ThreadIDPrev;
post.SortOrder = editedPost.SortOrder;
post.Replies = editedPost.Replies;
post.IsApproved = editedPost.IsApproved;
post.AttachmentFilename = editedPost.AttachmentFilename;
post.Views = editedPost.Views;
post.HasRead = editedPost.HasRead;
post.UserHostAddress = editedPost.UserHostAddress;
post.PostMedia = editedPost.PostMedia;
post.Name = editedPost.Name;
post.UserTime = editedPost.UserTime;
post.Points = editedPost.Points;
post.TotalRatings = editedPost.TotalRatings;
post.RatingSum = editedPost.RatingSum;
post.PostStatus = editedPost.PostStatus;
post.SpamScore = editedPost.SpamScore;

Posted: Thu, Jun 7 2007 06:47 PM by Will Bosacker | with no comments
Filed under: ,
CS2007: API Bug & Calendar Update

UPDATE 06/12/2007:  Telligent has released SP2 for CS 2007 which contains this fix. 

UPDATE 06/07/2007: Read CS2007: Temporary Bug Fix for Forum Posts.

A bug in the CS 2007 API was discovered tonight.  When saving an edited forum post, incorrect information is passed to addon modules which makes it impossible to update the calendar and causes the application to crash if the post being saved contains a [cal] tag.  I report the bug in the Community Server Bug forum.

In the mean time, I have created a new build and addressed a couple other issues as well.  The new build will gracefully fail and not update the calendar event until Telligent corrects the issue.  You can run the rebuild script to rebuild the calendar events if you make a change to the forum post that created the event.

Download the current version

Posted: Tue, Jun 5 2007 09:10 PM by Will Bosacker | with 4 comment(s)
Filed under: ,
CS2007: Event Calendar Features

UPDATE 06/05/2007:
Added support for tags in the form of , added the change to the resources.xml file that was left out, and changed the formatting of dates to require MM/DD/YYYY.  Leading zeros are no longer optional.

To use this control, you will need to place the following register line at the top of your page:

<%@ Register TagPrefix="WGB" Namespace="WGB.CSAddons.Controls" Assembly="WGB.CSAddons" %>

Here is a typical use of the control:

<WGB:EventCalendar ID="EventCalendar" Tag="div" Width="100%" DayCssClass="dbday" CalendarCssClass="dbcalendar" MonthCssClass="dbmonth" DayHeaderCssClass="dbdayheader" CalendarTitleCssClass="dbtitle" OtherMonthDayCssClass="dbothermonthday" HyperLinkCssClass="dbpostlink" style="text-align: center;" runat="Server" />


To add events to the calendar, place either of the following in the body of your post:

  1. A single tag will use the post/publish date of the post to create a calendar event.
  2. [cal]MM/DD/YYYY[/cal] (leading zeros are required) entry will create a calendar event based on the date within the [cal] tag pair.

Blog, Forum, File, and Gallery posts that contain one of the above [cal] tag entries, will have an event added to the calendar.  The event will display in the calendar as a text link of the subject text that links to the post.  Birthday links with link to user page of the user.  If a post or user profile is editted or deleted, the coresponding event will be updated or deleted as well.

Block moves and deletes, such as deleting or moving an entire forum, do not execute the CS API events.  This results in orphaned records (which will not display on the calendar) and unregistered events in the case of a move.  To rebuild the event tables, the RebuildCalendarEvents.sql script can be run at any time.  This script will remove all existing calendar events from the tables and then go through every post and user to rebuild them.

Standard ComponentArt Calendar CSS Class Properties

  • CalendarCssClass
  • CalendarTitleCssClass
  • DayCssClass
  • DayHeaderCssClass
  • MonthCssClass
  • OtherMonthDayCssClass
  • TodayDayCssClass

Other ComponentArt Calendar Properties

  • MonthPadding
  • MonthSpacing

Calendar Event Hyperlink Properties

  • HyperLinkCssClass
  • HyperLinkTarget

Special Properties

  • DayNameFormat
    • FirstLetter - The days of the week displayed with just the first letter. For example, M represents Monday.
    • FirstTwoLetters - The days of the week displayed with just the first two letters. For example, Mo represents Monday.
    • Full - The days of the week displayed in full format. For example, Monday.
    • Short - The days of the week displayed in abbreviated format. For example, Mon represents Monday.
    • Shortest - The days of the week displayed in the shortest abbreviation format possible for the current culture.
  • ExcludeBirthdays - Determines if birthdays will be excluded from the calendar.
  • Height
  • HyperLinkCssClass
    • If there is a need, I can break this up into to multiple properties.  One for Post events, and one for Birthday events.
  • Width

Internal Controls

  • DisplayConditions
    • Standard Chameleon control. 
  • LeaderTemplate
    • Standard Chameleon control. 
  • LoadingPanelClientTemplate
    • This allows you to replace the default twisting ring that displays during AJAX calls.
  • TrailerTemplate
    • Standard Chameleon control.

In about a month I will be starting development on a commercial version of this control that will provide functionality similar to that in Outlook.  Users will be able to create personal events on their calendar and share those events with other users.  If you have any suggestions for new abilities that you would like to see added to either the free or commercial control, please post a comment here.  I'll post more on the commercial control at a later date.

CS2007: Event Calendar Released!

NOTICE: Only registered users are allowed to post and download, so don't forget to register.

PACKAGE UPDATED 06/05/2007 21:10 PT:
The readme instructions have been updated to list a change to the resources.xml file that was left out.  Support for single tags has been added.  Dates must now be in the MM/DD/YYYY format where leading zeros are now required.  And a bug in the CS 2007 Module API was discovered for Forum posts.  A temporary patch was made to prevent the control from crashing, but Telligent will need to fix the API before edited Forum posts will work correctly with the calendar.

PACKAGE UPDATED 06/02/2007 16:00 PT:
A couple more bugs were found that popped up for people who had been running Dan Bartels original control.  Everyone should download this update as it fixes some bug in the SQL scripts as well.  Just copy all of the files in the Web folder over your current installation, and run both of this SQL scripts just as if you were installing this for the first time.  I also fixed some bugs in the CSS files that carried over from Dan's original control.

PACKAGE UPDATED 06/02/2007 00:01 PT:
After adding support for the single tag, I apparently deleted 1 too many ?'s from the regular expression which caused the regular [cal]date[/cal] tags to fail.  This update fixes the issue.

PACKAGE UPDATED 06/01/2007 07:30 PT:
I forgot to add the image files to the original package and a minor bug with updating profiles was fixed.

Well, its finally ready. The Community Server 2007 Event Calendar add-on is available for download.  If you have any problems with the installation, please post your issues here and I will address them as soon as I can.  If you have a show stopping issue, just comment out or remove the lines that you added to your communityserver.config file and everything should be ok.  You may want to back out the SiteUrls.config changes too, if you don't want users clicking on link.

You can read my post CS2007: Event Calendar Features to learn more about the control.  ENJOY!

CS2007: Calendar Control status update

UPDATE: CS2007: Event Calendar Released! and CS2007: Event Calendar Features

Since Dan Bartels released a CS 2007 version of his control yesteday, I decided to post a status update.  I've been working hard to get the new Chameleon Control finished, and its almost there.  I plan on releasing it this Friday or Saturday, but it could be earlier if I have the time.  This new control uses the same [cal] tags that Dan Bartels control uses, but it creates and uses 2 new tables and can co-exist with Dan's control if you decide to use both.

One of the scripts that will be provided with the control goes through every post and user record to populate the new tables with the [cal] tag events and the birthdays of users.  I've fixed several of the bugs that were in Dan's CS 2.x control, plus I've added some functionality that I will discuss when I release the control.  The Birthday process is no longer required due to fixes and a new attribute that I have added to the control.

Posted: Tue, May 29 2007 09:31 PM by Will Bosacker | with no comments
Filed under: ,
CS2007: Calendar Control in test phase

UPDATE: CS2007: Event Calendar Released! and CS2007: Event Calendar Features

Well, as of just a few minutes ago, I finally got the control working.  I still need to do some testing and cleanup, but I have enabled it for use on all of my sites.  In about 1-2 weeks, I'll release the DLLs for the free CS 2007 upgrade release that is 100% compatible with Dan Bartels Calendar for CS 2.x.  Until then, let me know if you find any issues with the control on any of my sites.

Click here to view the calendar

Take it easy,

CS2007: Teaser: Calendar: COMING SOON!

UPDATE: CS2007: Event Calendar Released! and CS2007: Event Calendar Features

The title says it all.  Thanks to Reflector and Dan Bartels' Calendar addon, there will be 2 releases.  The first being a CS 2007 version of the control that is backward compatable, and the second being a full fledged system for CS 2007 that may or may not be compatable, but there will be an upgrade path if it is not.  If all goes well, the first release will be within 2 weeks.

Posted: Wed, May 16 2007 04:28 PM by Will Bosacker | with no comments
Filed under: ,
CS2007: BUG & FIX: BBCodes and Emoticons

This bug is a carry over from CS 2.x which improperly handles BBCodes and Emoticons.  You can see this on the communityserver.org site.  Every so often you will see a post with smilies that seem out of place, or you may be trying to use BBCodes and they don't quite work properly.  This is mostly due to the order in which things are being processed.

This fix requires making changes to the SDK, will correct these issues, and add 3 new BBCodes ([code], [notes], and [] which is a BBCode escape for code lists).  The [code] BBCode is a standard code, but it was left out of the CS library.  To make these changes, do the following:

File: <font color="#0000ff">CommunityServerComponents20/Components/Transforms.cs</font>:

Around line 53:

Move the following lines:

if (allowCustomTransforms ) {
    // must do emoteicons first because they are restricted from finding any inside [code][/code] blocks. We have to do
    // this before the later steps remove the [code][/code] blocks.
    if( CSContext.Current.SiteSettings.EnableEmoticons ) {
        formattedPost = EmoticonTransforms(formattedPost);

to line 76, after the following lines:

// Do BBCode transform, if any
formattedPost = BBcodeToHtml(formattedPost);

Around Line 240: 

After the following lines:

// Left, Right, Center
encodedString = Regex.Replace(encodedString, @"\[left(?:\s*)\]((.|\n)*?)\[/left(?:\s*)]", "<div style=\"text-align:left\">$1</div>", options);
encodedString = Regex.Replace(encodedString, @"\[center(?:\s*)\]((.|\n)*?)\[/center(?:\s*)]", "<div style=\"text-align:center\">$1</div>", options);
encodedString = Regex.Replace(encodedString, @"\[right(?:\s*)\]((.|\n)*?)\[/right(?:\s*)]", "<div style=\"text-align:right\">$1</div>", options);


// Note
encodedString = Regex.Replace(encodedString, @"\[note(?:\s*)header=(?:""|&quot;|&#34;)(.*?)(?:""|&quot;|&#34;)\]", "<blockquote><div><strong>$1:</strong></div><br /><div>", options);
encodedString = Regex.Replace(encodedString, @"\[note(\s*)\]", "<blockquote><div>", options);
encodedString = Regex.Replace(encodedString, @"\[/note(\s*)\]", "</div></blockquote>", options);

// Code
encodedString = Regex.Replace(encodedString, @"\[code(?:\s*)file=(?:""|&quot;|&#34;)(.*?)(?:""|&quot;|&#34;)\]", "<blockquote style=\"overflow-x: scroll;\"><div><strong>$1:</strong></div><br /><pre style=\"margin: 0px;\">", options);
encodedString = Regex.Replace(encodedString, @"\[code(?:\s*)\]", "<blockquote style=\"overflow-x: scroll;\"><pre style=\"margin: 0px;\">", options);
encodedString = Regex.Replace(encodedString, @"\[/code(?:\s*)\]", "</pre></blockquote>", options);

Around line 295:

Before the following line:

return encodedString;


// New code for developers
encodedString = Regex.Replace(encodedString, @"\[\]", "[", options);

File: communityserver.config:

In the <CSModules> section around line 1020:

Find the following section:

<add name = "AutoApproveForumModule" type="CommunityServer.Discussions.Components.AutoApproveForumModule, CommunityServer.Discussions" />
<add name = "BBcodeToHtml" type = "CommunityServer.Discussions.Components.BBcodeToHtmlModule, CommunityServer.Discussions" />
<add name = "IrcCommands" type = "CommunityServer.Discussions.Components.IrcCommandsModule, CommunityServer.Discussions" />
<add name = "ForumCensorship" type = "CommunityServer.Discussions.Components.CensorshipModule, CommunityServer.Discussions" />
<add name = "ForumEmoticon" type = "CommunityServer.Discussions.Components.EmoticonModule, CommunityServer.Discussions" />
<add name = "ForumSourceCode" type = "CommunityServer.Discussions.Components.SourceCodeModule, CommunityServer.Discussions" />
<add name = "ForumPlainText" type = "CommunityServer.Discussions.Components.PlainTextModule, CommunityServer.Discussions" />
<add name = "ForumHtmlScrubbing" type = "CommunityServer.Discussions.Components.HtmlScrubbingModule, CommunityServer.Discussions" />
<add name = "ForumCollapse" type = "CommunityServer.Discussions.Components.CollapseModule, CommunityServer.Discussions" />
<add name="ForumQuoteModule" type="CommunityServer.Discussions.Components.QuoteModule, CommunityServer.Discussions" />

and change the order of the lines to:

<add name = "AutoApproveForumModule" type="CommunityServer.Discussions.Components.AutoApproveForumModule, CommunityServer.Discussions" />
<add name = "IrcCommands" type = "CommunityServer.Discussions.Components.IrcCommandsModule, CommunityServer.Discussions" />
<add name = "ForumCensorship" type = "CommunityServer.Discussions.Components.CensorshipModule, CommunityServer.Discussions" />
<add name = "ForumSourceCode" type = "CommunityServer.Discussions.Components.SourceCodeModule, CommunityServer.Discussions" />
<add name = "ForumPlainText" type = "CommunityServer.Discussions.Components.PlainTextModule, CommunityServer.Discussions" />
<add name = "ForumHtmlScrubbing" type = "CommunityServer.Discussions.Components.HtmlScrubbingModule, CommunityServer.Discussions" />
<add name = "BBcodeToHtml" type = "CommunityServer.Discussions.Components.BBcodeToHtmlModule, CommunityServer.Discussions" />
<add name = "ForumEmoticon" type = "CommunityServer.Discussions.Components.EmoticonModule, CommunityServer.Discussions" />

<add name = "ForumCollapse" type = "CommunityServer.Discussions.Components.CollapseModule, CommunityServer.Discussions" />
<add name="ForumQuoteModule" type="CommunityServer.Discussions.Components.QuoteModule, CommunityServer.Discussions" />

The new [code] BBCode has an optional file="<text>" attribute that you can use for filenames or whatever else you would like.  The new [note] BBCode has an optional header="<text>" attribute that works in the same way as the file attribute of [code].  To use the new code for developers, you just type a ] (right bracket) immediately after an [ (left bracket).  For example, entering:

[]b]This is how you bold text[]/b]

in your post, will display:

[b]This is how you bold text[/b]

And if you entered the above line directly into a post it would display as:

This is how you bold text

If you have any questions or comments, please post them here.  Also, if you haven't already read my post CS2007: Add BBCode support to Blogs, you may to read it as well.

More Posts Next page »