static function initialize() { $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'; $storeActionList = call_user_func_array(array($className, 'storeActionList'), array()); foreach ($storeActionList as $storeAction) { eZContentObjectEditHandler::addStoreAction($storeAction); } } else { eZDebug::writeError('Cound not find content object edit handler ( defined in content.ini ) : ' . $fileName); } } }
function publishObjectExtensionHandler($contentObjectID, $contentObjectVersion) { eZContentObjectEditHandler::executePublish($contentObjectID, $contentObjectVersion); }
$validatedAttributes = $validationResult['validated-attributes']; $inputValidated = $validationResult['input-validated']; // Fixup input 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 ); // If no redirection uri we assume it's content/edit if ( !isset( $currentRedirectionURI ) ) $currentRedirectionURI = $Module->redirectionURI( 'content', 'edit', array( $ObjectID, $EditVersion, $EditLanguage ) ); $fetchResult = $object->fetchInput( $contentObjectAttributes, $attributeDataBaseName, $customActionAttributeArray, array( 'module' => $Module, 'current-redirection-uri' => $currentRedirectionURI ) ); $attributeInputMap = $fetchResult['attribute-input-map']; if ( $Module->isCurrentAction( 'Discard' ) ) $inputValidated = true; // If an input is invalid, prevent from redirection that might be set by a custom action if ( !$inputValidated && $Module->exitStatus() == eZModule::STATUS_REDIRECT )
/** * Save the draft with the provided POST fields like a click on the Store * draft button except that a validation issue on an attribute does not * prevent the others attributes to be stored. * * @param array $args array( content object id, version number, locale code ) * @return array */ public static function saveDraft($args) { // force text/plain to make IE happy... header('Content-Type: text/plain', true); $result = array('unvalidated-attributes' => array(), 'stored-attributes' => array(), 'valid' => true); $http = eZHTTPTool::instance(); // workaround to the eZContentObjectEditHandler API that needs a Module $Module = false; if (count($args) != 3) { throw new InvalidArgumentException(ezpI18n::tr('extension/ezautosave/autosave', 'This action requires 3 parameters')); } if ($_SERVER['REQUEST_METHOD'] !== 'POST') { throw new InvalidArgumentException(ezpI18n::tr('extension/ezautosave/autosave', "A POST request is expected")); } if (count($_POST) === 0) { throw new InvalidArgumentException(ezpI18n::tr('extension/ezautosave/autosave', "No POST data found, it's probably because you tried to upload a too big file")); } $contentObject = eZContentObject::fetch((int) $args[0]); if (!$contentObject instanceof eZContentObject) { throw new InvalidArgumentException(ezpI18n::tr('extension/ezautosave/autosave', 'Unable to load the content #%objectid', null, array('%objectid' => (int) $args[0]))); } if ($contentObject->attribute('status') == eZContentObject::STATUS_ARCHIVED) { throw new InvalidArgumentException(ezpI18n::tr('extension/ezautosave/autosave', 'The content #%objectid is archived', null, array('%objectid' => $contentObject->attribute('id')))); } $version = $contentObject->version((int) $args[1]); if (!$version instanceof eZContentObjectVersion) { throw new InvalidArgumentException(ezpI18n::tr('extension/ezautosave/autosave', 'Unable to load version #%versionr of content #%objectid', null, array('%versionr' => (int) $args[1], '%objectid' => $contentObject->attribute('id')))); } if ($version->attribute('status') != eZContentObjectVersion::STATUS_DRAFT && $version->attribute('status') != eZContentObjectVersion::STATUS_INTERNAL_DRAFT) { throw new RuntimeException(ezpI18n::tr('extension/ezautosave/autosave', "Version #%versionr of content #%objectid is not a draft", null, array('%versionr' => $version->attribute('version'), '%objectid' => $version->attribute('contentobject_id')))); } if ($version->attribute('creator_id') != eZUser::currentUserID()) { throw new RuntimeException(ezpI18n::tr('extension/ezautosave/autosave', "You're not allowed to store a version that is not yours")); } $editLanguage = $args[2]; $language = eZContentLanguage::fetchByLocale($editLanguage); if (!$language instanceof eZContentLanguage) { throw new InvalidArgumentException(ezpI18n::tr('extension/ezautosave/autosave', "Unable to load the language '%localeCode'", null, array('%localeCode' => $editLanguage))); } $class = eZContentClass::fetch($contentObject->attribute('contentclass_id')); $contentObjectAttributes = $version->contentObjectAttributes($editLanguage); $validationParameters = array('skip-isRequired' => true); $attributeDataBaseName = 'ContentObjectAttribute'; $validationResult = $contentObject->validateInput($contentObjectAttributes, $attributeDataBaseName, false, $validationParameters); if ($validationResult['require-fixup']) { $contentObject->fixupInput($contentObjectAttributes, $attributeDataBaseName); } $customValidationResult = eZContentObjectEditHandler::validateInputHandlers($Module, $class, $contentObject, $version, $contentObjectAttributes, $version->attribute('version'), $editLanguage, false, $validationParameters); $result['valid'] = $validationResult['input-validated'] && $customValidationResult['validated']; $invalidAttributeIds = array(); foreach ($validationResult['unvalidated-attributes'] as $info) { $invalidAttributeIds[$info['id']] = true; $result['unvalidated-attributes'][] = $info; } eZContentObjectEditHandler::executeInputHandlers($Module, $class, $contentObject, $version, $contentObjectAttributes, $version->attribute('version'), $editLanguage, false); $customActionAttributeArray = array(); $fetchResult = $contentObject->fetchInput($contentObjectAttributes, $attributeDataBaseName, $customActionAttributeArray, array()); $version->setAttribute('modified', time()); $status = eZContentObjectVersion::STATUS_INTERNAL_DRAFT; if ($http->hasPostVariable('StoreExitButton')) { $status = eZContentObjectVersion::STATUS_DRAFT; } $version->setAttribute('status', $status); $attributesToStore = array(); foreach ($fetchResult['attribute-input-map'] as $id => $value) { if (!isset($invalidAttributeIds[$id])) { $result['stored-attributes'][$id] = $id; $attributesToStore[$id] = true; } } $db = eZDB::instance(); $db->begin(); $version->store(); $contentObject->storeInput($contentObjectAttributes, $attributesToStore); $contentObject->setName($class->contentObjectName($contentObject, $version->attribute('version'), $editLanguage), $version->attribute('version'), $editLanguage); $db->commit(); $time = eZLocale::instance()->formatShortTime($version->attribute('modified')); $result['message_success'] = ezpI18n::tr('extension/ezautosave', "Draft saved at %time", null, array('%time' => $time)); $result['message_ago'] = ezpI18n::tr('extension/ezautosave', "(%min minutes ago)", null, array('%min' => 0)); $result['timestamp'] = $version->attribute('modified'); return $result; }