public static function createFeedForNode($nodeID)
{
$hasExport = eZRSSFunctionCollection::hasExportByNode($nodeID);
if (isset($hasExport['result']) && $hasExport['result']) {
eZDebug::writeError('There is already a rss/atom export feed for this node: ' . $nodeID, __METHOD__);
return array('status' => false);
}
$node = eZContentObjectTreeNode::fetch($nodeID);
$currentClassIdentifier = $node->attribute('class_identifier');
$config = eZINI::instance('site.ini');
$feedItemClasses = $config->variable('RSSSettings', 'DefaultFeedItemClasses');
if (!$feedItemClasses || !isset($feedItemClasses[$currentClassIdentifier])) {
eZDebug::writeError("EnableRSS: content class {$currentClassIdentifier} is not defined in site.ini[RSSSettings]DefaultFeedItemClasses[<class_id>].", __METHOD__);
return array('status' => false);
}
$object = $node->object();
$objectID = $object->attribute('id');
$currentUserID = eZUser::currentUserID();
$rssExportItems = array();
$db = eZDB::instance();
$db->begin();
$rssExport = eZRSSExport::create($currentUserID);
$rssExport->setAttribute('access_url', 'rss_feed_' . $nodeID);
$rssExport->setAttribute('node_id', $nodeID);
$rssExport->setAttribute('main_node_only', '1');
$rssExport->setAttribute('number_of_objects', $config->variable('RSSSettings', 'NumberOfObjectsDefault'));
$rssExport->setAttribute('rss_version', $config->variable('RSSSettings', 'DefaultVersion'));
$rssExport->setAttribute('status', eZRSSExport::STATUS_VALID);
$rssExport->setAttribute('title', $object->name());
$rssExport->store();
$rssExportID = $rssExport->attribute('id');
foreach (explode(';', $feedItemClasses[$currentClassIdentifier]) as $classIdentifier) {
$iniSection = 'RSSSettings_' . $classIdentifier;
if ($config->hasVariable($iniSection, 'FeedObjectAttributeMap')) {
$feedObjectAttributeMap = $config->variable($iniSection, 'FeedObjectAttributeMap');
$subNodesMap = $config->hasVariable($iniSection, 'Subnodes') ? $config->variable($iniSection, 'Subnodes') : array();
$rssExportItem = eZRSSExportItem::create($rssExportID);
$rssExportItem->setAttribute('class_id', eZContentObjectTreeNode::classIDByIdentifier($classIdentifier));
$rssExportItem->setAttribute('title', $feedObjectAttributeMap['title']);
if (isset($feedObjectAttributeMap['description'])) {
$rssExportItem->setAttribute('description', $feedObjectAttributeMap['description']);
}
if (isset($feedObjectAttributeMap['category'])) {
$rssExportItem->setAttribute('category', $feedObjectAttributeMap['category']);
}
if (isset($feedObjectAttributeMap['enclosure'])) {
$rssExportItem->setAttribute('enclosure', $feedObjectAttributeMap['enclosure']);
}
$rssExportItem->setAttribute('source_node_id', $nodeID);
$rssExportItem->setAttribute('status', eZRSSExport::STATUS_VALID);
$rssExportItem->setAttribute('subnodes', isset($subNodesMap[$currentClassIdentifier]) && $subNodesMap[$currentClassIdentifier] === 'true');
$rssExportItem->store();
} else {
eZDebug::writeError("site.ini[{$iniSection}]Source[] setting is not defined.", __METHOD__);
}
}
$db->commit();
eZContentCacheManager::clearContentCacheIfNeeded($objectID);
return array('status' => true);
}