diff --git a/App_LocalResources/MainControl.ascx.resx b/App_LocalResources/MainControl.ascx.resx
index 79c4807..9377a24 100644
--- a/App_LocalResources/MainControl.ascx.resx
+++ b/App_LocalResources/MainControl.ascx.resx
@@ -279,4 +279,7 @@
Max allowed file size for upload is {0}
+
+ Export in progress...
+
\ No newline at end of file
diff --git a/Components/CommonController.cs b/Components/CommonController.cs
index 8777a32..346cd78 100644
--- a/Components/CommonController.cs
+++ b/Components/CommonController.cs
@@ -164,11 +164,39 @@ public static void ResponseFile(string ContentType, byte[] lstBytes, string File
objResponse.End();
}
+ public static string SaveFile(int PortalId, string ToWrite, string FileName)
+ {
+ PortalSettings objPortalSettings = new PortalSettings(PortalId);
+ string Path = objPortalSettings.HomeDirectoryMapPath + "UsersExportImport\\";
+ if (!System.IO.Directory.Exists(Path))
+ {
+ System.IO.Directory.CreateDirectory(Path);
+ }
+ //delete all files in directory for security reason
+ foreach (string tempName in System.IO.Directory.GetFiles(Path))
+ {
+ System.IO.File.Delete(tempName);
+ }
+
+ System.IO.StreamWriter sw = new System.IO.StreamWriter(Path + FileName, false, Encoding.UTF8);
+ sw.Write(ToWrite);
+ sw.Close();
+
+ return objPortalSettings.HomeDirectory + "UsersExportImport/" + FileName;
+ }
+
public static string GetMaxAllowedFileSize()
{
- System.Configuration.Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
- HttpRuntimeSection section = config.GetSection("system.web/httpRuntime") as HttpRuntimeSection;
- return string.Format("{0} kB", section.MaxRequestLength);
+ try
+ {
+ System.Configuration.Configuration config = WebConfigurationManager.OpenWebConfiguration("~");
+ HttpRuntimeSection section = config.GetSection("system.web/httpRuntime") as HttpRuntimeSection;
+ return string.Format("{0} kB", section.MaxRequestLength);
+ }
+ catch
+ {
+ return "undefined";
+ }
}
}
}
\ No newline at end of file
diff --git a/Components/ExportController.cs b/Components/ExportController.cs
new file mode 100644
index 0000000..48b43c1
--- /dev/null
+++ b/Components/ExportController.cs
@@ -0,0 +1,187 @@
+using System;
+using System.Data;
+using System.Collections;
+using System.Linq;
+using System.Net.Mail;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Web;
+using System.Web.Configuration;
+using DotNetNuke.Entities.Users;
+using DotNetNuke.Entities.Portals;
+
+namespace forDNN.Modules.UsersExportImport.Controller
+{
+ public class ExportController
+ {
+ #region Export
+
+ public static string DoExport(int PortalId, Models.ExportInfo objExportInfo)
+ {
+ string ResultURL = "";
+ try
+ {
+ IDataReader idr = null;
+
+ //check if IsDeleted column exists
+ bool IsDeletedExists = true;
+ try
+ {
+ idr = DotNetNuke.Data.DataProvider.Instance().ExecuteSQL("SELECT TOP 1 IsDeleted FROM {databaseOwner}{objectQualifier}vw_Users");
+ }
+ catch
+ {
+ IsDeletedExists = false;
+ }
+
+ //build dynamic query to retireve data
+ Hashtable htFieldNames = new Hashtable();
+ htFieldNames["UserID"] = 1;
+ htFieldNames["UserName"] = 1;
+ htFieldNames["FirstName"] = 1;
+ htFieldNames["LastName"] = 1;
+ htFieldNames["DisplayName"] = 1;
+ htFieldNames["IsSuperUser"] = 1;
+ htFieldNames["Email"] = 1;
+ htFieldNames["AffiliateId"] = 1;
+ htFieldNames["Authorised"] = 1;
+
+ StringBuilder sbSelect = new StringBuilder(
+ @"SELECT u.UserID,
+ u.UserName,
+ u.FirstName,
+ u.LastName,
+ u.DisplayName,
+ u.IsSuperUser,
+ u.Email,
+ u.AffiliateId,
+ u.Authorised");
+
+ StringBuilder sbFrom = new StringBuilder(@"
+ FROM {databaseOwner}{objectQualifier}vw_Users u ");
+ StringBuilder sbWhere = new StringBuilder(@"
+ WHERE (1=1)
+ AND ((u.PortalId={0}) OR (u.IsSuperUser=1)) ".Replace("{0}", PortalId.ToString()));
+
+ //check SuperUsers
+ if (!objExportInfo.IncludeSuperUsers)
+ {
+ sbWhere.Append(" AND (u.IsSuperUser=0) ");
+ }
+
+ //check deleted accounts
+ if (IsDeletedExists)
+ {
+ sbSelect.Append(", u.IsDeleted");
+ if (!objExportInfo.IncludeDeleted)
+ {
+ sbWhere.Append(" AND (u.IsDeleted=0) ");
+ }
+ htFieldNames["IsDeleted"] = 1;
+ }
+
+ //check authorised accounts
+ if (!objExportInfo.IncludeNonAuthorised)
+ {
+ sbWhere.Append(" AND (u.Authorised=1) ");
+ }
+
+ //check if requires to export roles
+ if (objExportInfo.ExportRoles)
+ {
+ sbSelect.Append(@", (SELECT CAST(ur.RoleID AS nvarchar(10)) + ','
+ FROM {databaseOwner}{objectQualifier}UserRoles ur
+ WHERE (ur.UserID=u.UserID) AND (ur.RoleID IN (SELECT r.RoleID FROM {databaseOwner}{objectQualifier}Roles r WHERE (r.PortalID={0})))
+ FOR XML PATH('')) RoleIDs,
+
+ (SELECT r.RoleName + ','
+ FROM {databaseOwner}{objectQualifier}UserRoles ur
+ LEFT JOIN {databaseOwner}{objectQualifier}Roles r ON (ur.RoleID=r.RoleID)
+ WHERE (ur.UserID=u.UserID) AND (ur.RoleID IN (SELECT r.RoleID FROM {databaseOwner}{objectQualifier}Roles r WHERE (r.PortalID={0})))
+ FOR XML PATH('')) Roles
+").Replace("{0}", PortalId.ToString());
+
+ htFieldNames["RoleIDs"] = 1;
+ htFieldNames["Roles"] = 1;
+ }
+
+ //define properties
+ foreach (string li in objExportInfo.PropertiesToExport.Split(new char[] { ',' }))
+ {
+ string[] objParam = li.Split(new char[] { '=' });
+ if (htFieldNames[objParam[0]] != null)
+ {
+ continue;
+ }
+
+ htFieldNames[objParam[0]] = 1;
+
+ sbSelect.Append(", up{0}.PropertyValue [{1}] "
+ .Replace("{0}", objParam[1])
+ .Replace("{1}", objParam[0])
+ );
+
+
+ sbFrom.Append(" LEFT JOIN {databaseOwner}{objectQualifier}UserProfile up{0} ON ((u.UserID=up{0}.UserID) AND (up{0}.PropertyDefinitionID={0})) "
+ .Replace("{0}", objParam[1]));
+ }
+
+ idr = DotNetNuke.Data.DataProvider.Instance().ExecuteSQL(sbSelect.ToString() + sbFrom.ToString() + sbWhere.ToString());
+ DataTable dt = DotNetNuke.Common.Globals.ConvertDataReaderToDataTable(idr);
+ if (objExportInfo.ExportPasswords)
+ {
+ dt = AddPasswordsColumn(PortalId, dt);
+ }
+
+ string strResult = "";
+
+ switch (objExportInfo.ExportFileType)
+ {
+ case 0://temporary disabled for Excel
+ break;
+ case 1://XML - FOR XML RAW
+ strResult = CommonController.ToXML(dt);
+ ResultURL = CommonController.SaveFile(PortalId,
+ strResult,
+ string.Format("Users_{0:ddMMyyyy_HHmmss}_{1}.xml", DateTime.Now, System.Guid.NewGuid().ToString()));
+ break;
+ case 2://CSV
+ strResult = CommonController.ToCSV(dt, true, ",");
+ ResultURL = CommonController.SaveFile(PortalId,
+ strResult,
+ string.Format("Users_{0:ddMMyyyy_HHmmss}_{1}.csv", DateTime.Now, System.Guid.NewGuid().ToString()));
+ break;
+ }
+ }
+ catch (System.Exception ex)
+ {
+ DotNetNuke.Services.Exceptions.Exceptions.LogException(ex);
+ }
+
+ return ResultURL;
+ }
+
+ private static DataTable AddPasswordsColumn(int PortalId, DataTable dt)
+ {
+ dt.Columns.Add("Password", "".GetType());
+
+ foreach (DataRow dr in dt.Rows)
+ {
+ if (DotNetNuke.Security.Membership.MembershipProviderConfig.PasswordRetrievalEnabled)
+ {
+ UserInfo objUser = UserController.GetUserById(PortalId, (int)dr["userid"]);
+ dr["Password"] = UserController.GetPassword(ref objUser, objUser.Membership.PasswordAnswer);
+ }
+ else
+ {
+ dr["Password"] = "";
+ }
+ }
+
+ return dt;
+ }
+
+ #endregion
+
+ }
+}
\ No newline at end of file
diff --git a/Install/_UsersExportImport.dnn b/Install/_UsersExportImport.dnn
index 8200ed1..c0f75fb 100644
--- a/Install/_UsersExportImport.dnn
+++ b/Install/_UsersExportImport.dnn
@@ -1,10 +1,10 @@
-
+
forDNN.UsersExportImport
This module allows to export/import users, user profiles properties and roles to DNN (former DotNetNuke) from CSV/XML files. This is simple and fast way to create your users accounts in one click.
- Sergey Velichko
+ Sergiy Velychko
forDNN Team
<a href="http://forDNN.com" target="_blank">http://forDNN.com</a>
<a href="mailto:support@forDNN.com" target="_blank">support@forDNN.com</a>
@@ -25,6 +25,13 @@
Version 1.1.7:
+Fixed issue with special chars "Zero width space" and "Zero width no-break space" in the names of the columns.
+Improved import process when missed some required columns: DisplayName, IsSuperUser, Username, AffiliateId.
+
+Version 1.1.6:
+Added export support for versions 9.x.
+
Version 1.1.5:
Fixed an issue with multi portals DNN installation (there were dublicates of the users).
Added notification on maximum allowed file size for import.
diff --git a/Install/forDNN.UsersExportImport_v.01.01.06.zip b/Install/forDNN.UsersExportImport_v.01.01.06.zip
new file mode 100644
index 0000000..068794a
Binary files /dev/null and b/Install/forDNN.UsersExportImport_v.01.01.06.zip differ
diff --git a/Install/forDNN.UsersExportImport_v.01.01.07.zip b/Install/forDNN.UsersExportImport_v.01.01.07.zip
new file mode 100644
index 0000000..e4cf454
Binary files /dev/null and b/Install/forDNN.UsersExportImport_v.01.01.07.zip differ
diff --git a/MainControl.ascx b/MainControl.ascx
index fbb138d..4e4847c 100644
--- a/MainControl.ascx
+++ b/MainControl.ascx
@@ -33,7 +33,7 @@
-
-
+
+
diff --git a/MainControl.ascx.cs b/MainControl.ascx.cs
index 964cb34..8305b37 100644
--- a/MainControl.ascx.cs
+++ b/MainControl.ascx.cs
@@ -52,6 +52,11 @@ private void ExtraPageLoad()
lblMaxAllowedFileSize.Text = string.Format(Localization.GetString("MaxAllowedFileSize", this.LocalResourceFile), CommonController.GetMaxAllowedFileSize());
+ if (this.UserInfo != null)
+ {
+ divIncludeSuperUsers.Visible = this.UserInfo.IsSuperUser;
+ }
+
if (!IsPostBack)
{
FillProperties();
@@ -65,6 +70,8 @@ private void ExtraPageLoad()
lblExportPasswordsDisabled.Visible = true;
}
}
+
+ btnExportUsers.Attributes.Add("onclick", string.Format("javascript:return doExport({0});", this.ModuleId));
}
protected void Page_Load(object sender, System.EventArgs e)
@@ -85,6 +92,12 @@ protected void Page_Load(object sender, System.EventArgs e)
#region Import
+ private string RemoveWhiteSpaces(string Source)
+ {
+ //remove Zero width space and Zero width no-break space
+ return Source.Trim(new char[] { '\uFEFF', '\u200B' });
+ }
+
private DataTable CSV2Table(byte[] lstBytes)
{
string Separator = ",";
@@ -100,7 +113,8 @@ private DataTable CSV2Table(byte[] lstBytes)
foreach (string Header in lstRows[0].Split(new char[] { ',' }))
{
- dt.Columns.Add(Header);
+ //lets remove white space chars from the column's name
+ dt.Columns.Add(RemoveWhiteSpaces(Header));
}
for (int i = 1; (i < lstRows.Length - 1); i++)
@@ -216,6 +230,15 @@ private string ValidatePassword(UserInfo objUser, bool RandomPassword)
return UserController.GeneratePassword();
}
+ private object GetDataRowValue(DataTable dt, DataRow dr, string FieldName, object DefaultValue)
+ {
+ if (dt.Columns.IndexOf(FieldName) == -1)
+ {
+ return DefaultValue;
+ }
+ return dr[FieldName];
+ }
+
private void DoImport()
{
if (objFile.PostedFile.FileName == "")
@@ -255,7 +278,7 @@ private void DoImport()
}
string NonProfileFields = ",userid,username,firstname,lastname,displayname,issuperuser,email,affiliateid,authorised,isdeleted,roleids,roles,";
-
+
string SubjectTemplate = Localization.GetString("EmailUserSubject", this.LocalResourceFile);
string BodyTemplate = Localization.GetString("EmailUserBody", this.LocalResourceFile);
@@ -273,11 +296,13 @@ private void DoImport()
objUser.Email = string.Format("{0}", dr["Email"]);
objUser.FirstName = string.Format("{0}", dr["FirstName"]);
objUser.LastName = string.Format("{0}", dr["LastName"]);
- objUser.DisplayName = string.Format("{0}", dr["DisplayName"]);
+ objUser.DisplayName = string.Format("{0}", GetDataRowValue(dt, dr, "DisplayName", string.Format("{0} {1}", dr["FirstName"], dr["LastName"]) ));
objUser.PortalID = this.PortalId;
- objUser.IsSuperUser = (string.Format("{0}", dr["IsSuperUser"]) == "1");
- objUser.Username = string.Format("{0}", dr["Username"]);
+ objUser.IsSuperUser = (string.Format("{0}", GetDataRowValue(dt, dr, "IsSuperUser", "0")) == "1");
+
+ //use email as username, when username is not provided
+ objUser.Username = string.Format("{0}", GetDataRowValue(dt, dr, "Username", objUser.Email));
if (dt.Columns.Contains("Password"))
{
@@ -286,12 +311,11 @@ private void DoImport()
objUser.Membership.Password = ValidatePassword(objUser, cbRandomPassword.Checked);
int AffiliateID = -1;
- if (Int32.TryParse(string.Format("{0}", dr["AffiliateId"]), out AffiliateID))
+ if (Int32.TryParse(string.Format("{0}", GetDataRowValue(dt, dr, "AffiliateId", -1)), out AffiliateID))
{
objUser.AffiliateID = AffiliateID;
}
-
objUser.Membership.Approved = true;
objUser.Membership.PasswordQuestion = objUser.Membership.Password;
objUser.Membership.UpdatePassword = cbForcePasswordChange.Checked;//update password on next login
@@ -300,17 +324,20 @@ private void DoImport()
DotNetNuke.Entities.Users.UserController.CreateUser(ref objUser);
if (objCreateStatus == DotNetNuke.Security.Membership.UserCreateStatus.Success)
{
- objUser.Profile.SetProfileProperty("OldUserID", string.Format("{0}", dr["UserID"]));
+ if (dt.Columns.IndexOf("UserID") != -1)
+ {
+ objUser.Profile.SetProfileProperty("OldUserID", string.Format("{0}", dr["UserID"]));
+ }
SuccessUsersCount++;
//Update Profile
- objUser.Profile.Country = string.Format("{0}", dr["Country"]);
- objUser.Profile.Street = string.Format("{0}", dr["Street"]);
- objUser.Profile.City = string.Format("{0}", dr["City"]);
- objUser.Profile.Region = string.Format("{0}", dr["Region"]);
- objUser.Profile.PostalCode = string.Format("{0}", dr["PostalCode"]);
- objUser.Profile.Unit = string.Format("{0}", dr["Unit"]);
- objUser.Profile.Telephone = string.Format("{0}", dr["Telephone"]);
+ objUser.Profile.Country = string.Format("{0}", GetDataRowValue(dt, dr, "Country", ""));
+ objUser.Profile.Street = string.Format("{0}", GetDataRowValue(dt, dr, "Street", ""));
+ objUser.Profile.City = string.Format("{0}", GetDataRowValue(dt, dr, "City", ""));
+ objUser.Profile.Region = string.Format("{0}", GetDataRowValue(dt, dr, "Region", ""));
+ objUser.Profile.PostalCode = string.Format("{0}", GetDataRowValue(dt, dr, "PostalCode", ""));
+ objUser.Profile.Unit = string.Format("{0}", GetDataRowValue(dt, dr, "Unit", ""));
+ objUser.Profile.Telephone = string.Format("{0}", GetDataRowValue(dt, dr, "Telephone", ""));
objUser.Profile.FirstName = objUser.FirstName;
objUser.Profile.LastName = objUser.LastName;
@@ -356,9 +383,9 @@ private void DoImport()
if (cbEmailUser.Checked)
{
string SendEmailResult = CommonController.SendEmail(objUser, SubjectTemplate, BodyTemplate, this.PortalSettings);
-
+
switch (SendEmailResult)
- {
+ {
case "":
//success
break;
@@ -460,165 +487,6 @@ protected void btnImport_Click(object sender, EventArgs e)
#endregion
- #region Export
-
- protected void btnExportUsers_Click(object sender, EventArgs e)
- {
- DoExport();
- }
-
- private void DoExport()
- {
- IDataReader idr = null;
-
- //check if IsDeleted column exists
- bool IsDeletedExists = true;
- try
- {
- idr = DotNetNuke.Data.DataProvider.Instance().ExecuteSQL("SELECT TOP 1 IsDeleted FROM {databaseOwner}{objectQualifier}vw_Users");
- }
- catch
- {
- IsDeletedExists = false;
- }
-
- //build dynamic query to retireve data
- Hashtable htFieldNames = new Hashtable();
- htFieldNames["UserID"] = 1;
- htFieldNames["UserName"] = 1;
- htFieldNames["FirstName"] = 1;
- htFieldNames["LastName"] = 1;
- htFieldNames["DisplayName"] = 1;
- htFieldNames["IsSuperUser"] = 1;
- htFieldNames["Email"] = 1;
- htFieldNames["AffiliateId"] = 1;
- htFieldNames["Authorised"] = 1;
-
- StringBuilder sbSelect = new StringBuilder(
-@"SELECT u.UserID,
- u.UserName,
- u.FirstName,
- u.LastName,
- u.DisplayName,
- u.IsSuperUser,
- u.Email,
- u.AffiliateId,
- u.Authorised");
-
- StringBuilder sbFrom = new StringBuilder(@"
- FROM {databaseOwner}{objectQualifier}vw_Users u ");
- StringBuilder sbWhere = new StringBuilder(@"
- WHERE (1=1)
- AND ((u.PortalId={0}) OR (u.IsSuperUser=1)) ".Replace("{0}", this.PortalId.ToString()));
-
- //check SuperUsers
- if (!cbIncludeSuperUsers.Checked)
- {
- sbWhere.Append(" AND (u.IsSuperUser=0) ");
- }
-
- //check deleted accounts
- if (IsDeletedExists)
- {
- sbSelect.Append(", u.IsDeleted");
- if (!cbIncludeDeleted.Checked)
- {
- sbWhere.Append(" AND (u.IsDeleted=0) ");
- }
- htFieldNames["IsDeleted"] = 1;
- }
-
- //check authorised accounts
- if (!cbIncludeNonAuthorised.Checked)
- {
- sbWhere.Append(" AND (u.Authorised=1) ");
- }
-
- //check if requires to export roles
- if (cbExportRoles.Checked)
- {
- sbSelect.Append(@", (SELECT CAST(ur.RoleID AS nvarchar(10)) + ','
- FROM {databaseOwner}{objectQualifier}UserRoles ur
- WHERE (ur.UserID=u.UserID) AND (ur.RoleID IN (SELECT r.RoleID FROM {databaseOwner}{objectQualifier}Roles r WHERE (r.PortalID={0})))
- FOR XML PATH('')) RoleIDs,
-
- (SELECT r.RoleName + ','
- FROM {databaseOwner}{objectQualifier}UserRoles ur
- LEFT JOIN {databaseOwner}{objectQualifier}Roles r ON (ur.RoleID=r.RoleID)
- WHERE (ur.UserID=u.UserID) AND (ur.RoleID IN (SELECT r.RoleID FROM {databaseOwner}{objectQualifier}Roles r WHERE (r.PortalID={0})))
- FOR XML PATH('')) Roles
-").Replace("{0}", this.PortalId.ToString());
-
- htFieldNames["RoleIDs"] = 1;
- htFieldNames["Roles"] = 1;
- }
-
- //define properties
- foreach (ListItem li in cblPropertiesToExport.Items)
- {
- if ((!li.Selected) || (htFieldNames[li.Text] != null))
- {
- continue;
- }
- htFieldNames[li.Text] = 1;
-
- sbSelect.Append(", up{0}.PropertyValue [{1}] "
- .Replace("{0}", li.Value)
- .Replace("{1}", li.Text)
- );
-
-
- sbFrom.Append(" LEFT JOIN {databaseOwner}{objectQualifier}UserProfile up{0} ON ((u.UserID=up{0}.UserID) AND (up{0}.PropertyDefinitionID={0})) "
- .Replace("{0}", li.Value));
- }
-
- idr = DotNetNuke.Data.DataProvider.Instance().ExecuteSQL(sbSelect.ToString() + sbFrom.ToString() + sbWhere.ToString());
- DataTable dt = DotNetNuke.Common.Globals.ConvertDataReaderToDataTable(idr);
- if (cbExportPasswords.Checked)
- {
- dt = AddPasswordsColumn(dt);
- }
-
- string strResult = "";
-
- switch (ddlExportFileType.SelectedValue)
- {
- case "0"://temporary disabled for Excel
- break;
- case "1"://XML - FOR XML RAW
- strResult = CommonController.ToXML(dt);
- CommonController.ResponseFile("text/xml", System.Text.Encoding.UTF8.GetBytes(strResult), string.Format("Users_{0:ddMMyyyy_HHmmss}.xml", DateTime.Now));
- break;
- case "2"://CSV
- strResult = CommonController.ToCSV(dt, true, ",");
- CommonController.ResponseFile("text/csv", System.Text.Encoding.UTF8.GetBytes(strResult), string.Format("Users_{0:ddMMyyyy_HHmmss}.csv", DateTime.Now));
- break;
- }
-
- }
-
- private DataTable AddPasswordsColumn(DataTable dt)
- {
- dt.Columns.Add("Password", "".GetType());
-
- foreach (DataRow dr in dt.Rows)
- {
- if (DotNetNuke.Security.Membership.MembershipProviderConfig.PasswordRetrievalEnabled)
- {
- UserInfo objUser = UserController.GetUserById(this.PortalId, (int)dr["userid"]);
- dr["Password"] = UserController.GetPassword(ref objUser, objUser.Membership.PasswordAnswer);
- }
- else
- {
- dr["Password"] = "";
- }
- }
-
- return dt;
- }
-
- #endregion
-
#region "Optional Interfaces"
/// -----------------------------------------------------------------------------
diff --git a/MainControl.ascx.designer.cs b/MainControl.ascx.designer.cs
index fbe6eee..f8f0814 100644
--- a/MainControl.ascx.designer.cs
+++ b/MainControl.ascx.designer.cs
@@ -48,6 +48,15 @@ public partial class MainControl {
///
protected global::System.Web.UI.WebControls.DropDownList ddlExportFileType;
+ ///
+ /// divIncludeSuperUsers control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.HtmlControls.HtmlGenericControl divIncludeSuperUsers;
+
///
/// lblIncludeSuperUsers control.
///
@@ -181,7 +190,16 @@ public partial class MainControl {
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
///
- protected global::System.Web.UI.WebControls.LinkButton btnExportUsers;
+ protected global::System.Web.UI.WebControls.HyperLink btnExportUsers;
+
+ ///
+ /// lblExportInProgress control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.Label lblExportInProgress;
///
/// lblImport control.
diff --git a/UsersExportImport.csproj b/UsersExportImport.csproj
index fb1f1c4..127d7aa 100644
--- a/UsersExportImport.csproj
+++ b/UsersExportImport.csproj
@@ -1,5 +1,5 @@
-
+
Debug
@@ -24,6 +24,7 @@
+
true
@@ -50,20 +51,34 @@
..\..\..\bin\dotnetnuke.dll
False
+
+ False
+ ..\..\..\..\WebSites\unpsa2\bin\DotNetNuke.Web.dll
+
False
..\..\bin\Microsoft.ApplicationBlocks.Data.dll
False
+
+ False
+ ..\..\..\..\WebSites\unpsa2\bin\Newtonsoft.Json.dll
+
+
+
+
+ False
+ ..\..\..\..\WebSites\dnn910\bin\System.Web.Http.dll
+
@@ -72,7 +87,9 @@
+
+
MainControl.ascx
@@ -81,12 +98,13 @@
MainControl.ascx
+
+
Designer
-
Designer
@@ -137,6 +155,7 @@
- D:\Work\Projects\forDNN\UsersExportImport\Install\Compiled.bat
+
+
\ No newline at end of file
diff --git a/UsersExportImport.csproj.user b/UsersExportImport.csproj.user
index b5a010b..452c503 100644
--- a/UsersExportImport.csproj.user
+++ b/UsersExportImport.csproj.user
@@ -1,7 +1,8 @@
- C:\WebSites\dnn629\bin\
+ C:\WebSites\dnn910\bin\
+ false
diff --git a/UsersExportImport.sln b/UsersExportImport.sln
index c18fcad..9e3e73d 100644
--- a/UsersExportImport.sln
+++ b/UsersExportImport.sln
@@ -9,8 +9,8 @@ Global
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {83108CB8-3DF3-4332-9AF3-FCFFB133CFFA}.Debug|Any CPU.ActiveCfg = Release|Any CPU
- {83108CB8-3DF3-4332-9AF3-FCFFB133CFFA}.Debug|Any CPU.Build.0 = Release|Any CPU
+ {83108CB8-3DF3-4332-9AF3-FCFFB133CFFA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {83108CB8-3DF3-4332-9AF3-FCFFB133CFFA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{83108CB8-3DF3-4332-9AF3-FCFFB133CFFA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{83108CB8-3DF3-4332-9AF3-FCFFB133CFFA}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
diff --git a/UsersExportImport.v11.suo b/UsersExportImport.v11.suo
index 66d0630..5579f49 100644
Binary files a/UsersExportImport.v11.suo and b/UsersExportImport.v11.suo differ
diff --git a/bin/forDNN.Modules.UsersExportImport.dll b/bin/forDNN.Modules.UsersExportImport.dll
index c511e9f..fa640a5 100644
Binary files a/bin/forDNN.Modules.UsersExportImport.dll and b/bin/forDNN.Modules.UsersExportImport.dll differ
diff --git a/bin/forDNN.Modules.UsersExportImport.pdb b/bin/forDNN.Modules.UsersExportImport.pdb
index 5c01d11..08189d6 100644
Binary files a/bin/forDNN.Modules.UsersExportImport.pdb and b/bin/forDNN.Modules.UsersExportImport.pdb differ