Esempio n. 1
0
 public function getMetadata($title, $isMetadata, DOMDocument $doc)
 {
     $page_list = [$title];
     $parser = new PageParser($doc);
     $book = new Book();
     $book->options = $this->options;
     $book->title = $title;
     $book->lang = $this->api->lang;
     $metadataSrc = $parser->getMetadata('ws-metadata');
     if ($metadataSrc == '') {
         $metadataSrc = $title;
         $metadataParser = $parser;
     } else {
         $doc = $this->getDocument($metadataSrc);
         $metadataParser = new PageParser($doc);
     }
     $book->type = $metadataParser->getMetadata('ws-type');
     $book->name = htmlspecialchars($metadataParser->getMetadata('ws-title'));
     if ($book->name == '') {
         $book->name = str_replace('_', ' ', $metadataSrc);
     }
     $book->periodical = htmlspecialchars($metadataParser->getMetadata('ws-periodical'));
     $book->author = htmlspecialchars($metadataParser->getMetadata('ws-author'));
     $book->translator = htmlspecialchars($metadataParser->getMetadata('ws-translator'));
     $book->illustrator = htmlspecialchars($metadataParser->getMetadata('ws-illustrator'));
     $book->school = htmlspecialchars($metadataParser->getMetadata('ws-school'));
     $book->publisher = htmlspecialchars($metadataParser->getMetadata('ws-publisher'));
     $book->year = htmlspecialchars($metadataParser->getMetadata('ws-year'));
     $book->place = htmlspecialchars($metadataParser->getMetadata('ws-place'));
     $book->key = $metadataParser->getMetadata('ws-key');
     $book->progress = $metadataParser->getMetadata('ws-progress');
     $book->volume = $metadataParser->getMetadata('ws-volume');
     $book->scan = str_replace(' ', '_', $metadataParser->getMetadata('ws-scan'));
     $pictures = [];
     if ($this->options['images'] || $isMetadata) {
         $book->cover = $metadataParser->getMetadata('ws-cover');
         if ($book->cover != '') {
             $pictures[$book->cover] = $this->getCover($book->cover, $book->lang);
             if ($pictures[$book->cover]->url == '') {
                 $book->cover = '';
             }
         }
     }
     if ($this->options['categories']) {
         $book->categories = $this->getCategories($metadataSrc);
     }
     $pageTitles = $parser->getPagesList();
     $namespaces = $this->getNamespaces();
     if (!$isMetadata) {
         if (!$parser->metadataIsSet('ws-noinclude')) {
             $book->content = $parser->getContent(true);
             if ($this->options['images']) {
                 $pictures = array_merge($pictures, $parser->getPicturesList());
             }
         }
         $chapterTitles = $parser->getFullChaptersList($title, $page_list, $namespaces);
         $chapters = $this->getPages($chapterTitles);
         foreach ($chapters as $chapter_key => $chapter) {
             $parser = new PageParser($chapter->content);
             if ($parser->metadataIsSet('ws-noinclude')) {
                 unset($chapters[$chapter_key]);
                 continue;
             }
             $pageTitles = array_merge($pageTitles, $parser->getPagesList());
             $chapter->content = $parser->getContent(false);
             if ($this->options['images']) {
                 $pictures = array_merge($pictures, $parser->getPicturesList());
             }
             $subpagesTitles = $parser->getChaptersList($chapter, $page_list, $namespaces);
             if (!empty($subpagesTitles)) {
                 $subpages = $this->getPages($subpagesTitles);
                 foreach ($subpages as $subpage_key => $subpage) {
                     $parser = new PageParser($subpage->content);
                     if ($parser->metadataIsSet('ws-noinclude')) {
                         unset($chapters[$subpage_key]);
                         continue;
                     }
                     $pageTitles = array_merge($pageTitles, $parser->getPagesList());
                     $subpage->content = $parser->getContent(false);
                     if ($this->options['images']) {
                         $pictures = array_merge($pictures, $parser->getPicturesList());
                     }
                 }
                 $chapterTitles = array_merge($chapterTitles, $subpagesTitles);
                 $chapter->chapters = $subpages;
             }
         }
         $book->chapters = $chapters;
         if ($this->options['credits']) {
             $creditPromises = $this->startCredits($book, $chapterTitles, $pageTitles, $pictures);
         }
         $pictures = $this->getPicturesData($pictures);
         if (!empty($creditPromises)) {
             $book->credits = $this->finishCredit($creditPromises);
         }
     }
     $book->pictures = $pictures;
     return $book;
 }