function _emfield_nodeapi_rss in Embedded Media Field 6
Same name and namespace in other branches
- 6.3 emfield.rss.inc \_emfield_nodeapi_rss()
- 6.3 deprecated/emfield-deprecated.rss.inc \_emfield_nodeapi_rss()
- 6.2 emfield.rss.inc \_emfield_nodeapi_rss()
@file This is the emfield.module's RSS settings file.
1 call to _emfield_nodeapi_rss()
- emfield_nodeapi in ./
emfield.module - Implementation of hook_nodeapi().
File
- ./
emfield.rss.inc, line 8 - This is the emfield.module's RSS settings file.
Code
function _emfield_nodeapi_rss(&$node, $op, $teaser = NULL, $page = NULL) {
$files = array();
$type = content_types($node->type);
foreach ($type['fields'] as $field) {
if (module_hook($field['type'], 'emfield_info')) {
$items = (array) $node->{$field['field_name']};
$rss_encl = module_invoke($field['type'], 'emfield_rss', $node, $items, $teaser);
// about here let extras change the data
// allow modules (such as emthumb, or a future emmetadata) to alter our data.
foreach (module_implements('emfield_field_extra') as $module) {
$args = array(
$op,
&$node,
$field,
&$items,
$teaser,
$page,
$module,
);
$ret = call_user_func_array($module . '_emfield_field_extra', $args);
if (is_array($rss_encl) && is_array($ret)) {
while (list($delta, ) = each($rss_encl)) {
if (is_array($ret[$delta]) && is_array($rss_encl[$delta])) {
$rss_encl[$delta] = $ret[$delta] + $rss_encl[$delta];
}
}
}
}
if (is_array($rss_encl)) {
// by now the delta doesn't matter we have enough data in the individual arrays
$files = array_merge($files, $rss_encl);
}
}
}
$enclosure = array();
$rss = array();
$rss[] = array(
'namespace' => array(
'xmlns:media' => 'http://search.yahoo.com/mrss/',
),
);
foreach ($files as $file) {
// RRS2 enclosure http://cyber.law.harvard.edu/rss/rss.html#ltenclosuregtSubelementOfLtitemgt
if (count($enclosure) < 1 && isset($file['filepath']) && isset($file['filesize']) && isset($file['filemime']) && $file['filepath'] != '' && $file['filesize'] > 0 && $file['filemime'] != '') {
$enclosure = array(
'key' => 'enclosure',
'attributes' => array(
'url' => check_url($file['filepath']),
'length' => (int) $file['filesize'],
'type' => check_plain($file['filemime']),
),
);
}
// MRSS media:content http://search.yahoo.com/mrss
$media = array();
if (isset($file['filepath']) && $file['filepath'] != '') {
// actually optional if media:player were to be specified
$media['url'] = check_url($file['filepath']);
// the rest of these are optional
if (isset($file['filesize']) && $file['filesize'] > 1) {
$media['fileSize'] = (int) $file['filesize'];
}
if ($file['filemime']) {
$media['type'] = check_plain($file['filemime']);
}
if (isset($file['medium']) && $file['medium'] != '') {
$media['medium'] = check_plain($file['medium']);
}
// media:isDefault, may be good for multiple CCK fields - ignored for now
if (isset($file['expression']) && $file['expression'] != '') {
$media['expression'] = check_plain($file['expression']);
}
if (isset($file['bitrate']) && $file['bitrate'] > 0) {
$media['bitrate'] = (int) $file['bitrate'];
}
if (isset($file['framerate']) && $file['framerate'] > 0) {
$media['framerate'] = (int) $file['framerate'];
}
if (isset($file['sampling_rate']) && $file['sampling_rate'] > 0) {
$media['samplingrate'] = (int) $file['sampling_rate'];
}
if (isset($file['channels']) && $file['channels'] > 0) {
$media['channels'] = check_plain($file['channels']);
}
if (isset($file['duration']) && $file['duration'] > 0) {
$media['duration'] = (int) $file['duration'];
}
if (isset($file['width']) && isset($file['height']) && $file['width'] > 0 && $file['height'] > 0) {
$media['width'] = (int) $file['width'];
$media['height'] = (int) $file['height'];
}
// media:lang will be interesting
$mrss_thumbnail = array();
if (is_array($file['thumbnail']) && $file['thumbnail']['filepath'] != '') {
$thumbnail = array();
$thumbnail['url'] = check_url($file['thumbnail']['filepath']);
if (isset($file['thumbnail']['height']) && $file['thumbnail']['height'] > 0) {
$thumbnail['height'] = (int) $file['thumbnail']['height'];
}
if (isset($file['thumbnail']['width']) && $file['thumbnail']['width'] > 0) {
$thumbnail['width'] = (int) $file['thumbnail']['width'];
}
if (isset($file['thumbnail']['time']) && $file['thumbnail']['time'] > 0) {
$thumbnail['time'] = (int) $file['thumbnail']['time'];
}
$mrss_thumbnail = array(
'key' => 'media:thumbnail',
'attributes' => $thumbnail,
);
}
$rss[] = array(
'key' => 'media:content',
'attributes' => $media,
'value' => array(
$mrss_thumbnail,
),
);
}
}
$rss[] = $enclosure;
return $rss;
}