mojoPortal Released


I'm happy to announce the release of mojoPortal, available now on our download page.

This is a major release packed with lots of improvements that I think you will like. 

New File Manager UI

We have a new File Manager based on QtFile. I could never have made anything pretty like that myself, if you see anything pretty in mojoPortal you can be fairly sure someone besides me deserves the credit for the prettiness. I'm very good at making things work and integrating things others have made pretty. Now the old File Manager is not gone, you can actually toggle between them. The new one in addition to being prettier than the old one also has a way to easily move files whereas the old one does not. I kept the old one because it has a couple of advantages of it's own that the new one does not have. For example, it has bulk file uploading, may be better able to handle large file uploads because it uses NeatUpload, and it can still be used with javascript completely disabled. In both our File Managers, where and whether the user can upload and delete files depends on their role permissions.

file manager screen shot

If you have a custom skin and are upgrading, you will need to add this to your style.config to bring in the css for the new file manager.

<file cssvpath="/Data/style/qtfile/default.css" imagebasevpath="/Data/style/qtfile/">none</file>

We also recently had some requests for an administration link so that users with permissions to upload and delete files could easily get to the file manager. Previously non admin users could only upload images for example by using the editor in a content instance. With the addition of this new link for File Manager in addition to our other administration links it seemed that the number of links we are showing was beginning to clutter the screen a bit, so I implemented this pretty toolbar in most of the included skins to contain the administration links, you can hide it with a click of the down arrows.

administration toolbar

Now, as you can see it is kind of pretty so obviously someone else deserves credit for that. To explain the why and how this toolbar was integrated into the included skins, how you can use it if you want to in your custom skin, and to learn where it came from and who really deserves the credit see "Creating an Admin Toolbar".

Shared Files Improvements

  • Now counts downloads of files
  • If you rebuild your search index, files found in search results be be a download link instead of a link to the page containing the Shared Files instance.
  • New description field. This field gets indexed in the search index, since we do not currently have support for indexing actual file contents for things like PDF files or Word docs, you can paste the full text of the document into the description and then get search results with files that have matching content. In this case you would keep the description column hidden since it would probably be ugly to show the full file contents as text in the page.
  • New options for showing and hiding columns in the file grid

Blog Improvements

  • Added paging to the blog list view by popular demand
  • Added a dedicated Is Draft indicator so drafts can be created either by checking this or settings future publish date.
  • Added a Save/Preview button so you can preview drafts as they will appear when published.
  • New setting allowing you to specify the date/time format string for blog posts

Feed Manager Improvements

  • Added a Calendar View, this goes well with our Event Calendar Pro feature which can expose Events as RSS. Now you could show a mini calendar on your home page for example that shows upcoming events and links to the event details in Event Calendar Pro.
  • New setting allowing you to specify the date/time format string

Simple List/Links

What we previously called the Links Feature is now renamed to Simple List/Links. This was one of the first features in mojoPortal and in fact was a feature in the old IBuySpy Portal that mojoPortal was originally based on. It had not changed much over the years, we added a description which could be shown optionally with the link and this could be indexed into the search index, but other than that it was just a way to make a list of links, something one could easily do also in the plain old Html Content feature, so the Links feature was just an easier way to make a list of links. I've been using it for our mojo Sites list, but as the number of sites in the list is growing it seemed like a good idea to add paging, so I did that as you can see on the mojo Sites page. Once I had that done I got to thinking about our Consulting Partners List which was just using a plain Html Content feature and was beginning to get unwieldy to update.  I thought of the Links feature with it's new paging support and how handy it would be to have that same paging functionality on the consulting list but without the links since we link to the partner sites from the description. So I added a setting allowing you to show "Description Only" in the Links feature and then decided it needed to be renamed to Simple List/Links or others won't notice they can use it this way. I'm also thinking about using it to make a Skin Gallery where we can show the link to the zip file and have screen shots in the description, again paging is what makes this manageable as the list grows. So it is a nice little feature now to make a list of blocks of html content or links or both. You can move things around in the list based on their sort rank.

De-Coupled Settings For Open ID and RPX

This is important for you to notice, if you are using the RPX service and are upgrading you probably have "Enable OpenID" checked in Site Settings because previously it was required to have this checked to use RPX but then the normal Open ID login would not be shown if RPX was enabled. You may want to uncheck that now because if it is checked it will also show the normal Open ID sign in in addition to the RPX one. Previously it was not possible to show both but it seemed they should be de-coupled because they are completely separate implementations and nothing should stop you from using both if you wanted to. RPX is enabled simply by the presence of an RPX Now API key. Remove the key to disable it.

Moved the Url Location for CssHandler.ashx

We have always held the opinion that the /Data folder in mojoPortal (or writable folders in any ASP.NET application) should not require execute permissions because that is where users can upload files and it is just best security practice to not let the web process have both write and execute permissions on the same folder. You should not be able to upload dll files to the /bin folder from web code for example, it should require a more privileged ftp user for best security. A few versions back when we implemented the CssHandler to combine and minify the CSS files, we made the url for the handler be /theskinsfolder/csshandler.ashx because this made it easy to determine which files belonged to the skin. Note that there is no physical file named csshandler.ashx anywhere on disk but since the skin folder is one of the writable folders below /Data and we were making the url appear as if it was actually located there, setting the folder permissions to deny execute caused the csshandler to fail. So now we have changed the virtual url for the csshandler to be just in the root of the site so that the /Data folder and all it's child folders including skins can be marked as not executable without breaking the css handler.


  • Added more noticeable links in the Forums to encourage users to subscribe to email notification
  • New User Selector Dialog in Role Manager
  • Updated Italian Resource files thanks to Diego Mora
  • Updated Swedish Resources thanks to Par Rohlin
  • Update Russian Resources thanks to SkySandy
  • Updated French Resurces thanks to Thomas

One More Thing - A Query Tool For Developers

For this release I implemented a Query Tool that can be used to query the database on any of our supported database platforms. See the new documentation, you can even save queries and use them in quick and dirty custom features.

screen shot of query tool

Thanks to all who provided feedback in the forums and especially thanks to those who are helping others in our forums.


Follow us on twitter or become a fan on Facebook

follow us on twitter become a fan on facebook

Gravatar Joe Audette is the founder of the mojoPortal project and was the primary developer until February 2017.

mojoPortal Released

I'm happy to announce the release of mojoPortal, available now on our download page.

New Features

Custom Meta Data

We have a new custom meta data system allowing you to add custom meta data to your pages in addition to the standard keywords and description. Specifically the system was designed to support the use of Dublin Core Meta Data, but it can be used for any html meta data.

Dublin Core Meta Data

The new meta data system has been integrated into CMS pages, Blog Posts as well as Web Store Products and Offers.

Page Comments

While it still remains a to do item on our Road Map to implement an internal comment system that can be attached to pages and content features, in the mean time we have added support to allow you to attach IntenseDebate or Disqus comments to the bottom of any CMS page. The Blog of course already has the option to use it's own internal comment system or one of these services. Actually I recommend IntenseDebate because of bugs I encountered with Disqus. I have reported the issues and even identified the line of code in their javascript where the problems occur so hopefully they will fix it. There are new settings in Site Settings > API Keys to enable these services and a setting in Page Settings to enable it on a page.

Google Translate Integration

You can now easily add Google Translate widget to a page or to every page in your site. As you can see I've added it to all pages in this site. Not sure if I will always keep it there but we shall see what the user feedback on it is and whether people find it helpful or not.

A New IFrame Feature

It is already easy to add iframes to the Html content feature using the source view of the editor, but for less html saavy users having a feature to make it easy may be helpful. Eric Stoffers, a community member sent me on he had put together for his users and I made one based on his example but according to my own coding preferences.

Contact Form Improvement

Added an enhancement to the contact form so it can be configured to give the user a choice of who receives the email notification, so you can have different departments or user receive the submission depending on the user choice. See Using The Contact Form for more details.

Forum Improvement

Made it a little easier for users to notice the email notification subscriptions in the forums to encourage users to subscribe and participate in the forums. Users in edit roles will also see a link allowing them to review who is subscribed and unsubscribe users if needed. There is also a new setting if you want all users to be able to see the number of subscribers to the forums (but not the link to review them obviously).

Shared Files Improvement

Added a description to shared files, it is not currently surfaced in the UI except for the editing UI where descriptions can be edited. The main benefit of the description field is that it is indexed into the search engine. Previously you could only find search results based on the title of the file as we do not have an easy way to index Word Documents or PDF files. Now you can paste plain text of the content from these documents into the description in order to index the content of the documents and improve search matching.

Major CSS Re-organization

Back in version, based on community feedback we combined CSS from separate files where we previously had things separated too granularly in files like stylelayout.css, styleimages.css, styleborders.css, styletext.css. These were all combined into style.css for included skins. The problem is we used a CSSTidy script to do the combining and it produced a correct result without breaking any styles but it did not organize the CSS selectors into any groupings that make sense to people, they were just scattered kind of randomly on the style.css file. The result was that it did not have the intended result of making it easier to find what you are looking for. For this release I went through the included skins 1 by 1 and manually moved the CSS selectors around into logical groupings for layout, headings, form styling so that it really is easy to find what you are looking for. This was a very tedious manual task, I spent nearly 40 hours on this working as fast but as carefully as I could. In the end I was very glad to be finished but I feel it was a very important task to make the included skins more approachable as a starting point for customization.

I also went through the features and made more consistent use of styles on grids and tables. In many places we were using the YUI table javascript just for styling tables but this did not lend itself well to styling them according the skin design, it just made a very neutral looking table. I found some nice free GridView themes and put them in a common location under /Data/style and modified them a little according to my needs. I then chose the one that looked the best for each included skin and added it to the style.config file for combining. Those of you with custom skins or upgrading should add one of them to your style.config as well. Note we hve several to choose from and may add more later.

<file cssvpath="/Data/style/gridview/WhiteChromeGridView.css" imagebasevpath="/Data/style/gridview/">none</file>

<file cssvpath="/Data/style/gridview/ChromeBlackGridView.css" imagebasevpath="/Data/style/gridview/">none</file>
<file cssvpath="/Data/style/gridview/ChromeGridView.css" imagebasevpath="/Data/style/gridview/">none</file>
<file cssvpath="/Data/style/gridview/GlassBlackGridView.css" imagebasevpath="/Data/style/gridview/">none</file>
<file cssvpath="/Data/style/gridview/SoftGreyGridView.css" imagebasevpath="/Data/style/gridview/">none</file>
<file cssvpath="/Data/style/gridview/WhiteChromeGridView.css" imagebasevpath="/Data/style/gridview/">none</file>
<file cssvpath="/Data/style/gridview/YahooGridView.css" imagebasevpath="/Data/style/gridview/">none</file>

Other Miscellaneous Improvements

Because editing Html for email newsletters has such different requirements than normal site content, I added a new site setting so you can specify a different editor preference for the newsletter than for site content. I prefer TinyMCE for Newsletter editing because it has a little better preview feature, but I'm growing more fond of CKeditor for editing site content.

Upgraded to CKeditor 3.0.2 and managed to get our Content Template System and Content Style System integrated and working. I am still noticing a few little issues here and there with CKeditor but I think it has a lot of promise and look forward to it improving over time.


Follow us on twitter or become a fan on Facebook

follow us on twitter become a fan on facebook

Gravatar Joe Audette is the founder of the mojoPortal project and was the primary developer until February 2017.

mojoPortal Released

I'm happy to announce the release of mojoPortal, available now on our download page.

This is primarily a bug fix release. With Thanksgiving approaching it seems it will take a few more weeks to complete the next set of new features and improvements, so rather than make people wait for these fixes I thought I should go ahead and put out a release.

Fixed Bugs

Fixed issue where Newsletters configured as opt in by default were not opting in new users when using LDAP authentication.

Fixed issue where if a registered user changed their email address on the profile page it was not reflected in Newsletter subscriptions.

Fixed issue where users in the Content Administrators role could not always move pages around in the hierarchy using the PageTree.aspx page.

Fixed an issue in the EmailMessageTask where it failed to deserialize if there were special characters in the content or subject.

Fixed an issue where urls for images and links were not resolved correctly in feed urls if the site was running in a virtual directory rather than as a root site.

Fixed issue where redirect after editing resulted in a 404 if the url had non-ascii characters.

Fixed some typos in the English resource files.

Fixed a bug in the Poll feature that would occur if using MS SQL without parameter caching.

Fixed other minor issues as reported in the forums since the last release.

Thanks to all who provided bug reports and feedback!

UPDATE 2009-11-25

I forgot to mention that we changed some behavior to fix an issue with non-ascii characters in urls. If you already have non-ascii urls in your site you may need to make a change in the user.config to keep the behavior as it was in the past. See the document here:

Anything New?

Added a setting in the Poll to make it easy to choose the color for the result bars. Previously there was some undocumented voodoo required to change the bar color from blue.

Updated Italian resource files from Diego Mora.

Better rating star images added to existing skins thanks to Joe Davis.

Happy Thanksgiving! Hope you all enjoy some quality time with your family and friends.

Follow us on twitter or become a fan on Facebook

follow us on twitter become a fan on facebook

Gravatar Joe Audette is the founder of the mojoPortal project and was the primary developer until February 2017.

Thanks to All Who Attended My First Yamisee Class

Huge Thanks to everyone who attended my first mojoPortal Developer Training Class on Yamisee last night! And extra special thanks to David Dean and Yamisee for making it possible!

mojoPortal Class on Yamisee

The class was yesterday evening at 6PM EST. I was going to blog about the event before hand, but the available seats sold out quickly and I was reluctant to blog about it once no-one else could sign up. We purposely limited the virtual room to 25 seats for this first session because it was a test also for the Yamisee service which is brand new and still in its early stages.

About Yamisee, as you may notice runs on mojoPortal. David Dean, the master mind behind Yamisee has developed a number of custom features on top of mojoPortal to support the Yamisee service. What Yamisee offers is an easy way to schedule, manage, and conduct online classes and meetings.  One of the ideas behind Yamisee is that for various interest groups there may not always be enough interested people who live close enough together to hold classes or meetings in a specific local market, but there may be substantial numbers of interested people who are geographically dispersed. So Yamisee is striving to provide virtual class room and meeting environments and a service to allow these interest groups to self organize online classes or meetings. While the class I provided last night was free, Yamisee has full ecommerce integration so that knowledge experts can potentially charge for their online courses or classes. So all of the management and ecommerce functionality is built on mojoPortal while the actual virtual rooms are provisioned behind the scenes through various providers and partners of Yamisee. Our meeting for example used a virtual room provided through WebEx. I think the Yamisee service has a lot of potential and encourage others to give it try for classes, courses, or group meetings.

About Our First Yamisee Class

My goal for last night's session was to step by step show how developers can setup their own projects for custom development to keep their custom code separate from mojoPortal code while still working with the mojoPortal source code from our subversion code repository. It was unscripted and unrehearsed because I didn't want to gloss over any stumbling blocks that developers may commonly encounter, I wanted to encounter some and show how to overcome them. I did actually stumble a little more than planned due to making typos and being a little nervous about my first class and not really knowing what to expect. But I think these little stumbles and recoveries were actually helpful. I really wasn't sure how far I would get since it was not rehearsed, the class ended up going over time by about 30 minutes and I still would have liked to have got further along. Time flew for me, it was fun.

Of the 25 seats reserved a few people did not show up and a few others were on standby in case some did not show, we ended up with 20 people in the room and most of them stayed for the whole session, only 2 people left before the end and that was probably my fault since I did go over time by 30 minutes.  It has been quite a while since I have done any live presentations and this was my first one ever in an online virtual room. I was able to share my desktop and a video and audio stream. Looking back at the session I can think of lots of things I could have done better. As I got going on my talk I had the chat window and other windows on my other monitor but I had arranged them too far to the right and as result I wasn't noticing the chat window very much and I never noticed if anyone raised their hand. I apologize if anyone did raise their hand because I forgot about monitoring for that once I got going. Just a matter of getting more familiar and comfortable with the virtual room tools.

We did manage to cover setting up custom projects for web UI, Business, and Data layers, as well as how to configure custom projects to use the installation and upgrade system in mojoPortal. I also demonstrated some code generation using Codesmith to speed up development. At the end, the developers who attended were also interested in getting a .zip of the source code created during the session, so here is a link: It was also asked if the session would be available to download as a video. I'm not sure about that, I'll have to check with David if he recorded it, but my guess is not since it would have been an hour and half long it would have been a very large file. It is possible to record so maybe we will do it next time, but I'm not sure where we can host very large video files for download.

Shall We Do It Again?

Those of you who attended, please share any feedback about what we did wrong or what we did right or whether you are interested in attending another class. If we do another session should I just continue where I left off or would you rather have a more ad hoc question and answer session? How soon should we schedule the next one? What do you think of the idea of having a virtual user group meeting on a regular monthly basis on Yamisee? Would anyone else be interested in presenting a topic about something cool you've done with mojoPortal or skinning/design techniques? Also don't forget that Yamisee is interested in your feedback about the Yamisee service as well, both positive and negative, especially any ideas you may have to improve the experience. Please post any feedback or suggestions in the comments.

Follow us on twitter or become a fan on Facebook

follow us on twitter become a fan on facebook

Gravatar Joe Audette is the founder of the mojoPortal project and was the primary developer until February 2017.

mojoPortal Wins 3rd Place in 2009 CMS Awards

I'm very gratified to announce that mojoPortal has won 3rd place in the 2009 CMS Awards by Packt Publishing, in the Non-PHP category. It is particularly exciting that mojoPortal was the only .NET based CMS to place this year, nudging out DotNetNuke in the Best Other category.

CMS Award 2009

Plone, a Python based CMS retained their crown from last year, and dotCMS, a java based CMS took second place.

In 2007, the first year of the contest, mojoPortal actually won this category over the more established Plone, but we were the only .NET CMS among the contenders that year. In 2008 there were several other .NET projects in the mix and though we were a finalist in the Best Other category, DotNetNuke took 3rd place both in the Best Other and Best Overall Category. This year, after the nomination phase, DotNetNuke was a finalist again in both the Best Overall and Best Other categories and mojoPortal only made the finalists in the Best Other Category, so it seemed like they had already placed ahead of us again this year, but in the end we prevailed against the odds. 

It is a very competitive field and all the contending projects certainly deserve respect. While some have criticized the contest as being merely a popularity contest, I can't really say it seems that way to me. While mojoPortal's popularity is growing rapidly, we are still much less known than many of the projects in the competition. Certainly we were an underdog and no-where near as popular as Plone in 2007 when we won first place in the non-PHP category, and DotNetNuke clearly has a much larger user base, better brand recognition, and more marketing muscle backed by venture capital. So obviously there is more than vote counting going on. It would be nice if the judges post their individual analysis, at least one has already posted some notes about his impressions of the contenders and I know some of the other judges are planning to do the same.

Follow us on twitter or become a fan on Facebook

follow us on twitter become a fan on facebook

Gravatar Joe Audette is the founder of the mojoPortal project and was the primary developer until February 2017.