The new version of EPiServers migration tool is supposed to support user personalization migration to the new enviroment. The good news is that it does migrate all users and generates a new password. The bad news is that it forgets which pages they subscribed too and the interval.

On this project, we also use SubscriptionCategories which basicly sends a newsletter everytime a page is created under that category which of course didn’t get migrated to the new enviroment.

What you need to know is open up a connection to the old database and fill up a datatable with info from tblUserProperty, tblSID and tblUser. You need to bring up the username, email (we use the email as username for all subscribers), interval, categories and which pages they subscribe too. I had to make three different queries to bring up what I needed though, one for the categories, one for the interval and one for the pages. I’m sure that an SQL genius can make it in one call.

Once you’ve filled up your datatable, bind it to a repeater and just print it all out. Might be nice to see it work before you do a full migration atempt. Once in the repeater, I call for the method I made to update the subscription information.

[sourcecode language=’csharp’]
private void UpdateUserSubscription(string user, int page, string categories)
{
EPiServerProfile profile = EPiServerProfile.Get(user);
profile[”SubscribeCategories”] = categories;
profile.SubscriptionInfo.Interval = CheckUserInterval(user);
profile.SubscriptionInfo.SubscribeTo(new PageReference(page));
profile.Save();
}

[/sourcecode]

Basicly, you need to load up the profile you wish to alter and then fill it up with whatever information you need. SubscribeCategories is the custom part of our subscription and the rest is interval and page to subscribe to. Just dont forget to save your profile, otherwise it wont save it to the database. The only time you don’t need to save the profile is if you’re altering the currentuser which is logged in. Then you can call on the methods you like and they will work without save. But when altering users that are not logged in, you’ll always need to save.

I’m using the PasswordRecovery control and find it both good and bad. The good part is that its rather simple. It does what it’s supposed to do and its painless to use. If you you’re not bothered with the looks then its really really good since all you need is basicly one row of code. I’ll just post a quickie on how to use the passwordrecovery control in a more friendly way. Nothing new and nothing revolutionary and if you have any ideas or comments to add, I’ll appreciate it and add it to the post.

It’s a simple ”type your e-mail and you’ll get a new password” feature. Without a question to answer and that’s because its based on episerver thinking and your e-mail is more than enough. Anyway, here it comes.

For the Front:

[sourcecode language=’html’]

[/sourcecode]

And thats it. For some reason, everything is centered so I just put in a few left align to make it look better.

For the backend:

[sourcecode language=’csharp’]
protected override void OnLoad(EventArgs e)
{
CreateMail();
base.OnLoad(e);
}

private void CreateMail()
{
ctrlPasswordRecovery.MailDefinition.From = ”email”; //Fetch from db, xml or property
ctrlPasswordRecovery.MailDefinition.Subject = ”Subject”; //Fetch from db, xml or property
ctrlPasswordRecovery.SuccessText = ”Succeded”; //Fetch from db, xml or property
ctrlPasswordRecovery.MailDefinition.BodyFileName = ”RecoverPassword.txt”;
}
[/sourcecode]

And thats it.

The one thing that is really really bad about the passwordrecovery is that you can’t modify the body without using a txt file. i.e you can’t just make a method to generate the mailbody. You can indeed override the sending method and make your own mailbody, BUT, you can’t send the username and password in a format you wish. e.g if you speak another language than english and would like to send the email in say, spanish. I’ve searched around quite a lot but all I’ve found is the same ”make a txt file”. If someone knows how to send the password and username, please let me know.

Otherwise in a txt file you just use <%UserName%> and <%Password%> and in that way you can modify your txtfile however you want.