| [ Index ] |
|
Code source de Serendipity 1.2 |
1 <?php # $entry['feed_id']: functions_entries.inc.php 435 2005-08-25 12:36:39Z garvinhicking $ 2 # Copyright (c) 2003-2005, Jannis Hermanns (on behalf the Serendipity Developer Team) 3 # All rights reserved. See LICENSE file for licensing details 4 5 if (IN_serendipity !== true) { 6 die ("Don't hack!"); 7 } 8 9 if (defined('S9Y_FRAMEWORK_RSS')) { 10 return; 11 } 12 @define('S9Y_FRAMEWORK_RSS', true); 13 14 /** 15 * Parses entries to display them for RSS/Atom feeds to be passed on to generic Smarty templates 16 * 17 * This function searches for existing RSS feed template customizations. As long as a template 18 * with the same name as the $version variable exists, it will be emitted. 19 * 20 * @access public 21 * @see serendipity_fetchEntries(), rss.php 22 * @param array A superarray of entries to output 23 * @param string The version/type of a RSS/Atom feed to display (atom1_0, rss2_0 etc) 24 * @param boolean If true, this is a comments feed. If false, it's an Entry feed. 25 * @param boolean Indicates if this feed is a fulltext feed (true) or only excercpt (false) 26 * @param boolean Indicates if E-Mail addresses should be shown (true) or hidden (false) 27 * @return 28 */ 29 function serendipity_printEntries_rss(&$entries, $version, $comments = false, $fullFeed = false, $showMail = true) { 30 global $serendipity; 31 32 $options = array( 33 'version' => $version, 34 'comments' => $comments, 35 'fullFeed' => $fullFeed, 36 'showMail' => $showMail 37 ); 38 serendipity_plugin_api::hook_event('frontend_entries_rss', $entries, $options); 39 40 if (is_array($entries)) { 41 foreach ($entries as $key => $_entry) { 42 $entry = &$entries[$key]; 43 $entry['feed_id'] = (isset($entry['entryid']) && !empty($entry['entryid']) ? $entry['entryid'] : $entry['id']); 44 $entry['feed_guid'] = serendipity_rss_getguid($entry, $options['comments']); 45 $entry['feed_entryLink'] = serendipity_archiveURL($entry['feed_id'], $entry['title'], 'baseURL', true, array('timestamp' => $entry['timestamp'])); 46 if ($options['comments'] == true) { 47 // Display username as part of the title for easier feed-readability 48 if ($entry['type'] == 'TRACKBACK' && !empty($entry['ctitle'])) { 49 $entry['author'] .= ' - ' . $entry['ctitle']; 50 } 51 $entry['title'] = (!empty($entry['author']) ? $entry['author'] : ANONYMOUS) . ': ' . $entry['title']; 52 53 // No HTML allowed here: 54 $entry['body'] = strip_tags($entry['body']); 55 } 56 57 // Embed a link to extended entry, if existing 58 if ($options['fullFeed']) { 59 $entry['body'] .= ' ' . $entry['extended']; 60 $ext = ''; 61 } elseif ($entry['exflag']) { 62 $ext = '<br /><a href="' . $entry['feed_entryLink'] . '#extended">' . sprintf(VIEW_EXTENDED_ENTRY, htmlspecialchars($entry['title'])) . '</a>'; 63 } else { 64 $ext = ''; 65 } 66 67 $addData = array('from' => 'functions_entries:printEntries_rss'); 68 serendipity_plugin_api::hook_event('frontend_display', $entry, $addData); 69 // Do some relative -> absolute URI replacing magic. Replaces all HREF/SRC (<a>, <img>, ...) references to only the serendipitypath with the full baseURL URI 70 // garvin: Could impose some problems. Closely watch this one. 71 $entry['body'] = preg_replace('@(href|src)=("|\')(' . preg_quote($serendipity['serendipityHTTPPath']) . ')(.*)("|\')(.*)>@imsU', '\1=\2' . $serendipity['baseURL'] . '\4\2\6>', $entry['body']); 72 // jbalcorn: clean up body for XML compliance as best we can. 73 $entry['body'] = xhtml_cleanup($entry['body']); 74 75 // extract author information 76 if ((isset($entry['no_email']) && $entry['no_email']) || $options['showMail'] === FALSE) { 77 $entry['email'] = 'nospam@example.com'; // RSS Feeds need an E-Mail address! 78 } elseif (empty($entry['email'])) { 79 $query = "select email FROM {$serendipity['dbPrefix']}authors WHERE authorid = '". serendipity_db_escape_string($entry['authorid']) ."'"; 80 $results = serendipity_db_query($query); 81 $entry['email'] = $results[0]['email']; 82 } 83 84 if (!is_array($entry['categories'])) { 85 $entry['categories'] = array(0 => array( 86 'category_name' => $entry['category_name'], 87 'feed_category_name' => serendipity_utf8_encode(htmlspecialchars($entry['category_name'])), 88 'categoryURL' => serendipity_categoryURL($entry, 'baseURL') 89 )); 90 } else { 91 foreach($entry['categories'] AS $cid => $_cat) { 92 $cat = &$entry['categories'][$cid]; 93 $cat['categoryURL'] = serendipity_categoryURL($cat, 'baseURL'); 94 $cat['feed_category_name'] = serendipity_utf8_encode(htmlspecialchars($cat['category_name'])); 95 } 96 } 97 98 // Prepare variables 99 // 1. UTF8 encoding + htmlspecialchars. 100 $entry['feed_title'] = serendipity_utf8_encode(htmlspecialchars($entry['title'])); 101 $entry['feed_blogTitle'] = serendipity_utf8_encode(htmlspecialchars($serendipity['blogTitle'])); 102 $entry['feed_title'] = serendipity_utf8_encode(htmlspecialchars($entry['title'])); 103 $entry['feed_author'] = serendipity_utf8_encode(htmlspecialchars($entry['author'])); 104 $entry['feed_email'] = serendipity_utf8_encode(htmlspecialchars($entry['email'])); 105 106 // 2. gmdate 107 $entry['feed_timestamp'] = gmdate('Y-m-d\TH:i:s\Z', serendipity_serverOffsetHour($entry['timestamp'])); 108 $entry['feed_last_modified'] = gmdate('Y-m-d\TH:i:s\Z', serendipity_serverOffsetHour($entry['last_modified'])); 109 $entry['feed_timestamp_r'] = date('r', serendipity_serverOffsetHour($entry['timestamp'])); 110 111 // 3. UTF8 encoding 112 $entry['feed_body'] = serendipity_utf8_encode($entry['body']); 113 $entry['feed_ext'] = serendipity_utf8_encode($ext); 114 115 $entry_hook = 'frontend_display:unknown:per-entry'; 116 switch($version) { 117 case 'opml1.0': 118 $entry_hook = 'frontend_display:opml-1.0:per_entry'; 119 break; 120 121 case '0.91': 122 $entry_hook = 'frontend_display:rss-0.91:per_entry'; 123 break; 124 125 case '1.0': 126 $entry_hook = 'frontend_display:rss-1.0:per_entry'; 127 break; 128 129 case '2.0': 130 $entry_hook = 'frontend_display:rss-2.0:per_entry'; 131 break; 132 133 case 'atom0.3': 134 $entry_hook = 'frontend_display:atom-0.3:per_entry'; 135 break; 136 137 case 'atom1.0': 138 $entry_hook = 'frontend_display:atom-1.0:per_entry'; 139 break; 140 } 141 142 serendipity_plugin_api::hook_event($entry_hook, $entry); 143 $entry['per_entry_display_dat'] = $entry['display_dat']; 144 } 145 } 146 }
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
| Généré le : Sat Nov 24 09:00:37 2007 | par Balluche grâce à PHPXref 0.7 |
|