I've tried the version gadget and while I'm pretty sure that's what the client asks for - they still want to be able to delete a language version that is not master from the tree view using "Move to Trash".
So far the criteras I set up checks out, but it still deletes all the versions of the page. I understand that this is default behaviour in EPi, that when you use Move to Trash, you delete the page as a whole - all versions including master.
I've read some old topics that uses the DeleteLanguageBranch and that's what I've tried here.
Any suggestions on how to move forward or maybe even convincingly talk me out of this? 😅
public static void MovingContent(object sender, ContentEventArgs e)
{
var newsPage = e.Content as NewsPage;
if (newsPage != null && newsPage.ArchiveLink == e.TargetLink)
UnpublishNewsPageAndCreateRedirect(newsPage);
if (e.TargetLink.CompareToIgnoreWorkID(ContentReference.WasteBasket) && e.Content is PageData)
{
var page = ServiceLocator.Current.GetInstance<IContentRepository>().Get<PageData>(e.ContentLink);
var pageUrl = ServiceLocator.Current.GetInstance<UrlResolver>().GetVirtualPath(page.ContentLink);
List<int> pageLanguages = page.ExistingLanguages.Select(x => x.LCID).ToList();
var languages = ServiceLocator.Current.GetInstance<LanguageBranchRepository>().ListEnabled().Where(x => pageLanguages.Contains(x.Culture.LCID));
bool msg = false;
var languagesWithNoAccess = new List<string>();
foreach (var lang in languages)
{
//check editing rights of current user
if (lang.QueryEditAccessRights(PrincipalInfo.CurrentPrincipal))
{
//do not delete master branch
if (page.MasterLanguage != lang.Culture)
{
//delete the branch corresponding to current lang from url.
if (pageUrl.VirtualPath.StartsWith(lang.Culture.Name))
{
ServiceLocator.Current.GetInstance<IContentRepository>().DeleteLanguageBranch(e.ContentLink, lang.Culture.Name, EPiServer.Security.AccessLevel.Delete);
}
}
}
else
{
languagesWithNoAccess.Add(lang.Name);
msg = true;
}
}
if (msg)
{
e.CancelReason = string.Format("You have no rights to delete version in {0}", string.Join(", ", languagesWithNoAccess));
e.CancelAction = true;
return;
}
}
}
I would avoid this if possible. If the editors ever attend a course, they will be frustrated by the fact that their edit mode do not work the way the course tells them.
Consider using the LanguageManager gadget instead?
I've checked out the Language Manager, and in my opinion that is the tool for the job. However - Is it possible to restore deleted versions of a page? From what I can see they are just deleted and you'll have to recreate deleted pages again from scratch.
Hello!
I've tried the version gadget and while I'm pretty sure that's what the client asks for - they still want to be able to delete a language version that is not master from the tree view using "Move to Trash".
So far the criteras I set up checks out, but it still deletes all the versions of the page.
I understand that this is default behaviour in EPi, that when you use Move to Trash, you delete the page as a whole - all versions including master.
I've read some old topics that uses the DeleteLanguageBranch and that's what I've tried here.
Any suggestions on how to move forward or maybe even convincingly talk me out of this? 😅