eZ Publish  [4.0]
ezstylepackagecreator.php
Go to the documentation of this file.
00001 <?php
00002 //
00003 // Definition of eZStylePackageCreator class
00004 //
00005 // Created on: <21-Nov-2003 12:39:59 amos>
00006 //
00007 // ## BEGIN COPYRIGHT, LICENSE AND WARRANTY NOTICE ##
00008 // SOFTWARE NAME: eZ Publish
00009 // SOFTWARE RELEASE: 4.0.x
00010 // COPYRIGHT NOTICE: Copyright (C) 1999-2008 eZ Systems AS
00011 // SOFTWARE LICENSE: GNU General Public License v2.0
00012 // NOTICE: >
00013 //   This program is free software; you can redistribute it and/or
00014 //   modify it under the terms of version 2.0  of the GNU General
00015 //   Public License as published by the Free Software Foundation.
00016 //
00017 //   This program is distributed in the hope that it will be useful,
00018 //   but WITHOUT ANY WARRANTY; without even the implied warranty of
00019 //   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00020 //   GNU General Public License for more details.
00021 //
00022 //   You should have received a copy of version 2.0 of the GNU General
00023 //   Public License along with this program; if not, write to the Free
00024 //   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
00025 //   MA 02110-1301, USA.
00026 //
00027 //
00028 // ## END COPYRIGHT, LICENSE AND WARRANTY NOTICE ##
00029 //
00030 
00031 /*! \file ezstylepackagecreator.php
00032 */
00033 
00034 /*!
00035   \ingroup package
00036   \class eZStylePackageCreator ezstylepackagecreator.php
00037   \brief The class eZStylePackageCreator does
00038 
00039 */
00040 
00041 //include_once( 'kernel/classes/ezpackagecreationhandler.php' );
00042 
00043 class eZStylePackageCreator extends eZPackageCreationHandler
00044 {
00045     /*!
00046      Constructor
00047     */
00048     function eZStylePackageCreator( $id )
00049     {
00050         $steps = array();
00051         $steps[] = $this->packageThumbnailStep();
00052         $steps[] = array( 'id' => 'cssfile',
00053                           'name' => ezi18n( 'kernel/package', 'CSS files' ),
00054                           'methods' => array( 'initialize' => 'initializeCSSFile',
00055                                               'validate' => 'validateCSSFile',
00056                                               'commit' => 'commitCSSFile' ),
00057                           'template' => 'cssfile.tpl' );
00058         $steps[] = array( 'id' => 'imagefiles',
00059                           'name' => ezi18n( 'kernel/package', 'Image files' ),
00060                           'methods' => array( 'initialize' => 'initializeImageFiles',
00061                                               'validate' => 'validateImageFiles',
00062                                               'commit' => 'commitImageFiles' ),
00063                           'template' => 'imagefiles.tpl' );
00064         $steps[] = $this->packageInformationStep();
00065         $steps[] = $this->packageMaintainerStep();
00066         $steps[] = $this->packageChangelogStep();
00067         $this->eZPackageCreationHandler( $id,
00068                                          ezi18n( 'kernel/package', 'Site style' ),
00069                                          $steps );
00070     }
00071 
00072     function finalize( &$package, $http, &$persistentData )
00073     {
00074         $cleanupFiles = array();
00075         $this->createPackage( $package, $http, $persistentData, $cleanupFiles, false );
00076 
00077         $collections = array();
00078 
00079         $siteCssfile = $persistentData['sitecssfile'];
00080         $fileItem = array( 'file' => $siteCssfile['filename'],
00081                            'type' => 'file',
00082                            'role' => false,
00083                            'design' => false,
00084                            'path' => $siteCssfile['url'],
00085                            'collection' => 'default',
00086                            'file-type' => false,
00087                            'role-value' => false,
00088                            'variable-name' => 'sitecssfile' );
00089 
00090         $package->appendFile( $fileItem['file'], $fileItem['type'], $fileItem['role'],
00091                               $fileItem['design'], $fileItem['path'], $fileItem['collection'],
00092                               null, null, true, null,
00093                               $fileItem['file-type'], $fileItem['role-value'], $fileItem['variable-name'] );
00094         $cleanupFiles[] = $fileItem['path'];
00095 
00096         $classesCssfile = $persistentData['classescssfile'];
00097         $fileItem = array( 'file' => $classesCssfile['filename'],
00098                            'type' => 'file',
00099                            'role' => false,
00100                            'design' => false,
00101                            'path' => $classesCssfile['url'],
00102                            'collection' => 'default',
00103                            'file-type' => false,
00104                            'role-value' => false,
00105                            'variable-name' => 'classescssfile' );
00106 
00107         $package->appendFile( $fileItem['file'], $fileItem['type'], $fileItem['role'],
00108                               $fileItem['design'], $fileItem['path'], $fileItem['collection'],
00109                               null, null, true, null,
00110                               $fileItem['file-type'], $fileItem['role-value'], $fileItem['variable-name'] );
00111         $cleanupFiles[] = $fileItem['path'];
00112 
00113         if ( !in_array( $fileItem['collection'], $collections ) )
00114             $collections[] = $fileItem['collection'];
00115 
00116         $imageFiles = $persistentData['imagefiles'];
00117         foreach ( $imageFiles as $imageFile )
00118         {
00119             $fileItem = array( 'file' => $imageFile['filename'],
00120                                'type' => 'file',
00121                                'role' => false,
00122                                'design' => false,
00123                                'subdirectory' => 'images',
00124                                'path' => $imageFile['url'],
00125                                'collection' => 'default',
00126                                'file-type' => false,
00127                                'role-value' => false,
00128                                'variable-name' => 'imagefiles' );
00129 
00130             $package->appendFile( $fileItem['file'], $fileItem['type'], $fileItem['role'],
00131                                   $fileItem['design'], $fileItem['path'], $fileItem['collection'],
00132                                   $fileItem['subdirectory'], null, true, null,
00133                                   $fileItem['file-type'], $fileItem['role-value'], $fileItem['variable-name'] );
00134             $cleanupFiles[] = $fileItem['path'];
00135 
00136             if ( !in_array( $fileItem['collection'], $collections ) )
00137                 $collections[] = $fileItem['collection'];
00138         }
00139 
00140         foreach ( $collections as $collection )
00141         {
00142             $installItems = $package->installItemsList( 'ezfile', false, $collection, true );
00143             if ( count( $installItems ) == 0 )
00144                 $package->appendInstall( 'ezfile', false, false, true,
00145                                          false, false,
00146                                          array( 'collection' => $collection ) );
00147             $dependencyItems = $package->dependencyItems( 'provides',
00148                                                           array( 'type'  => 'ezfile',
00149                                                                  'name'  => 'collection',
00150                                                                  'value' => $collection ) );
00151             if ( count( $dependencyItems ) == 0 )
00152                 $package->appendDependency( 'provides',
00153                                             array( 'type'  => 'ezfile',
00154                                                    'name'  => 'collection',
00155                                                    'value' => $collection ) );
00156             $installItems = $package->installItemsList( 'ezfile', false, $collection, false );
00157             if ( count( $installItems ) == 0 )
00158                 $package->appendInstall( 'ezfile', false, false, false,
00159                                          false, false,
00160                                          array( 'collection' => $collection ) );
00161         }
00162 
00163         $package->setAttribute( 'is_active', true );
00164         $package->store();
00165 
00166         foreach ( $cleanupFiles as $cleanupFile )
00167         {
00168             unlink( $cleanupFile );
00169         }
00170     }
00171 
00172     /*!
00173      \reimp
00174      \return \c 'import'
00175     */
00176     function packageInstallType( $package, &$persistentData )
00177     {
00178         return 'import';
00179     }
00180 
00181     /*!
00182      \reimp
00183      Returns \c 'stable', site style packages are always stable.
00184     */
00185     function packageInitialState( $package, &$persistentData )
00186     {
00187         return 'stable';
00188     }
00189 
00190     /*!
00191      \return \c 'sitestyle'.
00192     */
00193     function packageType( $package, &$persistentData )
00194     {
00195         return 'sitestyle';
00196     }
00197 
00198 
00199     function initializeCSSFile( $package, $http, $step, &$persistentData, $tpl )
00200     {
00201     }
00202 
00203     /*!
00204      Checks if the css file was uploaded.
00205     */
00206     function validateCSSFile( $package, $http, $currentStepID, &$stepMap, &$persistentData, &$errorList )
00207     {
00208         //include_once( 'lib/ezutils/classes/ezhttpfile.php' );
00209         $hasSiteFile = eZHTTPFile::canFetch( 'PackageSiteCSSFile' );
00210         $hasClassesFile = eZHTTPFile::canFetch( 'PackageClassesCSSFile' );
00211 
00212         $result = true;
00213         if ( !$hasSiteFile or !$hasClassesFile )
00214         {
00215             $errorList[] = array( 'field' => ezi18n( 'kernel/package', 'CSS file' ),
00216                                   'description' => ezi18n( 'kernel/package', 'You must upload both CSS files' ) );
00217             return false;
00218         }
00219 
00220         $siteFile = eZHTTPFile::fetch( 'PackageSiteCSSFile' );
00221         $classesFile = eZHTTPFile::fetch( 'PackageClassesCSSFile' );
00222         if ( !preg_match( "#\.css$#", strtolower( $siteFile->attribute( 'original_filename' ) ) ) or
00223              !preg_match( "#\.css$#", strtolower( $classesFile->attribute( 'original_filename' ) ) ) )
00224         {
00225             $errorList[] = array( 'field' => ezi18n( 'kernel/package', 'CSS file' ),
00226                                   'description' => ezi18n( 'kernel/package', 'File did not have a .css suffix, this is most likely not a CSS file' ) );
00227             $result = false;
00228         }
00229         return $result;
00230     }
00231 
00232     function commitCSSFile( $package, $http, $step, &$persistentData, $tpl )
00233     {
00234         //include_once( 'lib/ezutils/classes/ezhttpfile.php' );
00235         $siteFile = eZHTTPFile::fetch( 'PackageSiteCSSFile' );
00236         $classesFile = eZHTTPFile::fetch( 'PackageClassesCSSFile' );
00237         //include_once( 'lib/ezutils/classes/ezmimetype.php' );
00238         $siteMimeData = eZMimeType::findByFileContents( $siteFile->attribute( 'original_filename' ) );
00239         $dir = eZSys::storageDirectory() . '/temp';
00240         eZMimeType::changeDirectoryPath( $siteMimeData, $dir );
00241         $siteFile->store( false, false, $siteMimeData );
00242         $persistentData['sitecssfile'] = $siteMimeData;
00243 
00244         $classesMimeData = eZMimeType::findByFileContents( $classesFile->attribute( 'original_filename' ) );
00245         eZMimeType::changeDirectoryPath( $classesMimeData, $dir );
00246         $classesFile->store( false, false, $classesMimeData );
00247         $persistentData['classescssfile'] = $classesMimeData;
00248     }
00249 
00250     function initializeImageFiles( $package, $http, $step, &$persistentData, $tpl )
00251     {
00252         $persistentData['imagefiles'] = array();
00253     }
00254 
00255     /*!
00256      Checks if the css file was uploaded.
00257     */
00258     function validateImageFiles( $package, $http, $currentStepID, &$stepMap, &$persistentData, &$errorList )
00259     {
00260         //include_once( 'lib/ezutils/classes/ezhttpfile.php' );
00261         // If we don't have an image we continue as normal
00262         if ( !eZHTTPFile::canFetch( 'PackageImageFile' ) )
00263             return true;
00264 
00265         $file = eZHTTPFile::fetch( 'PackageImageFile' );
00266 
00267         $result = true;
00268         if ( $file )
00269         {
00270             //include_once( 'lib/ezutils/classes/ezmimetype.php' );
00271             $mimeData = eZMimeType::findByFileContents( $file->attribute( 'original_filename' ) );
00272             $dir = eZSys::storageDirectory() .  '/temp';
00273             eZMimeType::changeDirectoryPath( $mimeData, $dir );
00274             $file->store( false, false, $mimeData );
00275             $persistentData['imagefiles'][] = $mimeData;
00276             $result = false;
00277         }
00278         return $result;
00279     }
00280 
00281     function commitImageFiles( $package, $http, $step, &$persistentData, $tpl )
00282     {
00283     }
00284 
00285     /*!
00286      \reimp
00287      Fetches the selected content classes and generates a name, summary and description from the selection.
00288     */
00289     function generatePackageInformation( &$packageInformation, $package, $http, $step, &$persistentData )
00290     {
00291         $cssfile = $persistentData['sitecssfile'];
00292         if ( $cssfile )
00293             $cssfile = $persistentData['classescssfile'];
00294 
00295         if ( $cssfile )
00296         {
00297             $packageInformation['name'] = $cssfile['basename'];
00298             $packageInformation['summary'] = $cssfile['basename'] . ' site style';
00299             $packageInformation['description'] = 'A site style called ' . $cssfile['basename'];
00300         }
00301     }
00302 }
00303 
00304 ?>