AtomHelper.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <?php
  2. namespace PicoFeed\Syndication;
  3. use DateTime;
  4. use DOMDocument;
  5. use DOMElement;
  6. /**
  7. * Class AtomHelper
  8. *
  9. * @package PicoFeed\Syndication
  10. * @author Frederic Guillot
  11. */
  12. class AtomHelper
  13. {
  14. /**
  15. * @var DOMDocument
  16. */
  17. protected $document;
  18. /**
  19. * Constructor
  20. *
  21. * @param DOMDocument $document
  22. */
  23. public function __construct(DOMDocument $document)
  24. {
  25. $this->document = $document;
  26. }
  27. /**
  28. * Build node
  29. *
  30. * @access public
  31. * @param DOMElement $element
  32. * @param string $tag
  33. * @param string $value
  34. * @return AtomHelper
  35. */
  36. public function buildNode(DOMElement $element, $tag, $value)
  37. {
  38. $node = $this->document->createElement($tag);
  39. $node->appendChild($this->document->createTextNode($value));
  40. $element->appendChild($node);
  41. return $this;
  42. }
  43. /**
  44. * Build title
  45. *
  46. * @access public
  47. * @param DOMElement $element
  48. * @param string $title
  49. * @return AtomHelper
  50. */
  51. public function buildTitle(DOMElement $element, $title)
  52. {
  53. return $this->buildNode($element, 'title', $title);
  54. }
  55. /**
  56. * Build id
  57. *
  58. * @access public
  59. * @param DOMElement $element
  60. * @param string $id
  61. * @return AtomHelper
  62. */
  63. public function buildId(DOMElement $element, $id)
  64. {
  65. return $this->buildNode($element, 'id', $id);
  66. }
  67. /**
  68. * Build date element
  69. *
  70. * @access public
  71. * @param DOMElement $element
  72. * @param DateTime $date
  73. * @param string $type
  74. * @return AtomHelper
  75. */
  76. public function buildDate(DOMElement $element, DateTime $date, $type = 'updated')
  77. {
  78. return $this->buildNode($element, $type, $date->format(DateTime::ATOM));
  79. }
  80. /**
  81. * Build link element
  82. *
  83. * @access public
  84. * @param DOMElement $element
  85. * @param string $url
  86. * @param string $rel
  87. * @param string $type
  88. * @return AtomHelper
  89. */
  90. public function buildLink(DOMElement $element, $url, $rel = 'alternate', $type = 'text/html')
  91. {
  92. $node = $this->document->createElement('link');
  93. $node->setAttribute('rel', $rel);
  94. $node->setAttribute('type', $type);
  95. $node->setAttribute('href', $url);
  96. $element->appendChild($node);
  97. return $this;
  98. }
  99. /**
  100. * Build author element
  101. *
  102. * @access public
  103. * @param DOMElement $element
  104. * @param string $authorName
  105. * @param string $authorEmail
  106. * @param string $authorUrl
  107. * @return AtomHelper
  108. */
  109. public function buildAuthor(DOMElement $element, $authorName, $authorEmail, $authorUrl)
  110. {
  111. if (!empty($authorName)) {
  112. $author = $this->document->createElement('author');
  113. $this->buildNode($author, 'name', $authorName);
  114. if (!empty($authorEmail)) {
  115. $this->buildNode($author, 'email', $authorEmail);
  116. }
  117. if (!empty($authorUrl)) {
  118. $this->buildNode($author, 'uri', $authorUrl);
  119. }
  120. $element->appendChild($author);
  121. }
  122. return $this;
  123. }
  124. }