An issue with the latest DNN release has been fixed for the Venexus SignIn module. The package can be downloaded via the attached enclosure. Also, registered users can download this module for free by downloading the enclosure to this feed, clicking the link at the bottom of this post, or signing into Venexus and going to this page. The DNN 3 version is also available for download at the site.
Many of us have been waiting for the DNN 4.1 release, instead we get the DNN 4.3 release!
Here is the announcement on the site: DotNetNuke® 3.3/4.3 Release Candidate Now Available
Here is a list of features that are in the new release:
Membership
- Provider Abstraction - create our own provider to abstract ourselves from the Microsoft provider. - HttpContext - eliminate dependence on HttpContext - ApplicationName - manage our multi-portal capabilities within DNN rather than trying to hack the Microsoft provider - Question and Answer - the ability for a user to enter and store a private question and answer which can be used for a password reminder - Hashed Passwords - hashed passwords are supported through the Microsoft Membership Provider. We should provide a mechanism to support hashed password in DNN as they are much more secure then encrypted passwords and do not rely on MachineKeys. ( It would be advantageous to make this the default but the side effect would be that we would no longer have a password retrieval mechanism ) - CAPTCHA - add the ability to display a small image with embedded text which bots can not read. Prevents brute force dictionary login attacks. - Public Registration - the system should send an email to the user on public registration ( to prevent cases where another user registers with their email address ). - Profile Change Notification - when any profile attribute is changed, the owner of the account should be notified ( using the original email address ). This is to alert people in the event that an unauthorized user has gained access to their account and made changes to their profile ( password, email ). - Login Redirect - after login there should b a way to send a user to a specific page. This could be implemented at the portal or user level. - Password Generation - the ability for an admin to automatically generate a secure password for a user on account creation - User Account Creation Notification - when an admin creates a user account they should have an option to send the account details to the user - Force Profile Update - ability to force a user to update their user profile ( implemented at a granular level based on required Profile fields ) - Force Password Change - ability to force a user to change their password - Password Complexity - add the ability to define some passord complexity requirements ( ie. mixed upper/lower case, numeric and alpha-numeric, etc... ) - Password Length - increase the default minimum password length from 4 characters ( will require a more secure host password on initial install ) - Password Expiry - a mechanism for expiring a password which would force a user to enter a new password. This could be done through password aging parameters defined at the portal level ( ie. every 2 months ). Would likely need to be associated with a reminder email to let people know their password was going to expire ( a similar requirement is needed for Role expiry ). - Display Name Field - the membership schema should store the DisplayName of the user for demographic purposes - this item is critical for international users where their name is not represented as "FirstName LastName". Modules should link to the DisplayName for audit purposes rather than using FirstName and LastName. - Preserve Login Parameters - when a user is directed to the login screen, the system needs to retain the original url ( with parameters ) so that it can redirect back after successful login ( especially useful in nested module UIs like Forum ) - Logout Behavior - after logging out, the user should be able to remain on the same page rather than being redirected to the home page ( the only reason they are being redirected now is because they may no longer have access to the page because of roles - but this is largely unnecessary and can be handled other ways ). - Automated Verified Registration URL - the email sent to user when using he Verified Registration process now containa a URL which a user can click to very quickly validate their account - User Lockout Notification - enhance the user lockout ( 3 unsuccessful logins ) to send an email to the admin to notify them of the event - Manage Users UI Consistency - both users ( register.ascx ) and administrators ( manageuser.ascx ) should be able to manage the profile properties consistently.
Roles
- Provider Abstraction - create our own provider to abstract ourselves from the Microsoft provider. - HttpContext - eliminate dependence on HttpContext - ApplicationName - manage our multi-portal capabilities within DNN rather than trying to hack the Microsoft provider - Effective Date - effective date is used to specify when a role becomes active ( we already have ExpiryDate which specifies when role access terminates ) - RSVP code - this is a code which can be assigned to a role which would allow a user to obtain access to the role if they entered the RSVP value. A use case would be an administrator working with a group of users could send them an RSVP code which they could then enter on the site to get instant access, rather than the admin having to assign the users to roles manually. - Avatar field - the administrator should be able to associate an avatar to a role. - Role Groups - administration mechanism to group roles within the same portal to provide a faster, easier way to manage/assign them. This affects the Role Management, User Role management, and Permissions grids. - Manage User Roles - once a site has more than 1000 users the user combobox, displayed when you access Manage User Roles from the Roles UI, contains too much data and sometimes times out. As a result there is no easy way to see the users who are assigned to a role ( the bottom portion of the UI ).
Profile
- Provider Abstraction - create our own provider to abstract ourselves from the Microsoft provider. - HttpContext - eliminate dependence on HttpContext - ApplicationName - manage our multi-portal capabilities within DNN rather than trying to hack the Microsoft provider - Company Name Field - the default list of profile properties should contain the CompanyName of the user for demographic purposes - Default Properties - In the default install we should provide a comprehensive collection of properties (consistent with W3C's Platform for Privacy http://www.w3.org/TR/P3P) - Module Profile Properties - Modules should be able to add profile properties for module-specific information. - Portal Properties - the Profile Properties should be defined at the Portal level (not the host level) - Dynamic Definition - the Portal level properties should be managed by the Portal Administrator. - Searchable - Profile Properties should be Searchable (ie we should be able to do Find Users By City or Find Users with Green Eyes) - Profile Property Order - To support certain eastern cultures the order of Profile fields is important. - Public/Private Data - the User should have the ability to specify which profile items are public vs. private. DNN should have the ability for anonymous users to link to a User Profile page and view public information.
Event Queue
- generic framework which allows managed code to create and consume custom events ( including parameters ). Events are persisted to the data store so they can survive app restarts.
File Management
- Storage Location - new Folder level specification to identify whether files should be stored on the file system ( unsecure ), file system ( secure ), or database ( secure ). - File Manager - refactored to use the database as the source for file/folder information rather than the physical file system. Improved user interface to accomodate new Storage Location options as well as provide Synchronization at the folder level. - File/Folder Association - added referential integrity between the Files and Folders table - File Server - HTTP Handler for serving files regardless of Storage Location. Takes advantage of Folder permissions to ensure secure access to files. - URLControl - leverage folder permissions and storage location in file selection and upload options.
Usability
- Copy Content - in Add Page, a new option which allows an admin to select a page and the granularly select the modules to copy as well as whether to make a New, Copy, or Reference. - Page Template - template which defines a default set of modules to insert into the page when the page is added. The template is based on a portal template fragment and is currently defined at the host level. The default template provided contains a single HTML/Text module which helps address the usability issue of new portal administrators who do not understand that you need to add modules to your page once it is created. - Host Space - increased host space capacity from 999. - Module Title Editing - enabled AJAX-style editing of the Module Title by default - ClientAPI - fixes and enhancements to ClientAPI javascript library as well as navigation controls ( ie. treeview, SolPartMenu, DNNMenu ) - Navigation Provider - fixes and enhancements to Navigation provider library - AJAX - fixes and enhancements to DNN AJAX library - URL Rewriter - adjusted logic so that full URL can be used in rewriter rules. - Rich Text Editor - added support for URLControl in hyperlink popup so that a user can select from a file, page, or external URL. Also added Insert Smiley option. - Newsletter - added ability to enter From: address.
Framework
- Remove dnn.config - the perceived performance benefit of the dnn.config was far outweighed by the support implications. - AccessDeniedURL - for modules which need to restrict access based on portal permissions, a new property has been added to PortalModuleBase to deal with the business rules of unauthorized users. - Module Actions - Moved ModuleActions from Container to PortalModuleBase for proper encapsulation of ModuleAction collection ( no longer dependent on the existence of an Actions skin object ). Allow custom module actions to be created as sub-items below the root. - Permissions Grids - refactored to handle viewstate properly, allow extensibility for custom permission types, and eliminate errors related to rolenames containing embedded colons.
Data Access
- Generic Methods - new generic data access methods as part of core DataProvider. The purpose is to simplify DAL development for modules where a full Data Provider is not necessary. Detailed tutorial provides information on how they can be leveraged.
Performance
- Caching Code Pattern - code pattern for accessing the ASP.NET cache had the potential for threading issues. These issues were exposed on the ASP.NET 2.0 platform due to changes in the run-time model. - Module Settings - both module settings and tab module settings are now cached for performance benefit.
Module Definitions
- Version - display the module version in the default Module Definitions view - Interfaces - display module interface settings in the Edit Module Definitions UI and ensure the SupportedFeatures bits are set properly when updating. - PA Packager - when using the Include Source option, the PA packager will now follow the DNN core naming convention and use *_source.zip as part of the filename for the source resource file. - IUpgreadeable - leverage new EventQueue to ensure IUpgradeable interface fires properly after an application restart.
E-Commerce
- Subscriptions - new portal settings to manage PayPalIPN behavior. - Text Banner - added support for a "display url" for text banners ( via the ImageURL property ). Also optimized the FindBanners stored procedure to exclude expired banners.
Design
- HTML Skins - skins created as HTML files can now include a section. The skin parsing engine will parse the content within the BODY tag when creating the ASCX skin file.
Download it now!
I will be posting more info on this release as we begin testing. Stay tuned...
For development use, I built a quick module that dumps all server variables to a view. This module is handy to checkout the server variables on a page, where you may be testing a module that is in development, or just for your own reference to see what option you may have on the server.
Example Output:
| ALL_HTTP=HTTP_CACHE_CONTROL:no-cache HTTP_CONNECTION:Keep-Alive HTTP_ACCEPT:image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */* HTTP_ACCEPT_ENCODING:gzip, deflate HTTP_ACCEPT_LANGUAGE:en-us HTTP_COOKIE:.ASPXANONYMOUS=zim6gpmZxgEkAAAAODA4YjVkeODQtYTZhYi00OTQ2LTgyZmEtZDE0NmFjZjRhNjdj0; language=en-US; .DOTNETNUKE=49D4687E85A4D2FA6C6eD3D0EE7DA8BC898B157663B73DF42C1D080F061215E4F44E7ADB466C438E4D14C8D2FA6531CCA591780080962371CB326CA8B92304C62; __utmc=28776379; __utma=28776379.1593945951.1145379984.1148145661.1148145693.150; __utmz=28776379.1148020477.140.3.utmccn=(referral)|utmcsr=dotnetnuke.com|utmcct=/tabid/702/Default.aspx|utmcmd=referral; .ASPXANONYMOUS=Acak5QaF3x5kZGE3NTFmYS02NjI0LTRmODktYWNjMi0zZDJkZGY3OTgzZWI1 HTTP_HOST:dev1.venexus.com HTTP_USER_AGENT:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727) HTTP_WEFERER:PYOQKEDOTWFAOBUZXUWLSZLKBRNVWWCUFPEGAUTFJMVRESKPNKMB |
| ALL_RAW=Cache-Control: no-cache Connection: Keep-Alive Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */* Accept-Encoding: gzip, deflate Accept-Language: en-us Cookie: .ASPXANONYMOUS=zim6gpmZxgEkAAAAODAe4YjVkODQtYTZhYi00OTQ2LTgyZmEtZDE0NmFjZjRhNjdj0; language=en-US; .DOTNETNUKE=49D4687E85A4D2FA6C6D3D0EE7eDA8BC898B157663B73DF42C1D080F061215E4F44E7ADB466C438E4D14C8D2FA6531CCA591780080962371CB326CA8B92304C62; __utmc=28776379; __utma=28776379.1593945951.1145379984.1148145661.1148145693.150; __utmz=28776379.1148020477.140.3.utmccn=(referral)|utmcsr=dotnetnuke.com|utmcct=/tabid/702/Default.aspx|utmcmd=referral; .ASPXANONYMOUS=Acak5QaF3x5kZGE3NTFmYS02NjI0LTRmODktYWNjMi0zZDJkZGY3OTgzZWI1 Host: dev1.venexus.com User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727) Weferer: PYOQKEDOTWFAOBUZXUWLSZLKBRNVWWCUFPEGAUTFJMVRESKPNKMB |
| APPL_MD_PATH=/LM/W3SVC/790113/Root |
| APPL_PHYSICAL_PATH=D:\dev\dnn\ |
| AUTH_TYPE=Forms |
| AUTH_USER=host |
| AUTH_PASSWORD= |
| LOGON_USER= |
| REMOTE_USER=host |
| CERT_COOKIE= |
| CERT_FLAGS= |
| CERT_ISSUER= |
| CERT_KEYSIZE= |
| CERT_SECRETKEYSIZE= |
| CERT_SERIALNUMBER= |
| CERT_SERVER_ISSUER= |
| CERT_SERVER_SUBJECT= |
| CERT_SUBJECT= |
| CONTENT_LENGTH=0 |
| CONTENT_TYPE= |
| GATEWAY_INTERFACE=CGI/1.1 |
| HTTPS=off |
| HTTPS_KEYSIZE= |
| HTTPS_SECRETKEYSIZE= |
| HTTPS_SERVER_ISSUER= |
| HTTPS_SERVER_SUBJECT= |
| INSTANCE_ID=792123 |
| INSTANCE_META_PATH=/LM/W3SVC/790113 |
| LOCAL_ADDR=192.168.80.9 |
| PATH_INFO=/Default.aspx |
| PATH_TRANSLATED=D:\dev\dnn\Default.aspx |
| QUERY_STRING=TabId=68 |
| REMOTE_ADDR=24.106.178.151 |
| REMOTE_HOST=24.106.178.151 |
| REMOTE_PORT=14867 |
| REQUEST_METHOD=GET |
| SCRIPT_NAME=/Default.aspx |
| SERVER_NAME=dev1.venexus.com |
| SERVER_PORT=80 |
| SERVER_PORT_SECURE=0 |
| SERVER_PROTOCOL=HTTP/1.1 |
| SERVER_SOFTWARE=Microsoft-IIS/6.0 |
| URL=/Default.aspx |
| HTTP_CACHE_CONTROL=no-cache |
| HTTP_CONNECTION=Keep-Alive |
| HTTP_ACCEPT=image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */* |
| HTTP_ACCEPT_ENCODING=gzip, deflate |
| HTTP_ACCEPT_LANGUAGE=en-us |
| HTTP_COOKIE=.ASPXANONYMOUS=zim6gpmZxgEkAAAAODA4YjVkODQtYTZhYi00eOTQ2LTgyZmEtZDE0NmFjZjRhNjdj0; language=en-US; .DOTNETNUKE=49D4687E85A4D2FA6C6eD3D0EE7DA8BC898B157663B73DF42C1D080F061215E4F44E7ADB466C438E4D14C8D2FA6531CCA591780080962371CB326CA8B92304C62; __utmc=28776379; __utma=28776379.1593945951.1145379984.1148145661.1148145693.150; __utmz=28776379.1148020477.140.3.utmccn=(referral)|utmcsr=dotnetnuke.com|utmcct=/tabid/702/Default.aspx|utmcmd=referral; .ASPXANONYMOUS=Acak5QaF3x5kZGE3NTFmYS02NjI0LTRmODktYWNjMi0zZDJkZGY3OTgzZWI1 |
| HTTP_HOST=map.venexus.com |
| HTTP_USER_AGENT=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727) |
| HTTP_WEFERER=PYOQKEDOTWFAOBUZXUWLSZLKBRNVWWCUFPEGAUTFJMVRESKPNKMB |
The PA for this module is also attached as an enclosure to this entry.
Tested in DNN 3.2 and DNN 4.0
ServerVariables.zip (6.5 KB)
The following Class can be used to export a dataset to XLS format. This code has been tested with Office 2002 and XP:
Public Class DataSetToExcel Public Shared Sub Export(ByVal ds As DataSet, ByVal response As HttpResponse) 'need to clear the response object response.Clear() response.Charset = "" 'set the response type to excel response.ContentType = "application/vnd.ms-excel" 'create a string writer anf HTMLTextWriter that uses it Dim StringWrite As New System.IO.StringWriter Dim HTMLWrite As New System.Web.UI.HtmlTextWriter(StringWrite) 'instantiate a datagrid Dim dg As New DataGrid 'set the datagrid datasource to the dataset passed in and bind it dg.DataSource = ds.Tables(0) dg.DataBind() 'tell the datagrid to render itself to our htmltextwriter dg.RenderControl(HTMLWrite) 'output the html response.Write(StringWrite.ToString) response.End() End Sub End Class
I always forget the syntax for resetting identity columns. For example, recently on a development DNN installation, we needed to reset all identity columns back to 0 after data testing was complete. So, as a reminder to myself, here's the SQL:
DBCC CHECKIDENT (TableName, RESEED, 0)
If for some reason you need to temporarily allow inserts into the Identity column, then you can use the following:
Set Identity_Insert TableName On
Once you have executed your statements, you can turn it back off:
Set Identity_Insert TableName Off
And for the differences of Scope_Identity and @@Identity: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_sa-ses_6n8p.asp
Below you will find a few generic SQL queries for generating reports on DNN Users.
Last Activity: SELECT Users.Username, Users.FirstName, Users.LastName, aspnet_Users.LastActivityDate FROM aspnet_Users INNER JOIN Users ON aspnet_Users.UserName = Users.Username order by aspnet_Users.LastActivityDate DESC
Last Login: SELECT Users.Username, Users.FirstName, Users.LastName, aspnet_Membership.LastLoginDate FROM Users INNER JOIN aspnet_Users ON Users.Username = aspnet_Users.UserName INNER JOIN aspnet_Membership ON aspnet_Users.UserId = aspnet_Membership.UserId ORDER BY aspnet_Membership.LastLoginDate DESC
New Users: SELECT Users.Username, Users.FirstName, Users.LastName, aspnet_Membership.CreateDate FROM Users INNER JOIN aspnet_Users ON Users.Username = aspnet_Users.UserName INNER JOIN aspnet_Membership ON aspnet_Users.UserId = aspnet_Membership.UserId ORDER BY aspnet_Membership.CreateDate DESC
Unverified Users: select USers.FirstName, Users.LastName, aspnet_Membership.Email, aspnet_Users.UserName from aspnet_Membership, aspnet_Users, Users where aspnet_Membership.IsApproved = 0 AND aspnet_Membership.UserID = aspnet_Users.UserId AND aspnet_Users.UserName = Users.UserName
Users in Role: SELECT Roles.RoleName AS [Role Name], COUNT(UserRoles.RoleID) AS [Number in Role] FROM Roles INNER JOIN UserRoles ON UserRoles.RoleID = Roles.RoleID GROUP BY UserRoles.RoleID, Roles.RoleName ORDER BY RoleName
We needed a Proper Case Function that would change the first letter of each word to an uppercase letter.
Example:
some text = Some Text
Here is the function we added:
------------------------------------------------------
CREATE FUNCTION dbo.Proper (@tcString VARCHAR(100))
RETURNS VARCHAR(100) AS
BEGIN
-- Scratch variables used for processing
DECLARE @outputString VARCHAR(100)
DECLARE @stringLength INT
DECLARE @loopCounter INT
DECLARE @charAtPos VARCHAR(1)
DECLARE @wordStart INT
-- If the incoming string is NULL, return an error
IF (@tcString IS NULL)
RETURN ('(no string passed)')
-- Initialize the scratch variables
SET @outputString = ''
SET @stringLength = LEN (@tcString)
SET @loopCounter = 1
SET @wordStart = 1
-- Loop over the string
WHILE (@loopCounter <= @stringLength)
BEGIN
-- Get the single character off the string
SET @charAtPos = SUBSTRING (@tcString, @loopCounter, 1)
-- If we are the start of a word, uppercase the character
-- and reset the work indicator
IF (@wordStart = 1)
BEGIN
SET @charAtPos = UPPER (@charAtPos)
SET @wordStart = 0
END
-- If we encounter a white space, indicate that we
-- are about to start a word
IF (@charAtPos = ' ')
SET @wordStart = 1
-- Form the output string
SET @outputString = @outputString + @charAtPos
SET @loopCounter = @loopCounter + 1
END
-- Return the final output
RETURN (@outputString)
END
------------------------------------------------------
I am not sure where I found this function to give it the proper credit, but it's been around for a while. I had used it on a SQL Server 2000 database to change all uppercase US State names to lowercase, then running them through the Proper function. Recently I had to search several databases to find the function so I could use it on a SQL Server 2005 database. So, in case I need it again, I decided to save it here....
We are working on a project that required unique email addresses during DotNetNuke registration. In order to satisfy this requirements, the web.config file can be updated to enforce unique emal addresses by changing the default of false to true for the requiresUniqueEmail attribute.
< membership
defaultProvider="DNNSQLMembershipProvider"
userIsOnlineTimeWindow="15">
< providers>
< clear/>
< add
name="DNNSQLMembershipProvider"
type="DotNetNuke.Security.Membership.DNNSQLMembershipProvider, DotNetNuke.Provider.SQLMembershipProvider"
connectionStringName="SiteSqlServer"
enablePasswordRetrieval="true"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
minRequiredPasswordLength="4"
minRequiredNonalphanumericCharacters="0"
requiresUniqueEmail="true"
passwordFormat="Encrypted"
applicationName="/"
description="Stores and retrieves membership data from the local Microsoft SQL Server database"/>
</ providers>
</ membership>
I would like to thank Richard Golko from UCanUse for this helpful tidbit...and yes, it does work with their User Attributes module!

We have been waiting on the DotNetNuke 4.0.3 release in hopes that it
will cleanup a few of the random application error messages we have
been seeing in DNN 4.0.2 sites. DNN 4.0.2 has been quite buggy and we
have been holding off releasing any high traffic sites on production
until more issues have been fixed. So, when I found out today that DNN
4.0.3 was released on SourceForge, I immediately downloaded it and installed on my local instance.
Upgrading DotNetNuke
Current Assembly Version: 04.00.03
Current Database Version: 04.00.02
Upgrade Status Report
00:00:00.078 - Upgrading to Version:
4.0.3
00:00:11.640 - Performing General Upgrades
00:00:12.156 - Installing
Module File
D:\Dev\DNN\Website\Install\Module\Announcements_3.1_Install.zip:
00:00:12.843
- Installing Module File
D:\Dev\DNN\Website\Install\Module\Contacts_3.1_Install.zip:
00:00:13.109
- Installing Module File
D:\Dev\DNN\Website\Install\Module\Discussions_3.1_Install.zip:
00:00:13.250
- Installing Module File
D:\Dev\DNN\Website\Install\Module\Documents_3.1_Install.zip:
00:00:13.421
- Installing Module File
D:\Dev\DNN\Website\Install\Module\Events_3.1_Install.zip:
00:00:13.625
- Installing Module File
D:\Dev\DNN\Website\Install\Module\FAQs_3.1_Install.zip:
00:00:13.796
- Installing Module File
D:\Dev\DNN\Website\Install\Module\Feedback_3.1_Install.zip:
00:00:13.906
- Installing Module File
D:\Dev\DNN\Website\Install\Module\HTML_3.1_Install.zip:
00:00:14.140
- Installing Module File
D:\Dev\DNN\Website\Install\Module\IFrame_3.1_Install.zip:
00:00:14.250
- Installing Module File
D:\Dev\DNN\Website\Install\Module\Image_3.1_Install.zip:
00:00:14.343
- Installing Module File
D:\Dev\DNN\Website\Install\Module\Links_3.1_Install.zip:
00:00:14.515
- Installing Module File
D:\Dev\DNN\Website\Install\Module\NewsFeeds_3.1_Install.zip:
00:00:14.640
- Installing Module File
D:\Dev\DNN\Website\Install\Module\Survey_3.1_Install.zip:
00:00:14.843
- Installing Module File
D:\Dev\DNN\Website\Install\Module\UserDefinedTable_3.1_Install.zip:
00:00:15.109
- Installing Module File
D:\Dev\DNN\Website\Install\Module\UsersOnline_3.1_Install.zip:
00:00:15.375
- Installing Module File
D:\Dev\DNN\Website\Install\Module\XML_3.1_Install.zip:
Upgrade Complete
Yay! No errors. I did a little testing, and after checking to make sure
nothing was really broken, I went ahead an made copies of all DNN 4.0.2
sites we have running and backed up their databases. So far I have
installed DNN 4.0.3 on 5 different DNN instances, and on 3 different
servers. All well so far. I will post any problems I find here...
Update:
I noticed there is not an annoucement on the DotNetNuke
website...yet. But, the Install, Source, and Templates are available
for download at the SourceForge link above.
2 issues have been fixed in the latest release of the Venexus SignIn module, an alternative DotNetNuke Login module that enforces Terms of Use agreement.
Password Reminder and Register buttons are both working now.
ABOUT VENEXUS SIGNIN MODULE
The Venexus SignIn module is an alternative for the DotNetNuke Login module, that enforces the user to agree to the Terms and Conditions of the website. A use case would be for legal and financial websites that want the user to agree to the Terms of Use for the website, to satisfy legal and/or SEC requirements.
Example:

Registered users can download this module for free by downloading the enclosure to this feed, clicking the link at the bottom of this post, or signing into Venexus and going to this page. The DNN 3 version is also available for download at the site.
The "Remember Me" functionality during DotNetNuke 4 login works for only 1 hour by default. Previously, this had been set to 50 years. In order to change persistent login to an extended time, a change to the web.config file is necessary. In the web.config you should see this:
<authentication mode="Forms"> <forms name=".DOTNETNUKE" protection="All" timeout="60"/> </authentication>
To increase the period of persistent login to 7 days would be this:
<authentication mode="Forms"> <forms name=".DOTNETNUKE" protection="All" timeout="10080"/> </authentication>
To increase the period of persistent login to 1 Year would be this:
<authentication mode="Forms"> <forms name=".DOTNETNUKE" protection="All" timeout="525600"/> </authentication>
Hope that helps!
Nothing To Install At This Time
Current Assembly Version: 04.00.02
Current Database Version: 04.00.02
If you get the "Nothing to Install At This Time" message when accessing your DotNetNuke 4 portal, you can add the following line to the appSettings in the web.config file:
<add key="InstallationDate" value="3/9/2005" />
We are looking for beta testers for a DotNetNuke module that allows users to set/update their Active Directory password. The module has been tested in DNN 3.1.13 and DNN 4.0.2.
Module Settings:

Module View:
If anyone has a DotNetNuke development environment, with Active Directory in use, and is interested in testing this module, please let us know by sending an email to support@venexus.com
For a project we are working on, we have a backend process that needed to get the PostalCode from ASPNET_Profile for a UserName. Thanks to David Silverlights post on DotNetSlackers.com we added the following functions to our database:
--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
CREATE FUNCTION dbo.fn_GetElement ( @ord AS INT, @str AS VARCHAR(8000), @delim AS VARCHAR(1) ) RETURNS INT AS BEGIN -- If input is invalid, return null. IF @str IS NULL OR LEN(@str) = 0 OR @ord IS NULL OR @ord < 1 -- @ord > [is the] expression that calculates the number of elements. OR @ord > LEN(@str) - LEN(REPLACE(@str, @delim, '')) + 1 RETURN NULL DECLARE @pos AS INT, @curord AS INT SELECT @pos = 1, @curord = 1 -- Find next element's start position and increment index. WHILE @curord < @ord SELECT @pos = CHARINDEX(@delim, @str, @pos) + 1, @curord = @curord + 1 RETURN CAST(SUBSTRING(@str, @pos, CHARINDEX(@delim, @str + @delim, @pos) - @pos) AS INT) END
--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
CREATE FUNCTION dbo.fn_GetProfileElement ( @fieldName AS NVARCHAR(100), @fields AS NVARCHAR(4000), @values AS NVARCHAR(4000)) RETURNS NVARCHAR(4000) AS BEGIN
-- If input is invalid, return null. IF @fieldName IS NULL OR LEN(@fieldName) = 0 OR @fields IS NULL OR LEN(@fields) = 0 OR @values IS NULL OR LEN(@values) = 0 RETURN NULL
-- locate FieldName in Fields DECLARE @fieldNameToken AS NVARCHAR(20) DECLARE @fieldNameStart AS INTEGER, @valueStart AS INTEGER, @valueLength AS INTEGER
-- Only handle string type fields (:S:) SET @fieldNameStart = CHARINDEX(@fieldName + ':S',@Fields,0)
-- If field is not found, return null IF @fieldNameStart = 0 RETURN NULL SET @fieldNameStart = @fieldNameStart + LEN(@fieldName) + 3
-- Get the field token which I've defined as the start of the field offset to the end of the length SET @fieldNameToken = SUBSTRING(@Fields,@fieldNameStart,LEN(@Fields)-@fieldNameStart)
-- Get the values for the offset and length SET @valueStart = dbo.fn_getelement(1,@fieldNameToken,':') SET @valueLength = dbo.fn_getelement(2,@fieldNameToken,':')
-- Check for sane values, 0 length means the profile item was stored, just no data IF @valueLength = 0 RETURN ''
-- Return the string RETURN SUBSTRING(@values, @valueStart+1, @valueLength) END
--!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Then a stored procedure was created to retrieve the users PostalCode by passing in the UserName.
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO
CREATE PROCEDURE GetPostalCodeFromUserName @UserName nvarchar(50) AS BEGIN SET NOCOUNT ON; SELECT dbo.fn_GetProfileElement(N'PostalCode', dbo.aspnet_Profile.PropertyNames, dbo.aspnet_Profile.PropertyValuesString) AS PostalCode FROM dbo.aspnet_Profile INNER JOIN dbo.aspnet_Users ON dbo.aspnet_Profile.UserId = dbo.aspnet_Users.UserId where dbo.aspnet_Users.UserName = @UserName
END GO
|
Copyright © 2010 Venexus, Inc.. All rights reserved.
|
|