/// <summary>
/// Migrates all the User Accounts from a Provider to another.
/// </summary>
/// <param name="source">The source Provider.</param>
/// <param name="destination">The destination Provider.</param>
/// <param name="sendEmailNotification">A value indicating whether or not to send a notification email message to the moved users.</param>
public static void MigrateUsersStorageProviderData(IUsersStorageProviderV30 source, IUsersStorageProviderV30 destination, bool sendEmailNotification)
{
// User groups
var groups = source.GetUserGroups().ToArray();
foreach (UserGroup group in groups)
{
destination.AddUserGroup(group.Name, group.Description);
}
// Users
var users = source.GetUsers().ToArray();
var movedUsers = new MovedUser[users.Length];
for (var i = 0; i < users.Length; i++)
{
// Generate new Password, create MovedUser object, add new User, delete old User
var password = Tools.GenerateRandomPassword();
movedUsers[i] = new MovedUser(users[i].Username, users[i].Email, users[i].DateTime);
var newUser = destination.AddUser(users[i].Username, users[i].DisplayName, password, users[i].Email, users[i].Active, users[i].DateTime);
// Membership
destination.SetUserMembership(newUser, users[i].Groups);
// User data
IDictionary <string, string> uData = source.RetrieveAllUserData(users[i]);
foreach (KeyValuePair <string, string> pair in uData)
{
destination.StoreUserData(newUser, pair.Key, pair.Value);
}
source.RemoveUser(users[i]);
}
// Remove old groups
foreach (UserGroup group in groups)
{
source.RemoveUserGroup(group);
}
if (sendEmailNotification)
{
// Send Emails
for (var i = 0; i < movedUsers.Length; i++)
{
Users.SendPasswordResetMessage(movedUsers[i].Username, movedUsers[i].Email, movedUsers[i].DateTime);
}
}
}