function add($packageType, $package, $cli, $parameters) { $siteINI = eZINI::instance(); $extensionDir = $siteINI->variable('ExtensionSettings', 'ExtensionDirectory'); //$cli->output( var_export( $parameters, true ) ); foreach ($parameters as $scriptItem) { $cli->output('adding install script ' . $cli->style('dir') . $scriptItem['filename'] . $cli->style('dir-end')); $sourceDir = $scriptItem['source-directory']; $targetDir = $package->path() . '/' . $scriptItem['sub-directory']; eZDir::mkdir($targetDir, false, true); eZDir::copy($sourceDir, $targetDir, false); $package->appendInstall('ezinstallscript', false, false, true, $scriptItem['filename'], $scriptItem['sub-directory'], array('content' => false)); } }
function writeDocument() { $ooINI = eZINI::instance('odf.ini'); // Initalize directories eZDir::mkdir($this->OORootDir); eZDir::mkdir($this->OOExportDir . "META-INF", false, true); eZDir::mkdir($this->OOTemplateDir); $metaXML = "<?xml version='1.0' encoding='UTF-8'?>" . "<office:document-meta xmlns:office='urn:oasis:names:tc:opendocument:xmlns:office:1.0' xmlns:xlink='http://www.w3.org/1999/xlink' xmlns:dc='http://purl.org/dc/elements/1.1/' xmlns:meta='urn:oasis:names:tc:opendocument:xmlns:meta:1.0' xmlns:ooo='http://openoffice.org/2004/office' office:version='1.0' xmlns:ezpublish='http://www.ez.no/ezpublish/oasis'>" . "<office:meta>" . "<meta:generator>eZ Publish</meta:generator>" . " <meta:creation-date>2004-11-10T11:39:50</meta:creation-date>" . " <dc:date>2004-11-10T11:40:15</dc:date>" . " <dc:language>en-US</dc:language>" . " <meta:editing-cycles>3</meta:editing-cycles>" . " <meta:editing-duration>PT26S</meta:editing-duration>" . " <meta:user-defined meta:name='Info 1'/>" . " <meta:user-defined meta:name='Info 2'/>" . " <meta:user-defined meta:name='Info 3'/>" . " <meta:user-defined meta:name='Info 4'/>" . " <meta:document-statistic meta:table-count='0' meta:image-count='0' meta:object-count='0' meta:page-count='1' meta:paragraph-count='1' meta:word-count='2' meta:character-count='10'/>" . " </office:meta>" . "</office:document-meta>"; file_put_contents($this->OOExportDir . "meta.xml", $metaXML); $settingsXML = "<?xml version='1.0' encoding='UTF-8'?>" . "<office:document-settings xmlns:office='urn:oasis:names:tc:opendocument:xmlns:office:1.0' xmlns:xlink='http://www.w3.org/1999/xlink' xmlns:config='urn:oasis:names:tc:opendocument:xmlns:config:1.0' xmlns:ooo='http://openoffice.org/2004/office' office:version='1.0'>" . " <office:settings>" . " </office:settings>" . "</office:document-settings>"; file_put_contents($this->OOExportDir . "settings.xml", $settingsXML); $useTemplate = $ooINI->variable('ODFExport', 'UseTemplate') == "true"; $templateName = $ooINI->variable('ODFExport', 'TemplateName'); if ($useTemplate) { $templateFile = "extension/ezodf/templates/" . $templateName; $archiveOptions = new ezcArchiveOptions(array('readOnly' => true)); $archive = ezcArchive::open($templateFile, null, $archiveOptions); $archive->extract($this->OOTemplateDir); // Copy styles.xml and images, if any to the document being generated if (!copy($this->OOTemplateDir . "styles.xml", $this->OOExportDir . "styles.xml")) { return array(self::ERROR_COULD_NOT_COPY, "Could not copy the styles.xml file."); } $sourceDir = $this->OOTemplateDir . "Pictures"; $destDir = $this->OOExportDir . "Pictures"; eZDir::mkdir($destDir, false, true); eZDir::copy($sourceDir, $destDir, false, true); } else { // Generate a default empty styles.xml file $stylesXML = "<?xml version='1.0' encoding='UTF-8'?>" . "<office:document-styles xmlns:office='urn:oasis:names:tc:opendocument:xmlns:office:1.0' xmlns:style='urn:oasis:names:tc:opendocument:xmlns:style:1.0' xmlns:text='urn:oasis:names:tc:opendocument:xmlns:text:1.0' xmlns:table='urn:oasis:names:tc:opendocument:xmlns:table:1.0' xmlns:draw='urn:oasis:names:tc:opendocument:xmlns:drawing:1.0' xmlns:fo='urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0' xmlns:xlink='http://www.w3.org/1999/xlink' xmlns:dc='http://purl.org/dc/elements/1.1/' xmlns:meta='urn:oasis:names:tc:opendocument:xmlns:meta:1.0' xmlns:number='urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0' xmlns:svg='urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0' xmlns:chart='urn:oasis:names:tc:opendocument:xmlns:chart:1.0' xmlns:dr3d='urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0' xmlns:math='http://www.w3.org/1998/Math/MathML' xmlns:form='urn:oasis:names:tc:opendocument:xmlns:form:1.0' xmlns:script='urn:oasis:names:tc:opendocument:xmlns:script:1.0' xmlns:ooo='http://openoffice.org/2004/office' xmlns:ooow='http://openoffice.org/2004/writer' xmlns:oooc='http://openoffice.org/2004/calc' xmlns:dom='http://www.w3.org/2001/xml-events' office:version='1.0'>" . " <office:font-face-decls>" . " </office:font-face-decls>" . " <office:styles>" . " <style:style style:name='Table_20_Heading' style:display-name='Table Heading' style:family='paragraph' style:parent-style-name='Table_20_Contents' style:class='extra'>" . " <style:paragraph-properties fo:text-align='center' style:justify-single-word='false' text:number-lines='false' text:line-number='0'/>" . " <style:text-properties fo:font-style='italic' fo:font-weight='bold' style:font-style-asian='italic' style:font-weight-asian='bold' style:font-style-complex='italic' style:font-weight-complex='bold'/>" . " </style:style>" . " <style:style style:name='Preformatted_20_Text' style:display-name='Preformatted Text' style:family='paragraph' style:parent-style-name='Standard' style:class='html'>" . " <style:paragraph-properties fo:margin-top='0in' fo:margin-bottom='0in'/>" . " <style:text-properties style:font-name='Courier New' fo:font-size='10pt' style:font-name-asian='Courier New' style:font-size-asian='10pt' style:font-name-complex='Courier New' style:font-size-complex='10pt'/>" . " </style:style>" . " <style:style style:name='eZCustom_20_factbox' style:display-name='eZCustom_20_factbox' style:family='paragraph' style:parent-style-name='Standard' style:class='text'>" . " <style:paragraph-properties fo:margin-top='0in' fo:margin-bottom='0in'/>" . " <style:text-properties style:font-name='Helvetica' fo:font-size='10pt' style:font-name-asian='Helvetica' style:font-size-asian='10pt' style:font-name-complex='Helvetica' style:font-size-complex='10pt'/>" . " </style:style>" . " <style:style style:name='eZCustom_20_quote' style:display-name='eZCustom_20_quote' style:family='paragraph' style:parent-style-name='Standard' style:class='text'>" . " <style:paragraph-properties fo:margin-top='0in' fo:margin-bottom='0in'/>" . " <style:text-properties style:font-name='Helvetica' fo:font-size='10pt' style:font-name-asian='Helvetica' style:font-size-asian='10pt' style:font-name-complex='Helvetica' style:font-size-complex='10pt'/>" . " </style:style>" . " </office:styles>" . "</office:document-styles>"; file_put_contents($this->OOExportDir . "styles.xml", $stylesXML); } $mimeType = "application/vnd.oasis.opendocument.text"; file_put_contents($this->OOExportDir . "mimetype", $mimeType); // Write content XML file $contentXML = "<?xml version='1.0' encoding='UTF-8'?>" . "<!DOCTYPE office:document-content PUBLIC '-//OpenOffice.org//DTD OfficeDocument1.0//EN' 'office.dtd'>" . "<office:document-content xmlns:office='urn:oasis:names:tc:opendocument:xmlns:office:1.0'" . " xmlns:meta='urn:oasis:names:tc:opendocument:xmlns:meta:1.0'" . " xmlns:config='urn:oasis:names:tc:opendocument:xmlns:config:1.0'" . " xmlns:text='urn:oasis:names:tc:opendocument:xmlns:text:1.0'" . " xmlns:table='urn:oasis:names:tc:opendocument:xmlns:table:1.0'" . " xmlns:draw='urn:oasis:names:tc:opendocument:xmlns:drawing:1.0'" . " xmlns:presentation='urn:oasis:names:tc:opendocument:xmlns:presentation:1.0'" . " xmlns:dr3d='urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0'" . " xmlns:chart='urn:oasis:names:tc:opendocument:xmlns:chart:1.0'" . " xmlns:form='urn:oasis:names:tc:opendocument:xmlns:form:1.0'" . " xmlns:script='urn:oasis:names:tc:opendocument:xmlns:script:1.0'" . " xmlns:style='urn:oasis:names:tc:opendocument:xmlns:style:1.0'" . " xmlns:number='urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0'" . " xmlns:math='http://www.w3.org/1998/Math/MathML'" . " xmlns:svg='urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0'" . " xmlns:fo='urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0'" . " xmlns:koffice='http://www.koffice.org/2005/'" . " xmlns:dc='http://purl.org/dc/elements/1.1/'" . " xmlns:xlink='http://www.w3.org/1999/xlink'>" . " <office:script/>" . " <office:font-face-decls/>" . " <office:automatic-styles>" . " <text:list-style style:name='bulletlist'>" . " <text:list-level-style-bullet text:level='1' text:style-name='Bullet_20_Symbols' style:num-suffix='.' text:bullet-char='●'>" . " <style:list-level-properties text:space-before='0.25in' text:min-label-width='0.25in'/>" . " <style:text-properties style:font-name='StarSymbol'/>" . " </text:list-level-style-bullet>" . " <text:list-level-style-bullet text:level='2' text:style-name='Bullet_20_Symbols' style:num-suffix='.' text:bullet-char='○'>" . " <style:list-level-properties text:space-before='0.5in' text:min-label-width='0.25in'/>" . " <style:text-properties style:font-name='StarSymbol'/>" . " </text:list-level-style-bullet>" . " <text:list-level-style-bullet text:level='3' text:style-name='Bullet_20_Symbols' style:num-suffix='.' text:bullet-char='■'>" . " <style:list-level-properties text:space-before='0.75in' text:min-label-width='0.25in'/>" . " <style:text-properties style:font-name='StarSymbol'/>" . " </text:list-level-style-bullet>" . " </text:list-style>" . " <text:list-style style:name='numberedlist'>" . " <text:list-level-style-number text:level='1' text:style-name='Numbering_20_Symbols' style:num-suffix='.' style:num-format='1'>" . " <style:list-level-properties text:space-before='0.25in' text:min-label-width='0.25in'/>" . " </text:list-level-style-number>" . " </text:list-style>" . " <style:style style:name='imagecentered' style:family='graphic' style:parent-style-name='Graphics'>" . " <style:graphic-properties style:horizontal-pos='center' style:horizontal-rel='paragraph' style:mirror='none' fo:clip='rect(0in 0in 0in 0in)' draw:luminance='0%' draw:contrast='0%' draw:red='0%' draw:green='0%' draw:blue='0%' draw:gamma='100%' draw:color-inversion='false' draw:image-opacity='100%' draw:color-mode='standard'/>" . " </style:style>" . " <style:style style:name='imageleft' style:family='graphic' style:parent-style-name='Graphics'>" . " <style:graphic-properties style:wrap='right' style:horizontal-pos='left' style:horizontal-rel='paragraph' style:mirror='none' fo:clip='rect(0in 0in 0in 0in)' draw:luminance='0%' draw:contrast='0%' draw:red='0%' draw:green='0%' draw:blue='0%' draw:gamma='100%' draw:color-inversion='false' draw:image-opacity='100%' draw:color-mode='standard'/>" . " </style:style>" . " <style:style style:name='imageright' style:family='graphic' style:parent-style-name='Graphics'>" . " <style:graphic-properties style:wrap='left' style:horizontal-pos='right' style:horizontal-rel='paragraph' style:mirror='none' fo:clip='rect(0in 0in 0in 0in)' draw:luminance='0%' draw:contrast='0%' draw:red='0%' draw:green='0%' draw:blue='0%' draw:gamma='100%' draw:color-inversion='false' draw:image-opacity='100%' draw:color-mode='standard'/>" . " </style:style>" . " <style:style style:name='T1' style:family='text'>" . " <style:text-properties fo:font-weight='bold' style:font-weight-asian='bold' style:font-weight-complex='bold'/>" . " </style:style>" . " <style:style style:name='T2' style:family='text'>" . " <style:text-properties fo:font-style='italic' style:font-style-asian='italic' style:font-style-complex='italic'/>" . " </style:style>" . " </office:automatic-styles>" . " <office:body>" . " <office:text>"; $bodyXML = ""; // Add body contents foreach ($this->DocumentArray as $element) { $bodyXML .= $this->handleElement($element); } // Handle charset conversion if needed $charset = 'UTF-8'; $codec = eZTextCodec::instance(false, $charset); $bodyXML = $codec->convertString($bodyXML); $contentXML .= $bodyXML; // Add the content end $contentXML .= "</office:text></office:body></office:document-content>"; file_put_contents($this->OOExportDir . "content.xml", $contentXML); // Write the manifest file $manifestXML = "<?xml version='1.0' encoding='UTF-8'?>" . "<!DOCTYPE manifest:manifest PUBLIC '-//OpenOffice.org//DTD Manifest 1.0//EN' 'Manifest.dtd'>" . "<manifest:manifest xmlns:manifest='urn:oasis:names:tc:opendocument:xmlns:manifest:1.0'>" . "<manifest:file-entry manifest:media-type='application/vnd.oasis.opendocument.text' manifest:full-path='/'/>" . "<manifest:file-entry manifest:media-type='application/vnd.sun.xml.ui.configuration' manifest:full-path='Configurations2/'/>" . "<manifest:file-entry manifest:media-type='' manifest:full-path='Pictures/'/>" . "<manifest:file-entry manifest:media-type='text/xml' manifest:full-path='content.xml'/>" . "<manifest:file-entry manifest:media-type='text/xml' manifest:full-path='styles.xml'/>" . "<manifest:file-entry manifest:media-type='text/xml' manifest:full-path='meta.xml'/>" . "<manifest:file-entry manifest:media-type='' manifest:full-path='Thumbnails/'/>" . "<manifest:file-entry manifest:media-type='text/xml' manifest:full-path='settings.xml'/>"; // Do not include the thumnail file. // "<manifest:file-entry manifest:media-type='' manifest:full-path='Thumbnails/thumbnail.png'/>" . foreach ($this->ImageFileArray as $imageFile) { $manifestXML .= "<manifest:file-entry manifest:media-type='' manifest:full-path='{$imageFile}'/>\n"; } $manifestXML .= "</manifest:manifest>"; file_put_contents($this->OOExportDir . "META-INF/manifest.xml", $manifestXML); $fileName = $this->OORootDir . "ootest.odt"; $zipArchive = ezcArchive::open($fileName, ezcArchive::ZIP); $zipArchive->truncate(); $prefix = $this->OOExportDir; $fileList = array(); eZDir::recursiveList($this->OOExportDir, $this->OOExportDir, $fileList); foreach ($fileList as $fileInfo) { $path = $fileInfo['type'] === 'dir' ? $fileInfo['path'] . '/' . $fileInfo['name'] . '/' : $fileInfo['path'] . '/' . $fileInfo['name']; $zipArchive->append(array($path), $prefix); } $zipArchive->close(); // Clean up eZDir::recursiveDelete($this->OOExportDir); eZDir::recursiveDelete($this->OOTemplateDir); // Clean up temporary image files if any $fileHandler = eZClusterFileHandler::instance(); foreach ($this->SourceImageArray as $sourceImageFile) { $fileHandler->fileDeleteLocal($sourceImageFile); } return $fileName; }
function exportToArchive($archivePath) { $temporaryExportPath = eZPackage::temporaryExportPath(); $tempPath = $temporaryExportPath . '/' . $this->attribute('name'); $this->removeFiles($tempPath); // Create package temp dir and copy package's XML file there $this->storePackageFile($tempPath, false); // Copy package's directories $directoryList = array($this->documentDirectory(), $this->filesDirectory(), $this->simpleFilesDirectory(), $this->settingsDirectory()); $installItems = $this->Parameters['install']; foreach ($installItems as $installItem) { if (!in_array($installItem['sub-directory'], $directoryList)) { $directoryList[] = $installItem['sub-directory']; } } $path = $this->path(); foreach ($directoryList as $dirName) { $destDir = $tempPath; $dir = $path . '/' . $dirName; if (file_exists($dir)) { eZDir::copy($dir, $destDir); } } $tarArchivePath = $temporaryExportPath . '/archive.tmp'; $tarArchive = ezcArchive::open($tarArchivePath, ezcArchive::TAR_USTAR); $tarArchive->truncate(); $prefix = $tempPath . '/'; $fileList = array(); eZDir::recursiveList($tempPath, $tempPath, $fileList); foreach ($fileList as $fileInfo) { $path = $fileInfo['type'] === 'dir' ? $fileInfo['path'] . '/' . $fileInfo['name'] . '/' : $fileInfo['path'] . '/' . $fileInfo['name']; $tarArchive->append(array($path), $prefix); } $tarArchive->close(); copy($tarArchivePath, "compress.zlib://{$archivePath}"); unlink($tarArchivePath); $this->removeFiles($tempPath); return $archivePath; }
static function addExtension( $package, $extensionName ) { $siteINI = eZINI::instance(); $extensionDir = $siteINI->variable( 'ExtensionSettings', 'ExtensionDirectory' ); $fileList = array(); $sourceDir = $extensionDir . '/' . $extensionName; $targetDir = $package->path() . '/ezextension'; eZDir::mkdir( $targetDir, false, true ); eZDir::copy( $sourceDir, $targetDir ); eZDir::recursiveList( $targetDir, '', $fileList ); $doc = new DOMDocument; $packageRoot = $doc->createElement( 'extension' ); $packageRoot->setAttribute( 'name', $extensionName ); foreach( $fileList as $file ) { $fileNode = $doc->createElement( 'file' ); $fileNode->setAttribute( 'name', $file['name'] ); if ( $file['path'] ) $fileNode->setAttribute( 'path', $file['path'] ); $fullPath = $targetDir . $file['path'] . '/' . $file['name']; $fileNode->setAttribute( 'md5sum', $package->md5sum( $fullPath ) ); if ( $file['type'] == 'dir' ) $fileNode->setAttribute( 'type', 'dir' ); $packageRoot->appendChild( $fileNode ); unset( $fileNode ); } $filename = 'extension-' . $extensionName; $package->appendInstall( 'ezextension', false, false, true, $filename, 'ezextension', array( 'content' => $packageRoot ) ); $package->appendInstall( 'ezextension', false, false, false, $filename, 'ezextension', array( 'content' => false ) ); }
function createSiteAccess( $params ) { $srcSiteaccess = $params['src']['siteaccess']; $dstSiteaccess = $params['dst']['siteaccess']; $dstSettings = isset( $params['dst']['settings'] ) ? $params['dst']['settings'] : array(); // Create the siteaccess directory $srcSiteaccessDir = "settings/siteaccess/" . $srcSiteaccess; $dstSiteaccessDir = "settings/siteaccess/" . $dstSiteaccess; eZDir::mkdir( $dstSiteaccessDir, false, true ); eZDir::copy( $srcSiteaccessDir, $dstSiteaccessDir, false, true ); // Update settings foreach ( $dstSettings as $iniFile => $settingGroups ) { $ini = eZINI::instance( $iniFile . ".append.php", $dstSiteaccessDir, null, false, null, true ); foreach ( $settingGroups as $settingGroup => $settings ) { foreach ( $settings as $name => $value ) { $ini->setVariable( $settingGroup, $name, $value ); } } $ini->save( false, false, false, false, true, true ); unset( $ini ); } // Create roles $role = eZRole::fetchByName( "Anonymous" ); $role->appendPolicy( "user", "login", array( "SiteAccess" => array( eZSys::ezcrc32( $dstSiteaccess ) ) ) ); $role->store(); }