From 7a98db204d43c43f79d2b8897adb5f0536b37f28 Mon Sep 17 00:00:00 2001 From: "joe.lapp" Date: Fri, 16 Sep 2005 22:38:52 +0200 Subject: fixed author/email handling in RSS/Atom feeds 1) Now reports full user name for logged in users 2) Reports actual email when not mail guarding; otherwise it's "user@ip" 3) RSS 1.0 (default) format is now name (email) 4) RSS 0.91/RSS 2.0 format is now email (name) 5) Atom format is now nameemail 6) When anonymous, all RSS formats just reports "user@ip" in element 7) When anonymous, Atom just reports user@ip darcs-hash:20050916203852-36b45-ed5310a65360811bdd153ba12b0e925675bdd7a4.gz --- feed.php | 20 +++++++++++++---- inc/feedcreator.class.php | 55 ++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 63 insertions(+), 12 deletions(-) diff --git a/feed.php b/feed.php index 0e057eed3..9454a9b95 100644 --- a/feed.php +++ b/feed.php @@ -91,6 +91,7 @@ function rssRecentChanges(&$rss,$num,$ltype,$ns){ global $conf; if(!$num) $num = $conf['recent']; + $guardmail = ($conf['mailguard'] != '' && $conf['mailguard'] != 'none'); $recents = getRecents(0,$num,false,$ns); @@ -137,12 +138,23 @@ function rssRecentChanges(&$rss,$num,$ltype,$ns){ if(strpos($id,':')!==false){ $item->category = substr($id,0,strrpos($id,':')); } - if($recents[$id]['user']){ - $item->author = $recents[$id]['user'].'@'; + + $user = null; + $user = @$recents[$id]['user']; // the @ spares time repeating lookup + $item->author = ''; + + if($user){ + $userInfo = auth_getUserData($user); + $item->author = $userInfo['name']; + if($guardmail) { + //cannot obfuscate because some RSS readers may check validity + $item->authorEmail = $user.'@'.$recents[$id]['ip']; + }else{ + $item->authorEmail = $userInfo['mail']; + } }else{ - $item->author = 'anonymous@'; + $item->authorEmail = 'anonymous@'.$recents[$id]['ip']; } - $item->author .= $recents[$id]['ip']; $rss->addItem($item); } } diff --git a/inc/feedcreator.class.php b/inc/feedcreator.class.php index 59f80cf36..09cecb613 100644 --- a/inc/feedcreator.class.php +++ b/inc/feedcreator.class.php @@ -685,7 +685,6 @@ class FeedCreator extends HtmlDescribable { echo "
Error creating feed file, please check write permissions.
"; } } - } @@ -846,8 +845,9 @@ class RSSCreator10 extends FeedCreator { if ($this->items[$i]->source!="") { $feed.= " ".htmlspecialchars($this->items[$i]->source)."\n"; } - if ($this->items[$i]->author!="") { - $feed.= " ".htmlspecialchars($this->items[$i]->author)."\n"; + $creator = $this->getAuthor($this->items[$i]->author, $this->items[$i]->authorEmail); + if ($creator) { + $feed.= " ".htmlspecialchars($creator)."\n"; } $feed.= " ".htmlspecialchars(strip_tags(strtr($this->items[$i]->title,"\n\r"," ")))."\n"; $feed.= " ".htmlspecialchars($this->items[$i]->link)."\n"; @@ -858,6 +858,22 @@ class RSSCreator10 extends FeedCreator { $feed.= "\n"; return $feed; } + + /** + * Compose the RSS-1.0 author field. + * + * @author Joe Lapp + */ + + function getAuthor($author, $email) { + if($author) { + if($email) { + return $author.' ('.$email.')'; + } + return $author; + } + return $email; + } } @@ -967,8 +983,9 @@ class RSSCreator091 extends FeedCreator { $feed.= " ".htmlspecialchars($this->items[$i]->link)."\n"; $feed.= " ".$this->items[$i]->getDescription()."\n"; - if ($this->items[$i]->author!="") { - $feed.= " ".htmlspecialchars($this->items[$i]->author)."\n"; + $author = $this->getAuthor($this->items[$i]->author, $this->items[$i]->authorEmail); + if ($author) { + $feed.= " ".htmlspecialchars($author)."\n"; } /* // on hold @@ -996,6 +1013,19 @@ class RSSCreator091 extends FeedCreator { $feed.= "\n"; return $feed; } + + /** + * Compose the RSS-0.91 and RSS-2.0 author field. + * + * @author Joe Lapp + */ + + function getAuthor($author, $email) { + if($author && $email) { + return $email.' ('.$author.')'; + } + return $email; + } } @@ -1127,11 +1157,20 @@ class AtomCreator03 extends FeedCreator { $feed.= " ".htmlspecialchars($itemDate->iso8601())."\n"; $feed.= " ".htmlspecialchars($this->items[$i]->link)."\n"; $feed.= $this->_createAdditionalElements($this->items[$i]->additionalElements, " "); - if ($this->items[$i]->author!="") { + + $author = $this->items[$i]->author; + $authorEmail = $this->items[$i]->authorEmail; + if ($author || $authorEmail) { $feed.= " \n"; - $feed.= " ".htmlspecialchars($this->items[$i]->author)."\n"; - $feed.= " \n"; + if($author) { + $feed.= " ".htmlspecialchars($author)."\n"; + } + if($authorEmail) { + $feed.= " ".htmlspecialchars($authorEmail)."\n"; + } + $feed.= " \n"; } + if ($this->items[$i]->description!="") { $feed.= " ".htmlspecialchars($this->items[$i]->description)."\n"; } -- cgit v1.2.3