Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1441 ariadna 1
<?php
2
 
3
namespace PhpOffice\PhpSpreadsheet\Reader\Gnumeric;
4
 
5
use PhpOffice\PhpSpreadsheet\Reader\Gnumeric;
6
use PhpOffice\PhpSpreadsheet\Spreadsheet;
7
use SimpleXMLElement;
8
 
9
class Properties
10
{
11
    protected Spreadsheet $spreadsheet;
12
 
13
    public function __construct(Spreadsheet $spreadsheet)
14
    {
15
        $this->spreadsheet = $spreadsheet;
16
    }
17
 
18
    private function docPropertiesOld(SimpleXMLElement $gnmXML): void
19
    {
20
        $docProps = $this->spreadsheet->getProperties();
21
        foreach ($gnmXML->Summary->Item as $summaryItem) {
22
            $propertyName = $summaryItem->name;
23
            $propertyValue = $summaryItem->{'val-string'};
24
            switch ($propertyName) {
25
                case 'title':
26
                    $docProps->setTitle(trim($propertyValue));
27
 
28
                    break;
29
                case 'comments':
30
                    $docProps->setDescription(trim($propertyValue));
31
 
32
                    break;
33
                case 'keywords':
34
                    $docProps->setKeywords(trim($propertyValue));
35
 
36
                    break;
37
                case 'category':
38
                    $docProps->setCategory(trim($propertyValue));
39
 
40
                    break;
41
                case 'manager':
42
                    $docProps->setManager(trim($propertyValue));
43
 
44
                    break;
45
                case 'author':
46
                    $docProps->setCreator(trim($propertyValue));
47
                    $docProps->setLastModifiedBy(trim($propertyValue));
48
 
49
                    break;
50
                case 'company':
51
                    $docProps->setCompany(trim($propertyValue));
52
 
53
                    break;
54
            }
55
        }
56
    }
57
 
58
    private function docPropertiesDC(SimpleXMLElement $officePropertyDC): void
59
    {
60
        $docProps = $this->spreadsheet->getProperties();
61
        foreach ($officePropertyDC as $propertyName => $propertyValue) {
62
            $propertyValue = trim((string) $propertyValue);
63
            switch ($propertyName) {
64
                case 'title':
65
                    $docProps->setTitle($propertyValue);
66
 
67
                    break;
68
                case 'subject':
69
                    $docProps->setSubject($propertyValue);
70
 
71
                    break;
72
                case 'creator':
73
                    $docProps->setCreator($propertyValue);
74
                    $docProps->setLastModifiedBy($propertyValue);
75
 
76
                    break;
77
                case 'date':
78
                    $creationDate = $propertyValue;
79
                    $docProps->setModified($creationDate);
80
 
81
                    break;
82
                case 'description':
83
                    $docProps->setDescription($propertyValue);
84
 
85
                    break;
86
            }
87
        }
88
    }
89
 
90
    private function docPropertiesMeta(SimpleXMLElement $officePropertyMeta): void
91
    {
92
        $docProps = $this->spreadsheet->getProperties();
93
        foreach ($officePropertyMeta as $propertyName => $propertyValue) {
94
            $attributes = $propertyValue->attributes(Gnumeric::NAMESPACE_META);
95
            $propertyValue = trim((string) $propertyValue);
96
            switch ($propertyName) {
97
                case 'keyword':
98
                    $docProps->setKeywords($propertyValue);
99
 
100
                    break;
101
                case 'initial-creator':
102
                    $docProps->setCreator($propertyValue);
103
                    $docProps->setLastModifiedBy($propertyValue);
104
 
105
                    break;
106
                case 'creation-date':
107
                    $creationDate = $propertyValue;
108
                    $docProps->setCreated($creationDate);
109
 
110
                    break;
111
                case 'user-defined':
112
                    if ($attributes) {
113
                        [, $attrName] = explode(':', (string) $attributes['name']);
114
                        $this->userDefinedProperties($attrName, $propertyValue);
115
                    }
116
 
117
                    break;
118
            }
119
        }
120
    }
121
 
122
    private function userDefinedProperties(string $attrName, string $propertyValue): void
123
    {
124
        $docProps = $this->spreadsheet->getProperties();
125
        switch ($attrName) {
126
            case 'publisher':
127
                $docProps->setCompany($propertyValue);
128
 
129
                break;
130
            case 'category':
131
                $docProps->setCategory($propertyValue);
132
 
133
                break;
134
            case 'manager':
135
                $docProps->setManager($propertyValue);
136
 
137
                break;
138
        }
139
    }
140
 
141
    public function readProperties(SimpleXMLElement $xml, SimpleXMLElement $gnmXML): void
142
    {
143
        $officeXML = $xml->children(Gnumeric::NAMESPACE_OFFICE);
144
        if (!empty($officeXML)) {
145
            $officeDocXML = $officeXML->{'document-meta'};
146
            $officeDocMetaXML = $officeDocXML->meta;
147
 
148
            foreach ($officeDocMetaXML as $officePropertyData) {
149
                $officePropertyDC = $officePropertyData->children(Gnumeric::NAMESPACE_DC);
150
                $this->docPropertiesDC($officePropertyDC);
151
 
152
                $officePropertyMeta = $officePropertyData->children(Gnumeric::NAMESPACE_META);
153
                $this->docPropertiesMeta($officePropertyMeta);
154
            }
155
        } elseif (isset($gnmXML->Summary)) {
156
            $this->docPropertiesOld($gnmXML);
157
        }
158
    }
159
}