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_Word2007_ContentTypes extends PHPWord_Writer_Word2007_WriterPart
32: {
33:
34: public function writeContentTypes($_imageTypes, $_objectTypes, $_cHdrs, $_cFtrs)
35: {
36:
37: $objWriter = null;
38: if ($this->getParentWriter()->getUseDiskCaching()) {
39: $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
40: } else {
41: $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_MEMORY);
42: }
43:
44:
45: $objWriter->startDocument('1.0', 'UTF-8', 'yes');
46:
47:
48: $objWriter->startElement('Types');
49: $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/content-types');
50:
51:
52: $this->_writeDefaultContentType(
53: $objWriter, 'rels', 'application/vnd.openxmlformats-package.relationships+xml'
54: );
55:
56:
57: $this->_writeDefaultContentType(
58: $objWriter, 'xml', 'application/xml'
59: );
60:
61:
62: foreach ($_imageTypes as $key => $value) {
63: $this->_writeDefaultContentType($objWriter, $key, $value);
64: }
65:
66:
67: if (count($_objectTypes) > 0) {
68: $this->_writeDefaultContentType($objWriter, 'bin', 'application/vnd.openxmlformats-officedocument.oleObject');
69: }
70:
71:
72: $this->_writeOverrideContentType(
73: $objWriter, '/docProps/app.xml', 'application/vnd.openxmlformats-officedocument.extended-properties+xml'
74: );
75:
76: $this->_writeOverrideContentType(
77: $objWriter, '/docProps/core.xml', 'application/vnd.openxmlformats-package.core-properties+xml'
78: );
79:
80:
81: $this->_writeOverrideContentType(
82: $objWriter, '/word/document.xml', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml'
83: );
84:
85:
86: $this->_writeOverrideContentType(
87: $objWriter, '/word/styles.xml', 'application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml'
88: );
89:
90:
91: $this->_writeOverrideContentType(
92: $objWriter, '/word/numbering.xml', 'application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml'
93: );
94:
95:
96: $this->_writeOverrideContentType(
97: $objWriter, '/word/settings.xml', 'application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml'
98: );
99:
100:
101: $this->_writeOverrideContentType(
102: $objWriter, '/word/theme/theme1.xml', 'application/vnd.openxmlformats-officedocument.theme+xml'
103: );
104:
105:
106: $this->_writeOverrideContentType(
107: $objWriter, '/word/webSettings.xml', 'application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml'
108: );
109:
110:
111: $this->_writeOverrideContentType(
112: $objWriter, '/word/fontTable.xml', 'application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml'
113: );
114:
115: for ($i = 1; $i <= $_cHdrs; $i++) {
116: $this->_writeOverrideContentType(
117: $objWriter, '/word/header' . $i . '.xml', 'application/vnd.openxmlformats-officedocument.wordprocessingml.header+xml'
118: );
119: }
120:
121: for ($i = 1; $i <= $_cFtrs; $i++) {
122: $this->_writeOverrideContentType(
123: $objWriter, '/word/footer' . $i . '.xml', 'application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml'
124: );
125: }
126:
127:
128: $objWriter->endElement();
129:
130:
131: return $objWriter->getData();
132: }
133:
134: 135: 136: 137: 138: 139: 140:
141: private function _getImageMimeType($pFile = '')
142: {
143: if (PHPWord_Shared_File::file_exists($pFile)) {
144: $image = getimagesize($pFile);
145: return image_type_to_mime_type($image[2]);
146: } else {
147: throw new Exception("File $pFile does not exist");
148: }
149: }
150:
151: 152: 153: 154: 155: 156: 157: 158:
159: private function _writeDefaultContentType(PHPWord_Shared_XMLWriter $objWriter = null, $pPartname = '', $pContentType = '')
160: {
161: if ($pPartname != '' && $pContentType != '') {
162:
163: $objWriter->startElement('Default');
164: $objWriter->writeAttribute('Extension', $pPartname);
165: $objWriter->writeAttribute('ContentType', $pContentType);
166: $objWriter->endElement();
167: } else {
168: throw new Exception("Invalid parameters passed.");
169: }
170: }
171:
172: 173: 174: 175: 176: 177: 178: 179:
180: private function _writeOverrideContentType(PHPWord_Shared_XMLWriter $objWriter = null, $pPartname = '', $pContentType = '')
181: {
182: if ($pPartname != '' && $pContentType != '') {
183:
184: $objWriter->startElement('Override');
185: $objWriter->writeAttribute('PartName', $pPartname);
186: $objWriter->writeAttribute('ContentType', $pContentType);
187: $objWriter->endElement();
188: } else {
189: throw new Exception("Invalid parameters passed.");
190: }
191: }
192: }
193: