public function test_default() { $styles = new ODTDefaultStyles(); $styles->import(); print "\nExport:\n" . $styles->export(); }
/** * Build the document from the template. * (code taken from old function 'document_end_scratch') * * @param string $doc * @param string $autostyles * @param array $commonstyles * @param string $meta * @param string $userfields * @param ODTDefaultStyles $styleset * @return mixed */ public function build($doc = null, $autostyles = null, $commonstyles = null, $meta = null, $userfields = null, $styleset = null, $pagestyles = null) { // for the temp dir global $conf, $ID; // Temp dir if (is_dir($conf['tmpdir'])) { // version > 20070626 $temp_dir = $conf['tmpdir']; } else { // version <= 20070626 $temp_dir = $conf['savedir'] . '/cache/tmp'; } $temp_dir = $temp_dir . "/odt/" . str_replace(':', '-', $ID); if (is_dir($temp_dir)) { io_rmdir($temp_dir, true); } io_mkdir_p($temp_dir); // Extract template $template_path = $conf['mediadir'] . '/' . $this->directory . "/" . $this->template; $ok = $this->ZIP->Extract($template_path, $temp_dir); if ($ok == -1) { throw new Exception(' Error extracting the zip archive:' . $template_path . ' to ' . $temp_dir); } // Prepare content $missingstyles = $styleset->getMissingStyles($temp_dir . '/styles.xml'); $missingfonts = $styleset->getMissingFonts($temp_dir . '/styles.xml'); // Insert content $old_content = io_readFile($temp_dir . '/content.xml'); if (strpos($old_content, 'DOKUWIKI-ODT-INSERT') !== FALSE) { // Replace the mark $this->_odtReplaceInFile('/<text:p[^>]*>DOKUWIKI-ODT-INSERT<\\/text:p>/', $doc, $temp_dir . '/content.xml', true); } else { // Append to the template $this->_odtReplaceInFile('</office:text>', $doc . '</office:text>', $temp_dir . '/content.xml'); } // Cut off unwanted content if (strpos($old_content, 'DOKUWIKI-ODT-CUT-START') !== FALSE && strpos($old_content, 'DOKUWIKI-ODT-CUT-STOP') !== FALSE) { $this->_odtReplaceInFile('/DOKUWIKI-ODT-CUT-START.*DOKUWIKI-ODT-CUT-STOP/', '', $temp_dir . '/content.xml', true); } // Insert userfields if (strpos($old_content, "text:user-field-decls") === FALSE) { // no existing userfields $this->_odtReplaceInFile('/<office:text([^>]*)>/U', '<office:text\\1>' . $userfields, $temp_dir . '/content.xml', TRUE); } else { $this->_odtReplaceInFile('</text:user-field-decls>', substr($userfields, 23), $temp_dir . '/content.xml'); } // Insert styles & fonts $this->_odtReplaceInFile('</office:automatic-styles>', substr($autostyles, 25), $temp_dir . '/content.xml'); $this->_odtReplaceInFile('</office:automatic-styles>', substr($autostyles, 25), $temp_dir . '/styles.xml'); $this->_odtReplaceInFile('</office:styles>', $missingstyles . '</office:styles>', $temp_dir . '/styles.xml'); $this->_odtReplaceInFile('</office:font-face-decls>', $missingfonts . '</office:font-face-decls>', $temp_dir . '/styles.xml'); // Insert page styles $page = ''; foreach ($pagestyles as $name => $layout_name) { $page .= '<style:master-page style:name="' . $name . '" style:page-layout-name="' . $layout_name . '"/>'; } if (!empty($page)) { $this->_odtReplaceInFile('</office:master-styles>', $page . '</office:master-styles>', $temp_dir . '/styles.xml'); } // Add manifest data $this->_odtReplaceInFile('</manifest:manifest>', $this->manifest->getExtraContent() . '</manifest:manifest>', $temp_dir . '/META-INF/manifest.xml'); // Build the Zip $this->ZIP->Compress(null, $temp_dir, null); io_rmdir($temp_dir, true); }