internal void MovePage(Guid pageId, Guid targetId, int position)
        {
            var changedItems = new List <PageIndexItem>();

            for (var i = 0; i < _pageIndex.Count; i++)
            {
                var pageIndexItem = _pageIndex[i];

                if (pageIndexItem.PageId != pageId)
                {
                    continue;
                }

                if (pageIndexItem.ParentId == targetId)
                {
                    return;
                }

                RedirectManager.StorePageLinks(new CmsPage(pageIndexItem, LanguageId));

                if (pageIndexItem.ParentId == Guid.Empty)
                {
                    i = DetachPageFromRoot(i, pageIndexItem);
                }
                else
                {
                    DetachPage(pageIndexItem, i);
                }

                if (targetId == Guid.Empty)
                {
                    pageIndexItem.UrlSegment     = PageNameBuilder.GetUniqueUrl(targetId, pageIndexItem.UrlSegment);
                    pageIndexItem.UrlSegmentHash = pageIndexItem.UrlSegment.GetHashCode();
                    pageIndexItem.ParentId       = targetId;
                    var firstSibling = _pageIndex[0];
                    pageIndexItem.NextPage = firstSibling.NextPage;
                    firstSibling.NextPage  = i;

                    UpdateNodeAfterMove(changedItems, "", pageId, 0, pageIndexItem);
                }
                else
                {
                    var targetPage = GetPageIndexItem(targetId);
                    pageIndexItem.UrlSegment     = PageNameBuilder.GetUniqueUrl(targetPage.PageId, pageIndexItem.UrlSegment);
                    pageIndexItem.UrlSegmentHash = pageIndexItem.UrlSegment.GetHashCode();
                    pageIndexItem.ParentId       = targetId;
                    pageIndexItem.NextPage       = targetPage.FirstChild;
                    targetPage.FirstChild        = i;

                    UpdateNodeAfterMove(changedItems, targetPage.PageUrl, targetPage.RootId, targetPage.TreeLevel, pageIndexItem);
                }

                break;
            }

            PageData.UpdateStructure(changedItems);
        }
        private void UnpublishCurrentVersion(DataContext context)
        {
            var pageInstance = context.PageInstances.SingleOrDefault(x => x.PageId == PageId && x.LanguageId == LanguageId && x.Status == PageInstanceStatus.Published);

            if (pageInstance == null)
            {
                return;
            }

            pageInstance.Status = PageInstanceStatus.Archived;
            context.SaveChanges();

            Data.PropertyData.RemovePropertiesFromCache(PageId, LanguageId, pageInstance.CurrentVersion);

            if (pageInstance.PageUrl != UrlSegment)
            {
                var currentPage = PageFactory.GetPage(PageId, LanguageId);
                RedirectManager.StorePageLinks(currentPage);
            }
        }