PageRenderTime 47ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 1ms

/BlogEngine/DotNetSlave.BusinessLogic/API/MetaWeblog/XMLRPCResponse.cs

#
C# | 1005 lines | 656 code | 132 blank | 217 comment | 8 complexity | c4b98cdf1b750d0b338511b18f0ca894 MD5 | raw file
Possible License(s): LGPL-2.1, Apache-2.0, BSD-3-Clause
  1. namespace BlogEngine.Core.API.MetaWeblog
  2. {
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Text;
  6. using System.Web;
  7. using System.Xml;
  8. /// <summary>
  9. /// Object is the outgoing XML-RPC response. This objects properties are set
  10. /// and the Response method is called sending the response via the HttpContext Response.
  11. /// </summary>
  12. internal class XMLRPCResponse
  13. {
  14. #region Constants and Fields
  15. /// <summary>
  16. /// The method name.
  17. /// </summary>
  18. private readonly string methodName;
  19. #endregion
  20. #region Constructors and Destructors
  21. /// <summary>
  22. /// Initializes a new instance of the <see cref="XMLRPCResponse"/> class.
  23. /// Constructor sets default value
  24. /// </summary>
  25. /// <param name="methodName">
  26. /// MethodName of called XML-RPC method
  27. /// </param>
  28. public XMLRPCResponse(string methodName)
  29. {
  30. this.methodName = methodName;
  31. this.Blogs = new List<MWABlogInfo>();
  32. this.Categories = new List<MWACategory>();
  33. this.Keywords = new List<string>();
  34. this.Posts = new List<MWAPost>();
  35. this.Pages = new List<MWAPage>();
  36. this.Authors = new List<MWAAuthor>();
  37. }
  38. #endregion
  39. #region Properties
  40. /// <summary>
  41. /// Gets or sets List if author structs. Used by wp.getAuthors.
  42. /// </summary>
  43. public List<MWAAuthor> Authors { get; set; }
  44. /// <summary>
  45. /// Gets or sets List of blog structs. Used by blogger.getUsersBlogs.
  46. /// </summary>
  47. public List<MWABlogInfo> Blogs { get; set; }
  48. /// <summary>
  49. /// Gets or sets List of category structs. Used by metaWeblog.getCategories.
  50. /// </summary>
  51. public List<MWACategory> Categories { get; set; }
  52. /// <summary>
  53. /// Gets or sets a value indicating whether function call was completed and successful.
  54. /// Used by metaWeblog.editPost and blogger.deletePost.
  55. /// </summary>
  56. public bool Completed { get; set; }
  57. /// <summary>
  58. /// Gets or sets Fault Struct. Used by API to return error information
  59. /// </summary>
  60. public MWAFault Fault { get; set; }
  61. /// <summary>
  62. /// Gets or sets List of Tags. Used by wp.getTags.
  63. /// </summary>
  64. public List<string> Keywords { get; set; }
  65. /// <summary>
  66. /// Gets or sets MediaInfo Struct
  67. /// </summary>
  68. public MWAMediaInfo MediaInfo { get; set; }
  69. /// <summary>
  70. /// Gets or sets MWAPage struct
  71. /// </summary>
  72. public MWAPage Page { get; set; }
  73. /// <summary>
  74. /// Gets or sets Id of page that was just added.
  75. /// </summary>
  76. public string PageID { get; set; }
  77. /// <summary>
  78. /// Gets or sets List of Page Structs
  79. /// </summary>
  80. public List<MWAPage> Pages { get; set; }
  81. /// <summary>
  82. /// Gets or sets Metaweblog Post Struct. Used by metaWeblog.getPost
  83. /// </summary>
  84. public MWAPost Post { get; set; }
  85. /// <summary>
  86. /// Gets or sets Id of post that was just added. Used by metaWeblog.newPost
  87. /// </summary>
  88. public string PostID { get; set; }
  89. /// <summary>
  90. /// Gets or sets List of Metaweblog Post Structs. Used by metaWeblog.getRecentPosts
  91. /// </summary>
  92. public List<MWAPost> Posts { get; set; }
  93. #endregion
  94. #region Public Methods
  95. /// <summary>
  96. /// Response generates the XML-RPC response and returns it to the caller.
  97. /// </summary>
  98. /// <param name="context">
  99. /// httpContext.Response.OutputStream is used from the context
  100. /// </param>
  101. public void Response(HttpContext context)
  102. {
  103. context.Response.ContentType = "text/xml";
  104. using (var data = new XmlTextWriter(context.Response.OutputStream, Encoding.UTF8))
  105. {
  106. data.Formatting = Formatting.Indented;
  107. data.WriteStartDocument();
  108. data.WriteStartElement("methodResponse");
  109. data.WriteStartElement(this.methodName == "fault" ? "fault" : "params");
  110. switch (this.methodName)
  111. {
  112. case "metaWeblog.newPost":
  113. this.WriteNewPost(data);
  114. break;
  115. case "metaWeblog.getPost":
  116. this.WritePost(data);
  117. break;
  118. case "metaWeblog.newMediaObject":
  119. this.WriteMediaInfo(data);
  120. break;
  121. case "metaWeblog.getCategories":
  122. this.WriteGetCategories(data);
  123. break;
  124. case "metaWeblog.getRecentPosts":
  125. this.WritePosts(data);
  126. break;
  127. case "blogger.getUsersBlogs":
  128. case "metaWeblog.getUsersBlogs":
  129. this.WriteGetUsersBlogs(data);
  130. break;
  131. case "metaWeblog.editPost":
  132. case "blogger.deletePost":
  133. case "wp.editPage":
  134. case "wp.deletePage":
  135. this.WriteBool(data);
  136. break;
  137. case "wp.newPage":
  138. this.WriteNewPage(data);
  139. break;
  140. case "wp.getPage":
  141. this.WritePage(data);
  142. break;
  143. case "wp.getPageList":
  144. this.WriteShortPages(data);
  145. break;
  146. case "wp.getPages":
  147. this.WritePages(data);
  148. break;
  149. case "wp.getAuthors":
  150. this.WriteAuthors(data);
  151. break;
  152. case "wp.getTags":
  153. this.WriteKeywords(data);
  154. break;
  155. case "fault":
  156. this.WriteFault(data);
  157. break;
  158. }
  159. data.WriteEndElement();
  160. data.WriteEndElement();
  161. data.WriteEndDocument();
  162. }
  163. }
  164. #endregion
  165. #region Methods
  166. /// <summary>
  167. /// Convert Date to format expected by MetaWeblog Response.
  168. /// </summary>
  169. /// <param name="date">
  170. /// DateTime to convert
  171. /// </param>
  172. /// <returns>
  173. /// ISO8601 date string
  174. /// </returns>
  175. private static string ConvertDatetoISO8601(DateTime date)
  176. {
  177. var temp = string.Format(
  178. "{0}{1}{2}T{3}:{4}:{5}",
  179. date.Year,
  180. date.Month.ToString().PadLeft(2, '0'),
  181. date.Day.ToString().PadLeft(2, '0'),
  182. date.Hour.ToString().PadLeft(2, '0'),
  183. date.Minute.ToString().PadLeft(2, '0'),
  184. date.Second.ToString().PadLeft(2, '0'));
  185. return temp;
  186. }
  187. /// <summary>
  188. /// Writes the Array of Category structs parameters of Response
  189. /// </summary>
  190. /// <param name="data">
  191. /// xml response
  192. /// </param>
  193. private void WriteAuthors(XmlWriter data)
  194. {
  195. data.WriteStartElement("param");
  196. data.WriteStartElement("value");
  197. data.WriteStartElement("array");
  198. data.WriteStartElement("data");
  199. foreach (var author in this.Authors)
  200. {
  201. data.WriteStartElement("value");
  202. data.WriteStartElement("struct");
  203. // user id
  204. data.WriteStartElement("member");
  205. data.WriteElementString("name", "user_id");
  206. data.WriteElementString("value", author.user_id);
  207. data.WriteEndElement();
  208. // login
  209. data.WriteStartElement("member");
  210. data.WriteElementString("name", "user_login");
  211. data.WriteElementString("value", author.user_login);
  212. data.WriteEndElement();
  213. // display name
  214. data.WriteStartElement("member");
  215. data.WriteElementString("name", "display_name");
  216. data.WriteElementString("value", author.display_name);
  217. data.WriteEndElement();
  218. // user email
  219. data.WriteStartElement("member");
  220. data.WriteElementString("name", "user_email");
  221. data.WriteElementString("value", author.user_email);
  222. data.WriteEndElement();
  223. // meta value
  224. data.WriteStartElement("member");
  225. data.WriteElementString("name", "meta_value");
  226. data.WriteElementString("value", author.meta_value);
  227. data.WriteEndElement();
  228. data.WriteEndElement();
  229. data.WriteEndElement();
  230. }
  231. // Close tags
  232. data.WriteEndElement();
  233. data.WriteEndElement();
  234. data.WriteEndElement();
  235. data.WriteEndElement();
  236. }
  237. /// <summary>
  238. /// Writes Boolean parameter of Response
  239. /// </summary>
  240. /// <param name="data">
  241. /// xml response
  242. /// </param>
  243. private void WriteBool(XmlWriter data)
  244. {
  245. var postValue = "0";
  246. if (this.Completed)
  247. {
  248. postValue = "1";
  249. }
  250. data.WriteStartElement("param");
  251. data.WriteStartElement("value");
  252. data.WriteElementString("boolean", postValue);
  253. data.WriteEndElement();
  254. data.WriteEndElement();
  255. }
  256. /// <summary>
  257. /// Writes Fault Parameters of Response.
  258. /// </summary>
  259. /// <param name="data">
  260. /// xml response
  261. /// </param>
  262. private void WriteFault(XmlWriter data)
  263. {
  264. data.WriteStartElement("value");
  265. data.WriteStartElement("struct");
  266. // faultCode
  267. data.WriteStartElement("member");
  268. data.WriteElementString("name", "faultCode");
  269. data.WriteElementString("value", this.Fault.faultCode);
  270. data.WriteEndElement();
  271. // faultString
  272. data.WriteStartElement("member");
  273. data.WriteElementString("name", "faultString");
  274. data.WriteElementString("value", this.Fault.faultString);
  275. data.WriteEndElement();
  276. data.WriteEndElement();
  277. data.WriteEndElement();
  278. }
  279. /// <summary>
  280. /// Writes the Array of Category structs parameters of Response
  281. /// </summary>
  282. /// <param name="data">
  283. /// xml response
  284. /// </param>
  285. private void WriteGetCategories(XmlWriter data)
  286. {
  287. data.WriteStartElement("param");
  288. data.WriteStartElement("value");
  289. data.WriteStartElement("array");
  290. data.WriteStartElement("data");
  291. foreach (var category in this.Categories)
  292. {
  293. data.WriteStartElement("value");
  294. data.WriteStartElement("struct");
  295. // description
  296. data.WriteStartElement("member");
  297. data.WriteElementString("name", "description");
  298. data.WriteElementString("value", category.description);
  299. data.WriteEndElement();
  300. // categoryid
  301. data.WriteStartElement("member");
  302. data.WriteElementString("name", "categoryid");
  303. data.WriteElementString("value", category.id);
  304. data.WriteEndElement();
  305. // title
  306. data.WriteStartElement("member");
  307. data.WriteElementString("name", "title");
  308. data.WriteElementString("value", category.title);
  309. data.WriteEndElement();
  310. // htmlUrl
  311. data.WriteStartElement("member");
  312. data.WriteElementString("name", "htmlUrl");
  313. data.WriteElementString("value", category.htmlUrl);
  314. data.WriteEndElement();
  315. // rssUrl
  316. data.WriteStartElement("member");
  317. data.WriteElementString("name", "rssUrl");
  318. data.WriteElementString("value", category.rssUrl);
  319. data.WriteEndElement();
  320. data.WriteEndElement();
  321. data.WriteEndElement();
  322. }
  323. // Close tags
  324. data.WriteEndElement();
  325. data.WriteEndElement();
  326. data.WriteEndElement();
  327. data.WriteEndElement();
  328. }
  329. /// <summary>
  330. /// Writes array of BlogInfo structs of Response
  331. /// </summary>
  332. /// <param name="data">
  333. /// xml response
  334. /// </param>
  335. private void WriteGetUsersBlogs(XmlWriter data)
  336. {
  337. data.WriteStartElement("param");
  338. data.WriteStartElement("value");
  339. data.WriteStartElement("array");
  340. data.WriteStartElement("data");
  341. foreach (var blog in this.Blogs)
  342. {
  343. data.WriteStartElement("value");
  344. data.WriteStartElement("struct");
  345. // url
  346. data.WriteStartElement("member");
  347. data.WriteElementString("name", "url");
  348. data.WriteElementString("value", blog.url);
  349. data.WriteEndElement();
  350. // blogid
  351. data.WriteStartElement("member");
  352. data.WriteElementString("name", "blogid");
  353. data.WriteElementString("value", blog.blogID);
  354. data.WriteEndElement();
  355. // blogName
  356. data.WriteStartElement("member");
  357. data.WriteElementString("name", "blogName");
  358. data.WriteElementString("value", blog.blogName);
  359. data.WriteEndElement();
  360. data.WriteEndElement();
  361. data.WriteEndElement();
  362. }
  363. // Close tags
  364. data.WriteEndElement();
  365. data.WriteEndElement();
  366. data.WriteEndElement();
  367. data.WriteEndElement();
  368. }
  369. /// <summary>
  370. /// Writes the Array of Keyword structs parameters of Response
  371. /// </summary>
  372. /// <param name="data">
  373. /// xml response
  374. /// </param>
  375. private void WriteKeywords(XmlWriter data)
  376. {
  377. data.WriteStartElement("param");
  378. data.WriteStartElement("value");
  379. data.WriteStartElement("array");
  380. data.WriteStartElement("data");
  381. foreach (var keyword in this.Keywords)
  382. {
  383. data.WriteStartElement("value");
  384. data.WriteStartElement("struct");
  385. // keywordName
  386. data.WriteStartElement("member");
  387. data.WriteElementString("name", "name");
  388. data.WriteElementString("value", keyword);
  389. data.WriteEndElement();
  390. data.WriteEndElement();
  391. data.WriteEndElement();
  392. }
  393. // Close tags
  394. data.WriteEndElement();
  395. data.WriteEndElement();
  396. data.WriteEndElement();
  397. data.WriteEndElement();
  398. }
  399. /// <summary>
  400. /// Writes the MediaInfo Struct of Response
  401. /// </summary>
  402. /// <param name="data">
  403. /// xml response
  404. /// </param>
  405. private void WriteMediaInfo(XmlWriter data)
  406. {
  407. data.WriteStartElement("param");
  408. data.WriteStartElement("value");
  409. data.WriteStartElement("struct");
  410. // url
  411. data.WriteStartElement("member");
  412. data.WriteElementString("name", "url");
  413. data.WriteStartElement("value");
  414. data.WriteElementString("string", this.MediaInfo.url);
  415. data.WriteEndElement();
  416. data.WriteEndElement();
  417. data.WriteEndElement();
  418. data.WriteEndElement();
  419. data.WriteEndElement();
  420. }
  421. /// <summary>
  422. /// Writes the PageID string of Response.
  423. /// </summary>
  424. /// <param name="data">
  425. /// xml response
  426. /// </param>
  427. private void WriteNewPage(XmlWriter data)
  428. {
  429. data.WriteStartElement("param");
  430. data.WriteStartElement("value");
  431. data.WriteElementString("string", this.PageID);
  432. data.WriteEndElement();
  433. data.WriteEndElement();
  434. }
  435. /// <summary>
  436. /// Writes the PostID string of Response.
  437. /// </summary>
  438. /// <param name="data">
  439. /// xml response
  440. /// </param>
  441. private void WriteNewPost(XmlWriter data)
  442. {
  443. data.WriteStartElement("param");
  444. data.WriteStartElement("value");
  445. data.WriteElementString("string", this.PostID);
  446. data.WriteEndElement();
  447. data.WriteEndElement();
  448. }
  449. /// <summary>
  450. /// Writes the Metaweblog Post Struct of Response.
  451. /// </summary>
  452. /// <param name="data">
  453. /// xml response
  454. /// </param>
  455. private void WritePage(XmlWriter data)
  456. {
  457. data.WriteStartElement("param");
  458. data.WriteStartElement("value");
  459. data.WriteStartElement("struct");
  460. // pageid
  461. data.WriteStartElement("member");
  462. data.WriteElementString("name", "page_id");
  463. data.WriteStartElement("value");
  464. data.WriteElementString("string", this.Page.pageID);
  465. data.WriteEndElement();
  466. data.WriteEndElement();
  467. // title
  468. data.WriteStartElement("member");
  469. data.WriteElementString("name", "title");
  470. data.WriteStartElement("value");
  471. data.WriteElementString("string", this.Page.title);
  472. data.WriteEndElement();
  473. data.WriteEndElement();
  474. // description
  475. data.WriteStartElement("member");
  476. data.WriteElementString("name", "description");
  477. data.WriteStartElement("value");
  478. data.WriteElementString("string", this.Page.description);
  479. data.WriteEndElement();
  480. data.WriteEndElement();
  481. // link
  482. data.WriteStartElement("member");
  483. data.WriteElementString("name", "link");
  484. data.WriteStartElement("value");
  485. data.WriteElementString("string", this.Page.link);
  486. data.WriteEndElement();
  487. data.WriteEndElement();
  488. // mt_convert_breaks
  489. data.WriteStartElement("member");
  490. data.WriteElementString("name", "mt_convert_breaks");
  491. data.WriteStartElement("value");
  492. data.WriteElementString("string", "__default__");
  493. data.WriteEndElement();
  494. data.WriteEndElement();
  495. // dateCreated
  496. data.WriteStartElement("member");
  497. data.WriteElementString("name", "dateCreated");
  498. data.WriteStartElement("value");
  499. data.WriteElementString("dateTime.iso8601", ConvertDatetoISO8601(this.Page.pageDate));
  500. data.WriteEndElement();
  501. data.WriteEndElement();
  502. data.WriteEndElement();
  503. data.WriteEndElement();
  504. data.WriteEndElement();
  505. }
  506. /// <summary>
  507. /// The write pages.
  508. /// </summary>
  509. /// <param name="data">
  510. /// xml response
  511. /// </param>
  512. private void WritePages(XmlWriter data)
  513. {
  514. data.WriteStartElement("param");
  515. data.WriteStartElement("value");
  516. data.WriteStartElement("array");
  517. data.WriteStartElement("data");
  518. foreach (var page in this.Pages)
  519. {
  520. data.WriteStartElement("value");
  521. data.WriteStartElement("struct");
  522. // pageid
  523. data.WriteStartElement("member");
  524. data.WriteElementString("name", "page_id");
  525. data.WriteStartElement("value");
  526. data.WriteElementString("string", page.pageID);
  527. data.WriteEndElement();
  528. data.WriteEndElement();
  529. // title
  530. data.WriteStartElement("member");
  531. data.WriteElementString("name", "title");
  532. data.WriteStartElement("value");
  533. data.WriteElementString("string", page.title);
  534. data.WriteEndElement();
  535. data.WriteEndElement();
  536. // description
  537. data.WriteStartElement("member");
  538. data.WriteElementString("name", "description");
  539. data.WriteStartElement("value");
  540. data.WriteElementString("string", page.description);
  541. data.WriteEndElement();
  542. data.WriteEndElement();
  543. // link
  544. data.WriteStartElement("member");
  545. data.WriteElementString("name", "link");
  546. data.WriteStartElement("value");
  547. data.WriteElementString("string", page.link);
  548. data.WriteEndElement();
  549. data.WriteEndElement();
  550. // mt_convert_breaks
  551. data.WriteStartElement("member");
  552. data.WriteElementString("name", "mt_convert_breaks");
  553. data.WriteStartElement("value");
  554. data.WriteElementString("string", "__default__");
  555. data.WriteEndElement();
  556. data.WriteEndElement();
  557. // dateCreated
  558. data.WriteStartElement("member");
  559. data.WriteElementString("name", "dateCreated");
  560. data.WriteStartElement("value");
  561. data.WriteElementString("dateTime.iso8601", ConvertDatetoISO8601(page.pageDate));
  562. data.WriteEndElement();
  563. data.WriteEndElement();
  564. // page_parent_id
  565. if (!string.IsNullOrEmpty(page.pageParentID))
  566. {
  567. data.WriteStartElement("member");
  568. data.WriteElementString("name", "page_parent_id");
  569. data.WriteStartElement("value");
  570. data.WriteElementString("string", page.pageParentID);
  571. data.WriteEndElement();
  572. data.WriteEndElement();
  573. }
  574. data.WriteEndElement();
  575. data.WriteEndElement();
  576. }
  577. // Close tags
  578. data.WriteEndElement();
  579. data.WriteEndElement();
  580. data.WriteEndElement();
  581. data.WriteEndElement();
  582. }
  583. /// <summary>
  584. /// Writes the Metaweblog Post Struct of Response.
  585. /// </summary>
  586. /// <param name="data">
  587. /// xml response
  588. /// </param>
  589. private void WritePost(XmlWriter data)
  590. {
  591. data.WriteStartElement("param");
  592. data.WriteStartElement("value");
  593. data.WriteStartElement("struct");
  594. // postid
  595. data.WriteStartElement("member");
  596. data.WriteElementString("name", "postid");
  597. data.WriteStartElement("value");
  598. data.WriteElementString("string", this.Post.postID);
  599. data.WriteEndElement();
  600. data.WriteEndElement();
  601. // title
  602. data.WriteStartElement("member");
  603. data.WriteElementString("name", "title");
  604. data.WriteStartElement("value");
  605. data.WriteElementString("string", this.Post.title);
  606. data.WriteEndElement();
  607. data.WriteEndElement();
  608. // description
  609. data.WriteStartElement("member");
  610. data.WriteElementString("name", "description");
  611. data.WriteStartElement("value");
  612. data.WriteElementString("string", this.Post.description);
  613. data.WriteEndElement();
  614. data.WriteEndElement();
  615. // link
  616. data.WriteStartElement("member");
  617. data.WriteElementString("name", "link");
  618. data.WriteStartElement("value");
  619. data.WriteElementString("string", this.Post.link);
  620. data.WriteEndElement();
  621. data.WriteEndElement();
  622. // slug
  623. data.WriteStartElement("member");
  624. data.WriteElementString("name", "wp_slug");
  625. data.WriteStartElement("value");
  626. data.WriteElementString("string", this.Post.slug);
  627. data.WriteEndElement();
  628. data.WriteEndElement();
  629. // excerpt
  630. data.WriteStartElement("member");
  631. data.WriteElementString("name", "mt_excerpt");
  632. data.WriteStartElement("value");
  633. data.WriteElementString("string", this.Post.excerpt);
  634. data.WriteEndElement();
  635. data.WriteEndElement();
  636. // comment policy
  637. data.WriteStartElement("member");
  638. data.WriteElementString("name", "mt_allow_comments");
  639. data.WriteStartElement("value");
  640. data.WriteElementString("int", this.Post.commentPolicy);
  641. data.WriteEndElement();
  642. data.WriteEndElement();
  643. // dateCreated
  644. data.WriteStartElement("member");
  645. data.WriteElementString("name", "dateCreated");
  646. data.WriteStartElement("value");
  647. data.WriteElementString("dateTime.iso8601", ConvertDatetoISO8601(this.Post.postDate));
  648. data.WriteEndElement();
  649. data.WriteEndElement();
  650. // publish
  651. data.WriteStartElement("member");
  652. data.WriteElementString("name", "publish");
  653. data.WriteStartElement("value");
  654. data.WriteElementString("boolean", this.Post.publish ? "1" : "0");
  655. data.WriteEndElement();
  656. data.WriteEndElement();
  657. // tags (mt_keywords)
  658. data.WriteStartElement("member");
  659. data.WriteElementString("name", "mt_keywords");
  660. data.WriteStartElement("value");
  661. var tags = new string[this.Post.tags.Count];
  662. for (var i = 0; i < this.Post.tags.Count; i++)
  663. {
  664. tags[i] = this.Post.tags[i];
  665. }
  666. var tagList = string.Join(",", tags);
  667. data.WriteElementString("string", tagList);
  668. data.WriteEndElement();
  669. data.WriteEndElement();
  670. // categories
  671. if (this.Post.categories.Count > 0)
  672. {
  673. data.WriteStartElement("member");
  674. data.WriteElementString("name", "categories");
  675. data.WriteStartElement("value");
  676. data.WriteStartElement("array");
  677. data.WriteStartElement("data");
  678. foreach (var cat in this.Post.categories)
  679. {
  680. data.WriteStartElement("value");
  681. data.WriteElementString("string", cat);
  682. data.WriteEndElement();
  683. }
  684. data.WriteEndElement();
  685. data.WriteEndElement();
  686. data.WriteEndElement();
  687. data.WriteEndElement();
  688. }
  689. data.WriteEndElement();
  690. data.WriteEndElement();
  691. data.WriteEndElement();
  692. }
  693. /// <summary>
  694. /// Writes the array of Metaweblog Post Structs of Response.
  695. /// </summary>
  696. /// <param name="data">
  697. /// xml response
  698. /// </param>
  699. private void WritePosts(XmlWriter data)
  700. {
  701. data.WriteStartElement("param");
  702. data.WriteStartElement("value");
  703. data.WriteStartElement("array");
  704. data.WriteStartElement("data");
  705. foreach (var post in this.Posts)
  706. {
  707. data.WriteStartElement("value");
  708. data.WriteStartElement("struct");
  709. // postid
  710. data.WriteStartElement("member");
  711. data.WriteElementString("name", "postid");
  712. data.WriteStartElement("value");
  713. data.WriteElementString("string", post.postID);
  714. data.WriteEndElement();
  715. data.WriteEndElement();
  716. // dateCreated
  717. data.WriteStartElement("member");
  718. data.WriteElementString("name", "dateCreated");
  719. data.WriteStartElement("value");
  720. data.WriteElementString("dateTime.iso8601", ConvertDatetoISO8601(post.postDate));
  721. data.WriteEndElement();
  722. data.WriteEndElement();
  723. // title
  724. data.WriteStartElement("member");
  725. data.WriteElementString("name", "title");
  726. data.WriteStartElement("value");
  727. data.WriteElementString("string", post.title);
  728. data.WriteEndElement();
  729. data.WriteEndElement();
  730. // description
  731. data.WriteStartElement("member");
  732. data.WriteElementString("name", "description");
  733. data.WriteElementString("value", post.description);
  734. data.WriteEndElement();
  735. // link
  736. data.WriteStartElement("member");
  737. data.WriteElementString("name", "link");
  738. data.WriteStartElement("value");
  739. data.WriteElementString("string", post.link);
  740. data.WriteEndElement();
  741. data.WriteEndElement();
  742. // slug
  743. data.WriteStartElement("member");
  744. data.WriteElementString("name", "wp_slug");
  745. data.WriteStartElement("value");
  746. data.WriteElementString("string", post.slug);
  747. data.WriteEndElement();
  748. data.WriteEndElement();
  749. // excerpt
  750. data.WriteStartElement("member");
  751. data.WriteElementString("name", "mt_excerpt");
  752. data.WriteStartElement("value");
  753. data.WriteElementString("string", post.excerpt);
  754. data.WriteEndElement();
  755. data.WriteEndElement();
  756. // comment policy
  757. data.WriteStartElement("member");
  758. data.WriteElementString("name", "mt_allow_comments");
  759. data.WriteStartElement("value");
  760. data.WriteElementString("string", post.commentPolicy);
  761. data.WriteEndElement();
  762. data.WriteEndElement();
  763. // tags (mt_keywords)
  764. data.WriteStartElement("member");
  765. data.WriteElementString("name", "mt_keywords");
  766. data.WriteStartElement("value");
  767. var tags = new string[post.tags.Count];
  768. for (var i = 0; i < post.tags.Count; i++)
  769. {
  770. tags[i] = post.tags[i];
  771. }
  772. var tagList = string.Join(",", tags);
  773. data.WriteElementString("string", tagList);
  774. data.WriteEndElement();
  775. data.WriteEndElement();
  776. // publish
  777. data.WriteStartElement("member");
  778. data.WriteElementString("name", "publish");
  779. data.WriteStartElement("value");
  780. data.WriteElementString("boolean", post.publish ? "1" : "0");
  781. data.WriteEndElement();
  782. data.WriteEndElement();
  783. // categories
  784. if (post.categories.Count > 0)
  785. {
  786. data.WriteStartElement("member");
  787. data.WriteElementString("name", "categories");
  788. data.WriteStartElement("value");
  789. data.WriteStartElement("array");
  790. data.WriteStartElement("data");
  791. foreach (var cat in post.categories)
  792. {
  793. data.WriteStartElement("value");
  794. data.WriteElementString("string", cat);
  795. data.WriteEndElement();
  796. }
  797. data.WriteEndElement();
  798. data.WriteEndElement();
  799. data.WriteEndElement();
  800. data.WriteEndElement();
  801. }
  802. data.WriteEndElement();
  803. data.WriteEndElement();
  804. }
  805. // Close tags
  806. data.WriteEndElement();
  807. data.WriteEndElement();
  808. data.WriteEndElement();
  809. data.WriteEndElement();
  810. }
  811. /// <summary>
  812. /// The write short pages.
  813. /// </summary>
  814. /// <param name="data">
  815. /// xml response
  816. /// </param>
  817. private void WriteShortPages(XmlWriter data)
  818. {
  819. data.WriteStartElement("param");
  820. data.WriteStartElement("value");
  821. data.WriteStartElement("array");
  822. data.WriteStartElement("data");
  823. foreach (var page in this.Pages)
  824. {
  825. data.WriteStartElement("value");
  826. data.WriteStartElement("struct");
  827. // pageid
  828. data.WriteStartElement("member");
  829. data.WriteElementString("name", "page_id");
  830. data.WriteStartElement("value");
  831. data.WriteElementString("string", page.pageID);
  832. data.WriteEndElement();
  833. data.WriteEndElement();
  834. // title
  835. data.WriteStartElement("member");
  836. data.WriteElementString("name", "page_title");
  837. data.WriteStartElement("value");
  838. data.WriteElementString("string", page.title);
  839. data.WriteEndElement();
  840. data.WriteEndElement();
  841. // page_parent_id
  842. data.WriteStartElement("member");
  843. data.WriteElementString("name", "page_parent_id");
  844. data.WriteStartElement("value");
  845. data.WriteElementString("string", page.pageParentID);
  846. data.WriteEndElement();
  847. data.WriteEndElement();
  848. // dateCreated
  849. data.WriteStartElement("member");
  850. data.WriteElementString("name", "dateCreated");
  851. data.WriteStartElement("value");
  852. data.WriteElementString("dateTime.iso8601", ConvertDatetoISO8601(page.pageDate));
  853. data.WriteEndElement();
  854. data.WriteEndElement();
  855. // dateCreated gmt
  856. data.WriteStartElement("member");
  857. data.WriteElementString("name", "date_created_gmt");
  858. data.WriteStartElement("value");
  859. data.WriteElementString("dateTime.iso8601", ConvertDatetoISO8601(page.pageDate));
  860. data.WriteEndElement();
  861. data.WriteEndElement();
  862. data.WriteEndElement();
  863. data.WriteEndElement();
  864. }
  865. // Close tags
  866. data.WriteEndElement();
  867. data.WriteEndElement();
  868. data.WriteEndElement();
  869. data.WriteEndElement();
  870. }
  871. #endregion
  872. }
  873. }