|
eZ Publish
[4.0]
|
00001 <?php 00002 // 00003 // Definition of eZContentObjectPackageCreator class 00004 // 00005 // Created on: <09-Mar-2004 12:39:59 kk> 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 ezcontentobjectpackagecreator.php 00032 */ 00033 00034 /*! 00035 \ingroup package 00036 \class eZContentObjectPackageCreator ezcontentclasspackagecreator.php 00037 \brief A package creator for content objects 00038 */ 00039 00040 //include_once( 'kernel/classes/ezpackagecreationhandler.php' ); 00041 00042 class eZContentObjectPackageCreator extends eZPackageCreationHandler 00043 { 00044 /*! 00045 \reimp 00046 */ 00047 function eZContentObjectPackageCreator( $id ) 00048 { 00049 $steps = array(); 00050 $steps[] = array( 'id' => 'object', 00051 'name' => ezi18n( 'kernel/package', 'Content objects to include' ), 00052 'methods' => array( 'initialize' => 'initializeObjectList', 00053 'load' => 'loadObjectList', 00054 'validate' => 'validateObjectList' ), 00055 'template' => 'object_select.tpl' ); 00056 $steps[] = array( 'id' => 'object_limits', 00057 'name' => ezi18n( 'kernel/package', 'Content object limits' ), 00058 'methods' => array( 'initialize' => 'initializeObjectLimits', 00059 'load' => 'loadObjectLimits', 00060 'validate' => 'validateObjectLimits' ), 00061 'template' => 'object_limit.tpl' ); 00062 $steps[] = $this->packageInformationStep(); 00063 $steps[] = $this->packageMaintainerStep(); 00064 $steps[] = $this->packageChangelogStep(); 00065 $this->eZPackageCreationHandler( $id, 00066 ezi18n( 'kernel/package', 'Content object export' ), 00067 $steps ); 00068 } 00069 00070 /*! 00071 \reimp 00072 Creates the package and adds the selected content classes. 00073 */ 00074 function finalize( &$package, $http, &$persistentData ) 00075 { 00076 $this->createPackage( $package, $http, $persistentData, $cleanupFiles ); 00077 00078 $objectHandler = eZPackage::packageHandler( 'ezcontentobject' ); 00079 $nodeList = $persistentData['node_list']; 00080 $options = $persistentData['object_options']; 00081 00082 foreach( $nodeList as $nodeInfo ) 00083 { 00084 $objectHandler->addNode( $nodeInfo['id'], $nodeInfo['type'] == 'subtree' ); 00085 } 00086 $objectHandler->generatePackage( $package, $options ); 00087 00088 $package->setAttribute( 'is_active', true ); 00089 $package->store(); 00090 } 00091 00092 /*! 00093 \reimp 00094 Returns \c 'stable', content class packages are always stable. 00095 */ 00096 function packageInitialState( $package, &$persistentData ) 00097 { 00098 return 'stable'; 00099 } 00100 00101 /*! 00102 \return \c 'contentclass'. 00103 */ 00104 function packageType( $package, &$persistentData ) 00105 { 00106 return 'contentobject'; 00107 } 00108 00109 function initializeObjectList( $package, $http, $step, &$persistentData, $tpl ) 00110 { 00111 $persistentData['node_list'] = array(); 00112 } 00113 00114 function loadObjectList( $package, $http, $step, &$persistentData, $tpl, &$module ) 00115 { 00116 if ( $http->hasPostVariable( 'AddSubtree' ) ) 00117 { 00118 //include_once( 'kernel/classes/ezcontentbrowse.php' ); 00119 eZContentBrowse::browse( array( 'action_name' => 'FindLimitationSubtree', 00120 'description_template' => 'design:package/creators/ezcontentobject/browse_subtree.tpl', 00121 'from_page' => '/package/create', 00122 'persistent_data' => array( 'PackageStep' => $http->postVariable( 'PackageStep' ), 00123 'CreatorItemID' => $http->postVariable( 'CreatorItemID' ), 00124 'CreatorStepID' => $http->postVariable( 'CreatorStepID' ), 00125 'Subtree' => 1 ) ), 00126 $module ); 00127 } 00128 else if ( $http->hasPostVariable( 'AddNode' ) ) 00129 { 00130 //include_once( 'kernel/classes/ezcontentbrowse.php' ); 00131 eZContentBrowse::browse( array( 'action_name' => 'FindLimitationNode', 00132 'description_template' => 'design:package/creators/ezcontentobject/browse_node.tpl', 00133 'from_page' => '/package/create', 00134 'persistent_data' => array( 'PackageStep' => $http->postVariable( 'PackageStep' ), 00135 'CreatorItemID' => $http->postVariable( 'CreatorItemID' ), 00136 'CreatorStepID' => $http->postVariable( 'CreatorStepID' ), 00137 'Node' => 1) ), 00138 $module ); 00139 } 00140 else if( $http->hasPostVariable( 'RemoveSelected' ) ) 00141 { 00142 foreach ( array_keys( $persistentData['node_list'] ) as $key ) 00143 { 00144 if ( in_array( $persistentData['node_list'][$key]['id'], $http->postVariable( 'DeleteIDArray' ) ) ) 00145 { 00146 unset( $persistentData['node_list'][$key] ); 00147 } 00148 } 00149 } 00150 else if( $http->hasPostVariable( 'SelectedNodeIDArray' ) && !$http->hasPostVariable( 'BrowseCancelButton' ) ) 00151 { 00152 if ( $http->hasPostVariable( 'Subtree' ) && 00153 $http->hasPostVariable( 'Subtree' ) == 1 ) 00154 { 00155 foreach( $http->postVariable( 'SelectedNodeIDArray' ) as $nodeID ) 00156 { 00157 $persistentData['node_list'][] = array( 'id' => $nodeID, 00158 'type' => 'subtree' ); 00159 } 00160 } 00161 else if ( $http->hasPostVariable( 'Node' ) && 00162 $http->hasPostVariable( 'Node' ) == 1 ) 00163 { 00164 foreach( $http->postVariable( 'SelectedNodeIDArray' ) as $nodeID ) 00165 { 00166 $persistentData['node_list'][] = array( 'id' => $nodeID, 00167 'type' => 'node' ); 00168 } 00169 } 00170 } 00171 00172 $tpl->setVariable( 'node_list', $persistentData['node_list'] ); 00173 } 00174 00175 /*! 00176 Checks if at least one content class has been selected. 00177 */ 00178 function validateObjectList( $package, $http, $currentStepID, &$stepMap, &$persistentData, &$errorList ) 00179 { 00180 if ( count( $persistentData['node_list'] ) == 0 ) 00181 { 00182 $errorList[] = array( 'field' => ezi18n( 'kernel/package', 'Selected nodes' ), 00183 'description' => ezi18n( 'kernel/package', 'You must select one or more node(s)/subtree(s) for export.' ) ); 00184 return false; 00185 } 00186 00187 return true; 00188 } 00189 00190 function initializeObjectLimits( $package, $http, $step, &$persistentData, $tpl ) 00191 { 00192 $persistentData['object_options'] = array( 'include_classes' => 1, 00193 'include_templates' => 1, 00194 'site_access_array' => array(), 00195 'versions' => 'current', 00196 'language_array' => array(), 00197 'node_assignment' => 'selected', 00198 'related_objects' => 'selected', 00199 'embed_objects' => 'selected' ); 00200 00201 //include_once( 'lib/ezutils/classes/ezini.php' ); 00202 $ini = eZINI::instance(); 00203 $persistentData['object_options']['site_access_array'] = array( $ini->variable( 'SiteSettings', 'DefaultAccess' ) ); 00204 00205 //include_once( 'kernel/classes/ezcontentobject.php' ); 00206 $availableLanguages = eZContentObject::translationList(); 00207 foreach ( $availableLanguages as $language ) 00208 { 00209 $persistentData['object_options']['language_array'][] = $language->attribute( 'locale_code' ); 00210 } 00211 } 00212 00213 function loadObjectLimits( $package, $http, $step, &$persistentData, $tpl, &$module ) 00214 { 00215 //include_once( 'lib/ezutils/classes/ezini.php' ); 00216 $ini = eZINI::instance(); 00217 $availableSiteAccesses = $ini->variable( 'SiteAccessSettings', 'RelatedSiteAccessList' ); 00218 00219 //include_once( 'kernel/classes/ezcontentobject.php' ); 00220 $availableLanguages = eZContentObject::translationList(); 00221 $availableLanguageArray = array(); 00222 foreach ( $availableLanguages as $language ) 00223 { 00224 $availableLanguageArray[] = array( 'name' => $language->attribute( 'language_name' ), 00225 'locale' => $language->attribute( 'locale_code' ) ); 00226 } 00227 00228 $tpl->setVariable( 'available_site_accesses', $availableSiteAccesses ); 00229 $tpl->setVariable( 'available_languages', $availableLanguageArray ); 00230 $tpl->setVariable( 'options', $persistentData['object_options'] ); 00231 } 00232 00233 /*! 00234 Checks if at least one content class has been selected. 00235 */ 00236 function validateObjectLimits( $package, $http, $currentStepID, &$stepMap, &$persistentData, &$errorList ) 00237 { 00238 $options =& $persistentData['object_options']; 00239 00240 $options['include_classes'] = $http->hasPostVariable( 'IncludeClasses' ) ? $http->postVariable( 'IncludeClasses' ) : false; 00241 $options['include_templates'] = $http->hasPostVariable( 'IncludeTemplates' ) ? $http->postVariable( 'IncludeTemplates' ) : false; 00242 $options['site_access_array'] = $http->postVariable( 'SiteAccesses' ); 00243 $options['versions'] = $http->postVariable( 'VersionExport' ); 00244 $options['language_array'] = $http->postVariable( 'Languages' ); 00245 $options['node_assignment'] = $http->postVariable( 'NodeAssignment' ); 00246 $options['related_objects'] = $http->postVariable( 'RelatedObjects' ); 00247 $options['minimal_template_set'] = $http->hasPostVariable( 'MinimalTemplateSet' ) ? $http->postVariable( 'MinimalTemplateSet' ) : false; 00248 00249 $result = true; 00250 if ( count( $persistentData['object_options']['language_array'] ) == 0 ) 00251 { 00252 $errorList[] = array( 'field' => ezi18n( 'kernel/package', 'Selected nodes' ), 00253 'description' => ezi18n( 'kernel/package', 'You must choose one or more languages.' ) ); 00254 $result = false; 00255 } 00256 00257 if ( $persistentData['object_options']['include_templates'] && 00258 count( $persistentData['object_options']['site_access_array'] ) == 0 ) 00259 { 00260 $errorList[] = array( 'field' => ezi18n( 'kernel/package', 'Selected nodes' ), 00261 'description' => ezi18n( 'kernel/package', 'You must choose one or more site access.' ) ); 00262 $result = false; 00263 } 00264 00265 return $result; 00266 } 00267 00268 /*! 00269 \reimp 00270 Fetches the selected content classes and generates a name, summary and description from the selection. 00271 */ 00272 function generatePackageInformation( &$packageInformation, $package, $http, $step, &$persistentData ) 00273 { 00274 $nodeList = $persistentData['node_list']; 00275 $options = $persistentData['object_options']; 00276 $nodeCount = 0; 00277 $description = 'This package contains the following nodes :' . "\n"; 00278 $nodeNames = array(); 00279 foreach( $nodeList as $nodeInfo ) 00280 { 00281 $contentNode = eZContentObjectTreeNode::fetch( $nodeInfo['id'] ); 00282 $description .= $contentNode->attribute( 'name' ) . ' - ' . $nodeInfo['type'] . "\n"; 00283 $nodeNames[] = trim( $contentNode->attribute( 'name' ) ); 00284 if ( $nodeInfo['type'] == 'node' ) 00285 { 00286 ++$nodeCount; 00287 } 00288 else if ( $nodeInfo['type'] == 'subtree' ) 00289 { 00290 $nodeCount += $contentNode->subTreeCount(); 00291 } 00292 } 00293 00294 $packageInformation['name'] = implode( ',', $nodeNames ); 00295 $packageInformation['summary'] = implode( ', ', $nodeNames ); 00296 $packageInformation['description'] = $description; 00297 } 00298 00299 } 00300 ?>