public override void EditPost(XRpcStruct rpcStruct, ContentItem contentItem) { if (contentItem.As <BodyPart>() != null) { contentItem.Alter <BodyPart>(x => x.Body = rpcStruct.Optional <string>("description")); } }
private void MetaWeblogSetCustomCreatedDate(int contentItemId, string appKey, string userName, string password, XRpcStruct content, bool publish, ICollection<IXmlRpcDriver> drivers) { if (!publish) return; var createdUtc = content.Optional<DateTime?>("dateCreated"); if (createdUtc == null || createdUtc > DateTime.UtcNow) return; var driver = new XmlRpcDriver(item => { if (!(item is int)) return; var id = (int)item; var contentItem = _contentManager.Get(id, VersionOptions.Latest); if (contentItem == null || !contentItem.Is<CommonPart>()) // only pre-dating of content with the CommonPart (obviously) return; contentItem.As<CommonPart>().CreatedUtc = createdUtc; }); if (contentItemId > 0) driver.Process(contentItemId); else drivers.Add(driver); }
private void MetaWeblogGetCustomPublishedDate(XRpcStruct postStruct, int itemId, string userName, string password, ICollection<IXmlRpcDriver> drivers) { if (itemId < 1) return; var driver = new XmlRpcDriver(item => { var post = item as XRpcStruct; if (post == null) return; var postId = post.Optional<int>("postid"); var contentItem = _contentManager.Get(postId, VersionOptions.Latest); if (contentItem == null) return; var publishedUtc = contentItem.As<PublishLaterPart>().ScheduledPublishUtc.Value; if (publishedUtc == null || publishedUtc <= DateTime.UtcNow) return; post.Set("dateCreated", publishedUtc); post.Set("date_created_gmt", publishedUtc); }); if (postStruct != null) driver.Process(postStruct); else drivers.Add(driver); }
private static XRpcStruct CreateBlogStruct( BlogPostPart blogPostPart, UrlHelper urlHelper) { var url = urlHelper.AbsoluteAction(() => urlHelper.ItemDisplayUrl(blogPostPart)); if (blogPostPart.HasDraft()) { url = urlHelper.AbsoluteAction("Preview", "Item", new { area = "Contents", id = blogPostPart.ContentItem.Id }); } var blogStruct = new XRpcStruct() .Set("postid", blogPostPart.Id) .Set("title", HttpUtility.HtmlEncode(blogPostPart.Title)) .Set("description", blogPostPart.Text) .Set("link", url) .Set("permaLink", url); blogStruct.Set("wp_slug", blogPostPart.As <IAliasAspect>().Path); if (blogPostPart.PublishedUtc != null) { blogStruct.Set("dateCreated", blogPostPart.PublishedUtc); blogStruct.Set("date_created_gmt", blogPostPart.PublishedUtc); } return(blogStruct); }
private XRpcStruct CreateBlogStruct(XmlRpcContext context, ContentItem contentItem) { var metadata = _contentManager.PopulateAspect <ContentItemMetadata>(contentItem); var url = context.Url.Action( metadata.DisplayRouteValues["action"].ToString(), metadata.DisplayRouteValues["controller"].ToString(), metadata.DisplayRouteValues, context.HttpContext.Request.Scheme); if (contentItem.HasDraft()) { url = context.Url.Action("Preview", "Item", new { area = "Orchard.Contents", contentItemId = contentItem.ContentItemId }); } var blogStruct = new XRpcStruct() .Set("postid", contentItem.ContentItemId) .Set("link", url) .Set("permaLink", url); if (contentItem.PublishedUtc != null) { blogStruct.Set("dateCreated", contentItem.PublishedUtc); blogStruct.Set("date_created_gmt", contentItem.PublishedUtc); } foreach (var driver in _metaWeblogDrivers) { driver.BuildPost(blogStruct, context, contentItem); } return(blogStruct); }
private XRpcStruct MetaWeblogNewMediaObject( string userName, string password, XRpcStruct file, UrlHelper url) { var user = _membershipService.ValidateUser(userName, password); if (!_authorizationService.TryCheckAccess(Permissions.ManageMediaContent, user, null)) { throw new OrchardCoreException(T("Access denied")); } var name = file.Optional<string>("name"); var bits = file.Optional<byte[]>("bits"); string directoryName = Path.GetDirectoryName(name); if (string.IsNullOrWhiteSpace(directoryName)) { // Some clients only pass in a name path that does not contain a directory component. directoryName = "media"; } try { // delete the file if it already exists, e.g. an updated image in a blog post // it's safe to delete the file as each content item gets a specific folder _mediaLibraryService.DeleteFile(directoryName, Path.GetFileName(name)); } catch { // current way to delete a file if it exists } string publicUrl = _mediaLibraryService.UploadMediaFile(directoryName, Path.GetFileName(name), bits); _mediaLibraryService.ImportMedia(directoryName, Path.GetFileName(name)); return new XRpcStruct() // Some clients require all optional attributes to be declared Wordpress responds in this way as well. .Set("file", publicUrl) .Set("url", url.MakeAbsolute(publicUrl)) .Set("type", file.Optional<string>("type")); }
/// <summary> /// Maps a method response to XML. /// </summary> /// <param name="rpcMethodResponse">The method response to be mapped.</param> /// <returns>The XML element.</returns> public XElement MapMethodResponse(XRpcMethodResponse rpcMethodResponse) { if (rpcMethodResponse == null) { throw new ArgumentNullException(nameof(rpcMethodResponse)); } // return a valid fault as per http://xmlrpc.scripting.com/spec.html if (rpcMethodResponse.Fault != null) { var members = new XRpcStruct(); members.Set("faultCode", rpcMethodResponse.Fault.Code); members.Set("faultString", rpcMethodResponse.Fault.Message); return(new XElement("methodResponse", new XElement("fault", new XElement("value", MapStruct(members)) ) )); } return(new XElement("methodResponse", new XElement("params", rpcMethodResponse.Params.Select( p => new XElement("param", MapValue(p)))))); }
private XRpcStruct MetaWeblogNewMediaObject( UriBuilder uriBuilder, string blogId, string userName, string password, XRpcStruct file) { var user = _membershipService.ValidateUser(userName, password); if (!_authorizationService.TryCheckAccess(Permissions.UploadMediaFiles, user, null)) { //TEMP: return appropriate access-denied response for user throw new ApplicationException("Access denied"); } var name = file.Optional<string>("name"); var bits = file.Optional<byte[]>("bits"); var target = HttpContext.Current.Server.MapPath("~/Media/" + name); Directory.CreateDirectory(Path.GetDirectoryName(target)); using (var stream = new FileStream(target, FileMode.Create, FileAccess.Write, FileShare.ReadWrite)) { stream.Write(bits, 0, bits.Length); } uriBuilder.Path = uriBuilder.Path.TrimEnd('/') + "/Media/" + name.TrimStart('/'); return new XRpcStruct().Set("url", uriBuilder.Uri.AbsoluteUri); }
public override void EditPost(XRpcStruct rpcStruct, ContentItem contentItem) { if (contentItem.As <TitlePart>() != null) { contentItem.Alter <TitlePart>(x => x.Title = rpcStruct.Optional <string>("title")); } }
private void MetaWeblogAttachTagsToPost(XRpcStruct postStruct, int postId, string userName, string password, ICollection<IXmlRpcDriver> drivers) { if (postId < 1) return; var user = _membershipService.ValidateUser(userName, password); _authorizationService.CheckAccess(StandardPermissions.AccessAdminPanel, user, null); var driver = new XmlRpcDriver(item => { var post = item as XRpcStruct; if (post == null) return; var contentItem = _contentManager.Get(postId, VersionOptions.Latest); if (contentItem == null) return; var tags = contentItem.As<TagsPart>().CurrentTags.Select(tag => tag.TagName); post.Set("mt_keywords", string.Join(", ", tags)); }); if (postStruct != null) driver.Process(postStruct); else drivers.Add(driver); }
private async Task <bool> MetaWeblogEditPostAsync( string contentItemId, string userName, string password, XRpcStruct content, bool publish, IEnumerable <IXmlRpcDriver> drivers) { var user = await ValidateUserAsync(userName, password); var contentItem = await _contentManager.GetAsync(contentItemId, VersionOptions.DraftRequired); if (contentItem == null) { throw new Exception(S["The specified Blog Post doesn't exist anymore. Please create a new Blog Post."]); } await CheckAccessAsync(publish?CommonPermissions.PublishContent : CommonPermissions.EditContent, user, contentItem); foreach (var driver in _metaWeblogDrivers) { driver.EditPost(content, contentItem); } // try to get the UTC time zone by default var publishedUtc = content.Optional <DateTime?>("date_created_gmt"); if (publishedUtc == null) { // take the local one publishedUtc = content.Optional <DateTime?>("dateCreated"); } else { // ensure it's read as a UTC time publishedUtc = new DateTime(publishedUtc.Value.Ticks, DateTimeKind.Utc); } if (publish && (publishedUtc == null || publishedUtc <= DateTime.UtcNow)) { await _contentManager.PublishAsync(contentItem); } else { await _contentManager.SaveDraftAsync(contentItem); } if (publishedUtc != null) { contentItem.CreatedUtc = publishedUtc; } foreach (var driver in drivers) { driver.Process(contentItem.Id); } return(true); }
/// <summary> /// Maps a rpc struct to XML. /// </summary> /// <param name="rpcStruct">The rpc struct.</param> /// <returns>The XML element.</returns> public XElement MapStruct(XRpcStruct rpcStruct) { return new XElement( "struct", rpcStruct.Members.Select( kv => new XElement( "member", new XElement("name", kv.Key), MapValue(kv.Value)))); }
/// <summary> /// Maps an XML element to a rpc struct. /// </summary> /// <param name="source">The XML element to be mapped.</param> /// <returns>The rpc struct.</returns> public XRpcStruct MapToStruct(XElement source) { var result = new XRpcStruct(); foreach (var member in source.Elements("member")) { result.Members.Add( (string)member.Element("name"), MapValue(member.Element("value"))); } return result; }
/// <summary> /// Maps a rpc struct to XML. /// </summary> /// <param name="rpcStruct">The rpc struct.</param> /// <returns>The XML element.</returns> public XElement MapStruct(XRpcStruct rpcStruct) { return(new XElement( "struct", rpcStruct.Members.Select( kv => new XElement( "member", new XElement("name", kv.Key), MapValue(kv.Value))))); }
public override void BuildPost(XRpcStruct rpcStruct, XmlRpcContext context, ContentItem contentItem) { var titlePart = contentItem.As <TitlePart>(); if (titlePart == null) { return; } rpcStruct.Set("title", _encoder.Encode(titlePart.Title)); }
private XRpcStruct MetaWeblogNewMediaObject( string userName, string password, XRpcStruct file, UrlHelper url) { List <LocalizedString> validationErrors; var user = _membershipService.ValidateUser(userName, password, out validationErrors); if (!_authorizationService.TryCheckAccess(Permissions.ManageOwnMedia, user, null) && !_authorizationService.TryCheckAccess(Permissions.EditMediaContent, user, null)) { throw new OrchardCoreException(T("Access denied")); } var name = file.Optional <string>("name"); var bits = file.Optional <byte[]>("bits"); string directoryName = Path.GetDirectoryName(name); if (string.IsNullOrWhiteSpace(directoryName)) // Some clients only pass in a name path that does not contain a directory component. { directoryName = "media"; } // If the user only has access to his own folder, rewrite the folder name if (!_authorizationService.TryCheckAccess(Permissions.EditMediaContent, user, null)) { directoryName = Path.Combine(_mediaLibraryService.GetRootedFolderPath(directoryName)); } try { // delete the file if it already exists, e.g. an updated image in a blog post // it's safe to delete the file as each content item gets a specific folder _mediaLibraryService.DeleteFile(directoryName, Path.GetFileName(name)); } catch { // current way to delete a file if it exists } string publicUrl = _mediaLibraryService.UploadMediaFile(directoryName, Path.GetFileName(name), bits); var mediaPart = _mediaLibraryService.ImportMedia(directoryName, Path.GetFileName(name)); try { _contentManager.Create(mediaPart); } catch { } return(new XRpcStruct() // Some clients require all optional attributes to be declared Wordpress responds in this way as well. .Set("file", publicUrl) .Set("url", url.MakeAbsolute(publicUrl)) .Set("type", file.Optional <string>("type"))); }
public override void BuildPost(XRpcStruct rpcStruct, XmlRpcContext context, ContentItem contentItem) { var bodyPart = contentItem.As <BodyPart>(); if (bodyPart == null) { return; } rpcStruct.Set("description", bodyPart.Body); }
public override void BuildPost(XRpcStruct rpcStruct, XmlRpcContext context, ContentItem contentItem) { var autoroutePart = contentItem.As <AutoroutePart>(); if (autoroutePart == null) { return; } rpcStruct.Set("wp_slug", autoroutePart.Path); }
public override void EditPost(XRpcStruct rpcStruct, ContentItem contentItem) { if (contentItem.As <AutoroutePart>() != null) { var slug = rpcStruct.Optional <string>("wp_slug"); if (!string.IsNullOrWhiteSpace(slug)) { contentItem.Alter <AutoroutePart>(x => x.Path = slug); } } }
/// <summary> /// Maps an XML element to a rpc struct. /// </summary> /// <param name="source">The XML element to be mapped.</param> /// <returns>The rpc struct.</returns> public XRpcStruct MapToStruct(XElement source) { var result = new XRpcStruct(); foreach (var member in source.Elements("member")) { result.Members.Add( (string)member.Element("name"), MapValue(member.Element("value"))); } return(result); }
private bool MetaWeblogEditPost( int postId, string userName, string password, XRpcStruct content, bool publish, IEnumerable <IXmlRpcDriver> drivers) { IUser user = ValidateUser(userName, password); var blogPost = _blogPostService.Get(postId, VersionOptions.DraftRequired); if (blogPost == null) { throw new ArgumentException(); } _authorizationService.CheckAccess(publish ? Permissions.PublishBlogPost : Permissions.EditBlogPost, user, blogPost); var title = content.Optional <string>("title"); var description = content.Optional <string>("description"); var slug = content.Optional <string>("wp_slug"); // BodyPart if (blogPost.Is <BodyPart>()) { blogPost.As <BodyPart>().Text = description; } //RoutePart if (blogPost.Is <RoutePart>()) { blogPost.As <RoutePart>().Title = title; blogPost.As <RoutePart>().Slug = slug; _routableService.FillSlugFromTitle(blogPost.As <RoutePart>()); blogPost.As <RoutePart>().Path = blogPost.As <RoutePart>().GetPathWithSlug(blogPost.As <RoutePart>().Slug); } var publishedUtc = content.Optional <DateTime?>("dateCreated"); if (publish && (publishedUtc == null || publishedUtc <= DateTime.UtcNow)) { _blogPostService.Publish(blogPost); } foreach (var driver in drivers) { driver.Process(blogPost.Id); } return(true); }
private XRpcStruct MetaWeblogNewMediaObject( string userName, string password, XRpcStruct file) { var user = _membershipService.ValidateUser(userName, password); if (!_authorizationService.TryCheckAccess(Permissions.ManageMedia, user, null)) { //TEMP: return appropriate access-denied response for user throw new ApplicationException("Access denied"); } var name = file.Optional<string>("name"); var bits = file.Optional<byte[]>("bits"); string publicUrl = _mediaService.UploadMediaFile(Path.GetDirectoryName(name), Path.GetFileName(name), bits, true); return new XRpcStruct().Set("url", publicUrl); }
private XRpcStruct MetaWeblogNewMediaObject( string userName, string password, XRpcStruct file) { var user = _membershipService.ValidateUser(userName, password); if (!_authorizationService.TryCheckAccess(Permissions.ManageMedia, user, null)) { //TEMP: return appropriate access-denied response for user throw new ApplicationException("Access denied"); } var name = file.Optional <string>("name"); var bits = file.Optional <byte[]>("bits"); string publicUrl = _mediaService.UploadMediaFile(Path.GetDirectoryName(name), Path.GetFileName(name), bits, true); return(new XRpcStruct().Set("url", publicUrl)); }
private static XRpcStruct CreateBlogStruct( BlogPostPart blogPostPart, UrlHelper urlHelper) { var url = urlHelper.AbsoluteAction(() => urlHelper.BlogPost(blogPostPart)); var blogStruct = new XRpcStruct() .Set("postid", blogPostPart.Id) .Set("title", blogPostPart.Title) .Set("wp_slug", blogPostPart.Slug) .Set("description", blogPostPart.Text) .Set("link", url) .Set("permaLink", url); if (blogPostPart.PublishedUtc != null) { blogStruct.Set("dateCreated", blogPostPart.PublishedUtc); blogStruct.Set("date_created_gmt", blogPostPart.PublishedUtc); } return(blogStruct); }
private void MetaWeblogGetCustomPublishedDate(XRpcStruct postStruct, int itemId, string userName, string password, ICollection <IXmlRpcDriver> drivers) { if (itemId < 1) { return; } var driver = new XmlRpcDriver(item => { var post = item as XRpcStruct; if (post == null) { return; } var postId = post.Optional <int>("postid"); var contentItem = _contentManager.Get(postId, VersionOptions.Latest); if (contentItem == null) { return; } var publishedUtc = contentItem.As <PublishLaterPart>().ScheduledPublishUtc.Value; if (publishedUtc == null || publishedUtc <= DateTime.UtcNow) { return; } post.Set("dateCreated", publishedUtc); post.Set("date_created_gmt", publishedUtc); }); if (postStruct != null) { driver.Process(postStruct); } else { drivers.Add(driver); } }
private XRpcStruct MetaWeblogNewMediaObject( string userName, string password, XRpcStruct file, UrlHelper url) { var user = _membershipService.ValidateUser(userName, password); if (!_authorizationService.TryCheckAccess(Permissions.ManageMedia, user, null)) { throw new OrchardCoreException(T("Access denied")); } var name = file.Optional <string>("name"); var bits = file.Optional <byte[]>("bits"); string directoryName = Path.GetDirectoryName(name); if (string.IsNullOrWhiteSpace(directoryName)) // Some clients only pass in a name path that does not contain a directory component. { directoryName = "media"; } try { // delete the file if it already exists, e.g. an updated image in a blog post // it's safe to delete the file as each content item gets a specific folder _mediaService.DeleteFile(Path.GetDirectoryName(name), Path.GetFileName(name)); } catch { // current way to delete a file if it exists } string publicUrl = _mediaService.UploadMediaFile(directoryName, Path.GetFileName(name), bits, true); return(new XRpcStruct() // Some clients require all optional attributes to be declared Wordpress responds in this way as well. .Set("file", publicUrl) .Set("url", url.MakeAbsolute(publicUrl)) .Set("type", file.Optional <string>("type"))); }
/// <summary> /// Maps a method response to XML. /// </summary> /// <param name="rpcMethodResponse">The method response to be mapped.</param> /// <returns>The XML element.</returns> public XElement MapMethodResponse(XRpcMethodResponse rpcMethodResponse) { Argument.ThrowIfNull(rpcMethodResponse, "rpcMethodResponse"); // return a valid fault as per http://xmlrpc.scripting.com/spec.html if(rpcMethodResponse.Fault != null) { var members = new XRpcStruct(); members.Set("faultCode", rpcMethodResponse.Fault.Code); members.Set("faultString", rpcMethodResponse.Fault.Message); return new XElement("methodResponse", new XElement("fault", new XElement("value", MapStruct(members)) ) ); } return new XElement("methodResponse", new XElement("params", rpcMethodResponse.Params.Select( p => new XElement("param", MapValue(p))))); }
private void MetaWeblogAttachTagsToPost(XRpcStruct postStruct, int postId, string userName, string password, ICollection <IXmlRpcDriver> drivers) { if (postId < 1) { return; } List <LocalizedString> validationErrors; var user = _membershipService.ValidateUser(userName, password, out validationErrors); _authorizationService.CheckAccess(StandardPermissions.AccessAdminPanel, user, null); var driver = new XmlRpcDriver(item => { var post = item as XRpcStruct; if (post == null) { return; } var contentItem = _contentManager.Get(postId, VersionOptions.Latest); if (contentItem == null) { return; } var tags = contentItem.As <TagsPart>().CurrentTags; post.Set("mt_keywords", string.Join(", ", tags)); }); if (postStruct != null) { driver.Process(postStruct); } else { drivers.Add(driver); } }
private bool MetaWeblogEditPost( int postId, string userName, string password, XRpcStruct content, bool publish, IEnumerable <IXmlRpcDriver> drivers) { IUser user = ValidateUser(userName, password); var blogPost = _blogPostService.Get(postId, VersionOptions.DraftRequired); if (blogPost == null) { throw new OrchardCoreException(T("The specified Blog Post doesn't exist anymore. Please create a new Blog Post.")); } _authorizationService.CheckAccess(publish ? Permissions.PublishBlogPost : Permissions.EditBlogPost, user, blogPost); var title = content.Optional <string>("title"); var description = content.Optional <string>("description"); var slug = content.Optional <string>("wp_slug"); // BodyPart if (blogPost.Is <BodyPart>()) { blogPost.As <BodyPart>().Text = description; } //TitlePart if (blogPost.Is <TitlePart>()) { blogPost.As <TitlePart>().Title = HttpUtility.HtmlDecode(title); } //AutoroutePart dynamic dBlogPost = blogPost; if (dBlogPost.AutoroutePart != null) { dBlogPost.AutoroutePart.DisplayAlias = slug; } // try to get the UTC timezone by default var publishedUtc = content.Optional <DateTime?>("date_created_gmt"); if (publishedUtc == null) { // take the local one publishedUtc = content.Optional <DateTime?>("dateCreated"); } else { // ensure it's read as a UTC time publishedUtc = new DateTime(publishedUtc.Value.Ticks, DateTimeKind.Utc); } if (publish && (publishedUtc == null || publishedUtc <= DateTime.UtcNow)) { _blogPostService.Publish(blogPost); } if (publishedUtc != null) { blogPost.As <CommonPart>().CreatedUtc = publishedUtc; } foreach (var driver in drivers) { driver.Process(blogPost.Id); } return(true); }
private void MetaWeblogUpdateTags(int contentItemId, string appKey, string userName, string password, XRpcStruct content, bool publish, ICollection<IXmlRpcDriver> drivers) { var user = _membershipService.ValidateUser(userName, password); var rawTags = content.Optional<string>("mt_keywords"); if (string.IsNullOrWhiteSpace(rawTags)) return; var tags = TagHelpers.ParseCommaSeparatedTagNames(rawTags); var driver = new XmlRpcDriver(item => { if (!(item is int)) return; var id = (int)item; var contentItem = _contentManager.Get(id, VersionOptions.Latest); if (contentItem == null) return; _orchardServices.WorkContext.CurrentUser = user; _tagService.UpdateTagsForContentItem(contentItem, tags); }); if (contentItemId > 0) driver.Process(contentItemId); else drivers.Add(driver); }
private static XRpcStruct CreateBlogStruct( BlogPostPart blogPostPart, UrlHelper urlHelper) { var url = urlHelper.AbsoluteAction(() => urlHelper.ItemDisplayUrl(blogPostPart)); if (blogPostPart.HasDraft()) { url = urlHelper.AbsoluteAction("Preview", "Item", new { area = "Contents", id = blogPostPart.ContentItem.Id }); } var blogStruct = new XRpcStruct() .Set("postid", blogPostPart.Id) .Set("title", HttpUtility.HtmlEncode(blogPostPart.Title)) .Set("description", blogPostPart.Text) .Set("link", url) .Set("permaLink", url); blogStruct.Set("wp_slug", blogPostPart.As<IAliasAspect>().Path); if (blogPostPart.PublishedUtc != null) { blogStruct.Set("dateCreated", blogPostPart.PublishedUtc); blogStruct.Set("date_created_gmt", blogPostPart.PublishedUtc); } return blogStruct; }
private void MetaWeblogSetCustomPublishedDate(int contentItemId, string appKey, string userName, string password, XRpcStruct content, bool publish, ICollection<IXmlRpcDriver> drivers) { var user = ValidateUser(userName, password); if (user == null) return; var publishedUtc = content.Optional<DateTime?>("dateCreated"); if (publishedUtc == null || publishedUtc <= DateTime.UtcNow) // only post-dating/scheduling of content with the PublishLaterPart return; var driver = new XmlRpcDriver(item => { if (!(item is int)) return; var id = (int)item; var contentItem = _contentManager.Get(id, VersionOptions.Latest); if (contentItem == null || !contentItem.Is<PublishLaterPart>()) return; _authorizationService.CheckAccess(Permissions.PublishContent, user, null); contentItem.As<PublishLaterPart>().ScheduledPublishUtc.Value = publishedUtc; _publishingTaskManager.Publish(contentItem, (DateTime)publishedUtc); }); if (contentItemId > 0) driver.Process(contentItemId); else drivers.Add(driver); }
public override void EditPost(XRpcStruct rpcStruct, ContentItem contentItem) { contentItem.DisplayText = rpcStruct.Optional <string>("title"); }
private int MetaWeblogNewPost( string blogId, string userName, string password, XRpcStruct content, bool publish) { var user = _membershipService.ValidateUser(userName, password); _authorizationService.CheckAccess(Permissions.EditBlogPost, user, null); var blog = _contentManager.Get<Blog>(Convert.ToInt32(blogId)); if (blog == null) throw new ArgumentException(); var title = content.Optional<string>("title"); var description = content.Optional<string>("description"); var slug = content.Optional<string>("wp_slug"); var blogPost = _contentManager.New<BlogPost>(BlogPostDriver.ContentType.Name); blogPost.Blog = blog; blogPost.Title = title; blogPost.Slug = slug; blogPost.Text = description; blogPost.Creator = user; _contentManager.Create(blogPost.ContentItem, VersionOptions.Draft); if (publish) _blogPostService.Publish(blogPost); return blogPost.Id; }
private int MetaWeblogNewPost( string blogId, string userName, string password, XRpcStruct content, bool publish, IEnumerable<IXmlRpcDriver> drivers) { IUser user = ValidateUser(userName, password); // User needs permission to edit or publish its own blog posts _authorizationService.CheckAccess(publish ? Permissions.PublishBlogPost : Permissions.EditBlogPost, user, null); BlogPart blog = _contentManager.Get<BlogPart>(Convert.ToInt32(blogId)); if (blog == null) throw new ArgumentException(); var title = content.Optional<string>("title"); var description = content.Optional<string>("description"); var slug = content.Optional<string>("wp_slug"); var blogPost = _contentManager.New<BlogPostPart>("BlogPost"); // BodyPart if (blogPost.Is<BodyPart>()) { blogPost.As<BodyPart>().Text = description; } //CommonPart if (blogPost.Is<ICommonPart>()) { blogPost.As<ICommonPart>().Owner = user; blogPost.As<ICommonPart>().Container = blog; } //TitlePart if (blogPost.Is<TitlePart>()) { blogPost.As<TitlePart>().Title = HttpUtility.HtmlDecode(title); } //AutoroutePart dynamic dBlogPost = blogPost; if (dBlogPost.AutoroutePart!=null){ dBlogPost.AutoroutePart.DisplayAlias = slug; } _contentManager.Create(blogPost, VersionOptions.Draft); // try to get the UTC timezone by default var publishedUtc = content.Optional<DateTime?>("date_created_gmt"); if (publishedUtc == null) { // take the local one publishedUtc = content.Optional<DateTime?>("dateCreated"); } else { // ensure it's read as a UTC time publishedUtc = new DateTime(publishedUtc.Value.Ticks, DateTimeKind.Utc); } if (publish && (publishedUtc == null || publishedUtc <= DateTime.UtcNow)) _blogPostService.Publish(blogPost); if (publishedUtc != null) { blogPost.As<CommonPart>().CreatedUtc = publishedUtc; } foreach (var driver in drivers) driver.Process(blogPost.Id); return blogPost.Id; }
private int MetaWeblogNewPost( string blogId, string userName, string password, XRpcStruct content, bool publish, IEnumerable <IXmlRpcDriver> drivers) { IUser user = ValidateUser(userName, password); // User needs permission to edit or publish its own blog posts _authorizationService.CheckAccess(publish ? Permissions.PublishBlogPost : Permissions.EditBlogPost, user, null); BlogPart blog = _contentManager.Get <BlogPart>(Convert.ToInt32(blogId)); if (blog == null) { throw new ArgumentException(); } var title = content.Optional <string>("title"); var description = content.Optional <string>("description"); var slug = content.Optional <string>("wp_slug"); var blogPost = _contentManager.New <BlogPostPart>("BlogPost"); // BodyPart if (blogPost.Is <BodyPart>()) { blogPost.As <BodyPart>().Text = description; } //CommonPart if (blogPost.Is <ICommonPart>()) { blogPost.As <ICommonPart>().Owner = user; blogPost.As <ICommonPart>().Container = blog; } //RoutePart if (blogPost.Is <RoutePart>()) { blogPost.As <RoutePart>().Title = title; blogPost.As <RoutePart>().Slug = slug; _routableService.FillSlugFromTitle(blogPost.As <RoutePart>()); blogPost.As <RoutePart>().Path = blogPost.As <RoutePart>().GetPathWithSlug(blogPost.As <RoutePart>().Slug); } _contentManager.Create(blogPost, VersionOptions.Draft); var publishedUtc = content.Optional <DateTime?>("dateCreated"); if (publish && (publishedUtc == null || publishedUtc <= DateTime.UtcNow)) { _blogPostService.Publish(blogPost); } foreach (var driver in drivers) { driver.Process(blogPost.Id); } return(blogPost.Id); }
private bool MetaWeblogEditPost( int postId, string userName, string password, XRpcStruct content, bool publish, IEnumerable<IXmlRpcDriver> drivers) { IUser user = ValidateUser(userName, password); var blogPost = _blogPostService.Get(postId, VersionOptions.DraftRequired); if (blogPost == null) throw new ArgumentException(); _authorizationService.CheckAccess(publish ? Permissions.PublishBlogPost : Permissions.EditBlogPost, user, blogPost); var title = content.Optional<string>("title"); var description = content.Optional<string>("description"); var slug = content.Optional<string>("wp_slug"); // BodyPart if (blogPost.Is<BodyPart>()) { blogPost.As<BodyPart>().Text = description; } //RoutePart if (blogPost.Is<RoutePart>()) { blogPost.As<RoutePart>().Title = title; blogPost.As<RoutePart>().Slug = slug; _routableService.FillSlugFromTitle(blogPost.As<RoutePart>()); blogPost.As<RoutePart>().Path = blogPost.As<RoutePart>().GetPathWithSlug(blogPost.As<RoutePart>().Slug); } var publishedUtc = content.Optional<DateTime?>("dateCreated"); if (publish && (publishedUtc == null || publishedUtc <= DateTime.UtcNow)) _blogPostService.Publish(blogPost); foreach (var driver in drivers) driver.Process(blogPost.Id); return true; }
private int MetaWeblogNewPost( string blogId, string userName, string password, XRpcStruct content, bool publish, IEnumerable<IXmlRpcDriver> drivers) { IUser user = ValidateUser(userName, password); // User needs permission to edit or publish its own blog posts _authorizationService.CheckAccess(publish ? Permissions.PublishBlogPost : Permissions.EditBlogPost, user, null); BlogPart blog = _contentManager.Get<BlogPart>(Convert.ToInt32(blogId)); if (blog == null) throw new ArgumentException(); var title = content.Optional<string>("title"); var description = content.Optional<string>("description"); var slug = content.Optional<string>("wp_slug"); var blogPost = _contentManager.New<BlogPostPart>("BlogPost"); // BodyPart if (blogPost.Is<BodyPart>()) { blogPost.As<BodyPart>().Text = description; } //CommonPart if (blogPost.Is<ICommonPart>()) { blogPost.As<ICommonPart>().Owner = user; blogPost.As<ICommonPart>().Container = blog; } //RoutePart if (blogPost.Is<RoutePart>()) { blogPost.As<RoutePart>().Title = title; blogPost.As<RoutePart>().Slug = slug; _routableService.FillSlugFromTitle(blogPost.As<RoutePart>()); blogPost.As<RoutePart>().Path = blogPost.As<RoutePart>().GetPathWithSlug(blogPost.As<RoutePart>().Slug); } _contentManager.Create(blogPost, VersionOptions.Draft); var publishedUtc = content.Optional<DateTime?>("dateCreated"); if (publish && (publishedUtc == null || publishedUtc <= DateTime.UtcNow)) _blogPostService.Publish(blogPost); foreach (var driver in drivers) driver.Process(blogPost.Id); return blogPost.Id; }
private static XRpcStruct CreateBlogStruct( BlogPostPart blogPostPart, UrlHelper urlHelper) { var url = urlHelper.AbsoluteAction(() => urlHelper.BlogPost(blogPostPart)); var blogStruct = new XRpcStruct() .Set("postid", blogPostPart.Id) .Set("title", blogPostPart.Title) .Set("wp_slug", blogPostPart.Slug) .Set("description", blogPostPart.Text) .Set("link", url) .Set("permaLink", url); if (blogPostPart.PublishedUtc != null) { blogStruct.Set("dateCreated", blogPostPart.PublishedUtc); blogStruct.Set("date_created_gmt", blogPostPart.PublishedUtc); } return blogStruct; }
private async Task <XRpcStruct> MetaWeblogNewMediaObjectAsync(string userName, string password, XRpcStruct file) { var user = await ValidateUserAsync(userName, password); var name = file.Optional <string>("name"); var bits = file.Optional <byte[]>("bits"); string directoryName = Path.GetDirectoryName(name); string filePath = _mediaFileStore.Combine(directoryName, Path.GetFileName(name)); await _mediaFileStore.CreateFileFromStream(filePath, new MemoryStream(bits)); string publicUrl = _mediaFileStore.MapPathToPublicUrl(filePath); return(new XRpcStruct() // Some clients require all optional attributes to be declared Wordpress responds in this way as well. .Set("file", publicUrl) .Set("url", publicUrl) .Set("type", file.Optional <string>("type"))); }
private void MetaWeblogSetCustomPublishedDate(int contentItemId, string appKey, string userName, string password, XRpcStruct content, bool publish, ICollection <IXmlRpcDriver> drivers) { var user = ValidateUser(userName, password); if (user == null) { return; } var publishedUtc = content.Optional <DateTime?>("dateCreated"); if (publishedUtc == null || publishedUtc <= DateTime.UtcNow) // only post-dating/scheduling of content with the PublishLaterPart { return; } var driver = new XmlRpcDriver(item => { if (!(item is int)) { return; } var id = (int)item; var contentItem = _contentManager.Get(id, VersionOptions.Latest); if (contentItem == null || !contentItem.Is <PublishLaterPart>()) { return; } _authorizationService.CheckAccess(Permissions.PublishContent, user, null); contentItem.As <PublishLaterPart>().ScheduledPublishUtc.Value = publishedUtc; _publishingTaskManager.Publish(contentItem, (DateTime)publishedUtc); }); if (contentItemId > 0) { driver.Process(contentItemId); } else { drivers.Add(driver); } }
private int MetaWeblogNewPost( string blogId, string userName, string password, XRpcStruct content, bool publish, IEnumerable <IXmlRpcDriver> drivers) { IUser user = ValidateUser(userName, password); // User needs permission to edit or publish its own blog posts _authorizationService.CheckAccess(publish ? Permissions.PublishBlogPost : Permissions.EditBlogPost, user, null); BlogPart blog = _contentManager.Get <BlogPart>(Convert.ToInt32(blogId)); if (blog == null) { throw new ArgumentException(); } var title = content.Optional <string>("title"); var description = content.Optional <string>("description"); var slug = content.Optional <string>("wp_slug"); var blogPost = _contentManager.New <BlogPostPart>("BlogPost"); // BodyPart if (blogPost.Is <BodyPart>()) { blogPost.As <BodyPart>().Text = description; } //CommonPart if (blogPost.Is <ICommonPart>()) { blogPost.As <ICommonPart>().Owner = user; blogPost.As <ICommonPart>().Container = blog; } //TitlePart if (blogPost.Is <TitlePart>()) { blogPost.As <TitlePart>().Title = HttpUtility.HtmlDecode(title); } //AutoroutePart dynamic dBlogPost = blogPost; if (dBlogPost.AutoroutePart != null) { dBlogPost.AutoroutePart.DisplayAlias = slug; } _contentManager.Create(blogPost, VersionOptions.Draft); // try to get the UTC timezone by default var publishedUtc = content.Optional <DateTime?>("date_created_gmt"); if (publishedUtc == null) { // take the local one publishedUtc = content.Optional <DateTime?>("dateCreated"); } else { // ensure it's read as a UTC time publishedUtc = new DateTime(publishedUtc.Value.Ticks, DateTimeKind.Utc); } if (publish && (publishedUtc == null || publishedUtc <= DateTime.UtcNow)) { _blogPostService.Publish(blogPost); } if (publishedUtc != null) { blogPost.As <CommonPart>().CreatedUtc = publishedUtc; } foreach (var driver in drivers) { driver.Process(blogPost.Id); } return(blogPost.Id); }
public virtual void EditPost(XRpcStruct rpcStruct, ContentItem contentItem) { }
private async Task <string> MetaWeblogNewPostAsync( string contentItemId, string userName, string password, XRpcStruct content, bool publish, IEnumerable <IXmlRpcDriver> drivers) { var user = await ValidateUserAsync(userName, password); // User needs permission to edit or publish its own blog posts await CheckAccessAsync(publish?Permissions.PublishContent : Permissions.EditContent, user, null); var list = await _contentManager.GetAsync(contentItemId); if (list == null) { throw new InvalidOperationException("Could not find content item " + contentItemId); } var postType = GetContainedContentTypes(list).FirstOrDefault(); var contentItem = _contentManager.New(postType.Name); contentItem.Owner = userName; contentItem.Alter <ContainedPart>(x => x.ListContentItemId = list.ContentItemId); foreach (var driver in _metaWeblogDrivers) { driver.EditPost(content, contentItem); } _contentManager.Create(contentItem, VersionOptions.Draft); // try to get the UTC timezone by default var publishedUtc = content.Optional <DateTime?>("date_created_gmt"); if (publishedUtc == null) { // take the local one publishedUtc = content.Optional <DateTime?>("dateCreated"); } else { // ensure it's read as a UTC time publishedUtc = new DateTime(publishedUtc.Value.Ticks, DateTimeKind.Utc); } if (publish && (publishedUtc == null || publishedUtc <= DateTime.UtcNow)) { await _contentManager.PublishAsync(contentItem); } if (publishedUtc != null) { contentItem.CreatedUtc = publishedUtc; } foreach (var driver in drivers) { driver.Process(contentItem.ContentItemId); } return(contentItem.ContentItemId); }
public virtual void BuildPost(XRpcStruct rpcStruct, XmlRpcContext context, ContentItem contentItem) { }
private bool MetaWeblogEditPost( int postId, string userName, string password, XRpcStruct content, bool publish) { var user = _membershipService.ValidateUser(userName, password); _authorizationService.CheckAccess(StandardPermissions.AccessFrontEnd, user, null); var blogPost = _blogPostService.Get(postId, VersionOptions.DraftRequired); if (blogPost == null) throw new ArgumentException(); var title = content.Optional<string>("title"); var description = content.Optional<string>("description"); var slug = content.Optional<string>("wp_slug"); blogPost.Title = title; blogPost.Slug = slug; blogPost.Text = description; if (publish) { _blogPostService.Publish(blogPost); } return true; }
private bool MetaWeblogEditPost( int postId, string userName, string password, XRpcStruct content, bool publish, IEnumerable<IXmlRpcDriver> drivers) { IUser user = ValidateUser(userName, password); var blogPost = _blogPostService.Get(postId, VersionOptions.DraftRequired); if (blogPost == null) { throw new OrchardCoreException(T("The specified Blog Post doesn't exist anymore. Please create a new Blog Post.")); } _authorizationService.CheckAccess(publish ? Permissions.PublishBlogPost : Permissions.EditBlogPost, user, blogPost); var title = content.Optional<string>("title"); var description = content.Optional<string>("description"); var slug = content.Optional<string>("wp_slug"); // BodyPart if (blogPost.Is<BodyPart>()) { blogPost.As<BodyPart>().Text = description; } //TitlePart if (blogPost.Is<TitlePart>()) { blogPost.As<TitlePart>().Title = HttpUtility.HtmlDecode(title); } //AutoroutePart dynamic dBlogPost = blogPost; if (dBlogPost.AutoroutePart != null) { dBlogPost.AutoroutePart.DisplayAlias = slug; } // try to get the UTC timezone by default var publishedUtc = content.Optional<DateTime?>("date_created_gmt"); if (publishedUtc == null) { // take the local one publishedUtc = content.Optional<DateTime?>("dateCreated"); } else { // ensure it's read as a UTC time publishedUtc = new DateTime(publishedUtc.Value.Ticks, DateTimeKind.Utc); } if (publish && (publishedUtc == null || publishedUtc <= DateTime.UtcNow)) _blogPostService.Publish(blogPost); if (publishedUtc != null) { blogPost.As<CommonPart>().CreatedUtc = publishedUtc; } foreach (var driver in drivers) driver.Process(blogPost.Id); return true; }
private void MetaWeblogUpdateTags(int contentItemId, string appKey, string userName, string password, XRpcStruct content, bool publish, ICollection <IXmlRpcDriver> drivers) { var user = _membershipService.ValidateUser(userName, password); var rawTags = content.Optional <string>("mt_keywords"); if (string.IsNullOrWhiteSpace(rawTags)) { return; } var tags = TagHelpers.ParseCommaSeparatedTagNames(rawTags); var driver = new XmlRpcDriver(item => { if (!(item is int)) { return; } var id = (int)item; var contentItem = _contentManager.Get(id, VersionOptions.Latest); if (contentItem == null) { return; } _orchardServices.WorkContext.CurrentUser = user; _tagService.UpdateTagsForContentItem(contentItem, tags); }); if (contentItemId > 0) { driver.Process(contentItemId); } else { drivers.Add(driver); } }
private void MetaWeblogSetCustomCreatedDate(int contentItemId, string userName, string password, XRpcStruct content, bool publish, ICollection <IXmlRpcDriver> drivers) { if (!publish) { return; } var createdUtc = content.Optional <DateTime?>("dateCreated"); if (createdUtc == null || createdUtc > DateTime.UtcNow) { return; } var driver = new XmlRpcDriver(item => { if (!(item is int)) { return; } var id = (int)item; var contentItem = _contentManager.Get(id, VersionOptions.Latest); if (contentItem == null || !contentItem.Is <CommonPart>()) // only pre-dating of content with the CommonPart (obviously) { return; } contentItem.As <CommonPart>().CreatedUtc = createdUtc; }); if (contentItemId > 0) { driver.Process(contentItemId); } else { drivers.Add(driver); } }