New Beta 5.1.0.364 release of DotNetNuke CE

Keeping with their promise to release often, we have a new beta version that was released today.  The new beta can be downloaded from CodePlex.

The following bugs have been fixed in this new release

(5.1.0.364) Beta 3

DNN-9853
Admin / Host Functions
Bug
Checked-In
Complete

Summary:   Binary Compatability issue for repository

DNN-9871
Admin / Host Functions
Bug
Checked-In
Complete

Summary:   Audit info when creating new pages

DNN-9661
Admin / Host Functions
Bug
Checked-In
Complete

Summary:   Errors in user registration form (profile properties)

DNN-9892
Admin / Host Functions
Bug
Checked-In
Complete

Summary:   Enable disable host menu

DNN-9898
Installation / Upgrade
Bug
Checked-In
Complete

Summary:   upgrade from 493 to 5.1.0.266

DNN-9899
File Manager
Bug
Checked-In
Complete

Summary:   Admin cannot add/delete folders or files, etc. in Admin-->File Manager

DNN-9904
Core Modules
Bug
Checked-In
Complete

Summary:   Repository is broken after after upgrading TestBed_493_3 with 5.1.0.266

DNN-9908
Skinning
Bug
Checked-In
Complete

Summary:   Skin ControlPanel breaking change

DNN-9905
Admin / Host Functions
Bug
Checked-In
Complete

Summary:   Some Admin/ Host Controls are missing after upgrading TestBed_493_3 with 5.1.0.266

DNN-9903
Installation / Upgrade
Bug
Checked-In
Complete

Summary:   Languages broken after upgrading TestBed_493_3 with 5.1.0.266

DNN-9895
Admin / Host Functions
Bug
Checked-In
Complete

Summary:   Adding Module to Another Page

DNN-9897
UI / Usability
Bug
Checked-In
Complete

Summary:   No longer shows page hierarchy when adding existing module

DNN-9856
Admin / Host Functions
Bug
Checked-In
Complete

Summary:   Upgrade from 5.0.1 - Console

DNN-9918
Admin / Host Functions
Bug
Checked-In
Complete

Summary:   Exception when emptying recycle bin

DNN-9916
Admin / Host Functions
Bug
Checked-In
Complete

Summary:   Menu doesn't refresh after restoring a page

DNN-9930
Admin / Host Functions
Bug
Checked-In
Complete

Summary:   Error on Language rename

DNN-9890
Admin / Host Functions
Bug
Checked-In
Complete

Summary:   changes to tabs need to audit tab and tabpermission changes

DNN-9952
General
Bug
Checked-In
Complete

Summary:   Module Settings: Move module to page results in a copy instead.

DNN-9964
File Manager
Bug
Checked-In
Complete

Summary:   Permissions Grid Does Not Correctly Display Permissions

DNN-9965
UI / Usability
New Feature
Checked-In
Complete

Summary:   Display version info for "Beta" builds

DNN-9967
Admin / Host Functions
Bug
Checked-In
Complete

Summary:   user view shows all users

DNN-9936
Admin / Host Functions
Bug
Checked-In
Complete

Summary:   Sitemap priority defaults to 0

DNN-9925
Admin / Host Functions
Bug
Checked-In
Complete

Summary:   Fallback Skin Doctype changes not reflected in UI on load / postbacks

DNN-9912
Security
Bug
Checked-In
Complete

Summary:   5.1.0 - Possible Breaking Change FileSystemUtils.SetFolderPermissions

DNN-9946
Admin / Host Functions
Bug
Checked-In
Complete

Summary:   Behaviour Change for Inline Editing

DNN-9254
Performance
Bug
Checked-In
Complete

Summary:   "PageState Persistence" set to "Memory" kills AJAX modules

DNN-9568
Security
Bug
Checked-In
Complete

Summary:   Permission issues

DNN-9654
Search
Bug
Checked-In
Complete

Summary:   Search Input module: no search text

DNN-9950
Localization / ML
Bug
Checked-In
Complete

Summary:   Incorrect icon for button

DNN-9928
Control Panel
Bug
Checked-In
Complete

Summary:   User with page edit permission can see admin & host console links

DNN-9953
Admin / Host Functions
Bug
Checked-In
Complete

Summary:   Missing Default Language options => Broken Site Settings

DNN-9948
Admin / Host Functions
Bug
Checked-In
Complete

Summary:   Control Panel Visibility Selection not Saved properly

DNN-9971
Admin / Host Functions
New Feature
Checked-In
Complete

Summary:   Add Skin Event Handling

 

There is a new release expected at any time to cure the issue that developed today that involves not allowing the install to complete if .NET 3.5 is not installed on the system.

Posted on 5/22/2009 7:41:17 PM by omacdon

Permalink | Comments (1) | Post RSSRSS comment feed |

Categories: Programming | Software | DotNetNuke | ASP.NET

Tags: , , ,

Configuring DotNetNuke to Produce a Human Friendly URL

One of the big complaints that I have seen over the years with DotNetNuke has been the horrible URL’s that get produced by the framework.  This is a problem that is part of most dynamically created content on the web, not only DotNetNuke.

For the successful Content Management Systems, they have come up with ways to make these ugly URL’s more human friendly.  DNN did this back in about version 3.0 with the introduction of Friendly URL’s.  This allowed us to get rid of the dreaded querystring for SEO purposes.  So we went from URL’s that looked like http://domain.com/Default.aspx?tabid=39 to http://domain.com/Home/tabid/36/Default.aspx.

This was great for getting better rankings with the pages in the search engines but doesn’t give us that URL that is easy to remember in human terms.  This is the default setup that has made it’s way into the DotNetNuke eco-system, and has given us this common complaint about DotNetNuke sites in general.

There is a solution to this that anyone who is looking to make their site distinctive and remove that stigma about it being a DNN site can use.  It is available within the core framework itself we just need to make some changes to the configuration of the web application.

So lets look at the default configuration in the web.config file for the Friendly URL provider:

   1: <friendlyUrl defaultProvider="DNNFriendlyUrl">
   2:   <providers>
   3:     <clear />
   4:     <add name="DNNFriendlyUrl" 
   5:         type="DotNetNuke.Services.Url.FriendlyUrl.DNNFriendlyUrlProvider, DotNetNuke.HttpModules" 
   6:         includePageName="true" 
   7:         regexMatch="[^a-zA-Z0-9 _-]" />
   8:   </providers>
   9: </friendlyUrl>

As you can see it only has a couple of options defined by default in the config file when you first install DNN which are the following:

  1. includePageName: this is set to true by default and determines if we have the name of the page included in our URL when we are in searchfriendly mode of the provider.
  2. regexMatch: I'm not a regex expert by any means.  But the default match allows the inclusion of all upper and lower characters as well as ll numbers, spaces, underscores and dashes.  If I’m wrong someone let me know in the comments would you.

This is what gives us those ugly URL’s everyone complains about. 

Now when we venture into the Core Framework code for the FriendlyUrl Provider, we have a few more options that aren’t shown in the web.config and can really give us some nicer URL’s to work with on our DNN site.

FriendlyURL Provider Options

  1. includePageName: this was explained above.
  2. regexMatch: this was explained above
  3. fileExtension: by default the file extension on DNN is .aspx. I played around with this option and also looked at the code and although it is defined and being pulled into the provider in the code. I don’t see where this is actually doing anything in provider.
  4. urlFormat: this is the real treasure in the provider we have two URL formats that we can use here the default of searchfriendly or humanfriendly. If we do not include it in the web.config then by default it is searchfriendly but if we add this and change it to humanfriendly then we have much nicer URL’s to work within the framework.

So lets change it in our web.config file to be humanfriendly:

   1: <friendlyUrl defaultProvider="DNNFriendlyUrl">
   2:   <providers>
   3:     <clear />
   4:     <add name="DNNFriendlyUrl" 
   5:         type="DotNetNuke.Services.Url.FriendlyUrl.DNNFriendlyUrlProvider, DotNetNuke.HttpModules" 
   6:         includePageName="false" 
   7:         regexMatch="[^a-zA-Z0-9 _-]" 
   8:         fileExtension=".aspx" 
   9:         urlFormat="humanfriendly" />
  10:   </providers>
  11: </friendlyUrl>

Once we do this and save our web.config file. We can go refresh our site, and now should have URLs that look like the following: http://domain.com/home.aspx or http://domain.com/admin.aspx.  It also makes it easier for allowing direct logins without placing a link on the page for logging in because in this format our login page becomes http://domain.com/login.aspx.

I hope that people find this information useful although what we have in DNN is just a basic URL provider there are other providers out there in the DNN community.  When I have time I will try to add some of them to this post or provider another post with a list of them out there.

Technorati Tags: ,,

Posted on 5/16/2009 9:59:31 AM by omacdon

Permalink | Comments (5) | Post RSSRSS comment feed |

Categories: ASP.NET | DotNetNuke | Programming | Software

Tags: , , ,

DotNetNuke 5.1.0.266 Beta released

DotNetNuke Community Edition Well today has been a great day for anyone who uses and develops with DotNetNuke. The first public release of 5.1 was released to everyone on Codeplex today.  Although it wasn’t without mishap today.

The first version that was uploaded and released version 5.1.0.254 had a couple of show stopper issues that prevented the installation of the framework.  This was quickly noticed and replaced with a good version. 

I recommend anyone who is developing modules and skins for DNN and want to get a good look at the direction that the framework is headed, then you should download this version and see what is coming.  There are some great changes that I will document in some future blog posts as time permits over the next week or so.

I will be posting a blog post about the installation of the new version and hope to have that available shortly.

To find out more:

One thing to remember with this software, it is beta software and should not be used in any production system.  This software should only be used for evaluating the software as to new features that will be available in the release.

Technorati Tags: ,,

Posted on 5/12/2009 10:18:33 PM by omacdon

Permalink | Comments (0) | Post RSSRSS comment feed |

Categories: Cambrian | ASP.NET | DotNetNuke

Tags: , ,

New Microsoft Web Platform Installer Beta 2

During MIX09, the Web Platform Installer was mentioned in the first keynote on Wednesday, March 18. Some of the new features they mentioned were a new Web Application Gallery to install these on your server or local machine easily.

They also talked about some new extensions for IIS 7 as well.  Well they have many new features in this Beta.  I will go over them and I am testing it to see how it will do with installing some PHP applications as they are the hardest for me to get working properly on my Vista Laptop.

Web Platform Installer Download

Overview

The Microsoft Web Platform Installer 2.0 (Web PI) is a free tool that makes it simple to download, install and keep up-to-date with the latest components of the Microsoft Web Platform, including Internet Information Services (IIS), SQL Server Express, .NET Framework and Visual Web Developer. In addition, install popular open source ASP.NET and PHP web apps with the Web PI.

What’s New

Lots of new goodies to play with and as well as configuring Sql Server 2008, PHP and installing several web applications and configuring them for you.

Well off to play with it and see how it goes.

kick it on DotNetKicks.com

Posted on 3/21/2009 9:40:00 PM by omacdon

Permalink | Comments (0) | Post RSSRSS comment feed |

Categories: SQL Server | Windows Server | Software | IIS | ASP.NET | DotNetNuke

Tags: , , , , ,

You Searched For User Control in BlogEngine.NET

I received an interesting comment today about my blog.  It was really appreciative of a feature that is included within the blogging engine. Which is the “You Searched For” user control.  This takes the search query that is sent along from the search engine and matches it to a search within the local site when the referrer comes from a search engine.

What especially made me take notice is that the comment came from a member of the DotNetNuke Blog Module team. With a request to understand how this was achieved within my site.  Well I figured I could have just sent back a quick and dumb answer of it is just part of the blogging engine I use.  Which in my case is BlogEngine.NET.  Or I could do what I am doing now and go into to detail about how the blogging engine accomplishes this, which is what was really being looked for.

With that in mind I will walk through how it is accomplished as I think this would be a great control to be a part of the DotNetNuke core Blog Module as well as a module that could be used to allow people to get more search results when they land on a DNN site.  May have to build that.

There are two parts to this to make it work successfully.  The first part is the addition of the user control to skin theme for my blog site.

  1: <blog:SearchOnSearch ID="SearchOnSearch1" 
  2:     runat="server" MaxResults="5" 
  3:     Headline="You searched for"
  4:     Text="Here are some results for the 
  5:     search term on this website" />

The second part is the code that is behind this user control.  First of we have a few properties that can be configured on the control

Properties:

  1. MaxResults: This is the maximum number of results to return to the page if there are any found.
  2. Headline: This is the headline to display for the control when it returns search items found.
  3. Text: This is the text to be displayed below the headline and above the search results.

Class Implementation:

  1: 
  2:  public class SearchOnSearch : Control
  3:  {
  4:      private static Regex _rxSearchTerm = null;
  5:  
  6:      static SearchOnSearch()
  7:      {
  8:  	// Matches the query string parameter "q" and 
  9:         // its value.  Does not match if "q" is blank.
 10:  	_rxSearchTerm = new Regex("[?&]q=([^&#]+)", 
 11:              RegexOptions.Compiled | 
 12:              RegexOptions.IgnoreCase | 
 13:              RegexOptions.CultureInvariant);
 14:      }
 15:  
 16:      public override void RenderControl(
 17:           HtmlTextWriter writer)
 18:      {
 19:   	string html = Html();
 20:   	if (html != null)
 21:   	    writer.Write(html);
 22:      }
 23: 
 24:     /// <summary>
 25:     /// Checks the referrer to see if it qualifies as a search.
 26:     /// </summary>
 27:     private string Html()
 28:     {
 29:         if (Context.Request.UrlReferrer != null 
 30:             && !Context.Request.UrlReferrer.ToString().Contains(
 31:             Utils.AbsoluteWebRoot.ToString()) && IsSearch)
 32:         {
 33: 	    string referrer = HttpContext.Current.Request.UrlReferrer.ToString().ToLowerInvariant();
 34: 	    string searchTerm = GetSearchTerm(referrer);
 35: 	    List<IPublishable> items = Search.Hits(searchTerm, false);
 36:             if (items.Count == 0)
 37:                 return null;
 38:             return WriteHtml(items, searchTerm);
 39: 	}
 40: 
 41: 	return null;
 42:     }
 43: 
 44:     /// <summary>
 45:     /// Writes the search results as HTML.
 46:     /// </summary>
 47:     private string WriteHtml(List<IPublishable> items, 
 48:         string searchTerm)
 49:     {
 50: 	int results = MaxResults < items.Count ? MaxResults : items.Count;
 51: 	StringBuilder sb = new StringBuilder();
 52: 	sb.Append("<div id=\"searchonsearch\">");
 53: 	sb.AppendFormat("<h3>{0} '{1}'</h3>", Headline, HttpUtility.HtmlEncode(HttpUtility.UrlDecode(searchTerm)));
 54: 	sb.AppendFormat("<p>{0}</p>", Text);
 55: 	sb.Append("<ol>");
 56: 
 57: 	for (int i = 0; i < results; i++)
 58: 	{
 59: 		sb.AppendFormat("<li><a href=\"{0}\">{1}</a></li>", items[i].RelativeLink, items[i].Title);
 60: 	}
 61: 
 62: 	sb.Append("</ol>");
 63: 	sb.Append("</div>");
 64: 
 65: 	return sb.ToString();
 66:     }
 67: 
 68:     /// <summary>
 69:     /// Retrieves the search term from the specified referrer string.
 70:     /// </summary>
 71:     private string GetSearchTerm(string referrer)
 72:     {
 73: 	string term = string.Empty;
 74: 	Match match = _rxSearchTerm.Match(referrer);
 75: 	if (match.Success)
 76: 	{
 77: 		term = match.Groups[1].Value;
 78: 	}
 79: 
 80: 	return term.Replace("+", " ");
 81:     }
 82: 
 83:     /// <summary>
 84:     /// Checks the referrer to see if it is from a search engine.
 85:     /// </summary>
 86:     private bool IsSearch
 87:     {
 88: 	get
 89: 	{
 90: 		string referrer = HttpContext.Current.Request.UrlReferrer.ToString().ToLowerInvariant();
 91: 		return _rxSearchTerm.IsMatch(referrer);
 93:     }
 94:  }

As we can see from the class it checks to see if there is a query “q” attached to the referring url to see if this comes from a search engine. If it does then we want to search the site and see if we have any posts that we can display to the user.

This is really neat and helpful for users.

kick it on DotNetKicks.com

Posted on 3/21/2009 6:48:26 PM by omacdon

Permalink | Comments (0) | Post RSSRSS comment feed |

Categories: DotNetNuke | BlogEngine.NET | ASP.NET | Programming

Tags: , , ,

Microsoft SDK Downloads

For anyone having trouble trying to find an SDK that they know Microsoft ships have a look at the following it may provide and answer for you in your search.

Microsoft SDKs

Technorati Tags:

kick it on DotNetKicks.com

Posted on 1/22/2009 3:36:01 PM by admin

Permalink | Comments (0) | Post RSSRSS comment feed |

Categories: ASP.NET | C# | Programming | SQL Server | VB.NET | Windows Server

Tags:

Blogengine.NET Theme pack

BlogEngine.NET has released a theme pack that is compatible with the version 1.4 and 1.4.5. 

The theme pack contains themes designed and created by the community, and they have been brought together as a downloadable theme pack.  Janko has compiled them together for the community to use.

Download the BlogEngine.NET theme pack here.

kick it on DotNetKicks.com

Posted on 1/4/2009 2:32:57 PM by admin

Permalink | Comments (0) | Post RSSRSS comment feed |

Categories: ASP.NET | BlogEngine.NET | Programming | Software

Tags:

DotNetNuke 5.0.0 Skin Repackaging Script

Paul Scarlett of tressleworks.ca has created a Visual Basic Script to re-package DNN 4.0 skins into the new format for DNN 5.0.

The script is designed to unzip an existing skin/container package and then generate the appropriate manifest and then repackage it back up for deployment to a DNN 5.0 site.

He makes mention of requiring the following library to be installed on your system: XStandard XZip library.

Download DotNetNuke Skin Repackaging Script

kick it on DotNetKicks.com

Posted on 12/28/2008 11:17:31 AM by admin

Permalink | Comments (0) | Post RSSRSS comment feed |

Categories: ASP.NET | Cambrian | DotNetNuke

Tags: , , ,

DotNetNuke Releases 4.9.1 and 5.0.0 for Christmas

For anyone new to DotNetNuke and that hasn’t been a member of the DNN Community for long then they wouldn’t understand the significance of this date in the history of DNN.  On December 24, 2002 the first release of IBuySpy Workshop was released to the community on the ASP.NET forums that hosted the discussion's surrounding the IBuySpy Portal Starter Kit.  That was the beginning of the tool that is now known as DotNetNuke.

So as I like to periodically check for new updates and see if I can catch them happening.  I did notice the change start on Christmas Eve day for the release of DNN 4.9.1 and 5.0.0. I was excited but I let it ride till I could check it out on Christmas Day after the presents were unwrapped and before I rushed off to have dinner with the in-laws.

DNN 5.0.0 has been a long anticipated release with much discussion about the feature set and what would be available when it was released.  What I have seen of the 5.0.0 RC2 release was exceptional and will provide many opportunities to extend this many new features for skin developers and module developers alike.

DNN 4.9.1 is a stabilization release to fix some known issues and bug patches to the community.  There is a critical security issue that has been fixed so an upgrade to this release is strongly suggested.

DNN 5.0.0 Major Features

  • Added jQuery support to the core platform.  jQuery will now be distributed as part of the DotNetNuke installation and will be available for use by module developers.
  • Added support for Internet Explorer 8 Web Slices.  Administrators can configure any module to use IE8 Web Slices including the ability to set time-to-live and expiration values.
  • Removed distinction between admin modules and pages and normal pages.  This allows administrators to easily delegate access to any portion of the application to any group of users.
  • Updated the installation services to support manifest files for all extension types.  Now skins, containers, providers and modules are all first class citizens that can be installed and uninstalled.
  • Expanded XHTML, WCAG and ADA compliance.
  • Refactored core to improve support for Unit Testing.  Refactored several core classes to use interfaces and added a simple component factory to provide dependency injection support. 
  • Added ability to deny permissions in the permissions grid.  This new feature extends the permission framework to give administrators greater flexibility in defining permissions.
  • Added Widget framework.  The new Widget framework allows you to quickly add JavaScript/html widgets to your site with very little effort.  The framework supports the use of a simple object tag based representation which means you don’t have to know JavaScript in order to add the widgets.
  • Added new Object notation for using skin objects in Skins.  Skin designers will no longer need to include separate XML files when creating and packaging skins.  No more funky “[SKINOBJECT]” tags littering your html.  This significantly simplifies the process of creating skins and further opens up skin development to a broader group of designers.  If you include a simple JavaScript reference in your HTML skin, you can even get a full WYSIWYG experience when designing your skin.

Security Fixes

  • Includes a rollup of all 4.x security fixes

Updated Modules/Providers

The following modules and providers have been updated in the 5.0.0 packages.  Please see the specific project pages for notes on what bugs or enhancements were corrected with each release.

Providers

In addition to these highlights there are literally hundreds of bug fixes in this release.

For more information about a specific issue please refer to the official change log.

DNN 4.9.1 Major Features

  • Fixed issue with the cache which was preventing proper operation of the scheduler.
  • Fixed issue with web crawlers which could cause thrashing in the cache
  • Fixed issue with the EventQueue to remove events that result in an error.  This prevents an event from filling the event log with errors.
  • Fixed issue with the RoleController.GetUserRoles method which introduced a breaking change in 4.9.0.
  • Added a new column to the version table to distinguish between Community Edition and Professional Edition installs
  • Added a new feature for logging server restarts in a web farm environment.
  • Added a new admin Dashboard page.  The dashboard provides a single page where hosts can view an overall snapshot of their site.

Security Fixes

Updated Modules/Providers

The following modules and providers have been updated in the 4.9.1 packages.  Please see the specific project pages for notes on what bugs or enhancements were corrected with each release.

Modules

Providers

As always the new releases can be downloaded at the DotNetNuke web site.

kick it on DotNetKicks.com

Posted on 12/27/2008 7:45:58 AM by admin

Permalink | Comments (0) | Post RSSRSS comment feed |

Categories: ASP.NET | Cambrian | DotNetNuke | Software

Tags: , , ,

Converting HTML Hex Color Codes to RGB in ASP.NET

This is another post for my own remembrance. While working with controls in ASP.NET most of the back colors use the RGB color references instead of allowing you to quickly plug in the Hexadecimal numbers to the control.  At first glance this looks to be a daunting task as there doesn’t appear to be a quick solution for this within the Color class in either VB.NET or C#. But the solution is pretty simple

VB.NET Example

  1: MyControl.BackColor = ColorTranslator.FromHtml("#FFFFFF")

C# Example

  1: MyControl.BackColor = ColorTranslator.FromHtml("#FFFFFF");

It actually becomes pretty easy after you find it.  There are some pretty elegant solutions to this problem on the NET but a lot of them don’t take advantage to what Microsoft has already built into the .NET Framework.

Technorati Tags: ,,,

Posted on 9/24/2008 2:03:25 AM by admin

Permalink | Comments (0) | Post RSSRSS comment feed |

Categories: ASP.NET | C# | Programming | VB.NET

Tags: , , ,