diff --git a/App_LocalResources/Settings.ascx.resx b/App_LocalResources/Settings.ascx.resx new file mode 100644 index 0000000..253cd63 --- /dev/null +++ b/App_LocalResources/Settings.ascx.resx @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Registration Settings + + + Username Mode: + + + Select how to create usernames. Note that your template must reflect this setting by using the correct tokens! + + + Let the user select + + + Create from E-Mail Address + + + Create in the form [Firstletter from Firstname + .Lastname] + + + Create in the form [Firstletter from Firstname + .Lastname] + + + Create in the form [Firstname.Lastname] + + + Let the user select + + + Create from E-Mail Address + + + Create from Lastname + + + You may optionally select a role that the user is being added to once registering through this module instance + + + Add to Role on Submit: + + + Select how to create displaynames. Note that your template must reflect this setting by using the correct tokens! + + + Displayname Mode: + + + You may optionally select a role where all members of that role receive an e-mail notification on submitting the form + + + Send confirmation role to select role: + + + Select wether the user receives an e-mail verification on submitting the form + + + Send confirmation to user: + + + Select the page that the user gets redirected to after submitting the form + + + Redirect after Submit: + + + Select the page where the usermanagement module resides on. This setting is being used for generating the link to the user's details in the administrator notification e-mail + + + Usermanagement Page: + + + Create in the form [Firstname.Lastname] + + + Create from Lastname + + \ No newline at end of file diff --git a/App_LocalResources/Templates.ascx.resx b/App_LocalResources/Templates.ascx.resx new file mode 100644 index 0000000..ae12b78 --- /dev/null +++ b/App_LocalResources/Templates.ascx.resx @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + <p>Use the template managing control to edit the templates used by this module</p> + + + Manage Templates + + + Back to Account Update Form + + + Copy Selected + + + Delete Selected + + + Save Templates and Exit + + + This will delete the selected theme. Are you sure? + + + An error occured while creating a copy of the selected theme. Make sure you have setup write permissions correctly in the file system of this installation + + + An error occured while saving the selected theme. Make sure you have setup write permissions correctly in the file system of this installation and that none of the files in the theme is opened by another program. + + + An error occured while deleting the selected theme. Make sure you have setup write permissions correctly in the file system of this installation and that none of the files in the theme is opened by another program. + + + E-Mail to Admin + + + E-Mail to User + + + Update Account Form + + + A folder with that name could not be created. Please provide a valid name for the theme. + + + You must fill in each template + + + You must enter a name for the new theme + + + Note that password retrieval is disabled in this installation. Make sure your e-mail templates take this into account (e.g. dot not use the [password] token). + + + Also note that this system requires members to maintain a question and answer. Your form template therefor should include those fields. + + + This theme is being used by this module instance. Deleting this them will cause the module to use the default theme. + + + Enter a name to better identify the template set + + + Theme Name: + + + Select the theme used by this module. You may create a new theme based on the currently selected one. + + + Select Theme + + + Use the selected theme in this module instance + + + Use selected theme + + \ No newline at end of file diff --git a/App_LocalResources/View.ascx.resx b/App_LocalResources/View.ascx.resx new file mode 100644 index 0000000..38c6178 --- /dev/null +++ b/App_LocalResources/View.ascx.resx @@ -0,0 +1,303 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Your account has been deleted. + + + Your account could not be deleted. Please contact the site administrator + + + Your account has been update sucessfully. + + + The account needs to be authorized + + + The account could not be created. Please inform the site administrator + + + Delete Account + + + An account with this e-mail address is already registered on this site + + + Enter your e-mail address + + + E-Mail Address: + + + You must provide a valif e-mail address! + + + You must provide a displayname! + + + You must provide your firstname! + + + You must provide your lastname! + + + You must provide the password two times! + + + You must provide both the answer and the question! + + + You must provide your current password! + + + You must provide your password for changing the question and answer! + + + You must fill in all required profile fields! + + + You must fill in all required fields + + + Enter your firstname + + + Firstname: + + + The selected password does not meet our password policy. {0} + + + This username is not valid. Most likely it has been taken already. + + + Enter your lastname + + + Lastname: + + + Manage Templates + + + The account registration module allows site visitors to register on your site. Since the registration form is templating based, you have full control over the visuals in this module. + + + This name already exists + + + No further action required + + + [{0}] - Account Updated + + + [{0}] - Your User Account + + + Enter a password. {0}. If you do not want to change your password, leave this field empty. + + + Password: + + + Re-Enter your password. If you do not want to change your password, leave this field empty. + + + Confirm Password: + + + Enter the answer to the question above. You may only reset your password later on once you enter the correct answer to the question above! + + + Security Answer: + + + Enter your current password + + + Current Password: + + + A valid passsword must contain at least {0} chars + + + , {0} of those must be non-alpha-numeric + + + Enter a question that we ask you once you need to reset your password in case you have forgotten the password + + + Security Question: + + + The passwords do not match! + + + Your password could not be changed. Sorry about that. + + + Registration mode is set to "private" + + + Registration mode is set to "public" + + + Registration mode is set to "verified" + + + The templates for this instance are not setup correctly. Please let the site administrator know. + + + Update Account + + + Enter a username that you would like to use for logging on to our website + + + Username: + + + This username is not valid. Most likely it has been taken already. + + + Username is valid + + + Password is valid + + + The e-mail address needs to be verified + + + Site Admins + + + Public + + + Friends and Group Members + + + Site Members + + + Visibility... + + \ No newline at end of file diff --git a/AssemblyInfo.vb b/AssemblyInfo.vb new file mode 100644 index 0000000..8593e0f --- /dev/null +++ b/AssemblyInfo.vb @@ -0,0 +1,35 @@ +Imports System +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/BuildScripts/MSBuild.Community.Tasks.Targets b/BuildScripts/MSBuild.Community.Tasks.Targets new file mode 100644 index 0000000..5e1de4c --- /dev/null +++ b/BuildScripts/MSBuild.Community.Tasks.Targets @@ -0,0 +1,105 @@ + + + + + + $(MSBuildProjectDirectory)\BuildScripts + ..\..\..\bin + $(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BuildScripts/ModulePackage.targets b/BuildScripts/ModulePackage.targets new file mode 100644 index 0000000..b1df696 --- /dev/null +++ b/BuildScripts/ModulePackage.targets @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Connect_AccountUpdate.dnn b/Connect_AccountUpdate.dnn new file mode 100644 index 0000000..547c234 --- /dev/null +++ b/Connect_AccountUpdate.dnn @@ -0,0 +1,110 @@ + + + + Connect: AccountUpdate + A community module that handles account updates in DNN + Images/icon_extensions.gif + + Philipp Becker + DNN-Connect + http://dnn-connect.org + connectmodules.usermanagement@dnn-connect.org + + + + + + 07.01.00 + + + + + + + DesktopModules\Connect\AccountUpdate + + + + + + + + DesktopModules/Connect/AccountUpdate + + Resources.zip + + + + + + + Connect AccountUpdate + AccountUpdate + + + + + Connect AccountUpdate + 0 + + + + DesktopModules/Connect/AccountUpdate/View.ascx + False + + View + + + 0 + + + ManageTemplates + DesktopModules/Connect/AccountUpdate/Templates.ascx + False + Manage Templates + Edit + + + 0 + + + Settings + DesktopModules/Connect/AccountUpdate/Settings.ascx + False + Registration Settings + Edit + + + 0 + + + + + + + + + + bin + + Connect.Modules.AccountUpdate.dll + + + Connect.Libraries.UserManagement.dll + + + + + + + + + \ No newline at end of file diff --git a/Connect_AccountUpdate.vbproj b/Connect_AccountUpdate.vbproj new file mode 100644 index 0000000..b7e7005 --- /dev/null +++ b/Connect_AccountUpdate.vbproj @@ -0,0 +1,219 @@ + + + + + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {8C6DB1EB-8F33-4774-AC98-E6422B91F3A2} + {349c5851-65df-11da-9384-00065b846f21};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + Library + + + Connect.Modules.AccountUpdate + + + 4.0 + On + Binary + Off + On + + + v4.0 + false + + + + true + full + true + true + ..\..\..\bin\ + Connect.Modules.AccountUpdate.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022,42353,42354,42355 + AllRules.ruleset + + + pdbonly + false + true + true + ..\..\..\bin\ + Connect.Modules.AccountUpdate.xml + 42016,41999,42017,42018,42019,42032,42036,42020,42021,42022,42353,42354,42355 + AllRules.ruleset + + + + False + ..\..\..\bin\ClientDependency.Core.dll + + + ..\..\..\bin\DotNetNuke.dll + + + False + ..\..\..\bin\DotNetNuke.Web.dll + + + False + ..\..\..\bin\DotNetNuke.WebUtility.dll + + + + + + + + + + + + + + + + + + False + ..\..\..\bin\Telerik.Web.UI.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Templates.ascx + + + Templates.ascx + ASPXCodeBehind + + + Settings.ascx + + + Settings.ascx + ASPXCodeBehind + + + View.ascx + + + View.ascx + ASPXCodeBehind + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {4F9B447A-D262-439A-822E-34849356966E} + Connect_Users + + + + + + + + + + True + True + 62597 + / + http://dnn7/DesktopModules/Connect/AccountUpdate + True + http://dnn7/ + False + False + + + False + + + + + + zip + Connect_AccountUpdate + Connect_AccountUpdate + $(MSBuildProjectDirectory)\BuildScripts + + + + + \ No newline at end of file diff --git a/Documentation/Documentation.css b/Documentation/Documentation.css new file mode 100644 index 0000000..62d028e --- /dev/null +++ b/Documentation/Documentation.css @@ -0,0 +1,82 @@ + +Body, A +{ + font-family: Verdana, Arial, Helvetica, Sans Serif; + font-size: 10pt; + font-weight: normal; + color: black; +} + +Body +{ + background-color: white; + margin-left:25px; +} + +H1 +{ + font-size: 2.0em; + font-weight: bold; + color: #75808A; + text-decoration: underline; +} + +H2 { + font-size: 1.6em; + font-weight: bold; + color: #75808A; +} + +H3 { + font-size: 1.4em; + font-weight: bold; + color: #75808A; +} + +H4 { + font-size: 1.2em; + font-weight: bold; + color: #75808A; +} + +H5 { + font-size: 1.1em; + font-weight: bold; + color: #75808A; +} + +H6 { + font-size: 1.0em; + font-weight: bold; + color: #75808A; +} + +A:link { + font-size: 1.0em; + text-decoration: underline; + color: #0000cc; +} + +A:visited { + font-size: 1.0em; + text-decoration: underline; + color: #0000cc; +} + +A:active { + font-size: 1.0em; + text-decoration: underline; + color: #0000cc; +} + +A:hover { + font-size: 1.0em; + text-decoration: underline; + color: #cc0000; +} + +HR { + color: dimgrey; + height:1pt; + text-align:left +} diff --git a/Documentation/Documentation.html b/Documentation/Documentation.html new file mode 100644 index 0000000..6994bdd --- /dev/null +++ b/Documentation/Documentation.html @@ -0,0 +1,67 @@ + + + + DotNetNuke Corporation Template + + + +
+

+ DotNetNuke Corporation Connect_AccountRegistration Module

+
+

+ * Important *

+

+ When creating a project using this template, you should have named your project + simply "ModuleName", not "DotNetNuke CorporationModuleName". If you didn't do this, the + easiest thing to do is close the solution, delete the folder from your DesktopModules + folder, then create a new project.

+

+ Due to limitations in the templating capabilities of Visual Studio, you will need + to make some minor changes, and double check a few things, before you package this module.

+
    +
  1. BEFORE checking the + module into your source control environment check the following.
  2. +
  3. Edit the Project properties by double-clicking on the Properties folder in Solution + Explorer
  4. +
  5. On the Application tab: +
      +
    1. Make sure the Assembly name textbox is set to "Connect_AccountRegistration".
    2. +
    3. Make sure the Default namespace is set to "DotNetNuke.Modules.Connect_AccountRegistration".
    4. +
    +
  6. +
  7. On the Web tab: +
      +
    1. Under 'Start Action', make sure to set your Start URL to the correct site (ex: http://dnndev/).
    2. +
    3. Under 'Servers', make sure to "Use IIS Web Server" with a project url of http://dnndev/desktopmodules/Connect_AccountRegistration + and an Override application root URL of http://dnndev/
    4. +
    +
  8. +
+

+ Steps after your project is setup.

+
    +
  1. To Build and Package your Module you need to change to Release mode and then + simply choose Build from the Build menu. The MSBuild scripts will do the packaging + process for you. The packaging process creates an INSTALL and a SOURCE package in + the PACKAGES folder within your desktopmodule/modulename folder.
  2. +
  3. Installing your module in your development DotNetNuke instance is easy.Take the + SOURCE ZIP file that is created in the Packages folder, upload that using the Host/Extensions + page, Installation Wizard.
  4. +
  5. After you've done a release for your module (typically deploying to an environment + outside of your development environment) you should change the Version number, you + need to do this in two places, the assemblyinfo file, and the .DNN manifest file. + Next time you build the module in release mode you will get a new package (using + the version number) created.
  6. +
  7. For more information visit our + DotNetNuke Training page.
  8. +
+

+ After you are finished with the Documentation you can delete the Documentation directory + from your project. +

+
+
+
+ + diff --git a/License.txt b/License.txt new file mode 100644 index 0000000..9130ae2 --- /dev/null +++ b/License.txt @@ -0,0 +1,22 @@ +
+

License

+

+ Philipp Becker
+ Copyright (c) 2013 +

+

+ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +

+

+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +

+

+ * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +

+

+ * Neither the name of dnnWerk nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +

+

+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +

+
\ No newline at end of file diff --git a/Providers/DataProviders/SqlDataProvider/01.00.00.SqlDataProvider b/Providers/DataProviders/SqlDataProvider/01.00.00.SqlDataProvider new file mode 100644 index 0000000..2e3f11e --- /dev/null +++ b/Providers/DataProviders/SqlDataProvider/01.00.00.SqlDataProvider @@ -0,0 +1,213 @@ +-- no longer needed + +if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Connect_Users_ListByPortal]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) + drop procedure {databaseOwner}[{objectQualifier}Connect_Users_ListByPortal] +GO + +if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Connect_Users_ListByRole]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) + drop procedure {databaseOwner}[{objectQualifier}Connect_Users_ListByRole] +GO + +if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Connect_Users_RestoreUser]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) + drop procedure {databaseOwner}[{objectQualifier}Connect_Users_RestoreUser] +GO + +if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Connect_Users_HardDeleteUser]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) + drop procedure {databaseOwner}[{objectQualifier}Connect_Users_HardDeleteUser] +GO + +-- delete for recreation + +if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Connect_Users_GetValueList]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) + drop procedure {databaseOwner}[{objectQualifier}Connect_Users_GetValueList] +GO + +if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Connect_GetUserList]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) + drop procedure {databaseOwner}[{objectQualifier}Connect_GetUserList] +GO + +if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Connect_Users_AddReport]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) + drop procedure {databaseOwner}[{objectQualifier}Connect_Users_AddReport] +GO + +if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Connect_Users_GetReport]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) + drop procedure {databaseOwner}[{objectQualifier}Connect_Users_GetReport] +GO + +if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Connect_Users_GetReports]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) + drop procedure {databaseOwner}[{objectQualifier}Connect_Users_GetReports] +GO + +if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Connect_Users_UpdateReport]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) + drop procedure {databaseOwner}[{objectQualifier}Connect_Users_UpdateReport] +GO + +if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Connect_Users_DeleteReport]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) + drop procedure {databaseOwner}[{objectQualifier}Connect_Users_DeleteReport] +GO + + +-- create tables +IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'{databaseOwner}[{objectQualifier}Connect_UsersReports]') AND OBJECTPROPERTY(id, N'IsTable') = 1) + BEGIN + CREATE TABLE {databaseOwner}[{objectQualifier}Connect_UsersReports] + ( + [ReportId] [int] NOT NULL IDENTITY(0, 1), + [PortalId] [int] NOT NULL, + [FriendlyName] nvarchar(256) NULL, + [SQL] nvarchar(max) NULL, + [NeedsParameters] [bit] NULL + ) + + ALTER TABLE {databaseOwner}{objectQualifier}Connect_UsersReports ADD CONSTRAINT + PK_{objectQualifier}Connect_UsersReports PRIMARY KEY CLUSTERED + ( + ReportId + ) + ALTER TABLE {databaseOwner}{objectQualifier}Connect_UsersReports WITH NOCHECK ADD CONSTRAINT + FK_{objectQualifier}Connect_UsersReports_{objectQualifier}Portals FOREIGN KEY + ( + PortalId + ) REFERENCES {databaseOwner}{objectQualifier}Portals + ( + PortalId + ) ON UPDATE NO ACTION + ON DELETE CASCADE + END +GO + +-- create sprocs + +CREATE PROCEDURE {databaseOwner}[{objectQualifier}Connect_Users_GetValueList] + @PropertyDefinitionId int +AS +SELECT + [PropertyValue] +FROM + {objectQualifier}UserProfile +WHERE + (PropertyDefinitionID = @PropertyDefinitionID) +GO + +CREATE PROCEDURE {databaseOwner}[{objectQualifier}Connect_Users_AddReport] + @PortalId int, + @FriendlyName nvarchar(256), + @SQL nvarchar(max), + @NeedsParameters bit +as + INSERT INTO {databaseOwner}[{objectQualifier}Connect_UsersReports] + ([PortalId],[FriendlyName],[SQL],[NeedsParameters]) + VALUES + (@PortalId,@FriendlyName,@SQL,@NeedsParameters) + RETURN SCOPE_IDENTITY() +GO + +CREATE PROCEDURE {databaseOwner}[{objectQualifier}Connect_Users_UpdateReport] + @ReportId int, + @PortalId int, + @FriendlyName nvarchar(256), + @SQL nvarchar(max), + @NeedsParameters bit +as + UPDATE + {databaseOwner}[{objectQualifier}Connect_UsersReports] + SET + [PortalId] = @PortalId, + [FriendlyName] = @FriendlyName, + [SQL] = @SQL, + [NeedsParameters] = @NeedsParameters + WHERE + [ReportId] = @ReportId +GO + +CREATE PROCEDURE {databaseOwner}[{objectQualifier}Connect_Users_GetReport] + @ReportId int +as + SELECT + * + FROM + {databaseOwner}[{objectQualifier}Connect_UsersReports] + WHERE + [ReportId] = @ReportId +GO + +CREATE PROCEDURE {databaseOwner}[{objectQualifier}Connect_Users_GetReports] + @PortalId int +as + SELECT + * + FROM + {databaseOwner}[{objectQualifier}Connect_UsersReports] + WHERE + [PortalId] = @PortalId +GO + +CREATE PROCEDURE {databaseOwner}[{objectQualifier}Connect_Users_DeleteReport] + @ReportId int +as + DELETE FROM + {databaseOwner}[{objectQualifier}Connect_UsersReports] + WHERE + [ReportId] = @ReportId +GO + +CREATE PROCEDURE {databaseOwner}[{objectQualifier}Connect_GetUserList] + @RoleId int, + @PortalId int, + @SearchText nvarchar(256), + @SearchCols nvarchar(256), + @ShowDeleted bit +as + +SELECT DISTINCT + U.[UserID], + U.[Username], + U.[FirstName], + U.[LastName], + U.[DisplayName], + UP.[CreatedDate], + U.[Email], + UP.[PortalId], + (Select Top 1 [PropertyValue] From {databaseOwner}[{objectQualifier}UserProfile] Inner Join {databaseOwner}[{objectQualifier}ProfilePropertyDefinition] On {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyDefinitionID] = {databaseOwner}[{objectQualifier}UserProfile].[PropertyDefinitionID] Where {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyName] = 'PostalCode' and {databaseOwner}[{objectQualifier}UserProfile].[UserID] = U.[UserID]) as [PostalCode], + (Select Top 1 [PropertyValue] From {databaseOwner}[{objectQualifier}UserProfile] Inner Join {databaseOwner}[{objectQualifier}ProfilePropertyDefinition] On {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyDefinitionID] = {databaseOwner}[{objectQualifier}UserProfile].[PropertyDefinitionID] Where {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyName] = 'City' and {databaseOwner}[{objectQualifier}UserProfile].[UserID] = U.[UserID]) as [City], + (Select Top 1 [PropertyValue] From {databaseOwner}[{objectQualifier}UserProfile] Inner Join {databaseOwner}[{objectQualifier}ProfilePropertyDefinition] On {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyDefinitionID] = {databaseOwner}[{objectQualifier}UserProfile].[PropertyDefinitionID] Where {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyName] = 'Country' and {databaseOwner}[{objectQualifier}UserProfile].[UserID] = U.[UserID]) as [Country], + (Select Top 1 [PropertyValue] From {databaseOwner}[{objectQualifier}UserProfile] Inner Join {databaseOwner}[{objectQualifier}ProfilePropertyDefinition] On {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyDefinitionID] = {databaseOwner}[{objectQualifier}UserProfile].[PropertyDefinitionID] Where {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyName] = 'Telephone' and {databaseOwner}[{objectQualifier}UserProfile].[UserID] = U.[UserID]) as [Telephone], + (Select Top 1 [PropertyValue] From {databaseOwner}[{objectQualifier}UserProfile] Inner Join {databaseOwner}[{objectQualifier}ProfilePropertyDefinition] On {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyDefinitionID] = {databaseOwner}[{objectQualifier}UserProfile].[PropertyDefinitionID] Where {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyName] = 'Cell' and {databaseOwner}[{objectQualifier}UserProfile].[UserID] = U.[UserID]) as [Cell], + (Select Top 1 [PropertyValue] From {databaseOwner}[{objectQualifier}UserProfile] Inner Join {databaseOwner}[{objectQualifier}ProfilePropertyDefinition] On {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyDefinitionID] = {databaseOwner}[{objectQualifier}UserProfile].[PropertyDefinitionID] Where {databaseOwner}[{objectQualifier}ProfilePropertyDefinition].[PropertyName] = 'PreferredLocale' and {databaseOwner}[{objectQualifier}UserProfile].[UserID] = U.[UserID]) as [PreferredLocale] +FROM + {databaseOwner}[{objectQualifier}Users] U + INNER JOIN {databaseOwner}[{objectQualifier}UserPortals] UP on UP.[UserId] = U.[UserID] + INNER JOIN {databaseOwner}[{objectQualifier}UserProfile] P on p.[UserID] = U.[UserID] + INNER JOIN {databaseOwner}[{objectQualifier}ProfilePropertyDefinition] PD on PD.[PropertyDefinitionID] = p.[PropertyDefinitionID] +WHERE + UP.[PortalId] = @PortalId +AND + ((UP.[IsDeleted] = 0 and @ShowDeleted = 0) or (UP.[IsDeleted] = 1 and @ShowDeleted = 1)) +AND + ( + ( + (P.[PropertyValue] Like '%' + @SearchText + '%' And (PatIndex('%' + Pd.[PropertyName] + ',%' , @SearchCols) > 0)) + or + ( + (U.[FirstName] Like '%' + @SearchText + '%' and PATINDEX('%FirstName%', @SearchCols) > 0) + OR + (U.[LastName] Like '%' + @SearchText + '%' and PATINDEX('%LastName%', @SearchCols) > 0) + OR + (U.[DisplayName] Like '%' + @SearchText + '%' and PATINDEX('%DisplayName%', @SearchCols) > 0) + OR + (U.[Email] Like '%' + @SearchText + '%' and PATINDEX('%Email%', @SearchCols) > 0) + OR + (U.[Username] Like '%' + @SearchText + '%' and PATINDEX('%Username%', @SearchCols) > 0) + ) + ) + or @SearchText is Null + ) +AND + ( + (U.[UserID] in(Select [UserId] from {databaseOwner}[{objectQualifier}UserRoles] where [RoleID] = @RoleId)) + or + (@ShowDeleted = 1) + ) +Order By + UP.[CreatedDate] desc +GO diff --git a/Providers/DataProviders/SqlDataProvider/Uninstall.SqlDataProvider b/Providers/DataProviders/SqlDataProvider/Uninstall.SqlDataProvider new file mode 100644 index 0000000..0b482d8 --- /dev/null +++ b/Providers/DataProviders/SqlDataProvider/Uninstall.SqlDataProvider @@ -0,0 +1,53 @@ + +if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Connect_Users_ListByPortal]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) + drop procedure {databaseOwner}[{objectQualifier}Connect_Users_ListByPortal] +GO + +if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Connect_Users_ListByRole]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) + drop procedure {databaseOwner}[{objectQualifier}Connect_Users_ListByRole] +GO + +if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Connect_Users_RestoreUser]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) + drop procedure {databaseOwner}[{objectQualifier}Connect_Users_RestoreUser] +GO + +if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Connect_Users_HardDeleteUser]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) + drop procedure {databaseOwner}[{objectQualifier}Connect_Users_HardDeleteUser] +GO + +if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Connect_Users_GetValueList]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) + drop procedure {databaseOwner}[{objectQualifier}Connect_Users_GetValueList] +GO + +if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Connect_GetUserList]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) + drop procedure {databaseOwner}[{objectQualifier}Connect_GetUserList] +GO + +if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Connect_Users_AddReport]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) + drop procedure {databaseOwner}[{objectQualifier}Connect_Users_AddReport] +GO + +if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Connect_Users_GetReport]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) + drop procedure {databaseOwner}[{objectQualifier}Connect_Users_GetReport] +GO + +if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Connect_Users_GetReports]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) + drop procedure {databaseOwner}[{objectQualifier}Connect_Users_GetReports] +GO + +if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Connect_Users_UpdateReport]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) + drop procedure {databaseOwner}[{objectQualifier}Connect_Users_UpdateReport] +GO + +if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}Connect_Users_DeleteReport]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) + drop procedure {databaseOwner}[{objectQualifier}Connect_Users_DeleteReport] +GO + +ALTER TABLE {databaseOwner}{objectQualifier}Connect_UsersReports Drop Constraint PK_{objectQualifier}Connect_UsersReports +GO + +ALTER TABLE {databaseOwner}{objectQualifier}Connect_UsersReports Drop Constraint FK_{objectQualifier}Connect_UsersReports_{objectQualifier}Portals +GO + +DROP TABLE {databaseOwner}[{objectQualifier}Connect_UsersReports +GO diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt new file mode 100644 index 0000000..49ba1e3 --- /dev/null +++ b/ReleaseNotes.txt @@ -0,0 +1,38 @@ +

Connect: AccountUpdate

+

+ Philipp Becker
+ DNN-Connect
+ http://dnn-connect.org +

+
+
+

Release Notes

+ +

+ Version 01.00.01

+

+

Service release. Mainly focused on better support for password management in newer dnn installations where password retrieval is disabled.

+

Changes

+
    +
  • New token in e-mail templates: [RESETLINK]
  • +
  • New token in forms: [PASSWORDCURRENT]; needed for setting a new password in the account update form
  • +
+ +

+ Version 01.00.00

+

+

Initial release of Account registration, login and update module. The formly module dnnWerk.Users has been separated into dedocated modules for registering and updating account. The main task for this release was to extract the actual modules from the original package. I do have improved the feature set in various ways though:

+ +

Changes

+
    +
  • Added template management view to simplify template management
  • +
  • Made sharing templates across module instances possible
  • +
  • Added tokens for letting users login from within the registration module
  • +
  • Changed notification e-mail setting to notification role. This will now send e-mails to all members of a given role on submitting the form
  • +
  • Made tokens compatible with the DNN form pattern
  • +
  • Added support for question and answer fields
  • +
  • Added support for changing usernames when registering through e-mail address is configured
  • +
  • Improved error handling
  • +
+ +
\ No newline at end of file diff --git a/Resources.zip b/Resources.zip new file mode 100644 index 0000000..8bef7ec Binary files /dev/null and b/Resources.zip differ diff --git a/Settings.ascx b/Settings.ascx new file mode 100644 index 0000000..7bb4099 --- /dev/null +++ b/Settings.ascx @@ -0,0 +1,56 @@ +<%@ Control Language="vb" AutoEventWireup="false" Inherits="Connect.Modules.UserManagement.AccountUpdate.Settings" Codebehind="Settings.ascx.vb" %> +<%@ Register TagPrefix="dnn" Assembly="DotNetNuke.Web" Namespace="DotNetNuke.Web.UI.WebControls" %> +<%@ Register TagName="label" TagPrefix="dnn" Src="~/controls/labelcontrol.ascx" %> + + +
+ + + + + + + + +
+
+ + + + + + + + +
+ +
+ + +
+ + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
\ No newline at end of file diff --git a/Settings.ascx.designer.vb b/Settings.ascx.designer.vb new file mode 100644 index 0000000..b722a50 --- /dev/null +++ b/Settings.ascx.designer.vb @@ -0,0 +1,161 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Namespace Connect.Modules.UserManagement.AccountUpdate + + Partial Public Class Settings + + ''' + '''lblUsernameMode control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents lblUsernameMode As Global.DotNetNuke.UI.UserControls.LabelControl + + ''' + '''drpUsernameMode control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents drpUsernameMode As Global.System.Web.UI.WebControls.DropDownList + + ''' + '''lblDisplaynameMode control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents lblDisplaynameMode As Global.DotNetNuke.UI.UserControls.LabelControl + + ''' + '''drpDisplaynameMode control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents drpDisplaynameMode As Global.System.Web.UI.WebControls.DropDownList + + ''' + '''lblRedirectAfterSubmit control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents lblRedirectAfterSubmit As Global.DotNetNuke.UI.UserControls.LabelControl + + ''' + '''drpRedirectAfterSubmit control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents drpRedirectAfterSubmit As Global.System.Web.UI.WebControls.DropDownList + + ''' + '''lblUsermanagementTab control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents lblUsermanagementTab As Global.DotNetNuke.UI.UserControls.LabelControl + + ''' + '''drpUserManagementTab control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents drpUserManagementTab As Global.System.Web.UI.WebControls.DropDownList + + ''' + '''lblAddToRole control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents lblAddToRole As Global.DotNetNuke.UI.UserControls.LabelControl + + ''' + '''drpAddToRole control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents drpAddToRole As Global.System.Web.UI.WebControls.DropDownList + + ''' + '''lblRemoveFromRole control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents lblRemoveFromRole As Global.DotNetNuke.UI.UserControls.LabelControl + + ''' + '''drpRemoveFromRole control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents drpRemoveFromRole As Global.System.Web.UI.WebControls.DropDownList + + ''' + '''lblNotifyRole control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents lblNotifyRole As Global.DotNetNuke.UI.UserControls.LabelControl + + ''' + '''drpNotifyRole control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents drpNotifyRole As Global.System.Web.UI.WebControls.DropDownList + + ''' + '''lblNotifyUser control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents lblNotifyUser As Global.DotNetNuke.UI.UserControls.LabelControl + + ''' + '''chkNotifyUser control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents chkNotifyUser As Global.System.Web.UI.WebControls.CheckBox + End Class +End Namespace diff --git a/Settings.ascx.vb b/Settings.ascx.vb new file mode 100644 index 0000000..8016cb0 --- /dev/null +++ b/Settings.ascx.vb @@ -0,0 +1,91 @@ + +Imports DotNetNuke +Imports DotNetNuke.Services.Exceptions + + +Namespace Connect.Modules.UserManagement.AccountUpdate + Partial Class Settings + Inherits Entities.Modules.ModuleSettingsBase + +#Region "Base Method Implementations" + + Public Overrides Sub LoadSettings() + Try + If (Page.IsPostBack = False) Then + + BindPages() + BindRoles() + + If (Settings.Contains("ShowUserName")) Then drpUsernameMode.SelectedValue = Settings("ShowUserName").ToString() + If (Settings.Contains("ShowDisplayName")) Then drpDisplaynameMode.SelectedValue = Settings("ShowDisplayName").ToString() + If (Settings.Contains("RedirectAfterSubmit")) Then drpRedirectAfterSubmit.SelectedValue = Settings("RedirectAfterSubmit").ToString() + If (Settings.Contains("UsermanagementTab")) Then drpUserManagementTab.SelectedValue = Settings("UsermanagementTab").ToString() + If (Settings.Contains("AddToRoleOnSubmit")) Then drpAddToRole.SelectedValue = Settings("AddToRoleOnSubmit").ToString() + If (Settings.Contains("RemoveFromRoleOnSubmit")) Then drpRemoveFromRole.SelectedValue = Settings("RemoveFromRoleOnSubmit").ToString() + If (Settings.Contains("NotifyRole")) Then drpNotifyRole.Items.FindByText(Settings("NotifyRole").ToString()).Selected = True + If (Settings.Contains("NotifyUser")) Then chkNotifyUser.Checked = CType(Settings("NotifyUser"), Boolean) + + End If + Catch exc As Exception 'Module failed to load + ProcessModuleLoadException(Me, exc) + End Try + End Sub + + Public Overrides Sub UpdateSettings() + Try + Dim objModules As New Entities.Modules.ModuleController + + + objModules.UpdateTabModuleSetting(TabModuleId, "ShowUserName", drpUsernameMode.SelectedValue) + objModules.UpdateTabModuleSetting(TabModuleId, "ShowDisplayName", drpDisplaynameMode.SelectedValue) + objModules.UpdateTabModuleSetting(TabModuleId, "RedirectAfterSubmit", drpRedirectAfterSubmit.SelectedValue) + objModules.UpdateTabModuleSetting(TabModuleId, "UsermanagementTab", drpUserManagementTab.SelectedValue) + objModules.UpdateTabModuleSetting(TabModuleId, "AddToRoleOnSubmit", drpAddToRole.SelectedValue) + objModules.UpdateTabModuleSetting(TabModuleId, "RemoveFromRoleOnSubmit", drpRemoveFromRole.SelectedValue) + 'we need the rolename for sending mails to users, therefor store here the rolename rather than the id! + objModules.UpdateTabModuleSetting(TabModuleId, "NotifyRole", drpNotifyRole.SelectedItem.Text) + objModules.UpdateTabModuleSetting(TabModuleId, "NotifyUser", chkNotifyUser.Checked.ToString) + + Catch exc As Exception 'Module failed to load + ProcessModuleLoadException(Me, exc) + End Try + End Sub + + Private Sub BindPages() + + Dim tabs As System.Collections.Generic.List(Of Entities.Tabs.TabInfo) = TabController.GetPortalTabs(PortalId, Null.NullInteger, True, True, False, False) + + drpRedirectAfterSubmit.DataSource = tabs + drpRedirectAfterSubmit.DataBind() + + drpUserManagementTab.DataSource = tabs + drpUserManagementTab.DataBind() + + End Sub + + Private Sub BindRoles() + + Dim rc As New Security.Roles.RoleController + Dim roles As ArrayList = rc.GetPortalRoles(PortalId) + + drpAddToRole.DataSource = roles + drpAddToRole.DataBind() + drpAddToRole.Items.Insert(0, New ListItem("---", "-1")) + + drpRemoveFromRole.DataSource = roles + drpRemoveFromRole.DataBind() + drpRemoveFromRole.Items.Insert(0, New ListItem("---", "-1")) + + drpNotifyRole.DataSource = roles + drpNotifyRole.DataBind() + drpNotifyRole.Items.Insert(0, New ListItem("---", "-1")) + + End Sub + + +#End Region + + End Class +End Namespace + + diff --git a/Templates.ascx b/Templates.ascx new file mode 100644 index 0000000..570ebfd --- /dev/null +++ b/Templates.ascx @@ -0,0 +1,73 @@ +<%@ Control Language="vb" AutoEventWireup="false" Inherits="Connect.Modules.UserManagement.AccountUpdate.Templates" Codebehind="Templates.ascx.vb" %> +<%@ Register TagPrefix="dnn" TagName="Label" Src="~/controls/LabelControl.ascx" %> +<%@ Register TagPrefix="dnn" Namespace="DotNetNuke.Web.UI.WebControls" Assembly="DotNetNuke.Web" %> + +
+ +
+ + +   + +   + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
    +
  • +
  • +
  • +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
    +
  • +
  • +
+ +
+ + + diff --git a/Templates.ascx.designer.vb b/Templates.ascx.designer.vb new file mode 100644 index 0000000..54419a3 --- /dev/null +++ b/Templates.ascx.designer.vb @@ -0,0 +1,206 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Namespace Connect.Modules.UserManagement.AccountUpdate + + Partial Public Class Templates + + ''' + '''plTheme control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents plTheme As Global.DotNetNuke.UI.UserControls.LabelControl + + ''' + '''drpThemes control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents drpThemes As Global.System.Web.UI.WebControls.DropDownList + + ''' + '''cmdCopySelected control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents cmdCopySelected As Global.System.Web.UI.WebControls.LinkButton + + ''' + '''cmdDeleteSelected control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents cmdDeleteSelected As Global.System.Web.UI.WebControls.LinkButton + + ''' + '''pnlLocales control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents pnlLocales As Global.System.Web.UI.HtmlControls.HtmlGenericControl + + ''' + '''plLocale control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents plLocale As Global.DotNetNuke.UI.UserControls.LabelControl + + ''' + '''drpLocales control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents drpLocales As Global.System.Web.UI.WebControls.DropDownList + + ''' + '''plUseTheme control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents plUseTheme As Global.DotNetNuke.UI.UserControls.LabelControl + + ''' + '''chkUseTheme control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents chkUseTheme As Global.System.Web.UI.WebControls.CheckBox + + ''' + '''pnlTemplateName control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents pnlTemplateName As Global.System.Web.UI.HtmlControls.HtmlGenericControl + + ''' + '''plTemplateName control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents plTemplateName As Global.DotNetNuke.UI.UserControls.LabelControl + + ''' + '''txtTemplateName control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents txtTemplateName As Global.System.Web.UI.WebControls.TextBox + + ''' + '''AccountUpdateTemplatesTabs control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents AccountUpdateTemplatesTabs As Global.System.Web.UI.HtmlControls.HtmlGenericControl + + ''' + '''lblFormTemplate control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents lblFormTemplate As Global.System.Web.UI.WebControls.Label + + ''' + '''lblEmailUser control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents lblEmailUser As Global.System.Web.UI.WebControls.Label + + ''' + '''lblEmailAdmin control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents lblEmailAdmin As Global.System.Web.UI.WebControls.Label + + ''' + '''txtFormTemplate control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents txtFormTemplate As Global.System.Web.UI.WebControls.TextBox + + ''' + '''txtEmailUser control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents txtEmailUser As Global.System.Web.UI.WebControls.TextBox + + ''' + '''txtEmailAdmin control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents txtEmailAdmin As Global.System.Web.UI.WebControls.TextBox + + ''' + '''cmdUpdateSettings control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents cmdUpdateSettings As Global.System.Web.UI.WebControls.LinkButton + + ''' + '''cmdCancel control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents cmdCancel As Global.System.Web.UI.WebControls.LinkButton + End Class +End Namespace diff --git a/Templates.ascx.vb b/Templates.ascx.vb new file mode 100644 index 0000000..ca375fd --- /dev/null +++ b/Templates.ascx.vb @@ -0,0 +1,310 @@ +Imports DotNetNuke.Entities.Modules +Imports Connect.Libraries.UserManagement +Imports DotNetNuke.Entities.Users +Imports DotNetNuke.Security.Membership +Imports Telerik.Web.UI +Imports DotNetNuke.Security.Roles +Imports DotNetNuke.Entities.Profile +Imports DotNetNuke.UI.Skins.Controls + +Namespace Connect.Modules.UserManagement.AccountUpdate + + Partial Class Templates + Inherits ConnectUsersModuleBase + + + Private Sub Page_Init(sender As Object, e As System.EventArgs) Handles Me.Init + + DotNetNuke.Framework.jQuery.RequestDnnPluginsRegistration() + + End Sub + + Private Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load + + LocalizeForm() + + If Not Page.IsPostBack Then + + BindThemes() + + If Settings.Contains("ModuleTheme") Then + Try + SelectTheme(CType(Settings("ModuleTheme"), String)) + Catch + End Try + End If + + BindSelectedTheme() + VerifyPasswordSettings() + + End If + + End Sub + + Private Sub drpThemes_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles drpThemes.SelectedIndexChanged + BindSelectedTheme() + End Sub + + Private Sub cmdUpdateSettings_Click(sender As Object, e As System.EventArgs) Handles cmdUpdateSettings.Click + + Dim blnSucess As Boolean = False + + SaveTemplates(blnSucess) + + If blnSucess Then + UpdateSettings() + End If + + End Sub + + Private Sub cmdDeleteSelected_Click(sender As Object, e As System.EventArgs) Handles cmdDeleteSelected.Click + + Try + DeleteTheme() + Catch ex As Exception + DotNetNuke.UI.Skins.Skin.AddModuleMessage(Me, Localization.GetString("lblDeleteThemeError", LocalResourceFile), ModuleMessage.ModuleMessageType.RedError) + End Try + + End Sub + + Private Sub SelectTheme(ThemeName As String) + drpThemes.Items.FindByText(ThemeName).Selected = True + End Sub + + Private Sub drpLocales_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles drpLocales.SelectedIndexChanged + BindSelectedTheme() + End Sub + + Private Sub cmdCancel_Click(sender As Object, e As System.EventArgs) Handles cmdCancel.Click + Response.Redirect(NavigateURL()) + End Sub + + Private Sub VerifyPasswordSettings() + + If MembershipProvider.Instance().PasswordRetrievalEnabled = False Then + + Dim strNote As String = Localization.GetString("lblPasswordRetrievalDisabled", LocalResourceFile) + If MembershipProvider.Instance().RequiresQuestionAndAnswer Then + strNote += Localization.GetString("lblRequiresQuestionAndAnswer", LocalResourceFile) + End If + DotNetNuke.UI.Skins.Skin.AddModuleMessage(Me, strNote, ModuleMessage.ModuleMessageType.BlueInfo) + + End If + + End Sub + + Private Sub LocalizeForm() + + cmdCancel.Text = Localization.GetString("cmdCancel", LocalResourceFile) + cmdUpdateSettings.Text = Localization.GetString("cmdUpdateSettings", LocalResourceFile) + cmdCopySelected.Text = Localization.GetString("cmdCopySelected", LocalResourceFile) + cmdDeleteSelected.Text = Localization.GetString("cmdDeleteSelected", LocalResourceFile) + + End Sub + + Private Sub cmdCopySelected_Click(sender As Object, e As System.EventArgs) Handles cmdCopySelected.Click + pnlTemplateName.Visible = True + End Sub + + Private Sub BindThemes() + + drpThemes.Items.Clear() + Dim basepath As String = Server.MapPath(Me.TemplateSourceDirectory & "/templates/") + + For Each folder As String In System.IO.Directory.GetDirectories(basepath) + Dim foldername As String = folder.Substring(folder.LastIndexOf("\") + 1) + + drpThemes.Items.Add(New ListItem(foldername, folder)) + + Next + + End Sub + + Private Sub BindSelectedTheme() + + cmdDeleteSelected.Visible = (drpThemes.SelectedIndex <> 0) + + If Settings.Contains("ModuleTheme") Then + Try + If CType(Settings("ModuleTheme"), String) = drpThemes.SelectedItem.Text Then + chkUseTheme.Checked = True + DotNetNuke.UI.Utilities.ClientAPI.AddButtonConfirm(cmdDeleteSelected, Localization.GetSafeJSString(Localization.GetString("lblThemeInUse", LocalResourceFile))) + Else + chkUseTheme.Checked = False + DotNetNuke.UI.Utilities.ClientAPI.AddButtonConfirm(cmdDeleteSelected, Localization.GetSafeJSString(Localization.GetString("lblConfirmDelete", LocalResourceFile))) + End If + Catch + End Try + Else + DotNetNuke.UI.Utilities.ClientAPI.AddButtonConfirm(cmdDeleteSelected, Localization.GetSafeJSString(Localization.GetString("lblConfirmDelete", LocalResourceFile))) + chkUseTheme.Checked = False + End If + + Dim path As String = drpThemes.SelectedValue + + For Each file As String In System.IO.Directory.GetFiles(path) + + If file.EndsWith(Constants.TemplateName_EmailToAdmin) Then + txtEmailAdmin.Text = GetTemplate(drpThemes.SelectedItem.Value, Constants.TemplateName_EmailToAdmin, drpLocales.SelectedValue, True) + End If + If file.EndsWith(Constants.TemplateName_EmailToUser) Then + txtEmailUser.Text = GetTemplate(drpThemes.SelectedItem.Value, Constants.TemplateName_EmailToUser, drpLocales.SelectedValue, True) + End If + If file.EndsWith(Constants.TemplateName_Form) Then + txtFormTemplate.Text = GetTemplate(drpThemes.SelectedItem.Value, Constants.TemplateName_Form, drpLocales.SelectedValue, True) + End If + + Next + + + End Sub + + Private Sub SaveTemplate(SelectedTheme As String, TemplateName As String, Locale As String) + + Dim path As String = SelectedTheme & "\" & TemplateName.Replace(Constants.TemplateName_Extension, "." & Locale & Constants.TemplateName_Extension) + + If (PortalSettings.DefaultLanguage.ToLower = Locale.ToLower) Or String.IsNullOrEmpty(Locale) Then + path = SelectedTheme & "\" & TemplateName + End If + + Dim sw As New System.IO.StreamWriter(path, False) + + If TemplateName = Constants.TemplateName_EmailToAdmin Then + sw.Write(txtEmailAdmin.Text) + End If + If TemplateName = Constants.TemplateName_EmailToUser Then + sw.Write(txtEmailUser.Text) + End If + If TemplateName = Constants.TemplateName_Form Then + sw.Write(txtFormTemplate.Text) + End If + + sw.Close() + sw.Dispose() + + End Sub + + Private Sub SaveTemplates(ByRef blnSucess As Boolean) + + Dim basepath As String = drpThemes.SelectedValue + + If pnlTemplateName.Visible Then + + If String.IsNullOrEmpty(txtTemplateName.Text) Then + DotNetNuke.UI.Skins.Skin.AddModuleMessage(Me, Localization.GetString("lblMustEnterTemplateName", LocalResourceFile), ModuleMessage.ModuleMessageType.RedError) + blnSucess = False + Exit Sub + End If + + If String.IsNullOrEmpty(txtEmailAdmin.Text) Or String.IsNullOrEmpty(txtEmailUser.Text) Or String.IsNullOrEmpty(txtFormTemplate.Text) Then + DotNetNuke.UI.Skins.Skin.AddModuleMessage(Me, Localization.GetString("lblMustEnterTemplate", LocalResourceFile), ModuleMessage.ModuleMessageType.RedError) + blnSucess = False + Exit Sub + End If + + Dim newpath As String = Server.MapPath(Me.TemplateSourceDirectory & "/templates/") & txtTemplateName.Text + Try + System.IO.Directory.CreateDirectory(newpath) + Catch + DotNetNuke.UI.Skins.Skin.AddModuleMessage(Me, Localization.GetString("lblInvalidFolderName", LocalResourceFile), ModuleMessage.ModuleMessageType.RedError) + blnSucess = False + Exit Sub + End Try + + Try + For Each file As String In System.IO.Directory.GetFiles(basepath) + Dim destinationpath As String = newpath & "\" & file.Substring(file.LastIndexOf("\") + 1) + System.IO.File.Copy(file, destinationpath) + Next + basepath = newpath + Catch ex As Exception + DotNetNuke.UI.Skins.Skin.AddModuleMessage(Me, Localization.GetString("lblCouldNotCopyTheme", LocalResourceFile), ModuleMessage.ModuleMessageType.RedError) + blnSucess = False + Exit Sub + End Try + + pnlTemplateName.Visible = False + BindThemes() + SelectTheme(txtTemplateName.Text) + cmdDeleteSelected.Visible = True + + End If + + Try + + For Each file As String In System.IO.Directory.GetFiles(basepath) + + If file.EndsWith(Constants.TemplateName_EmailToAdmin) Then + SaveTemplate(drpThemes.SelectedValue, Constants.TemplateName_EmailToAdmin, drpLocales.SelectedValue) + End If + If file.EndsWith(Constants.TemplateName_EmailToUser) Then + SaveTemplate(drpThemes.SelectedValue, Constants.TemplateName_EmailToUser, drpLocales.SelectedValue) + End If + If file.EndsWith(Constants.TemplateName_Form) Then + SaveTemplate(drpThemes.SelectedValue, Constants.TemplateName_Form, drpLocales.SelectedValue) + End If + + Next + + Catch ex As Exception + DotNetNuke.UI.Skins.Skin.AddModuleMessage(Me, Localization.GetString("lblCouldNotWriteTheme", LocalResourceFile), ModuleMessage.ModuleMessageType.RedError) + blnSucess = False + Exit Sub + End Try + + + blnSucess = True + + End Sub + + Private Sub UpdateSettings() + + Dim ctrl As New ModuleController + ctrl.UpdateTabModuleSetting(TabModuleId, "ModuleTheme", drpThemes.SelectedItem.Text) + + End Sub + + Private Sub DeleteTheme() + + Dim basepath As String = drpThemes.SelectedValue + For Each file As String In System.IO.Directory.GetFiles(basepath) + System.IO.File.Delete(file) + Next + System.IO.Directory.Delete(basepath) + BindThemes() + UpdateSettings() + BindSelectedTheme() + + End Sub + + Private Sub BindLocales() + + Dim dicLocales As Dictionary(Of String, DotNetNuke.Services.Localization.Locale) = LocaleController.Instance().GetLocales(PortalId) + + If dicLocales.Count > 1 Then + pnlLocales.Visible = True + End If + + For Each objLocale As DotNetNuke.Services.Localization.Locale In dicLocales.Values + + Dim item As New ListItem + item.Text = objLocale.Text + item.Value = objLocale.Code + + Me.drpLocales.Items.Add(item) + + Next + + Try + drpLocales.Items(0).Selected = True + Catch + End Try + + + End Sub + + End Class + +End Namespace + + diff --git a/Templates/Default/Email.Admin.txt b/Templates/Default/Email.Admin.txt new file mode 100644 index 0000000..260de66 --- /dev/null +++ b/Templates/Default/Email.Admin.txt @@ -0,0 +1,24 @@ + +

The profile of a user account has been updated and you wanted to get notified about that.

+ + + + + + + + + + + + + + + + + + + +
Website URL[PORTALURL]
UserId:[USERID]
Username:[USERNAME]
Full Name:[FIRSTNAME] [LASTNAME]
Details updated:[UPDATED]
View User Details:[USERURL]
+

Best wishes and have a great day!

+ diff --git a/Templates/Default/Email.User.txt b/Templates/Default/Email.User.txt new file mode 100644 index 0000000..11df2ea --- /dev/null +++ b/Templates/Default/Email.User.txt @@ -0,0 +1,34 @@ + +

+ Dear [DISPLAYNAME], +

+

+ your account on the [PORTALNAME] website has been updated sucessfully and this notification + is to confirm that everything went OK. IN case you haven't updated your profile this means + someone else update your account data. In that case we urge you to log on to your account, + verify what happened and possibly let us know about the issue. We'll be glad to assist if + your account has been compromised. +

+ + + + + + + + + + + + + + + + + + +
Website URL[PORTALURL]
Your Username:[USERNAME]
Your Password:[PASSWORD]
Details updated:[UPDATED]
+

+ Best wishes and have a great day! +

+ diff --git a/Templates/Default/Form - Copy.txt b/Templates/Default/Form - Copy.txt new file mode 100644 index 0000000..6a6e270 --- /dev/null +++ b/Templates/Default/Form - Copy.txt @@ -0,0 +1,57 @@ + +
+

+ +

+
+ +
+

+ +

+ - +
+
+ +

+
+ +
+

+ +
    + + + + + + +
+
+ +
+

+ +
    + + + +
+
+ +
+ + +
+
German
+
+

[groupitem:GroupName]

+

[groupitem:GroupDescription]

+

+ [IsMember]{resx:LeaveGroup}[/IsMember] + [IsNotMember]{resx:JoinGroup}[/IsNotMember] + [IsPendingMember]{resx:Pending}[/IsPendingMember] + [IsOwner] [GROUPEDITBUTTON][/IsOwner] +

+
+
\ No newline at end of file diff --git a/Templates/Default/Form.txt b/Templates/Default/Form.txt new file mode 100644 index 0000000..8b1e9a1 --- /dev/null +++ b/Templates/Default/Form.txt @@ -0,0 +1,62 @@ + +
+ +
+ [DNNLBL:USER:Username:HideRequired] + [VALUE:USER:Username] +
+ +
+ [DNNLBL:USER:Email:HideRequired] + [CTL:USER:Email] + [REQUIRED:USER:Email] +
+ +
+ [DNNLBL:USER:Firstname:HideRequired] + [CTL:USER:Firstname] + [REQUIRED:USER:Firstname] +
+ +
+ [DNNLBL:USER:Lastname:HideRequired] + [CTL:USER:Lastname] + [REQUIRED:USER:Lastname] +
+ +
+ [DNNLBL:USER:Displayname:HideRequired] + [CTL:USER:Displayname] + [REQUIRED:USER:Displayname] +
+ +
+ [DNNLBL:USER:Password1:HideRequired] + [CTL:USER:Password1] + [REQUIRED:USER:Password1] +
+ +
+ [DNNLBL:USER:Password2:HideRequired] + [CTL:USER:Password2] + [REQUIRED:USER:Password2] +
+ +
+ [DNNLBL:USER:PasswordQuestion:HideRequired] + [CTL:USER:PasswordQuestion] + [REQUIRED:USER:PasswordQuestion] +
+ +
+ [DNNLBL:USER:PasswordAnswer:HideRequired] + [CTL:USER:PasswordAnswer] + [REQUIRED:USER:PasswordAnswer] +
+ +
    +
  • [CTL:UPDATEBUTTON:UpdateAccount]
  • +
  • [CTL:DELETEBUTTON:DeleteAccount]
  • +
+ +
diff --git a/Templates/ManagePassword/Email.Admin.txt b/Templates/ManagePassword/Email.Admin.txt new file mode 100644 index 0000000..260de66 --- /dev/null +++ b/Templates/ManagePassword/Email.Admin.txt @@ -0,0 +1,24 @@ + +

The profile of a user account has been updated and you wanted to get notified about that.

+ + + + + + + + + + + + + + + + + + + +
Website URL[PORTALURL]
UserId:[USERID]
Username:[USERNAME]
Full Name:[FIRSTNAME] [LASTNAME]
Details updated:[UPDATED]
View User Details:[USERURL]
+

Best wishes and have a great day!

+ diff --git a/Templates/ManagePassword/Email.User.txt b/Templates/ManagePassword/Email.User.txt new file mode 100644 index 0000000..11df2ea --- /dev/null +++ b/Templates/ManagePassword/Email.User.txt @@ -0,0 +1,34 @@ + +

+ Dear [DISPLAYNAME], +

+

+ your account on the [PORTALNAME] website has been updated sucessfully and this notification + is to confirm that everything went OK. IN case you haven't updated your profile this means + someone else update your account data. In that case we urge you to log on to your account, + verify what happened and possibly let us know about the issue. We'll be glad to assist if + your account has been compromised. +

+ + + + + + + + + + + + + + + + + + +
Website URL[PORTALURL]
Your Username:[USERNAME]
Your Password:[PASSWORD]
Details updated:[UPDATED]
+

+ Best wishes and have a great day! +

+ diff --git a/Templates/ManagePassword/Form.txt b/Templates/ManagePassword/Form.txt new file mode 100644 index 0000000..1b449f5 --- /dev/null +++ b/Templates/ManagePassword/Form.txt @@ -0,0 +1,27 @@ + +
+ +
+ [DNNLBL:USER:PasswordCurrent:HideRequired] + [CTL:USER:PasswordCurrent] + [REQUIRED:USER:PasswordCurrent] +
+ +
+ [DNNLBL:USER:Password1:HideRequired] + [CTL:USER:Password1] + [REQUIRED:USER:Password1] +
+ +
+ [DNNLBL:USER:Password2:HideRequired] + [CTL:USER:Password2] + [REQUIRED:USER:Password2] +
+ +
    +
  • [CTL:UPDATEBUTTON:UpdateAccount]
  • +
  • [CTL:DELETEBUTTON:DeleteAccount]
  • +
+ +
diff --git a/View.ascx b/View.ascx new file mode 100644 index 0000000..29e06e9 --- /dev/null +++ b/View.ascx @@ -0,0 +1,18 @@ +<%@ Control Language="vb" AutoEventWireup="false" Inherits="Connect.Modules.UserManagement.AccountUpdate.View" Codebehind="View.ascx.vb" %> + + +
+ + + + + + + + + + +
+ + + diff --git a/View.ascx.designer.vb b/View.ascx.designer.vb new file mode 100644 index 0000000..66e2d2e --- /dev/null +++ b/View.ascx.designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Namespace Connect.Modules.UserManagement.AccountUpdate + + Partial Public Class View + + ''' + '''pnlError control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents pnlError As Global.System.Web.UI.WebControls.Panel + + ''' + '''lblError control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents lblError As Global.System.Web.UI.WebControls.Literal + + ''' + '''pnlSuccess control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents pnlSuccess As Global.System.Web.UI.WebControls.Panel + + ''' + '''lblSucess control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents lblSucess As Global.System.Web.UI.WebControls.Literal + + ''' + '''plhProfile control. + ''' + ''' + '''Auto-generated field. + '''To modify move field declaration from designer file to code-behind file. + ''' + Protected WithEvents plhProfile As Global.System.Web.UI.WebControls.PlaceHolder + End Class +End Namespace diff --git a/View.ascx.vb b/View.ascx.vb new file mode 100644 index 0000000..bc904be --- /dev/null +++ b/View.ascx.vb @@ -0,0 +1,485 @@ +Imports DotNetNuke.Entities.Modules +Imports Connect.Libraries.UserManagement +Imports DotNetNuke.Entities.Users +Imports DotNetNuke.Security.Membership +Imports Telerik.Web.UI +Imports DotNetNuke.Security.Roles +Imports DotNetNuke.Entities.Profile + +Namespace Connect.Modules.UserManagement.AccountUpdate + + Partial Class View + Inherits ConnectUsersModuleBase + + Implements IActionable + + Private blnPageNeedsToPostback As Boolean = False + +#Region "Event Handlers" + + Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init + + 'DotNetNuke.Framework.AJAX.RegisterScriptManager() + + ProcessFormTemplate(plhProfile, GetTemplate(ModuleTheme, Constants.TemplateName_Form, CurrentLocale, False), User) + + Dim btnUpdate As Button = CType(FindControlRecursive(plhProfile, plhProfile.ID & "_" & Constants.ControlId_UpdateButton), Button) + If Not btnUpdate Is Nothing Then + + AddHandler btnUpdate.Click, AddressOf btnUpdate_Click + + If blnPageNeedsToPostback Then + DotNetNuke.Framework.AJAX.RegisterPostBackControl(btnUpdate) + End If + + End If + + Dim btnDelete As Button = CType(FindControlRecursive(plhProfile, plhProfile.ID & "_" & Constants.ControlId_DeleteButton), Button) + If Not btnDelete Is Nothing Then + + AddHandler btnDelete.Click, AddressOf btnDelete_Click + + End If + + End Sub + + Protected Sub Page_PreRender(sender As Object, e As System.EventArgs) Handles Me.PreRender + + ManageRegionLabel(Me.plhProfile) + + End Sub + + Protected Sub btnUpdate_Click(ByVal sender As Object, ByVal e As System.EventArgs) + UpdateAccount() + End Sub + + Protected Sub btnDelete_Click(ByVal sender As Object, ByVal e As System.EventArgs) + DeleteAccount() + End Sub + +#End Region + +#Region "Private Methods" + + Private Sub UpdateAccount() + + pnlSuccess.Visible = False + pnlError.Visible = False + + Dim strMessages As New List(Of String) + Dim strUpdated As String = "" + + Dim blnUpdateUsername As Boolean = False + Dim blnUpdateFirstname As Boolean = False + Dim blnUpdateLastname As Boolean = False + Dim blnUpdateDisplayname As Boolean = False + Dim blnUpdatePassword As Boolean = False + Dim blnUpdateEmail As Boolean = False + Dim blnUpdatePasswordQuestionAndAnswer As Boolean = False + + Dim txtEmail As TextBox = CType(FindControlRecursive(plhProfile, plhProfile.ID & "_" & Constants.ControlId_Email), TextBox) + blnUpdateEmail = (Not txtEmail Is Nothing) + + If blnUpdateEmail Then + If Not IsValidUserAttribute(Constants.User_Email, plhProfile) Then + strMessages.Add("Error_InvalidEmail") + AddErrorIndicator(Constants.User_Email, plhProfile) + Else + RemoveErrorIndicator(Constants.User_Email, plhProfile, True) + End If + End If + + Dim txtPasswordCurrent As TextBox = CType(FindControlRecursive(plhProfile, plhProfile.ID & "_" & Constants.ControlId_PasswordCurrent), TextBox) + Dim txtPassword1 As TextBox = CType(FindControlRecursive(plhProfile, plhProfile.ID & "_" & Constants.ControlId_Password1), TextBox) + Dim txtPassword2 As TextBox = CType(FindControlRecursive(plhProfile, plhProfile.ID & "_" & Constants.ControlId_Password2), TextBox) + Dim txtPasswordQuestion As TextBox = CType(FindControlRecursive(plhProfile, plhProfile.ID & "_" & Constants.ControlId_PasswordQuestion), TextBox) + Dim txtPasswordAnswer As TextBox = CType(FindControlRecursive(plhProfile, plhProfile.ID & "_" & Constants.ControlId_PasswordAnswer), TextBox) + + blnUpdatePassword = (Not txtPasswordCurrent Is Nothing AndAlso Not txtPassword1 Is Nothing AndAlso Not txtPassword2 Is Nothing) + blnUpdatePasswordQuestionAndAnswer = (Not txtPasswordQuestion Is Nothing AndAlso Not txtPasswordAnswer Is Nothing AndAlso Not txtPasswordCurrent Is Nothing) + + If blnUpdatePassword Then + If txtPassword1.Text = "" AndAlso txtPassword2.Text = "" Then + blnUpdatePassword = False + End If + End If + + If blnUpdatePassword Then + If Not IsValidUserAttribute(Constants.User_PasswordCurrent, plhProfile) Then + strMessages.Add("Error_MissingPasswordCurrent") + AddErrorIndicator(Constants.User_PasswordCurrent, plhProfile) + Else + RemoveErrorIndicator(Constants.User_PasswordCurrent, plhProfile, True) + End If + If Not IsValidUserAttribute(Constants.User_Password1, plhProfile) Then + strMessages.Add("Error_MissingPassword") + AddErrorIndicator(Constants.User_Password1, plhProfile) + Else + RemoveErrorIndicator(Constants.User_Password1, plhProfile, True) + End If + If Not IsValidUserAttribute(Constants.User_Password2, plhProfile) Then + strMessages.Add("Error_MissingPassword") + AddErrorIndicator(Constants.User_Password2, plhProfile) + Else + RemoveErrorIndicator(Constants.User_Password2, plhProfile, True) + End If + End If + + If blnUpdatePasswordQuestionAndAnswer Then + If txtPasswordAnswer.Text = "" AndAlso txtPasswordQuestion.Text = "" Then + blnUpdatePasswordQuestionAndAnswer = False + End If + End If + + If blnUpdatePasswordQuestionAndAnswer Then + If Not IsValidUserAttribute(Constants.User_Password1, plhProfile) Then + strMessages.Add("Error_MissingPasswordForQuestionAndAnswer") + AddErrorIndicator(Constants.User_Password1, plhProfile) + Else + RemoveErrorIndicator(Constants.User_Password1, plhProfile, True) + End If + If Not IsValidUserAttribute(Constants.User_PasswordAnswer, plhProfile) Then + strMessages.Add("Error_MissingPasswordAnswerAndQuestion") + AddErrorIndicator(Constants.User_PasswordAnswer, plhProfile) + Else + RemoveErrorIndicator(Constants.User_PasswordAnswer, plhProfile, True) + End If + If Not IsValidUserAttribute(Constants.User_PasswordQuestion, plhProfile) Then + strMessages.Add("Error_MissingPasswordAnswerAndQuestion") + AddErrorIndicator(Constants.User_PasswordQuestion, plhProfile) + Else + RemoveErrorIndicator(Constants.User_PasswordQuestion, plhProfile, True) + End If + End If + + Dim txtFirstName As TextBox = CType(FindControlRecursive(plhProfile, plhProfile.ID & "_" & Constants.ControlId_Firstname), TextBox) + blnUpdateFirstname = (Not txtFirstName Is Nothing) + + If blnUpdateFirstname Then + If Not IsValidUserAttribute(Constants.User_Firstname, plhProfile) Then + strMessages.Add("Error_MissingFirstname") + AddErrorIndicator(Constants.User_Firstname, plhProfile) + Else + RemoveErrorIndicator(Constants.User_Firstname, plhProfile, True) + End If + End If + + Dim txtLastName As TextBox = CType(FindControlRecursive(plhProfile, plhProfile.ID & "_" & Constants.ControlId_Lastname), TextBox) + blnUpdateLastname = (Not txtLastName Is Nothing) + + If blnUpdateLastname Then + If Not IsValidUserAttribute(Constants.User_Lastname, plhProfile) Then + strMessages.Add("Error_MissingLastname") + AddErrorIndicator(Constants.User_Lastname, plhProfile) + Else + RemoveErrorIndicator(Constants.User_Lastname, plhProfile, True) + End If + End If + + Dim txtDisplayName As TextBox = CType(FindControlRecursive(plhProfile, plhProfile.ID & "_" & Constants.ControlId_Displayname), TextBox) + blnUpdateDisplayname = (Not txtDisplayName Is Nothing) + + If blnUpdateDisplayname Then + If Not IsValidUserAttribute(Constants.User_Displayname, plhProfile) Then + strMessages.Add("Error_MissingDisplayName") + AddErrorIndicator(Constants.User_Displayname, plhProfile) + Else + RemoveErrorIndicator(Constants.User_Displayname, plhProfile, True) + End If + End If + + Dim blnProfileErrorAdded As Boolean = False + For Each itemProp As String In GetPropertiesFromTempate(GetTemplate(ModuleTheme, Constants.TemplateName_Form, CurrentLocale, False)) + Try + Dim prop As ProfilePropertyDefinition = ProfileController.GetPropertyDefinitionByName(PortalId, itemProp.Substring(2)) 'itemprop comes in the form U:Propertyname or P:Propertyname + If Not prop Is Nothing Then + If Not IsValidProperty(UserInfo, prop, plhProfile) Then + If blnProfileErrorAdded = False Then + strMessages.Add("Error_MissingProfileField") + blnProfileErrorAdded = True + End If + AddErrorIndicator(prop.PropertyDefinitionId.ToString, plhProfile) + Else + RemoveErrorIndicator(prop.PropertyDefinitionId.ToString, plhProfile, prop.Required) + End If + End If + Catch + End Try + Next + + + + If strMessages.Count > 0 Then + Me.pnlError.Visible = True + Me.lblError.Text = "
    " + For Each strMessage As String In strMessages + lblError.Text += "
  • " & Localization.GetString(strMessage, LocalResourceFile) & "
  • " + Next + lblError.Text += "
" + Exit Sub + End If + + Dim oUser As UserInfo = UserController.GetCurrentUserInfo + Dim oldAccount As UserInfo = UserController.GetCurrentUserInfo + + If blnUpdateEmail Then + + If UsernameMode = UsernameUpdateMode.Email Then + Try + + UserController.ChangeUsername(oUser.UserID, txtEmail.Text) + Catch ex As Exception + 'in use already, do not update e-mail adress + Me.pnlError.Visible = True + Me.lblError.Text = "
  • " & Localization.GetString("DuplicateEmail.Text", LocalResourceFile) & "
" + Exit Sub + End Try + + End If + + oUser.Email = txtEmail.Text + If oUser.Email <> oldAccount.Email Then + strUpdated += Localization.GetString(Constants.User_Email, LocalResourceFile) & ", " + End If + End If + + 'try updating password + If blnUpdatePassword Then + If txtPassword1.Text = txtPassword2.Text Then + If UserController.ValidatePassword(txtPassword1.Text) Then + + If Not UserController.ChangePassword(oUser, txtPasswordCurrent.Text, txtPassword1.Text) Then + + Me.pnlError.Visible = True + Me.lblError.Text = "
  • " & Localization.GetString("PasswordUpdateError", LocalResourceFile) & "
" + Exit Sub + + End If + + strUpdated += Localization.GetString(Constants.User_Password1, LocalResourceFile) & ", " + Else + + Dim MinLength As Integer = 0 + Dim MinNonAlphaNumeric As Integer = 0 + Try + MinLength = DotNetNuke.Security.Membership.MembershipProvider.Instance().MinPasswordLength + Catch + End Try + Try + MinNonAlphaNumeric = DotNetNuke.Security.Membership.MembershipProvider.Instance().MinNonAlphanumericCharacters + Catch + End Try + + Dim strPolicy As String = String.Format(Localization.GetString("PasswordPolicy_MinLength", LocalResourceFile), MinLength.ToString) + If MinNonAlphaNumeric > 0 Then + strPolicy += String.Format(Localization.GetString("PasswordPolicy_MinNonAlphaNumeric", LocalResourceFile), MinNonAlphaNumeric.ToString) + End If + + Me.pnlError.Visible = True + Me.lblError.Text = "
  • " & String.Format(Localization.GetString("InvalidPassword", LocalResourceFile), strPolicy) & "
" + Exit Sub + + End If + Else + Me.pnlError.Visible = True + Me.lblError.Text = "
  • " & Localization.GetString("PasswordsDontMatch.Text", LocalResourceFile) & "
" + Exit Sub + End If + End If + + If blnUpdatePasswordQuestionAndAnswer Then + UserController.ChangePasswordQuestionAndAnswer(oUser, txtPasswordCurrent.Text, txtPasswordQuestion.Text, txtPasswordAnswer.Text) + oUser.Membership.PasswordQuestion = txtPasswordQuestion.Text + oUser.Membership.PasswordAnswer = txtPasswordAnswer.Text + End If + + UserController.UpdateUser(PortalId, oUser) + + Dim propertiesCollection As New ProfilePropertyDefinitionCollection + UpdateProfileProperties(plhProfile, oUser, propertiesCollection, strUpdated, GetPropertiesFromTempate(GetTemplate(ModuleTheme, Constants.TemplateName_Form, CurrentLocale, False))) + oUser = ProfileController.UpdateUserProfile(oUser, propertiesCollection) + + 'make sure first and lastname are in sync with user and profile object + If blnUpdateFirstname = True Then + If oldAccount.FirstName <> txtFirstName.Text Then + strUpdated += Localization.GetString(Constants.User_Firstname, LocalResourceFile) & ", " + End If + oUser.Profile.FirstName = txtFirstName.Text + oUser.FirstName = txtFirstName.Text + Else + If oUser.Profile.FirstName <> "" Then + oUser.FirstName = oUser.Profile.FirstName + End If + End If + + If blnUpdateLastname = True Then + If oldAccount.LastName <> txtLastName.Text Then + strUpdated += Localization.GetString(Constants.User_Lastname, LocalResourceFile) & ", " + End If + oUser.Profile.LastName = txtLastName.Text + oUser.LastName = txtLastName.Text + Else + If oUser.Profile.LastName <> "" Then + oUser.LastName = oUser.Profile.LastName + End If + End If + + If blnUpdateDisplayname Then + If oldAccount.DisplayName <> txtDisplayName.Text Then + strUpdated += Localization.GetString(Constants.User_Displayname, LocalResourceFile) & ", " + End If + oUser.DisplayName = txtDisplayName.Text + Else + Select Case DisplaynameMode + Case DisplaynameUpdateMode.Email + If blnUpdateEmail Then + oUser.DisplayName = txtEmail.Text.Trim + End If + Case DisplaynameUpdateMode.FirstLetterLastname + If blnUpdateLastname AndAlso blnUpdateFirstname Then + oUser.DisplayName = oUser.FirstName.Trim.Substring(0, 1) & ". " & oUser.LastName + End If + Case DisplaynameUpdateMode.FirstnameLastname + If blnUpdateLastname AndAlso blnUpdateFirstname Then + oUser.DisplayName = oUser.FirstName & " " & oUser.LastName + End If + Case DisplaynameUpdateMode.Lastname + If blnUpdateLastname Then + oUser.DisplayName = oUser.LastName + End If + End Select + End If + + 'update profile + UserController.UpdateUser(PortalId, oUser) + + 'add to role + If AddToRoleOnSubmit <> Null.NullInteger Then + Try + Dim rc As New RoleController + rc.AddUserRole(PortalId, oUser.UserID, AddToRoleOnSubmit, Null.NullDate) + Catch + End Try + End If + + 'remove from role + If RemoveFromRoleOnSubmit <> Null.NullInteger Then + Try + Dim rc As New RoleController + Dim r As RoleInfo = rc.GetRole(RemoveFromRoleOnSubmit, PortalId) + + RoleController.DeleteUserRole(oUser, r, PortalSettings, False) + Catch + End Try + End If + + 'notify admin + If NotifyRole <> "" AndAlso strUpdated.Length > 0 Then + + Dim strBody As String = GetTemplate(ModuleTheme, Constants.TemplateName_EmailToAdmin, CurrentLocale, False) + + strBody = strBody.Replace("[PORTALURL]", PortalSettings.PortalAlias.HTTPAlias) + strBody = strBody.Replace("[PORTALNAME]", PortalSettings.PortalName) + strBody = strBody.Replace("[USERID]", oUser.UserID) + strBody = strBody.Replace("[DISPLAYNAME]", oUser.DisplayName) + If MembershipProvider.Instance().PasswordRetrievalEnabled Then + strBody = strBody.Replace("[PASSWORD]", MembershipProvider.Instance().GetPassword(oUser, "")) + End If + + strBody = strBody.Replace("[USERNAME]", oUser.Username) + strBody = strBody.Replace("[FIRSTNAME]", oUser.FirstName) + strBody = strBody.Replace("[LASTNAME]", oUser.LastName) + strBody = strBody.Replace("[UPDATED]", strUpdated.Substring(0, strUpdated.LastIndexOf(",")).Replace(":", "")) + strBody = strBody.Replace("[USERURL]", NavigateURL(UsermanagementTab, "", "uid=" & oUser.UserID.ToString)) + + strBody = strBody.Replace("[RECIPIENTUSERID]", oUser.UserID.ToString) + strBody = strBody.Replace("[USERID]", oUser.UserID.ToString) + + Dim ctrlRoles As New RoleController + Dim NotificationUsers As ArrayList = ctrlRoles.GetUsersByRoleName(PortalId, NotifyRole) + For Each NotificationUser As UserInfo In NotificationUsers + Try + + strBody = strBody.Replace("[RECIPIENTUSERID]", NotificationUser.UserID.ToString) + strBody = strBody.Replace("[USERID]", NotificationUser.UserID.ToString) + + DotNetNuke.Services.Mail.Mail.SendMail(PortalSettings.Email, NotificationUser.Email, "", String.Format(Localization.GetString("NotifySubject_ProfileUpdate.Text", LocalResourceFile), PortalSettings.PortalName), strBody, "", "HTML", "", "", "", "") + Catch + End Try + Next + + End If + + If NotifyUser AndAlso strUpdated.Length > 0 Then + + Dim strBody As String = GetTemplate(ModuleTheme, Constants.TemplateName_EmailToUser, CurrentLocale, False) + + strBody = strBody.Replace("[PORTALURL]", PortalSettings.PortalAlias.HTTPAlias) + strBody = strBody.Replace("[PORTALNAME]", PortalSettings.PortalName) + strBody = strBody.Replace("[USERID]", oUser.UserID) + strBody = strBody.Replace("[DISPLAYNAME]", oUser.DisplayName) + If MembershipProvider.Instance().PasswordRetrievalEnabled Then + strBody = strBody.Replace("[PASSWORD]", MembershipProvider.Instance().GetPassword(oUser, "")) + End If + strBody = strBody.Replace("[USERNAME]", oUser.Username) + strBody = strBody.Replace("[FIRSTNAME]", oUser.FirstName) + strBody = strBody.Replace("[LASTNAME]", oUser.LastName) + strBody = strBody.Replace("[UPDATED]", strUpdated.Substring(0, strUpdated.LastIndexOf(",")).Replace(":", "")) + strBody = strBody.Replace("[USERURL]", NavigateURL(TabId)) + + strBody = strBody.Replace("[RECIPIENTUSERID]", oUser.UserID.ToString) + strBody = strBody.Replace("[USERID]", oUser.UserID.ToString) + + Try + DotNetNuke.Services.Mail.Mail.SendMail(PortalSettings.Email, oUser.Email, "", String.Format(Localization.GetString("NotifySubject_UserDetails", LocalResourceFile), PortalSettings.PortalName), strBody, "", "HTML", "", "", "", "") + Catch + End Try + + End If + + lblSucess.Text = "
  • " & Localization.GetString("AccountUpdateSuccess.Text", LocalResourceFile) & "
" + pnlSuccess.Visible = True + + If Not Request.QueryString("ReturnURL") Is Nothing Then + Response.Redirect(Server.UrlDecode(Request.QueryString("ReturnURL")), True) + End If + + If RedirectAfterSubmit <> Null.NullInteger Then + Response.Redirect(NavigateURL(RedirectAfterSubmit)) + End If + + End Sub + + Private Sub DeleteAccount() + + Dim oUser As UserInfo = UserController.GetCurrentUserInfo + + If UserController.DeleteUser(oUser, False, False) Then + lblSucess.Text = "
  • " & Localization.GetString("AccountDeleted.Text", LocalResourceFile) & "
" + pnlSuccess.Visible = True + Else + lblError.Text = "
  • " & Localization.GetString("AccountNotDeleted.Text", LocalResourceFile) & "
" + pnlError.Visible = True + End If + + End Sub + +#End Region + +#Region "Optional Interfaces" + + Public ReadOnly Property ModuleActions() As Entities.Modules.Actions.ModuleActionCollection Implements Entities.Modules.IActionable.ModuleActions + Get + Dim Actions As New Entities.Modules.Actions.ModuleActionCollection + Actions.Add(GetNextActionID, Localization.GetString("ManageTemplates.Action", LocalResourceFile), Entities.Modules.Actions.ModuleActionType.AddContent, "", "", EditUrl("ManageTemplates"), False, DotNetNuke.Security.SecurityAccessLevel.Edit, True, False) + Return Actions + End Get + End Property + +#End Region + + End Class + +End Namespace + + diff --git a/images/error.png b/images/error.png new file mode 100644 index 0000000..722794f Binary files /dev/null and b/images/error.png differ diff --git a/images/required.png b/images/required.png new file mode 100644 index 0000000..70b04f6 Binary files /dev/null and b/images/required.png differ diff --git a/images/success.png b/images/success.png new file mode 100644 index 0000000..102d03d Binary files /dev/null and b/images/success.png differ diff --git a/module.css b/module.css new file mode 100644 index 0000000..03ebaf4 --- /dev/null +++ b/module.css @@ -0,0 +1,21 @@ +/* more real estate for template editing */ +#ConnectAccountUpdateTemplates .dnnFormItem textarea {max-width: inherit;width: 100%;} + +/* float input controls in order to make the required indicators align correctly */ +.connect_accountform input {float:left;} +.connect_accountform span.value {float:left; display: block; font-weight: bold; padding: 0 0 10px 10px;} +/* messages on top of the form */ +.connect_accountform .dnnFormMessage ul li {list-style-type: none; } +.connect_accountform .dnnFormMessage.dnnFormError li {background: url(images/error.png) left 6px no-repeat;padding: 5px 0 5px 30px; line-height: 20px;} +.connect_accountform .dnnFormMessage.dnnFormSuccess li {background: url(images/success.png) left 6px no-repeat;padding: 5px 0 5px 30px; line-height: 20px;} + +/* required indicators in form */ +.connect_accountform .connect_required {background: url(images/required.png) 10px center no-repeat; width: 30px; height: 32px; float:left;} +.connect_accountform .connect_success {background: url(images/success.png) 10px center no-repeat; width: 30px; height: 32px; float:left;} +.connect_accountform .connect_error {background: url(images/error.png) 10px center no-repeat; width: 30px; height: 32px; float:left;} + +.dnnFormItem select.ctlProfileVisibility { + width: 10%; + margin-left: 10px; + padding: 7px; +} \ No newline at end of file diff --git a/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000..1844028 Binary files /dev/null and b/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache differ diff --git a/obj/Release/Connect.Modules.AccountUpdate.dll b/obj/Release/Connect.Modules.AccountUpdate.dll new file mode 100644 index 0000000..a3bca41 Binary files /dev/null and b/obj/Release/Connect.Modules.AccountUpdate.dll differ diff --git a/obj/Release/Connect.Modules.AccountUpdate.pdb b/obj/Release/Connect.Modules.AccountUpdate.pdb new file mode 100644 index 0000000..64ea32a Binary files /dev/null and b/obj/Release/Connect.Modules.AccountUpdate.pdb differ diff --git a/obj/Release/Connect.Modules.AccountUpdate.xml b/obj/Release/Connect.Modules.AccountUpdate.xml new file mode 100644 index 0000000..4b2cc88 --- /dev/null +++ b/obj/Release/Connect.Modules.AccountUpdate.xml @@ -0,0 +1,347 @@ + + + + +Connect.Modules.AccountUpdate + + + + + +lblUsernameMode control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +drpUsernameMode control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +lblDisplaynameMode control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +drpDisplaynameMode control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +lblRedirectAfterSubmit control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +drpRedirectAfterSubmit control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +lblUsermanagementTab control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +drpUserManagementTab control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +lblAddToRole control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +drpAddToRole control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +lblRemoveFromRole control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +drpRemoveFromRole control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +lblNotifyRole control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +drpNotifyRole control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +lblNotifyUser control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +chkNotifyUser control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +plTheme control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +drpThemes control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +cmdCopySelected control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +cmdDeleteSelected control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +pnlLocales control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +plLocale control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +drpLocales control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +plUseTheme control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +chkUseTheme control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +pnlTemplateName control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +plTemplateName control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +txtTemplateName control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +AccountUpdateTemplatesTabs control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +lblFormTemplate control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +lblEmailUser control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +lblEmailAdmin control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +txtFormTemplate control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +txtEmailUser control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +txtEmailAdmin control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +cmdUpdateSettings control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +cmdCancel control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +pnlError control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +lblError control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +pnlSuccess control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +lblSucess control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + +plhProfile control. + + +Auto-generated field. +To modify move field declaration from designer file to code-behind file. + + + + \ No newline at end of file diff --git a/obj/Release/Connect_AccountUpdate.vbproj.FileListAbsolute.txt b/obj/Release/Connect_AccountUpdate.vbproj.FileListAbsolute.txt new file mode 100644 index 0000000..36de59f --- /dev/null +++ b/obj/Release/Connect_AccountUpdate.vbproj.FileListAbsolute.txt @@ -0,0 +1,7 @@ +D:\Development\Websites\dev_DNN7\website\bin\Connect.Modules.AccountUpdate.dll +D:\Development\Websites\dev_DNN7\website\bin\Connect.Modules.AccountUpdate.pdb +D:\Development\Websites\dev_DNN7\website\bin\Connect.Modules.AccountUpdate.xml +D:\Development\Websites\dev_DNN7\website\DesktopModules\Connect\AccountUpdate\obj\Release\Connect.Modules.AccountUpdate.dll +D:\Development\Websites\dev_DNN7\website\DesktopModules\Connect\AccountUpdate\obj\Release\Connect.Modules.AccountUpdate.xml +D:\Development\Websites\dev_DNN7\website\DesktopModules\Connect\AccountUpdate\obj\Release\Connect.Modules.AccountUpdate.pdb +D:\Development\Websites\dev_DNN7\website\DesktopModules\Connect\AccountUpdate\obj\Release\Connect_AccountUpdate.vbprojResolveAssemblyReference.cache diff --git a/obj/Release/Connect_AccountUpdate.vbprojResolveAssemblyReference.cache b/obj/Release/Connect_AccountUpdate.vbprojResolveAssemblyReference.cache new file mode 100644 index 0000000..48acd22 Binary files /dev/null and b/obj/Release/Connect_AccountUpdate.vbprojResolveAssemblyReference.cache differ diff --git a/obj/Release/DesignTimeResolveAssemblyReferences.cache b/obj/Release/DesignTimeResolveAssemblyReferences.cache new file mode 100644 index 0000000..3eb3fc1 Binary files /dev/null and b/obj/Release/DesignTimeResolveAssemblyReferences.cache differ diff --git a/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache b/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000..ad22d08 Binary files /dev/null and b/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache differ diff --git a/packages/Connect_AccountUpdate_01.00.00_Install.zip b/packages/Connect_AccountUpdate_01.00.00_Install.zip new file mode 100644 index 0000000..59dcfa2 Binary files /dev/null and b/packages/Connect_AccountUpdate_01.00.00_Install.zip differ diff --git a/packages/Connect_AccountUpdate_01.00.00_Source.zip b/packages/Connect_AccountUpdate_01.00.00_Source.zip new file mode 100644 index 0000000..1405fae Binary files /dev/null and b/packages/Connect_AccountUpdate_01.00.00_Source.zip differ diff --git a/packages/Connect_AccountUpdate_01.00.01_Install.zip b/packages/Connect_AccountUpdate_01.00.01_Install.zip new file mode 100644 index 0000000..4da44af Binary files /dev/null and b/packages/Connect_AccountUpdate_01.00.01_Install.zip differ diff --git a/packages/Connect_AccountUpdate_01.00.01_Source.zip b/packages/Connect_AccountUpdate_01.00.01_Source.zip new file mode 100644 index 0000000..a6c623a Binary files /dev/null and b/packages/Connect_AccountUpdate_01.00.01_Source.zip differ