xref: /plugin/totext/Extractor/AbstractOdfExtractor.php (revision 0fbee1892eb8b7339ce48e27e48e3fc821a8695f)
1<?php
2
3namespace dokuwiki\plugin\totext\Extractor;
4
5/**
6 * Shared metadata reader for the OpenDocument family (ODT/ODS/ODP).
7 *
8 * All three store their document metadata in a single meta.xml part inside
9 * <office:meta>. The element local name => canonical key map is declared here
10 * once; subclasses only implement extractText(). The meta:keyword element may
11 * appear multiple times, so Keywords accumulates.
12 */
13abstract class AbstractOdfExtractor extends AbstractZipXmlExtractor
14{
15    /**
16     * meta.xml element local name => canonical metadata key.
17     *
18     * @var array<string, string>
19     */
20    protected const META_MAP = [
21        'title' => 'Title',
22        'creator' => 'Author',
23        'subject' => 'Subject',
24        'keyword' => 'Keywords',
25        'description' => 'Description',
26        'creation-date' => 'Created',
27        'date' => 'Modified',
28        'language' => 'Language',
29        'generator' => 'Producer',
30    ];
31
32    /** @inheritDoc */
33    protected function extractMetadata(): array
34    {
35        $meta = $this->readPart('meta.xml');
36        if ($meta === null) {
37            return [];
38        }
39        return $this->mapMetadataFromXml($meta, self::META_MAP, ['Keywords']);
40    }
41}
42