public static void Restore(TrashBag trashBag, string targetPath, bool addNewName) { if (trashBag == null || string.IsNullOrEmpty(targetPath)) { throw new RestoreException(RestoreResultType.Nonedefined); } targetPath = targetPath.TrimEnd(new [] { '/' }); var node = trashBag.DeletedContent; if (node == null) { throw new InvalidOperationException("TrashBag is empty"); } var targetContentPath = RepositoryPath.Combine(targetPath, node.Name); var targetParent = Node.Load <GenericContent>(targetPath); if (targetParent == null) { throw new RestoreException(RestoreResultType.NoParent, RepositoryPath.GetParentPath(targetPath)); } //assert permissions if (!targetParent.Security.HasPermission(PermissionType.Open)) { throw new RestoreException(RestoreResultType.PermissionError, targetContentPath); } //target type check: ContentTypes field AssertRestoreContentType(targetParent, node); if (Node.Exists(targetContentPath)) { var newName = ContentNamingHelper.IncrementNameSuffixToLastName(node.Name, targetParent.Id); targetContentPath = RepositoryPath.Combine(targetPath, newName); if (addNewName) { try { //there is no other way right now (rename and move cannot be done at the same time) node.Name = newName; node.Save(); } catch (SenseNetSecurityException ex) { Logger.WriteException(ex); throw new RestoreException(RestoreResultType.PermissionError, targetContentPath, ex); } catch (Exception ex) { Logger.WriteException(ex); throw new RestoreException(RestoreResultType.UnknownError, targetContentPath, ex); } } else { throw new RestoreException(RestoreResultType.ExistingName, targetContentPath); } } var originalUser = User.Current; try { node.MoveTo(targetParent); AccessProvider.Current.SetCurrentUser(User.Administrator); trashBag.KeepUntil = DateTime.Today.AddDays(-1); trashBag.ForceDelete(); } catch (SenseNetSecurityException ex) { Logger.WriteException(ex); throw new RestoreException(RestoreResultType.PermissionError, targetContentPath, ex); } catch (Exception ex) { Logger.WriteException(ex); throw new RestoreException(RestoreResultType.UnknownError, targetContentPath, ex); } finally { AccessProvider.Current.SetCurrentUser(originalUser); } }
public static void Restore(TrashBag trashBag, string targetPath, bool addNewName) { if (trashBag == null || string.IsNullOrEmpty(targetPath)) throw new RestoreException(RestoreResultType.Nonedefined); targetPath = targetPath.TrimEnd(new [] {'/'}); var node = trashBag.DeletedContent; if (node == null) throw new InvalidOperationException("TrashBag is empty"); var targetContentPath = RepositoryPath.Combine(targetPath, node.Name); var targetParent = Node.Load<GenericContent>(targetPath); if (targetParent == null) { throw new RestoreException(RestoreResultType.NoParent, RepositoryPath.GetParentPath(targetPath)); } //assert permissions if (!targetParent.Security.HasPermission(PermissionType.Open)) throw new RestoreException(RestoreResultType.PermissionError, targetContentPath); //target type check: ContentTypes field AssertRestoreContentType(targetParent, node); if (Node.Exists(targetContentPath)) { var newName = ContentNamingHelper.IncrementNameSuffixToLastName(node.Name, targetParent.Id); targetContentPath = RepositoryPath.Combine(targetPath, newName); if (addNewName) { try { //there is no other way right now (rename and move cannot be done at the same time) node.Name = newName; node.Save(); } catch (SenseNetSecurityException ex) { Logger.WriteException(ex); throw new RestoreException(RestoreResultType.PermissionError, targetContentPath, ex); } catch (Exception ex) { Logger.WriteException(ex); throw new RestoreException(RestoreResultType.UnknownError, targetContentPath, ex); } } else { throw new RestoreException(RestoreResultType.ExistingName, targetContentPath); } } var originalUser = User.Current; try { node.MoveTo(targetParent); AccessProvider.Current.SetCurrentUser(User.Administrator); trashBag.KeepUntil = DateTime.Today.AddDays(-1); trashBag.ForceDelete(); } catch (SenseNetSecurityException ex) { Logger.WriteException(ex); throw new RestoreException(RestoreResultType.PermissionError, targetContentPath, ex); } catch (Exception ex) { Logger.WriteException(ex); throw new RestoreException(RestoreResultType.UnknownError, targetContentPath, ex); } finally { AccessProvider.Current.SetCurrentUser(originalUser); } }