Description:
Currently it's not possible to override classes providing template operators because the template engine does not rely on the autoload system, it does an include_once with the path to the classes defined in the declaration of the operator instead.
The attached patch fixes this behaviour to use the autload system by default. If the class cannot be loaded by the autoload system, eZ Publish will try to include the class using the path if it is defined.
btw, there's a small issue on the name of the class providing i18n and x18n operators. The class is defined as "eZi18nOperator", but the operator definition uses "eZI18nOperator" (notice the capital I instead of the i). The patch fixes the declaration the operator as well, but perhaps the class definition should changed ?
Environment:
Operating System:
PHP Version: (please be specific, like '4.4.3' or '5.1.5')
Database and version:
Browser (and version):
Attachments
patch_override_operator.diff (25 kb) added by Damien Pobel
Index: kernel/common/eztemplateautoload.php
===================================================================
--- kernel/common/eztemplateautoload.php (révision 25039)
+++ kernel/common/eztemplateautoload.php (copie de travail)
@@ -33,70 +33,54 @@
$eZTemplateOperatorArray = array();
-$eZTemplateOperatorArray[] = array( 'script' => 'kernel/common/ezurloperator.php',
- 'class' => 'eZURLOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZURLOperator',
'operator_names' => array( 'ezurl', 'ezroot', 'ezdesign', 'ezimage', 'exturl',
'ezsys', 'ezhttp', 'ezhttp_hasvariable', 'ezini', 'ezini_hasvariable' ) );
-$eZTemplateOperatorArray[] = array( 'script' => 'kernel/common/ezi18noperator.php',
- 'class' => 'eZI18nOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZi18nOperator',
'operator_names' => array( 'i18n', 'x18n' ) );
-$eZTemplateOperatorArray[] = array( 'script' => 'kernel/common/ezalphabetoperator.php',
- 'class' => 'eZAlphabetOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZAlphabetOperator',
'operator_names' => array( 'alphabet' ) );
-$eZTemplateOperatorArray[] = array( 'script' => 'kernel/common/ezdateoperatorcollection.php',
- 'class' => 'eZDateOperatorCollection',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZDateOperatorCollection',
'operator_names' => array( 'month_overview' ) );
-$eZTemplateOperatorArray[] = array( 'script' => 'kernel/common/ezautolinkoperator.php',
- 'class' => 'eZAutoLinkOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZAutoLinkOperator',
'operator_names' => array( 'autolink' ) );
-$eZTemplateOperatorArray[] = array( 'script' => 'kernel/common/ezsimpletagsoperator.php',
- 'class' => 'eZSimpleTagsOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZSimpleTagsOperator',
'operator_names' => array( 'simpletags' ) );
-$eZTemplateOperatorArray[] = array( 'script' => 'kernel/common/eztreemenuoperator.php',
- 'class' => 'eZTreeMenuOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZTreeMenuOperator',
'operator_names' => array( 'treemenu' ) );
-$eZTemplateOperatorArray[] = array( 'script' => 'kernel/common/ezcontentstructuretreeoperator.php',
- 'class' => 'eZContentStructureTreeOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZContentStructureTreeOperator',
'operator_names' => array( 'content_structure_tree' ) );
-$eZTemplateOperatorArray[] = array( 'script' => 'kernel/common/ezwordtoimageoperator.php',
- 'class' => 'eZWordToImageOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZWordToImageOperator',
'operator_names' => array( 'wordtoimage',
'mimetype_icon', 'class_icon', 'classgroup_icon', 'action_icon', 'icon',
'flag_icon', 'icon_info' ) );
-$eZTemplateOperatorArray[] = array( 'script' => 'kernel/common/ezkerneloperator.php',
- 'class' => 'eZKernelOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZKernelOperator',
'operator_names' => array( 'ezpreference' ) );
-$eZTemplateOperatorArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplatephpoperator.php',
- 'function' => 'eZPHPOperatorInit',
+$eZTemplateOperatorArray[] = array( 'function' => 'eZPHPOperatorInit',
'operator_names_function' => 'eZPHPOperatorNameInit' );
-$eZTemplateOperatorArray[] = array( 'script' => 'kernel/common/ezmoduleparamsoperator.php',
- 'class' => 'eZModuleParamsOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZModuleParamsOperator',
'operator_names' => array( 'module_params' ) );
-$eZTemplateOperatorArray[] = array( 'script' => 'kernel/common/eztopmenuoperator.php',
- 'class' => 'eZTopMenuOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZTopMenuOperator',
'operator_names' => array( 'topmenu' ) );
-$eZTemplateOperatorArray[] = array( 'script' => 'kernel/common/ezpackageoperator.php',
- 'class' => 'eZPackageOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZPackageOperator',
'operator_names' => array( 'ezpackage' ) );
-$eZTemplateOperatorArray[] = array( 'script' => 'kernel/common/eztocoperator.php',
- 'class' => 'eZTOCOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZTOCOperator',
'operator_names' => array( 'eztoc' ) );
-$eZTemplateOperatorArray[] = array( 'script' => 'kernel/common/ezmoduleoperator.php',
- 'class' => 'eZModuleOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZModuleOperator',
'operator_names' => array( 'ezmodule' ) );
// Function autoloading
Index: kernel/private/eztemplate/eztemplateautoload.php
===================================================================
--- kernel/private/eztemplate/eztemplateautoload.php (révision 25039)
+++ kernel/private/eztemplate/eztemplateautoload.php (copie de travail)
@@ -8,8 +8,7 @@
*/
$eZTemplateOperatorArray = array();
-$eZTemplateOperatorArray[] = array( 'script' => 'kernel/private/eztemplate/ezplanguageswitcheroperator.php',
- 'class' => 'ezpLanguageSwitcherOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'ezpLanguageSwitcherOperator',
'operator_names' => array( 'language_switcher' ) );
-?>
\ No newline at end of file
+?>
Index: lib/ezpdf/classes/eztemplateautoload.php
===================================================================
--- lib/ezpdf/classes/eztemplateautoload.php (révision 25039)
+++ lib/ezpdf/classes/eztemplateautoload.php (copie de travail)
@@ -33,8 +33,7 @@
$eZTemplateOperatorArray = array();
-$eZTemplateOperatorArray[] = array( 'script' => 'lib/ezpdf/classes/ezpdf.php',
- 'class' => 'eZPDF',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZPDF',
'operator_names' => array( 'pdf' ) );
?>
Index: lib/eztemplate/classes/eztemplateautoload.php
===================================================================
--- lib/eztemplate/classes/eztemplateautoload.php (révision 25039)
+++ lib/eztemplate/classes/eztemplateautoload.php (copie de travail)
@@ -32,8 +32,7 @@
// Operator autoloading
$eZTemplateOperatorArray = array();
-$eZTemplateOperatorArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplatearrayoperator.php',
- 'class' => 'eZTemplateArrayOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZTemplateArrayOperator',
'operator_names' => array( 'array',
'hash',
'array_prepend', // DEPRECATED/OBSOLETE
@@ -62,42 +61,32 @@
-$eZTemplateOperatorArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplateexecuteoperator.php',
- 'class' => 'eZTemplateExecuteOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZTemplateExecuteOperator',
'operator_names' => array( 'fetch', 'fetch_alias' ) );
-$eZTemplateOperatorArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplatelocaleoperator.php',
- 'class' => 'eZTemplateLocaleOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZTemplateLocaleOperator',
'operator_names' => array( 'l10n', 'locale', 'datetime', 'currentdate', 'maketime', 'makedate', 'gettime' ) );
-$eZTemplateOperatorArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplateattributeoperator.php',
- 'class' => 'eZTemplateAttributeOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZTemplateAttributeOperator',
'operator_names' => array( 'attribute' ) );
-$eZTemplateOperatorArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplatenl2broperator.php',
- 'class' => 'eZTemplateNl2BrOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZTemplateNl2BrOperator',
'operator_names' => array( 'nl2br' ) );
-$eZTemplateOperatorArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplatetextoperator.php',
- 'class' => 'eZTemplateTextOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZTemplateTextOperator',
'operator_names' => array( 'concat', 'indent' ) );
-$eZTemplateOperatorArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplateunitoperator.php',
- 'class' => 'eZTemplateUnitOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZTemplateUnitOperator',
'operator_names' => array( 'si' ) );
-$eZTemplateOperatorArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplatelogicoperator.php',
- 'class' => 'eZTemplateLogicOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZTemplateLogicOperator',
'operator_names' => array( 'lt', 'gt', 'le',
'ge', 'eq', 'ne', 'null',
'not', 'true', 'false',
'or', 'and', 'choose' ) );
-$eZTemplateOperatorArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplatetypeoperator.php',
- 'class' => 'eZTemplateTypeOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZTemplateTypeOperator',
'operator_names' => array( 'is_array', 'is_boolean', 'is_integer',
'is_float', 'is_numeric', 'is_string',
'is_object', 'is_class', 'is_null',
'is_set', 'is_unset', 'get_type', 'get_class' ) );
-$eZTemplateOperatorArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplatecontroloperator.php',
- 'class' => 'eZTemplateControlOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZTemplateControlOperator',
'operator_names' => array( 'cond', 'first_set' ) );
-$eZTemplateOperatorArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplatearithmeticoperator.php',
- 'class' => 'eZTemplateArithmeticOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZTemplateArithmeticOperator',
'operator_names' => array( 'sum', 'sub', 'inc', 'dec',
'div', 'mod', 'mul',
'max', 'min',
@@ -107,15 +96,13 @@
'roman',
'rand' ) );
-$eZTemplateOperatorArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplateimageoperator.php',
- 'class' => 'eZTemplateImageOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZTemplateImageOperator',
'operator_names' => array( 'texttoimage',
'image',
'imagefile' ) );
-$eZTemplateOperatorArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplatestringoperator.php',
- 'class' => 'eZTemplateStringOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZTemplateStringOperator',
'operator_names' => array( 'upcase',
'downcase',
'count_words',
@@ -133,8 +120,7 @@
'shorten',
'pad') );
-$eZTemplateOperatorArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplatedigestoperator.php',
- 'class' => 'eZTemplateDigestOperator',
+$eZTemplateOperatorArray[] = array( 'class' => 'eZTemplateDigestOperator',
'operator_names' => array( 'crc32',
'md5',
'rot13', ) );
@@ -144,89 +130,72 @@
// Function autoloading
$eZTemplateFunctionArray = array();
-$eZTemplateFunctionArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplatesectionfunction.php',
- 'class' => 'eZTemplateSectionFunction',
+$eZTemplateFunctionArray[] = array( 'class' => 'eZTemplateSectionFunction',
'function_names' => array( 'section' ),
'function_attributes' => array( 'delimiter',
'section-exclude',
'section-include',
'section-else' ) );
-$eZTemplateFunctionArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplatedelimitfunction.php',
- 'class' => 'eZTemplateDelimitFunction',
+$eZTemplateFunctionArray[] = array( 'class' => 'eZTemplateDelimitFunction',
'function_names' => array( 'ldelim', 'rdelim' ) );
-$eZTemplateFunctionArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplateincludefunction.php',
- 'class' => 'eZTemplateIncludeFunction',
+$eZTemplateFunctionArray[] = array( 'class' => 'eZTemplateIncludeFunction',
'function_names' => array( 'include' ) );
-$eZTemplateFunctionArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplateswitchfunction.php',
- 'class' => 'eZTemplateSwitchFunction',
+$eZTemplateFunctionArray[] = array( 'class' => 'eZTemplateSwitchFunction',
'function_names' => array( 'switch' ),
'function_attributes' => array( 'case' ) );
-$eZTemplateFunctionArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplatesequencefunction.php',
- 'class' => 'eZTemplateSequenceFunction',
+$eZTemplateFunctionArray[] = array( 'class' => 'eZTemplateSequenceFunction',
'function_names' => array( 'sequence' ) );
-$eZTemplateFunctionArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplatesetfunction.php',
- 'class' => 'eZTemplateSetFunction',
+$eZTemplateFunctionArray[] = array( 'class' => 'eZTemplateSetFunction',
'function_names' => array( 'set', 'let', 'default' ) );
-$eZTemplateFunctionArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplateblockfunction.php',
- 'class' => 'eZTemplateBlockFunction',
+$eZTemplateFunctionArray[] = array( 'class' => 'eZTemplateBlockFunction',
'function_names' => array( 'set-block', 'append-block', 'run-once' ) );
-$eZTemplateFunctionArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplatedebugfunction.php',
- 'class' => 'eZTemplateDebugFunction',
+$eZTemplateFunctionArray[] = array( 'class' => 'eZTemplateDebugFunction',
'function_names' => array( 'debug-timing-point', 'debug-accumulator',
'debug-log',
'debug-trace' ) );
-$eZTemplateFunctionArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplatecachefunction.php',
- 'class' => 'eZTemplateCacheFunction',
+$eZTemplateFunctionArray[] = array( 'class' => 'eZTemplateCacheFunction',
'function_names' => array( 'cache-block' ) );
-$eZTemplateFunctionArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplatetoolbarfunction.php',
- 'class' => 'eZTemplateToolbarFunction',
+$eZTemplateFunctionArray[] = array( 'class' => 'eZTemplateToolbarFunction',
'function_names' => array( 'tool_bar' ) );
-$eZTemplateFunctionArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplatemenufunction.php',
- 'class' => 'eZTemplateMenuFunction',
+$eZTemplateFunctionArray[] = array( 'class' => 'eZTemplateMenuFunction',
'function_names' => array( 'menu' ) );
// should we add 'break', 'continue' and 'skip' to the {if} attribute list?
-$eZTemplateFunctionArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplateiffunction.php',
- 'class' => 'eZTemplateIfFunction',
+$eZTemplateFunctionArray[] = array( 'class' => 'eZTemplateIfFunction',
'function_names' => array( 'if' ),
'function_attributes' => array( 'elseif',
'else' ) );
-$eZTemplateFunctionArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplatewhilefunction.php',
- 'class' => 'eZTemplateWhileFunction',
+$eZTemplateFunctionArray[] = array( 'class' => 'eZTemplateWhileFunction',
'function_names' => array( 'while' ),
'function_attributes' => array( 'delimiter',
'break',
'continue',
'skip' ) );
-$eZTemplateFunctionArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplateforfunction.php',
- 'class' => 'eZTemplateForFunction',
+$eZTemplateFunctionArray[] = array( 'class' => 'eZTemplateForFunction',
'function_names' => array( 'for' ),
'function_attributes' => array( 'delimiter',
'break',
'continue',
'skip' ) );
-$eZTemplateFunctionArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplateforeachfunction.php',
- 'class' => 'eZTemplateForeachFunction',
+$eZTemplateFunctionArray[] = array( 'class' => 'eZTemplateForeachFunction',
'function_names' => array( 'foreach' ),
'function_attributes' => array( 'delimiter',
'break',
'continue',
'skip' ) );
-$eZTemplateFunctionArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplatedofunction.php',
- 'class' => 'eZTemplateDoFunction',
+$eZTemplateFunctionArray[] = array( 'class' => 'eZTemplateDoFunction',
'function_names' => array( 'do' ),
'function_attributes' => array( 'delimiter',
'break',
'continue',
'skip' ) );
-$eZTemplateFunctionArray[] = array( 'script' => 'lib/eztemplate/classes/eztemplatedeffunction.php',
- 'class' => 'eZTemplateDefFunction',
+$eZTemplateFunctionArray[] = array( 'class' => 'eZTemplateDefFunction',
'function_names' => array( 'def', 'undef' ) );
Index: lib/eztemplate/classes/eztemplate.php
===================================================================
--- lib/eztemplate/classes/eztemplate.php (révision 25039)
+++ lib/eztemplate/classes/eztemplate.php (copie de travail)
@@ -1753,8 +1753,7 @@
function registerAutoloadFunctions( $functionDefinition )
{
if ( ( ( isset( $functionDefinition['function'] ) or
- ( isset( $functionDefinition['script'] ) and
- isset( $functionDefinition['class'] ) ) ) and
+ isset( $functionDefinition['class'] ) ) and
( isset( $functionDefinition['function_names_function'] ) or
isset( $functionDefinition['function_names'] ) ) ) )
{
@@ -1793,16 +1792,17 @@
if ( isset( $functionDefinition['function'] ) )
{
$function = $functionDefinition['function'];
-// print( "loadAndRegisterFunction: $function<br/>" );
if ( function_exists( $function ) )
$functionObject = $function();
}
- else if ( isset( $functionDefinition['script'] ) )
+ else
{
- $script = $functionDefinition['script'];
+ if ( !class_exists( $functionDefinition['class'] )
+ && isset( $functionDefinition['script'] ) )
+ {
+ include_once( $functionDefinition['script'] );
+ }
$class = $functionDefinition['class'];
-// print( "loadAndRegisterFunction: $script<br/>" );
- include_once( $script );
if ( class_exists( $class ) )
$functionObject = new $class();
}
@@ -1879,8 +1879,7 @@
function registerAutoloadOperators( $operatorDefinition )
{
if ( ( ( isset( $operatorDefinition['function'] ) or
- ( isset( $operatorDefinition['script'] ) and
- isset( $operatorDefinition['class'] ) ) ) and
+ isset( $operatorDefinition['class'] ) ) and
( isset( $operatorDefinition['operator_names_function'] ) or
isset( $operatorDefinition['operator_names'] ) ) ) )
{
@@ -1911,16 +1910,16 @@
if ( isset( $operatorDefinition['function'] ) )
{
$function = $operatorDefinition['function'];
-// print( "loadAndRegisterOperator: $function<br/>" );
if ( function_exists( $function ) )
$operatorObject = $function();
}
- else if ( isset( $operatorDefinition['script'] ) )
+ else
{
- $script = $operatorDefinition['script'];
$class = $operatorDefinition['class'];
-// print( "loadAndRegisterOperator: $script<br/>" );
- include_once( $script );
+ if ( !class_exists( $class ) && isset( $operatorDefinition['script'] ) )
+ {
+ include_once( $operatorDefinition['script'] );
+ }
if ( class_exists( $class ) )
{
if ( isset( $operatorDefinition['class_parameter'] ) )
Attachments (1)
Links (1)
History
History (9)