eZContentOperationCollection::createFeedForNode PHP Method

createFeedForNode() public static method

Creates a RSS/ATOM Feed export for a node
Since: 4.3
public static createFeedForNode ( integer $nodeID )
$nodeID integer Node ID
    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);
    }

Usage Example

Esempio n. 1
0
     $user = eZUser::currentUser();
     $hasAccess = $user->hasAccessTo('rss', 'edit');
     if ($hasAccess['accessWord'] === 'no') {
         return $module->handleError(eZError::KERNEL_ACCESS_DENIED, 'kernel');
     }
     // Then make sure we have node id parameter
     if (!$http->hasPostVariable('NodeID')) {
         eZDebug::writeError('Create/ Remove NodeFeed: missing node ID parameter.', 'content-action-handler');
         return $module->handleError(eZError::KERNEL_NOT_AVAILABLE, 'kernel');
     }
     $nodeID = $http->postVariable('NodeID');
     if ($http->hasPostVariable('CreateNodeFeed')) {
         if (eZOperationHandler::operationIsAvailable('content_createnodefeed')) {
             $operationResult = eZOperationHandler::execute('content', 'createnodefeed', array('node_id' => $nodeID), null, true);
         } else {
             $operationResult = eZContentOperationCollection::createFeedForNode($nodeID);
         }
     } else {
         if (eZOperationHandler::operationIsAvailable('content_removenodefeed')) {
             $operationResult = eZOperationHandler::execute('content', 'removenodefeed', array('node_id' => $nodeID), null, true);
         } else {
             $operationResult = eZContentOperationCollection::removeFeedForNode($nodeID);
         }
     }
     if (!isset($operationResult['status']) || !$operationResult['status']) {
         return $module->handleError(eZError::KERNEL_NOT_AVAILABLE, 'kernel');
     }
     return $module->redirectToView('view', array('full', $nodeID));
 } else {
     // Check if there are any custom actions to handle
     $customActions = eZINI::instance('datatype.ini')->variable('ViewSettings', 'CustomActionMap');