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_DocumentRels extends PHPWord_Writer_Word2007_WriterPart
32: {
33:
34: public function writeDocumentRels($_relsCollection)
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('Relationships');
49: $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships');
50:
51:
52: $this->_writeRelationship(
53: $objWriter,
54: 1,
55: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles',
56: 'styles.xml'
57: );
58:
59:
60: $this->_writeRelationship(
61: $objWriter,
62: 2,
63: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering',
64: 'numbering.xml'
65: );
66:
67:
68: $this->_writeRelationship(
69: $objWriter,
70: 3,
71: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings',
72: 'settings.xml'
73: );
74:
75:
76: $this->_writeRelationship(
77: $objWriter,
78: 4,
79: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme',
80: 'theme/theme1.xml'
81: );
82:
83:
84: $this->_writeRelationship(
85: $objWriter,
86: 5,
87: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings',
88: 'webSettings.xml'
89: );
90:
91:
92: $this->_writeRelationship(
93: $objWriter,
94: 6,
95: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable',
96: 'fontTable.xml'
97: );
98:
99:
100: foreach ($_relsCollection as $relation) {
101: $relationType = $relation['type'];
102: $relationName = $relation['target'];
103: $relationId = $relation['rID'];
104: $targetMode = ($relationType == 'hyperlink') ? 'External' : '';
105:
106: $this->_writeRelationship(
107: $objWriter,
108: $relationId,
109: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/' . $relationType,
110: $relationName,
111: $targetMode
112: );
113: }
114:
115:
116: $objWriter->endElement();
117:
118:
119: return $objWriter->getData();
120: }
121:
122: public function ($_relsCollection)
123: {
124:
125: $objWriter = null;
126: if ($this->getParentWriter()->getUseDiskCaching()) {
127: $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory());
128: } else {
129: $objWriter = new PHPWord_Shared_XMLWriter(PHPWord_Shared_XMLWriter::STORAGE_MEMORY);
130: }
131:
132:
133: $objWriter->startDocument('1.0', 'UTF-8', 'yes');
134:
135:
136: $objWriter->startElement('Relationships');
137: $objWriter->writeAttribute('xmlns', 'http://schemas.openxmlformats.org/package/2006/relationships');
138:
139:
140: foreach ($_relsCollection as $relation) {
141: $relationType = $relation['type'];
142: $relationName = $relation['target'];
143: $relationId = $relation['rID'];
144:
145: $this->_writeRelationship(
146: $objWriter,
147: $relationId,
148: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/' . $relationType,
149: $relationName
150: );
151: }
152:
153:
154: $objWriter->endElement();
155:
156:
157: return $objWriter->getData();
158: }
159:
160: private function _writeRelationship(PHPWord_Shared_XMLWriter $objWriter = null, $pId = 1, $pType = '', $pTarget = '', $pTargetMode = '')
161: {
162: if ($pType != '' && $pTarget != '') {
163: if (strpos($pId, 'rId') === false) {
164: $pId = 'rId' . $pId;
165: }
166:
167:
168: $objWriter->startElement('Relationship');
169: $objWriter->writeAttribute('Id', $pId);
170: $objWriter->writeAttribute('Type', $pType);
171: $objWriter->writeAttribute('Target', $pTarget);
172:
173: if ($pTargetMode != '') {
174: $objWriter->writeAttribute('TargetMode', $pTargetMode);
175: }
176:
177: $objWriter->endElement();
178: } else {
179: throw new Exception("Invalid parameters passed.");
180: }
181: }
182: }
183: