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. */ @@ -146,6 +158,41 @@ /*! \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(); + $contentINI = eZINI::instance( 'content.ini' ); + foreach( array_unique( $contentINI->variable( 'EditSettings', 'ExtensionDirectories' ) ) as $extensionDirectory ) + { + $fileName = eZExtension::baseDirectory() . '/' . $extensionDirectory . '/content/' . $extensionDirectory . 'handler.php'; + if ( file_exists( $fileName ) ) + { + include_once( $fileName ); + $className = $extensionDirectory . 'Handler'; + $inputHandler = new $className(); + $validationResult = call_user_func_array( array( $inputHandler, 'validateInput' ), + array( $http, &$module, &$class, $object, &$version, $contentObjectAttributes, $editVersion, $editLanguage, $fromLanguage, $validationParameters ) ); + if ( $validationResult['is_valid'] == false ) + { + if ( $validationResult['warnings'] ) + $warnings = array_merge( $warnings, $validationResult['warnings'] ); + + $validated = false; + } + } + } + + return $result; + } + + /*! + \static Set custom HTTP post parameters which should trigger store acrtions. \param HTTP post parameter name 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 )}

[{currentdate()|l10n( shortdatetime )}] {'The draft could not be stored.'|i18n( 'design/admin/content/edit' )}

@@ -20,6 +20,15 @@ {/section} {/section} + + {section show=$validation.custom_rules} +

{'The following data is invalid according to the custom validation rules'|i18n( 'design/admin/content/edit' )}:

+ + {/section}
{section-else}