Index: kernel/classes/ezcontentobjectedithandler.php
===================================================================
--- kernel/classes/ezcontentobjectedithandler.php (wersja 21835)
+++ kernel/classes/ezcontentobjectedithandler.php (kopia robocza)
@@ -75,6 +75,18 @@
}
/*!
+ \abstract
+
+ Override this function in the extension to handle input validation.
+ */
+ function validateInput( $http, &$module, &$class, $object, &$version, $contentObjectAttributes, $editVersion, $editLanguage, $fromLanguage, $validationParameters )
+ {
+ $result = array( 'is_valid' => true, 'warnings' => array() );
+
+ return $result;
+ }
+
+ /*!
\static
Initialize all extension input handler.
*/
@@ -103,11 +115,11 @@
/*!
\static
- Calls all extension object edit input handler, and executes this the fetchInput function
+ Execute handler $functionName function with given $params parameters
*/
- static function executeInputHandlers( &$module, &$class, $object, &$version, $contentObjectAttributes, $editVersion, $editLanguage, $fromLanguage )
+ static function executeHandlerFunction( $functionName, $params )
{
- $http = eZHTTPTool::instance();
+ $result = array();
$contentINI = eZINI::instance( 'content.ini' );
foreach( array_unique( $contentINI->variable( 'EditSettings', 'ExtensionDirectories' ) ) as $extensionDirectory )
{
@@ -117,31 +129,88 @@
include_once( $fileName );
$className = $extensionDirectory . 'Handler';
$inputHandler = new $className();
- call_user_func_array( array( $inputHandler, 'fetchInput' ),
- array( $http, &$module, &$class, $object, &$version, $contentObjectAttributes, $editVersion, $editLanguage, $fromLanguage ) );
+ $functionResult = call_user_func_array( array( $inputHandler, $functionName ), $params );
+ $result[] = array( 'handler' => $className,
+ 'function' => array( 'name' => $functionName, 'value' => $functionResult ) );
}
}
+
+ return $result;
}
/*!
\static
+ Calls all extension object edit input handler, and executes this the fetchInput function
+ */
+ static function executeInputHandlers( &$module, &$class, $object, &$version, $contentObjectAttributes, $editVersion, $editLanguage, $fromLanguage )
+ {
+ $http = eZHTTPTool::instance();
+ $functionName = 'fetchInput';
+ $params = array( $http,
+ &$module,
+ &$class,
+ $object,
+ &$version,
+ $contentObjectAttributes,
+ $editVersion,
+ $editLanguage,
+ $fromLanguage );
+
+ self::executeHandlerFunction( $functionName, $params );
+ }
+
+ /*!
+ \static
Calls all publish functions.
*/
static function executePublish( $contentObjectID, $contentObjectVersion )
{
- $contentINI = eZINI::instance( 'content.ini' );
- foreach( array_unique( $contentINI->variable( 'EditSettings', 'ExtensionDirectories' ) ) as $extensionDirectory )
+ $functionName = 'publish';
+ $params = array( $contentObjectID, $contentObjectVersion );
+
+ self::executeHandlerFunction( $functionName, $params );
+ }
+
+ /*!
+ \static
+ Calls all input validation functions.
+ */
+ static function validateInputHandlers( &$module, &$class, $object, &$version, $contentObjectAttributes, $editVersion, $editLanguage, $fromLanguage, $validationParameters )
+ {
+ $result = array( 'validated' => true, 'warnings' => array() );
+ $validated =& $result['validated'];
+ $warnings =& $result['warnings'];
+
+ $http = eZHTTPTool::instance();
+
+ $functionName = 'validateInput';
+ $params = array( $http,
+ &$module,
+ &$class,
+ $object,
+ &$version,
+ $contentObjectAttributes,
+ $editVersion,
+ $editLanguage,
+ $fromLanguage,
+ $validationParameters );
+
+ $validationResults = self::executeHandlerFunction( $functionName, $params );
+
+ foreach( $validationResults as $validationResult )
{
- $fileName = eZExtension::baseDirectory() . '/' . $extensionDirectory . '/content/' . $extensionDirectory . 'handler.php';
- if ( file_exists( $fileName ) )
+ $value = $validationResult['function']['value'];
+
+ if ( $value['is_valid'] == false )
{
- include_once( $fileName );
- $className = $extensionDirectory . 'Handler';
- $inputHandler = new $className();
- call_user_func_array( array( $inputHandler, 'publish' ),
- array( $contentObjectID, $contentObjectVersion ) );
+ if ( $value['warnings'] )
+ $warnings = array_merge( $warnings, $value['warnings'] );
+
+ $validated = false;
}
}
+
+ return $result;
}
/*!
Index: kernel/content/attribute_edit.php
===================================================================
--- kernel/content/attribute_edit.php (wersja 21835)
+++ kernel/content/attribute_edit.php (kopia robocza)
@@ -235,6 +235,13 @@
if ( $http->hasPostVariable( 'HasObjectInput' ) )
$hasObjectInput = $http->postVariable( 'HasObjectInput' );
+$contentObjectDataMap = array();
+foreach ( $contentObjectAttributes as $contentObjectAttribute )
+{
+ $contentObjectAttributeIdentifier = $contentObjectAttribute->attribute( 'contentclass_attribute_identifier' );
+ $contentObjectDataMap[$contentObjectAttributeIdentifier] = $contentObjectAttribute;
+}
+
// These variables will be modified according to validation
$inputValidated = true;
$requireFixup = false;
@@ -261,6 +268,13 @@
if ( $validationResult['require-fixup'] )
$object->fixupInput( $contentObjectAttributes, $attributeDataBaseName );
+ $validation['custom_rules'] = array();
+ $customValidationResult = eZContentObjectEditHandler::validateInputHandlers( $Module, $class, $object, $version, $contentObjectAttributes, $EditVersion, $EditLanguage, $FromLanguage, $validationParameters );
+ if ( $customValidationResult['warnings'] )
+ $validation['custom_rules'] = $customValidationResult['warnings'];
+
+ $inputValidated = ( $inputValidated && $customValidationResult['validated'] );
+
// Check extension input handlers
eZContentObjectEditHandler::executeInputHandlers( $Module, $class, $object, $version, $contentObjectAttributes, $EditVersion, $EditLanguage, $FromLanguage );
@@ -280,6 +294,7 @@
if ( !$inputValidated && $Module->exitStatus() == eZModule::STATUS_REDIRECT )
$Module->setExitStatus( eZModule::STATUS_OK );
+ $db = eZDB::instance();
if ( $inputValidated and count( $attributeInputMap ) > 0 )
{
if ( $Module->runHooks( 'pre_commit', array( $class, $object, $version, $contentObjectAttributes, $EditVersion, $EditLanguage, $FromLanguage ) ) )
@@ -287,7 +302,6 @@
$version->setAttribute( 'modified', time() );
$version->setAttribute( 'status', eZContentObjectVersion::STATUS_DRAFT );
- $db = eZDB::instance();
$db->begin();
$version->store();
// print( "storing
" );
@@ -432,13 +446,6 @@
eZSection::setGlobalID( $object->attribute( 'section_id' ) );
}
-$contentObjectDataMap = array();
-foreach ( $contentObjectAttributes as $contentObjectAttribute )
-{
- $contentObjectAttributeIdentifier = $contentObjectAttribute->attribute( 'contentclass_attribute_identifier' );
- $contentObjectDataMap[$contentObjectAttributeIdentifier] = $contentObjectAttribute;
-}
-
$object->setCurrentLanguage( $EditLanguage );
$tpl->setVariable( 'edit_version', $EditVersion );
Index: design/admin/templates/content/edit_validation.tpl
===================================================================
--- design/admin/templates/content/edit_validation.tpl (wersja 21835)
+++ design/admin/templates/content/edit_validation.tpl (kopia robocza)
@@ -1,5 +1,5 @@
{section show=$validation.processed}
- {section show=or( $validation.attributes, $validation.placement )}
+ {section show=or( $validation.attributes, $validation.placement, $validation.custom_rules )}