1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
27:
28: 29: 30:
31: class PHPWord_Writer_ODText_Manifest extends PHPWord_Writer_ODText_WriterPart
32: {
33: 34: 35: 36: 37: 38: 39:
40: public function writeManifest(PHPWord $pPHPWord = null)
41: {
42:
43: $objWriter = null;
44: if ($this->getParentWriter()->getUseDiskCaching()) {
45: $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
46: } else {
47: $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_MEMORY);
48: }
49:
50:
51: $objWriter->startDocument('1.0', 'UTF-8');
52:
53:
54: $objWriter->startElement('manifest:manifest');
55: $objWriter->writeAttribute('xmlns:manifest', 'urn:oasis:names:tc:opendocument:xmlns:manifest:1.0');
56: $objWriter->writeAttribute('manifest:version', '1.2');
57:
58:
59: $objWriter->startElement('manifest:file-entry');
60: $objWriter->writeAttribute('manifest:media-type', 'application/vnd.oasis.opendocument.text');
61: $objWriter->writeAttribute('manifest:version', '1.2');
62: $objWriter->writeAttribute('manifest:full-path', '/');
63: $objWriter->endElement();
64:
65: $objWriter->startElement('manifest:file-entry');
66: $objWriter->writeAttribute('manifest:media-type', 'text/xml');
67: $objWriter->writeAttribute('manifest:full-path', 'content.xml');
68: $objWriter->endElement();
69:
70: $objWriter->startElement('manifest:file-entry');
71: $objWriter->writeAttribute('manifest:media-type', 'text/xml');
72: $objWriter->writeAttribute('manifest:full-path', 'meta.xml');
73: $objWriter->endElement();
74:
75: $objWriter->startElement('manifest:file-entry');
76: $objWriter->writeAttribute('manifest:media-type', 'text/xml');
77: $objWriter->writeAttribute('manifest:full-path', 'styles.xml');
78: $objWriter->endElement();
79:
80: for ($i = 0; $i < $this->getParentWriter()->getDrawingHashTable()->count(); ++$i) {
81: if ($this->getParentWriter()->getDrawingHashTable()->getByIndex($i) instanceof PHPWord_Shape_Drawing) {
82: $extension = strtolower($this->getParentWriter()->getDrawingHashTable()->getByIndex($i)->getExtension());
83: $mimeType = $this->_getImageMimeType($this->getParentWriter()->getDrawingHashTable()->getByIndex($i)->getPath());
84:
85: $objWriter->startElement('manifest:file-entry');
86: $objWriter->writeAttribute('manifest:media-type', $mimeType);
87: $objWriter->writeAttribute('manifest:full-path', 'Pictures/' . str_replace(' ', '_', $this->getParentWriter()->getDrawingHashTable()->getByIndex($i)->getIndexedFilename()));
88: $objWriter->endElement();
89: } else if ($this->getParentWriter()->getDrawingHashTable()->getByIndex($i) instanceof PHPWord_Shape_MemoryDrawing) {
90: $extension = strtolower($this->getParentWriter()->getDrawingHashTable()->getByIndex($i)->getMimeType());
91: $extension = explode('/', $extension);
92: $extension = $extension[1];
93:
94: $mimeType = $this->getParentWriter()->getDrawingHashTable()->getByIndex($i)->getMimeType();
95:
96: $objWriter->startElement('manifest:file-entry');
97: $objWriter->writeAttribute('manifest:media-type', $mimeType);
98: $objWriter->writeAttribute('manifest:full-path', 'Pictures/' . str_replace(' ', '_', $this->getParentWriter()->getDrawingHashTable()->getByIndex($i)->getIndexedFilename()));
99: $objWriter->endElement();
100: }
101: }
102:
103: $objWriter->endElement();
104:
105:
106: return $objWriter->getData();
107: }
108:
109:
110: 111: 112: 113: 114: 115: 116:
117: private function _getImageMimeType($pFile = '')
118: {
119: if (PHPWord_Shared_File::file_exists($pFile)) {
120: $image = getimagesize($pFile);
121: return image_type_to_mime_type($image[2]);
122: } else {
123: throw new Exception("File $pFile does not exist");
124: }
125: }
126: }
127: