EpubInfo.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <?php
  2. /** @noinspection PhpComposerExtensionStubsInspection */
  3. namespace PhpZip\Tests\Internal\Epub;
  4. use PhpZip\Exception\ZipException;
  5. /**
  6. * Class EpubInfo.
  7. *
  8. * @see http://idpf.org/epub/30/spec/epub30-publications.html
  9. */
  10. class EpubInfo
  11. {
  12. /** @var string|null */
  13. private $title;
  14. /** @var string|null */
  15. private $creator;
  16. /** @var string|null */
  17. private $language;
  18. /** @var string|null */
  19. private $publisher;
  20. /** @var string|null */
  21. private $description;
  22. /** @var string|null */
  23. private $rights;
  24. /** @var string|null */
  25. private $date;
  26. /** @var string|null */
  27. private $subject;
  28. /**
  29. * EpubInfo constructor.
  30. *
  31. * @param $xmlContents
  32. *
  33. * @throws ZipException
  34. */
  35. public function __construct($xmlContents)
  36. {
  37. $doc = new \DOMDocument();
  38. $doc->loadXML($xmlContents);
  39. $xpath = new \DOMXpath($doc);
  40. $xpath->registerNamespace('root', 'http://www.idpf.org/2007/opf');
  41. $metaDataNodeList = $xpath->query('//root:metadata');
  42. if (\count($metaDataNodeList) !== 1) {
  43. throw new ZipException('Invalid .opf file format');
  44. }
  45. $metaDataNode = $metaDataNodeList->item(0);
  46. $title = $xpath->evaluate('string(//dc:title)', $metaDataNode);
  47. $creator = $xpath->evaluate('string(//dc:creator)', $metaDataNode);
  48. $language = $xpath->evaluate('string(//dc:language)', $metaDataNode);
  49. $publisher = $xpath->evaluate('string(//dc:publisher)', $metaDataNode);
  50. $description = $xpath->evaluate('string(//dc:description)', $metaDataNode);
  51. $rights = $xpath->evaluate('string(//dc:rights)', $metaDataNode);
  52. $date = $xpath->evaluate('string(//dc:date)', $metaDataNode);
  53. $subject = $xpath->evaluate('string(//dc:subject)', $metaDataNode);
  54. $this->title = empty($title) ? null : $title;
  55. $this->creator = empty($creator) ? null : $creator;
  56. $this->language = empty($language) ? null : $language;
  57. $this->publisher = empty($publisher) ? null : $publisher;
  58. $this->description = empty($description) ? null : $description;
  59. $this->rights = empty($rights) ? null : $rights;
  60. $this->date = empty($date) ? null : $date;
  61. $this->subject = empty($subject) ? null : $subject;
  62. }
  63. /**
  64. * @return string|null
  65. */
  66. public function getTitle()
  67. {
  68. return $this->title;
  69. }
  70. /**
  71. * @return string|null
  72. */
  73. public function getCreator()
  74. {
  75. return $this->creator;
  76. }
  77. /**
  78. * @return string|null
  79. */
  80. public function getLanguage()
  81. {
  82. return $this->language;
  83. }
  84. /**
  85. * @return string|null
  86. */
  87. public function getPublisher()
  88. {
  89. return $this->publisher;
  90. }
  91. /**
  92. * @return string|null
  93. */
  94. public function getDescription()
  95. {
  96. return $this->description;
  97. }
  98. /**
  99. * @return string|null
  100. */
  101. public function getRights()
  102. {
  103. return $this->rights;
  104. }
  105. /**
  106. * @return string|null
  107. */
  108. public function getDate()
  109. {
  110. return $this->date;
  111. }
  112. /**
  113. * @return string|null
  114. */
  115. public function getSubject()
  116. {
  117. return $this->subject;
  118. }
  119. /**
  120. * @return array
  121. */
  122. public function toArray()
  123. {
  124. return [
  125. 'title' => $this->title,
  126. 'creator' => $this->creator,
  127. 'language' => $this->language,
  128. 'publisher' => $this->publisher,
  129. 'description' => $this->description,
  130. 'rights' => $this->rights,
  131. 'date' => $this->date,
  132. 'subject' => $this->subject,
  133. ];
  134. }
  135. }