Posts in Category: Features

mojoPortal 2.2.6.8 Released

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

Actually I released the files yesterday but didn't manage to get to making a release announcement until today because I was still working on some related documentation that I wanted to link to.

Whats New?

Google Analytics Integration

As I mentioned in my previous post, we now have Advanced Integration with Google Analytics built in. There was a lot to talk about so I made that its own post yesterday instead of including it all in the release announcement.

Gravatars

For a long time I've been wanting to implement a better avatar system, because the one we had with just a list of little cartoons you could choose from seemed pretty lame and out of date. The other day, while reading Scott Hanselman's blog, I noticed that he was using Gravatars in his blog comments. I looked into the implementation and it was trivial so I implemented support for Gravatars in the mojoPortal forums and profile system. I haven't got it in blog comments yet but will try to get to that in a future version. The idea of Gravatars is that you can have an avatar that follows you whenever you visit any sites that support Gravatar. If you look in the mojoPortal Forums, you'll see my Gravatar.

a screen shot of my GravatarIf you don't have a Gravatar it just displays a generic one:a screen shot of a generic gravatar

 

So, if you are a frequent visitor, go and get yourself a Gravatar. Gravatars are rated like movies G, PG, R, X, by default, mojoPortal is only configured to display Gravatars rated as G, but you can set this in Web.config or user.config:
<add key="GravatarMaxAllowedRating" value="G" />

Its just a minor feature but its a social feature that I think can make a community site more appealing.

Enhanced OpenID Support

We've had support for OpenID authentication for quite a while now, but recently I came across ID Selector, an enhancement for the OpenID login box.

screen shot of open id selector

It makes it easy for users to sign in or register using their existing open id enabled account.  I've created documentation about enabling OpenID selector in mojoPortal here: http://www.mojoportal.com/using-openid.aspx

Using OpenID or Windows Live ID can increase the number of users who register on your site because they don't have to create any new passwords. Everyone hates new passwords and thats probably one of the biggest reasons people resist registering on new sites, so eliminating that issue can increase registration and participation in your site.

New Developer Extension Points

Actually, I implemented these a few versions ago but just now got around to documenting them.

These are basically plugin systems that let you build and plugin your own handlers so you can execute your own custom logic whenever a new user is created or a new page is created. I'm always trying to dicourage people from modifying the core of mojoportal and put their custom code in external projects. If you make changes in the core code and those changes don't go back into the project you are basically creating a fork and it will be difficult to upgrade to future versions without losing your custom code, so unless you are working on something that is going to be integrated back into the project you should never change code in the core. If you run into something where you think you are going to need to modify the core, let us know in the developer forum and maybe we can suggest a way to accomplish your goal using external projects, or maybe we will consider integrating your change if its appropriate, or maybe your questions will lead us to add new extension points to make it possible to do what you want without modifying the core.

Event Calendar Pro Will Be On Sale Next Week

My first for sale feature will be in the Store sometime next week. The first version is feature complete, and you can try it out on demo.mojoportal.com. I still need to make help files, documentation, training/demo video, marketing text, licensing text, etc etc, so it will take me a few days to get that stuff done. I'll make a detailed post about this feature after its available.

 

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

mojoPortal Gets Advanced Google Analytics Integration

As of version 2.2.6.8, mojoPortal now includes advanced integration with Google Analytics. Google provides you with a basic script that you can use to track page views in your site, it looks like this:

<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-xxxxxxx-x");
pageTracker._trackPageview();
</script>

Historically, in mojoPortal and in other ASP.NET sites, you could always put this script into the bottom of your masterpage, in mojoPortal, that would be the layout.master file in your skin. This would get you basic tracking and it was very easy to do. Now in the current version of mojoPortal, you just enter this part "UA-xxxxxxx-x" from the script provided by google into your Site Settings  under (key icon) Administration Menu > Site Settings > API Keys like this:

Google Analytics Setting in mojoPortal

of course your code will be different than "UA-xxxxxxx-x", that just represents the format of your tracking code.

If you are using a custom skin, the only other requirement is to put this in the bottom of your layout.master file just before the closing form tag:

<portal:mojoGoogleAnalyticsScript ID="mojoGoogleAnalyticsScript1" runat="server" />
</form>

All the skins included in mojoPortal already have this so if you are using one of those you don't have to do anything other than the site setting above.

mojoPortal will automatically setup the script and it will do a lot more than the basic script.

One of the first advantages, is that it doesn't matter if you change skins or use different skins on different pages, the script will just work as long as the skin has the needed control. So for example in the past, unless you also put your google analytics script into the printerfriendly skin, it wasn't tracking page views when users clicked the printer friendly link, but now it does. THis also helped me with tracking traffic on demo.mojoportal.com, in the past I never bothered tracking that site because users could always change the skin and it was tedious to have to put my tracking code in all the skins. Now I just set it in user.config, you can set it there like this and it will trump the one in site settings : <add key="GoogleAnalyticsProfileId" value="UA-xxxxxxx-x" />.  The only reason I use it on the demo site is so that no-one can change it in site settings and affect my tracking. I mean people get to login to the demo site as admin after all.  Of course for multi site installations you want to always use the sitesettings.

In addition to the convenience of not having to maintain tracking codes in all your skins, mojoPortal will automatically label your visitors as Members if they are registered on your site, and if they make a purchase in WebStore or the Event Calendar Pro features they will be labelled as Customers. You will see this under the "User Defined" section of reports beneath Visitor reports. mojoPortal will also track ecommerce transactions in Google analytics from WebStore and from Event Calendar Pro features.

Site Search is also tracked, but to take advantage of it you need to configre your settings in google analytics like this:

google analytics search configuration, add a q as the query parameter for search

Note that you just enable it and set "q" as the Query Parameter. Now you will start to capture data in the Site Search Reports beneath the Content Reports.

You can also enable tracking of page load time by setting this in your Web.config or user.config: <add key="TrackPageLoadTimeInGoogleAnalytics" value="true" /> Unfortunately, as of the time of this writing, you won't see this yet in your google analytics reports unless you are in their beta program. But, by starting to capture data now, you will see it later when event reports come out of the beta process.

Another thing you can do is capture the google analytics data into your own IIS or apache web logs by setting this in Web.config or user.config: <add key="LogGoogleAnalyticsDataToLocalWebLog" value="true" />
To get any value out of this data you would need to get google Urchin and use it to analyze your web logs. Another reason to capture this data in your logs is because google analytics only keeps your data for 25 months.

If you have more than one host name that your site responds to like mojoportal.com and www.mojoportal.coom, recommend that you force a preferred host name, to keep your reportng consistent.

Since anyone can view the rendered source of a page and see your tracking code, its possible for someone else to put your code in their site and create bogus data in your reports. To avoid this, after forcing a preferred host name, I recommend that you set a filter on your google analytics profile. Click the Add Filter link:

screen shot showing the Add Filter link in google analytics

then configure it like this:

google analytics host name filter configuration screen shot

I'm really just learning about all the possibilities for taking full advantage of Google Analytics, I've learned what I have so far from the top book in this picture and hope to learn more ways to make it easy to get good tracking integrated into mojoPortal.

screen shot of a stack of books about google analytics and search engine optimization


 

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

mojoPortal 2.2.6.5 Released and the Semi-Grand Opening of the mojoPortal Store

I'm happy to announce the release of mojoPortal 2.2.6.5! Its been 2 months since our last release and a lot of good progress has been made.

What's New?

Upgrade to the newest version of MySql Connector
Upgrade to FCKeditor 2.6.2
Upgrade to the latest version of NeatHtml
Usability Improvements for google map enabled features and improvements to the search architecture as mentioned in this previous blog post.
A number of bug fixes as reported in the forums since the last release.
WebStore Improvements - the web store now supports selling download products using Authorize.NET, PaPal, and Google Checkout
A new plugin system for handling PageCreated events so developers can write their own handlers that execute after a page is created - not yet documented
A new plugin system for handling UserCreated events so developers can write their own handlers that execute after a nw user is created - not yet documented.

As always, be sure and backup your database and site before upgrading, and if you run into any problems post in the forums and we will try to help.

The Semi Grand Opening of the mojoPortal Store

I call it semi grand because no real products are available yet, all you can do in the store is buy me a beer at the moment. I expect to have my first product, Event Calendar Pro available by the end of July. You can see what I have so far for the Event Calendar Pro feature on the demo site http://demo.mojoportal.com/events. I decided to go ahead and open the store now because I thought it might interest others who want to use the mojoPortal WebStore to sell download products. The WebStore feature is very rudimentary now but it will be getting more love as I improve it to meet my own ecommerce needs. I will try to update some documentation on the WebStore soon. The one tip I will mention is you configure "Products" then you configure "Offers". Products are not sold directly, but by Offers. An Offer can have 1 or more products and price is set at the Offer level, not at the product level. The Product Catalog is very bare bones, we don't have categories yet so its really only good for a short list of products.

I've also opened up a store on CafePress to sell mojoPortal merchandise: http://www.cafepress.com/mojoportal.

t-shirtladies t-shirtcoffee mug

A great way to support mojoPortal, each item purchased contributes $5 to the project.

I'll announce the real Grand Opening of the mojoPortal Store as soon as our first product is available.

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

Coming Soon - The mojoPortal Store

Back in October of 2006 when I first launched my company, Source Tree Solutions to work full time on mojoPortal, I had kind of a fuzzy business plan with the main idea being that I would make revenue by offering consulting around the free mojoPortal product. I guess in my wide eyed optimism I thought that doing this kind of consutling would improve mojoPortal and in fact it did to some extent. A few customers actually sponsored development for things that improved mojoPortal for everyone. But most of the consutling was really for things that were not of any general benefit beyond the customer's needs, so in some cases I felt like taking on this work was actually slowing me down from progress on improving mojoPortal. Forming a business around consulting means you always have to be taking on more projects to keep the business going because you don't make any money unless you are doing billable work. Now I am in the process of shifting my strategy to sell some premium features on top of the free mojoPortal core product. I think that selling some products in order to generate revenue will be better because it will pay for the free time I need to keep improving the mojoPortal. Consulting will remain a part of my business model but my plan is to keep it very limited goig forward.

So with this changing strategy in mind I've been working feverishly to get my first product completed so that I can open up a Store here on mojoPortal.com in early July and begin selling it. The first feature for sale will be a more advanced Event Calendar that allows selling tickets to events. Following that I plan to build a Form Wizard that allows users to easily create forms to capture arbitrary data. I also plan a Fund Raiser feature and an add on package for Web Farm support. I have a lot of ideas for premium features, but my main goal is to just get enough revenue rolling in to allow me to keep improving the core. There are a lot of planned improvements for the core that I'm eager to complete, like built in support for tagging, comments, and content versioning so that they can easily be enabled for any feature with little effort. Eventually I'd like to open the store up so that other developers can also sell products there too, so that it can be a market place something like snowcovered.com which sells add ons for DNN.

One of the reasons I chose to implement a commerce enabled feature as my first product was so that I could figure out which pieces of the commerce architecture need to b re-usable. We already have a WebStore project that I will be using to sell my premium products and this WebStore is one of the free open source features of mojoPortal. So far the WebStore is very rudimentary, it can only sell download products and its really a bare bones implementation for the product catalog at the moment. The project was originally started under a sponsorship by BrainBeacon but was never completed fully because they went out of business before ever opening a store. Its hard to really polish up a complex feature like ecommerce unless you are actually using it for business or supporting a customer who is using it. So using it to sell my own products will lead to a lot of improvement in the WebStore feature. I've been doing a lot of re-factoring in the WebStore to get the re-usable pieces built into mojoPortal core so they can be used across features. For example, Country List, State List, Currency List, Language List and their administrative features were originally in the WebStore projects but I've moved them into the core of mojoPortal because they will be needed by other features. Support for Payment gateways like Google Checkout and PayPal are also being moved into the core so they can be re-used by any feature that wants to implement ecommerce. Since my first product will be an Event Calendar that allows selling tickets it will need to leverage a lot of the same ecommerce code that the WebStore does. Rather than re-implement it in every feature it has forced me to think about the best way to make most of it easily re-usable.

Implementing this more advanced Event Calendar has also led me to other improvements in the core of mojoPortal. For example one of the features in my new Event Calendar is support for recurring events. When you create a recurring event it actually creates event instances going out x number of years. Since  events are also searchable using the site search, you have to update the search index for each created event as well. What I found was that creating events in rapid succession due to recurrence could lead to some problems due to the way I was handling the indexing of items. The indexing was triggered by the saving of the event then code to update the index was spawned on a new thread so that it doesn't block the UI. Under some circumstances the writing to the index was not in the proper sequence and errors could occur. So I implemented a queue in the database so that items to be indexed could be queued and then processed in batch on a background thread while keeping the sequence correct because everything is processed in queue sequence.

Another thing that got improved in the core as I implemented this new Event Calendar is module settings, which is just a place to store feature specific settings for instances of a feature. In a number of the mojoPortal features we have support for google maps, but some of the settings needed for google maps were not well supported by module settings. For example the google maps api defines some constants for the Map Type like G_NORMAL_MAP, G_SATELLITE_MAP, G_HYBRID_MAP, etc. When I first enabled support for specifying the map type, it was done in module settngs by entering the constant in a textbox like this:

pretty yucky and not user friendly since its easy to put something incorrect there and nothing to tell the user what is acceptable. So as much as this bothered me I could not conceive of shipping a paid product with this kind of setting so I implemented ISettingControl as a way to introduce a possibility to use a custom UserControl for this setting and now for all features that use the google map the setting looks like this:

much better implemented as a dropdown list! Actually not shown in the screen shot is I also implemented a dropdown for the zoom level so that it is limited to the range of acceptable values.

So, in short, developing features to sell has made me think more deeply about what is needed in the core of mojoPortal to support 3rd party feature development more easily, because its made me think more like a third party.

I haven't blogged much this month because I've been so busy working to get this feature completed and to get the store opened, but thught I should go ahead and post this to let people know what I'm doing. Several people have asked recently what happened to the store demo site as it is currently off line. I will have that site back up soon. I just have a little more re-factoring of the WebStore code to do and I will setup the demo store again.

I'm very excited about the new store opening soon and will announce it here in the blog as soon as its open. There will also be anew release of mojoPortal soon with the improvements I've mentioned above as well as a few bug fixes and skin tweaks to better support Firefox 3.

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

Blog Improvements Landed in svn trunk

I put a little more love into the mojoPortal blog feature in the last few days.

We now have friendly urls for blog posts. Instead of the previous ~/BlogView.aspx?pageid=2&mid=19&ItemID=258, we now have ~/the-title-of-your-post.aspx

I also added a Next Previous, navigation to make it easier to page through the posts.

There is also a new Site Map for blog posts to make it easier for google and other search indexes to crawl your blog posts and improve your SEO. You can ad your blog site map to google webmaster tools as yoursiteroot/BlogSiteMap.ashx

This is available in svn trunk now for developers and will be in the next release for everyone else.

 

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