Index: contributions/modules/atom/atom.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/atom/atom.module,v
retrieving revision 1.24
diff -u -p -r1.24 atom.module
--- contributions/modules/atom/atom.module 15 Feb 2008 20:30:44 -0000 1.24
+++ contributions/modules/atom/atom.module 17 Feb 2008 12:22:06 -0000
@@ -202,6 +202,8 @@ function atom_taxonomy_feed($str_tids) {
* @param array feed information
*/
function _atom_print_feed($nodes, $feed_info) {
+ _atom_contrib_load();
+ $feed_info['extra_ns'] = _atom_contrib_get_ns();
$output = '';
$last_mod = 0;
while ($node = db_fetch_object($nodes)) {
@@ -221,6 +223,9 @@ function _atom_print_feed($nodes, $feed_
// Allow modules to change $node->teaser before viewing.
node_invoke_nodeapi($item, 'view', true, false);
+ // Allow modules to change $node, or add elements,
+ // specifically for an atom feed.
+ $extra = module_invoke_all('atom_feed', $item);
$output .= " \n";
$output .= ' '. check_plain(strip_tags($item->title)) ."\n";
@@ -262,6 +267,12 @@ function _atom_print_feed($nodes, $feed_
$output .= variable_get('atom_ad_location', 'off') == 'append' ? str_replace('%link', urlencode($link), str_replace('%id', $node->nid, variable_get('atom_ad_code', ''))) : '';
$output .= " ]]>\n";
}
+
+ // Add any extended atom_feed items from modules
+ if (count($extra)>0) {
+ $output .= format_xml_elements($extra);
+ }
+
$output .= " \n";
}
@@ -289,7 +300,7 @@ function theme_atom_feed($feed_info, $la
drupal_set_header('Content-Type: application/xml');
$feed = ''."\n";
- $feed .= ''."\n";
+ $feed .= '\n";
$feed .= ' '. $feed_info['title'] ."\n";
$feed .= $feed_info['subtitle'] == '' ? '' : ' '. $feed_info['subtitle'] ."\n";
$feed .= ' '."\n";
@@ -303,19 +314,12 @@ function theme_atom_feed($feed_info, $la
}
/**
- * @return string
- */
-function _atom_timestamp2w3dtf($timestamp) {
- $tz = date("O", $timestamp);
- return date("Y-m-d", $timestamp) .'T'. date("H:i:s", $timestamp) . substr($tz, 0, 3) .':'. substr($tz, 3, 2);
-}
-
-/**
* Module configuration settings
*
* @return array of settings form options or deny access
*/
function atom_admin_settings() {
+ _atom_contrib_load();
$form = array();
$form['atom_feed_options'] = array(
@@ -366,5 +370,48 @@ function atom_admin_settings() {
'#default_value' => variable_get('atom_ad_code', ''),
'#cols' => 40, '#rows' => 10
);
+ $extra = module_invoke_all('atom_admin_settings');
+ if (count($extra)>0) {
+ $form['extra'] = $extra;
+ $form['extra']['#type'] = 'fieldset';
+ $form['extra']['#title'] = t('Extra module settings');
+ }
+
return system_settings_form($form);
}
+
+/**
+ * @return string
+ */
+function _atom_timestamp2w3dtf($timestamp) {
+ $tz = date("O", $timestamp);
+ return date("Y-m-d", $timestamp) .'T'. date("H:i:s", $timestamp) . substr($tz, 0, 3) .':'. substr($tz, 3, 2);
+}
+
+/**
+ * Load contrib module element handlers.
+ */
+function _atom_contrib_load() {
+ static $loaded = FALSE;
+ if (!$loaded) {
+ // Load all atom contrib module elements handlers from ./contrib
+ $path = drupal_get_path('module', 'atom') .'/contrib';
+ $files = drupal_system_listing('.*\.inc$', $path, 'name', 0);
+ foreach ($files as $file) {
+ require_once("./$file->filename");
+ }
+ // Rebuild cache.
+ module_implements('', FALSE, TRUE);
+ }
+ $loaded = TRUE;
+}
+
+/**
+ * @return string any additional namespaces used by contrib modules.
+ */
+function _atom_contrib_get_ns() {
+ _atom_contrib_load();
+
+ $ns_array = module_invoke_all('atom_ns');
+ return count($ns_array) > 0 ? "\n ". implode("\n ", $ns_array) : '';
+}