public function execute( $process, $event ) { $parameters = $process->attribute( 'parameter_list' ); $object = eZContentObject::fetch( $parameters['object_id'] ); $attribute = false; $dataMap = $object->attribute( 'data_map' ); foreach ( $dataMap as $attr ) { $dataType = $attr->attribute( 'data_type_string' ); if ( $dataType == 'ezfeatureselect' ) { $attribute = $attr; continue; } } // if object does not have a featureselect attribute. if ( $attribute == false ) { return eZWorkflowType::STATUS_ACCEPTED; } // if we have not the first version published, we only need to enable/disable features if ( $object->attribute( 'modified' ) != $object->attribute( 'published' ) ) { $attributeContent = $attribute->attribute( 'content' ); $installedFeatureList = $attributeContent['installed_feature_list']; $availibleFeatureList = $attributeContent['availible_feature_list']; $mainNodeID = $object->attribute( 'main_node_id' ); foreach( $availibleFeatureList as $feature => $featureName ) { $featureObject = eZContentObject::fetchByRemoteID( $mainNodeID . '_' . $feature ); if( !$featureObject ) { eZDebug::writeError( "Cannot find feature object", "eZXMLPublisherType::execute" ); continue; } $featureNode = $featureObject->attribute( 'main_node' ); if( !$featureNode ) { eZDebug::writeError( "Cannot find feature node", "eZXMLPublisherType::execute" ); continue; } if ( in_array( $feature, $installedFeatureList ) ) { if ( $featureNode->attribute( 'is_hidden' ) ) { eZContentObjectTreeNode::unhideSubTree( $featureNode ); } $featureObject = $featureNode->attribute( 'object' ); $list = $featureObject->reverseRelatedObjectList( false, 0, false, array( 'AllRelations' => eZContentObject::RELATION_ATTRIBUTE, 'IgnoreVisibility' => true ) ); if ( is_array( $list ) ) { foreach ( $list as $reverseRelatedContentObject ) { $reverseRelatedMainNode = $reverseRelatedContentObject->attribute( 'main_node' ); eZContentObjectTreeNode::unhideSubTree( $reverseRelatedMainNode ); } } } elseif ( !in_array( $feature, $installedFeatureList ) && !$featureNode->attribute( 'is_hidden' ) ) { if ( !$featureNode->attribute( 'is_hidden' ) ) { eZContentObjectTreeNode::hideSubTree( $featureNode ); } $featureObject = $featureNode->attribute( 'object' ); $list = $featureObject->reverseRelatedObjectList( false, 0, false, array( 'AllRelations' => eZContentObject::RELATION_ATTRIBUTE, 'IgnoreVisibility' => true ) ); if ( is_array( $list ) ) { foreach ( $list as $reverseRelatedContentObject ) { $reverseRelatedMainNode = $reverseRelatedContentObject->attribute( 'main_node' ); eZContentObjectTreeNode::hideSubTree( $reverseRelatedMainNode ); } } } } } // defer to cron, this is safer because we might do a lot of things here include_once( 'lib/ezutils/classes/ezsys.php' ); if ( eZSys::isShellExecution() == false ) { return eZWorkflowType::STATUS_DEFERRED_TO_CRON_REPEAT; } // if we have the first version published, we need to set up the related things. if ( $object->attribute( 'modified' ) == $object->attribute( 'published' ) ) { $classAttribute = $attribute->attribute( 'contentclass_attribute' ); $templateName = $classAttribute->attribute( 'data_text1' ); $attributeContent = $attribute->attribute( 'content' ); $installedFeatureList = $attributeContent['installed_feature_list']; $availibleFeatureList = $attributeContent['availible_feature_list']; if( $templateName == '' ) { return eZWorkflowType::STATUS_ACCEPTED; } $template = 'design:' . $templateName; $tpl = eZTemplate::factory(); $tpl->setVariable( 'tpl_info', false ); $content = $tpl->fetch( $template ); $tpl->setVariable( 'install_features', $installedFeatureList ); $userID = $object->attribute( 'owner_id' ); $tpl->setVariable( 'owner_object_id', $userID ); $nodeID = $object->attribute( 'main_node_id' ); $tpl->setVariable( 'main_node_id', $nodeID ); $content = $tpl->fetch( $template ); $xml = $tpl->variable( "xml_data" ); $doc = new DOMDocument( '1.0', 'utf-8' ); if( !$doc->loadXML( $xml ) ) { eZDebug::writeError( "Cannot parse XML", "eZXMLPublisherType::execute" ); return eZWorkflowType::STATUS_WORKFLOW_CANCELLED; } $xmlInstaller = new eZXMLInstaller( $doc ); if (! $xmlInstaller->proccessXML() ) { eZDebug::writeError( "Cannot proccess XML", "eZXMLPublisherType::execute" ); return eZWorkflowType::STATUS_WORKFLOW_CANCELLED; } return eZWorkflowType::STATUS_ACCEPTED; } // otherwise we need only to enable, disable the selected features. else { } return eZWorkflowType::STATUS_ACCEPTED; }
$cli->error( "Need at least one argument." ); $script->shutdown( 1 ); } $cli->output( "Trying to install data from XML ..." ); if ( $xml == '' ) { $cli->error( "No XML data available." ); $script->shutdown( 1 ); } $dom = new DOMDocument( '1.0', 'utf-8' ); if ( !$dom->loadXML( $xml ) ) { $cli->error( "Failed to load XML." ); $script->shutdown( 1 ); } $xmlInstaller = new eZXMLInstaller( $dom ); if ( !$xmlInstaller->proccessXML() ) { $cli->error( "Errors while proccessing XML." ); $script->shutdown( 1 ); } $cli->output( "Finished." ); $script->shutdown(); ?>