Beispiel #1
0
        public PageStruct GetStructFromPage(
            IPage page,
            string postUrl,
            bool commentsOpen
            )
        {
            var p = new PageStruct();

            p.commentPolicy = commentsOpen ? "1" : "0";

            if (!string.IsNullOrWhiteSpace(page.DraftContent))
            {
                p.description = page.DraftContent;
            }
            else
            {
                p.description = page.Content;
            }

            p.link = postUrl;

            if (page.PubDate.HasValue)
            {
                p.pageUtcDate = page.PubDate.Value;
                p.pageDate    = page.PubDate.Value;
            }

            p.pageId       = page.Id;
            p.pageOrder    = page.PageOrder.ToString(CultureInfo.InvariantCulture);
            p.pageParentId = page.ParentId;
            p.title        = page.Title;
            p.parentTitle  = page.ParentSlug;

            return(p);
        }
Beispiel #2
0
        public Page GetPageFromStruct(PageStruct pageStruct)
        {
            var p = new Page();

            p.Content  = pageStruct.description;
            p.Title    = pageStruct.title;
            p.Id       = pageStruct.pageId;
            p.ParentId = pageStruct.pageParentId;
            // p.IsPublished = pageStruct.published;
            if (pageStruct.pageUtcDate != null)
            {
                p.PubDate = pageStruct.pageUtcDate;
            }

            p.Slug = pageStruct.link;
            if (!string.IsNullOrEmpty(pageStruct.pageOrder))
            {
                p.PageOrder = Convert.ToInt32(pageStruct.pageOrder);
            }

            return(p);
        }
Beispiel #3
0
        public PageStruct GetStructFromPage(
            IPage page,
            string postUrl,
            bool commentsOpen
            )
        {
            var p = new PageStruct();

            p.commentPolicy = commentsOpen ? "1" : "0";
            p.description   = page.Content;
            p.link          = postUrl;

            p.pageUtcDate  = page.PubDate;
            p.pageDate     = page.PubDate;
            p.pageId       = page.Id;
            p.pageOrder    = page.PageOrder.ToString(CultureInfo.InvariantCulture);
            p.pageParentId = page.ParentId;
            p.title        = page.Title;
            p.parentTitle  = page.ParentSlug;


            return(p);
        }
        public async Task <bool> EditPage(
            string blogId,
            string pageId,
            string userName,
            string password,
            PageStruct page,
            bool publish)
        {
            var existing = await pageService.GetPage(
                blogId,
                pageId,
                userName,
                password
                ).ConfigureAwait(false);

            if (existing == null)
            {
                return(false);
            }

            var update = mapper.GetPageFromStruct(page);

            existing.Content   = update.Content;
            existing.PageOrder = update.PageOrder;
            existing.ParentId  = update.ParentId;
            existing.Title     = update.Title;

            await pageService.Update(
                blogId,
                userName,
                password,
                existing,
                publish
                ).ConfigureAwait(false);

            return(true);
        }
        public async Task <string> NewPage(
            string blogId,
            string userName,
            string password,
            PageStruct newPage,
            bool publish)
        {
            var page = mapper.GetPageFromStruct(newPage);

            page.ProjectId = blogId;
            page.Id        = Guid.NewGuid().ToString();
            //page.Author = authorDisplayName;
            page.IsPublished = publish;

            await pageService.Create(
                blogId,
                userName,
                password,
                page,
                publish
                ).ConfigureAwait(false);

            return(page.Id);
        }
Beispiel #6
0
        public async Task <bool> EditPage(
            string blogId,
            string pageId,
            string userName,
            string password,
            PageStruct pageStruct,
            bool publish)
        {
            var permission = await _security.ValidatePermissions(
                blogId,
                userName,
                password,
                CancellationToken.None
                ).ConfigureAwait(false);

            if (!permission.CanEditPages)
            {
                _log.LogWarning($"user {userName} cannot edit pages");
                return(false);
            }

            var page = await _pageService.GetPage(pageId).ConfigureAwait(false);

            if (page == null)
            {
                _log.LogError($"page not found for id {pageId}");
                return(false);
            }

            if (!string.IsNullOrWhiteSpace(page.TemplateKey))
            {
                _log.LogError($"page {pageId} uses a content template and cannot be edited via metaweblog api");
                return(false);
            }
            if (page.ContentType != ProjectConstants.HtmlContentType)
            {
                _log.LogError($"page {pageId} uses a content type {page.ContentType} and cannot be edited via metaweblog api");
                return(false);
            }

            var history = page.CreateHistory(permission.DisplayName);
            var update  = _mapper.GetPageFromStruct(pageStruct);

            if (publish)
            {
                page.Content     = update.Content;
                page.IsPublished = true;
                if (!page.PubDate.HasValue)
                {
                    page.PubDate = DateTime.UtcNow;
                }
                page.DraftAuthor  = null;
                page.DraftContent = null;
                page.DraftPubDate = null;
            }
            else
            {
                page.DraftContent = update.Content;
            }

            page.PageOrder = update.PageOrder;
            page.ParentId  = update.ParentId;
            if (!string.IsNullOrWhiteSpace(page.ParentId))
            {
                var parent = await _pageService.GetPage(page.ParentId);

                if (parent != null)
                {
                    page.ParentSlug = parent.Slug;
                }
            }
            else
            {
                page.ParentSlug = null;
            }
            page.Title = update.Title;
            page.LastModifiedByUser = permission.DisplayName;

            await _contentHistoryCommands.Create(blogId, history);

            var convertToRelativeUrls = true;
            await _pageService.Update(page, convertToRelativeUrls).ConfigureAwait(false);

            _pageService.ClearNavigationCache();
            if (publish)
            {
                await _pageService.FirePublishEvent(page);

                await _contentHistoryCommands.DeleteDraftHistory(blogId, history.ContentId);
            }

            return(true);
        }
Beispiel #7
0
        public async Task <string> NewPage(
            string blogId,
            string userName,
            string password,
            PageStruct newPage,
            bool publish)
        {
            var permission = await _security.ValidatePermissions(
                blogId,
                userName,
                password,
                CancellationToken.None
                ).ConfigureAwait(false);

            if (!permission.CanEditPages)
            {
                _log.LogWarning($"user {userName} cannot edit pages");
                return(null);
            }

            var page = _mapper.GetPageFromStruct(newPage);

            page.ProjectId          = blogId;
            page.Id                 = Guid.NewGuid().ToString();
            page.CreatedByUser      = permission.DisplayName;
            page.LastModifiedByUser = permission.DisplayName;
            if (!string.IsNullOrWhiteSpace(page.ParentId))
            {
                var parent = await _pageService.GetPage(page.ParentId);

                if (parent != null)
                {
                    page.ParentSlug = parent.Slug;
                }
            }
            else
            {
                page.ParentSlug = null;
            }
            if (string.IsNullOrWhiteSpace(newPage.pageOrder))
            {
                page.PageOrder = await _pageService.GetNextChildPageOrder(page.ParentSlug).ConfigureAwait(false);
            }

            if (publish)
            {
                page.IsPublished = true;
                page.PubDate     = DateTime.UtcNow;
            }
            else
            {
                page.DraftAuthor  = page.Author;
                page.DraftContent = page.Content;
                page.Content      = null;
                page.IsPublished  = false;
                page.PubDate      = null;
            }

            var convertToRelativeUrls = true;

            await _pageService.Create(page, convertToRelativeUrls).ConfigureAwait(false);

            _pageService.ClearNavigationCache();
            if (publish)
            {
                await _pageService.FirePublishEvent(page);
            }

            return(page.Id);
        }
Beispiel #8
0
        private PageStruct GetPage(XElement paramNode)
        {
            var temp = new PageStruct();

            // Require Title and Description
            //var title = node.SelectSingleNode("value/struct/member[name='title']");
            //var title = node.Descendants("member")
            //    .First(i => (string)i.Attribute("name") == "title");
            var titleMember = paramNode.Descendants("member")
                              .FirstOrDefault(p =>
                                              p.Element("name").Value == "title"
                                              );

            if (titleMember == null)
            {
                throw new MetaWeblogException("06", "Page Struct Element, Title, not Sent.");
            }

            temp.title = (titleMember.LastNode as XElement).Value;

            //var description = node.SelectSingleNode("value/struct/member[name='description']");
            //var description = node.Descendants("member")
            //    .First(i => (string)i.Attribute("name") == "description");
            var descMember = paramNode.Descendants("member")
                             .FirstOrDefault(p =>
                                             p.Element("name").Value == "description"
                                             );

            if (descMember == null)
            {
                throw new MetaWeblogException("06", "Page Struct Element, Description, not Sent.");
            }

            temp.description = (descMember.LastNode as XElement).Value;

            //var link = node.SelectSingleNode("value/struct/member[name='link']");
            //if (link != null)
            //{
            //    temp.link = node.SelectSingleNode("value/struct/member[name='link']") == null ? null : link.LastChild.InnerText;
            //}

            //var link = node.Descendants("member")
            //    .First(i => (string)i.Attribute("name") == "link");
            var linkMember = paramNode.Descendants("member")
                             .FirstOrDefault(p =>
                                             p.Element("name").Value == "link"
                                             );

            temp.link = linkMember == null ? string.Empty : (linkMember.LastNode as XElement).Value;

            var slugMember = paramNode.Descendants("member")
                             .FirstOrDefault(p =>
                                             p.Element("name").Value == "wp_slug"
                                             );

            temp.slug = slugMember == null ? string.Empty : (slugMember.LastNode as XElement).Value;

            //var dateCreated = node.SelectSingleNode("value/struct/member[name='dateCreated']");
            //var dateCreated = node.Descendants("member")
            //   .First(i => (string)i.Attribute("name") == "dateCreated");
            var dateCreatedMember = paramNode.Descendants("member")
                                    .FirstOrDefault(p =>
                                                    p.Element("name").Value == "dateCreated"
                                                    );


            if (dateCreatedMember != null)
            {
                try
                {
                    var tempDate = (dateCreatedMember.LastNode as XElement).Value;
                    temp.pageDate = DateTime.ParseExact(
                        tempDate,
                        "yyyyMMdd'T'HH':'mm':'ss",
                        CultureInfo.InvariantCulture,
                        DateTimeStyles.AssumeUniversal);
                }
                catch (Exception ex)
                {
                    // Ignore PubDate Error
                    if (log != null)
                    {
                        log.LogError("swallowed pub date error", ex);
                    }
                }
            }

            // Keywords
            //var keywords = node.SelectSingleNode("value/struct/member[name='mt_keywords']");
            //temp.mt_keywords = keywords == null ? string.Empty : keywords.LastChild.InnerText;

            //var keywords = node.Descendants("member")
            //    .First(i => (string)i.Attribute("name") == "mt_keywords");
            var keywordsMember = paramNode.Descendants("member")
                                 .FirstOrDefault(p =>
                                                 p.Element("name").Value == "mt_keywords"
                                                 );

            temp.mt_keywords = keywordsMember == null ? string.Empty : (keywordsMember.LastNode as XElement).Value;

            //var pageParentId = node.SelectSingleNode("value/struct/member[name='wp_page_parent_id']");
            //temp.pageParentID = pageParentId == null ? null : pageParentId.LastChild.InnerText;

            //var pageParentId = node.Descendants("member")
            //    .First(i => (string)i.Attribute("name") == "wp_page_parent_id");
            var parentIdMember = paramNode.Descendants("member")
                                 .FirstOrDefault(p =>
                                                 p.Element("name").Value == "wp_page_parent_id"
                                                 );

            temp.pageParentId = parentIdMember == null ? null : (parentIdMember.LastNode as XElement).Value;

            //var pageOrder = node.SelectSingleNode("value/struct/member[name='wp_page_order']");
            //temp.pageOrder = pageOrder == null ? null : pageOrder.LastChild.InnerText;

            //var pageOrder = node.Descendants("member")
            //    .First(i => (string)i.Attribute("name") == "wp_page_order");

            var pageOrderMember = paramNode.Descendants("member")
                                  .FirstOrDefault(p =>
                                                  p.Element("name").Value == "wp_page_order"
                                                  );

            temp.pageOrder = pageOrderMember == null ? null : (pageOrderMember.LastNode as XElement).Value;

            //var allowComments = node.SelectSingleNode("value/struct/member[name='mt_allow_comments']");
            //temp.commentPolicy = allowComments == null ? string.Empty : allowComments.LastChild.InnerText;
            //var allowComments = node.Descendants("member")
            //    .First(i => (string)i.Attribute("name") == "mt_allow_comments");

            var allowCommentsMember = paramNode.Descendants("member")
                                      .FirstOrDefault(p =>
                                                      p.Element("name").Value == "mt_allow_comments"
                                                      );

            temp.commentPolicy = allowCommentsMember == null ? string.Empty : (allowCommentsMember.LastNode as XElement).Value;

            return(temp);
        }
        public async Task <bool> EditPage(
            string blogId,
            string pageId,
            string userName,
            string password,
            PageStruct pageStruct,
            bool publish)
        {
            var permission = await _security.ValidatePermissions(
                blogId,
                userName,
                password,
                CancellationToken.None
                ).ConfigureAwait(false);

            if (!permission.CanEditPages)
            {
                _log.LogWarning($"user {userName} cannot edit pages");
                return(false);
            }

            var page = await _pageService.GetPage(pageId).ConfigureAwait(false);

            if (page == null)
            {
                _log.LogError($"page not found for id {pageId}");
                return(false);
            }

            if (!string.IsNullOrWhiteSpace(page.TemplateKey))
            {
                throw new InvalidOperationException("templated pages cannot be edited via metaweblog api");
            }
            if (page.ContentType != ProjectConstants.HtmlContentType)
            {
                throw new InvalidOperationException("non html content cannot be edited via metaweblog api");
            }

            var history    = page.CreateHistory(permission.DisplayName);
            var update     = _mapper.GetPageFromStruct(pageStruct);
            var utcPubDate = _timeZoneHelper.ConvertToUtc(pageStruct.pageDate, permission.TimeZoneId);

            if (publish)
            {
                if (utcPubDate < DateTime.UtcNow)
                {
                    page.IsPublished = true;
                    if (utcPubDate.Year != 1) // no date specified
                    {
                        page.PubDate = utcPubDate;
                    }
                    if (!page.PubDate.HasValue)
                    {
                        page.PubDate = DateTime.UtcNow;
                    }
                    page.Content      = update.Content;
                    page.DraftAuthor  = null;
                    page.DraftContent = null;
                    page.DraftPubDate = null;
                }
                else
                {
                    //future date needs to be draft, it will auto publish after pub date
                    page.DraftAuthor  = update.Author;
                    page.DraftContent = update.Content;
                    page.DraftPubDate = utcPubDate;
                }
            }
            else
            {
                page.DraftAuthor  = update.Author;
                page.DraftContent = update.Content;
                if (utcPubDate > DateTime.UtcNow)
                {
                    page.DraftPubDate = utcPubDate;
                }
            }

            page.PageOrder = update.PageOrder;
            page.ParentId  = update.ParentId;
            if (!string.IsNullOrWhiteSpace(page.ParentId))
            {
                var parent = await _pageService.GetPage(page.ParentId);

                if (parent != null)
                {
                    page.ParentSlug = parent.Slug;
                }
            }
            else
            {
                page.ParentSlug = null;
            }
            page.Title = update.Title;
            page.LastModifiedByUser = permission.DisplayName;

            await _contentHistoryCommands.Create(blogId, history).ConfigureAwait(false);

            await _pageUrlResolver.ConvertMediaToRelativeUrls(page).ConfigureAwait(false);

            await _pageService.Update(page).ConfigureAwait(false);

            await _navigationCache.ClearTreeCache();

            if (publish)
            {
                await _pageService.FirePublishEvent(page).ConfigureAwait(false);

                await _contentHistoryCommands.DeleteDraftHistory(blogId, history.ContentId).ConfigureAwait(false);
            }

            return(true);
        }
        public async Task <string> NewPage(
            string blogId,
            string userName,
            string password,
            PageStruct newPage,
            bool publish)
        {
            var permission = await _security.ValidatePermissions(
                blogId,
                userName,
                password,
                CancellationToken.None
                ).ConfigureAwait(false);

            if (!permission.CanEditPages)
            {
                _log.LogWarning($"user {userName} cannot edit pages");
                return(null);
            }

            var page = _mapper.GetPageFromStruct(newPage);

            page.ProjectId          = blogId;
            page.Id                 = Guid.NewGuid().ToString();
            page.CreatedByUser      = permission.DisplayName;
            page.LastModifiedByUser = permission.DisplayName;
            if (!string.IsNullOrWhiteSpace(page.ParentId))
            {
                var parent = await _pageService.GetPage(page.ParentId).ConfigureAwait(false);

                if (parent != null)
                {
                    page.ParentSlug = parent.Slug;
                }
            }
            else
            {
                page.ParentSlug = null;
            }
            if (string.IsNullOrWhiteSpace(newPage.pageOrder))
            {
                page.PageOrder = await _pageService.GetNextChildPageOrder(page.ParentSlug).ConfigureAwait(false);
            }

            var utcPubDate = _timeZoneHelper.ConvertToUtc(newPage.pageDate, permission.TimeZoneId);

            if (publish)
            {
                if (utcPubDate.Year == 1)
                {
                    //invalid because not supplied
                    utcPubDate = DateTime.UtcNow;
                }

                if (utcPubDate < DateTime.UtcNow)
                {
                    page.IsPublished = true;
                    page.PubDate     = utcPubDate;
                }
                else
                {
                    //future date needs to be draft, it will auto publish after pub date
                    page.DraftAuthor  = page.Author;
                    page.DraftContent = page.Content;
                    page.DraftPubDate = utcPubDate;
                    page.IsPublished  = false;
                    page.PubDate      = null;
                    page.Content      = null;
                }
            }
            else
            {
                page.DraftAuthor  = page.Author;
                page.DraftContent = page.Content;
                if (utcPubDate > DateTime.UtcNow)
                {
                    page.DraftPubDate = utcPubDate;
                }
                page.Content     = null;
                page.IsPublished = false;
                page.PubDate     = null;
            }

            await _pageUrlResolver.ConvertMediaToRelativeUrls(page).ConfigureAwait(false);

            await _pageService.Create(page).ConfigureAwait(false);

            await _navigationCache.ClearTreeCache();

            if (publish)
            {
                await _pageService.FirePublishEvent(page).ConfigureAwait(false);
            }

            return(page.Id);
        }
Beispiel #11
0
 public Task <bool> EditPage(string blogId, string pageId, string userName, string password, PageStruct page, bool publish)
 {
     throw new NotImplementedException();
 }