diff --git a/docs/changelog/6.x.x.txt b/docs/changelog/6.x.x.txt
index 861a35206..152e839fd 100644
--- a/docs/changelog/6.x.x.txt
+++ b/docs/changelog/6.x.x.txt
@@ -11,6 +11,7 @@
migration.txt for details.
- Added automated code testing framework.
- Added code skeletons for the various plugins WebGUI supports.
+ - Added template to Collaboration RSS feeds.
6.7.7
diff --git a/docs/upgrades/upgrade_6.7.8-6.8.0.pl b/docs/upgrades/upgrade_6.7.8-6.8.0.pl
index 514a48885..629cc69ff 100644
--- a/docs/upgrades/upgrade_6.7.8-6.8.0.pl
+++ b/docs/upgrades/upgrade_6.7.8-6.8.0.pl
@@ -26,8 +26,62 @@ addTimeZonesToUserPreferences();
# the new DateTime system uses Params::Validate, which will only validate integers
# up to 2^32 as SCALARs. :(
removeUnneededFiles();
+updateCollaboration();
finish();
+#-------------------------------------------------
+sub updateCollaboration {
+print "\tAdding collaboration/rss template\n" unless ($quiet);
+my $template = <
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+STOP
+# Get Template folder
+my $templateFolder = WebGUI::Asset->newByUrl('templates');
+# Add Collaboration/RSS folder beneath
+my $rssFolder = $templateFolder->addChild({
+ title=>"Collaboration/RSS",
+ menuTitle=>"Collaboration/RSS",
+ url=>"templates/collaboration/rss",
+ className=>"WebGUI::Asset::Wobject::Folder"
+ });
+$rssFolder->commit;
+# Place the Collaboration/RSS folder beneath the
+# Collaboration/Thread folder
+my $threadFolder = WebGUI::Asset->newByUrl('templates/collaboration/thread');
+my $threadRank = $threadFolder->getRank;
+$rssFolder->setRank($threadRank + 1);
+
+$rssFolder->addChild({
+ className=>"WebGUI::Asset::Template",
+ template=>$template,
+ namespace=>"Collaboration/RSS",
+ title=>'Default Forum RSS',
+ menuTitle=>'Default Forum RSS',
+ ownerUserId=>'3',
+ groupIdView=>'7',
+ groupIdEdit=>'4',
+ isHidden=>1
+ }, 'PBtmpl0000000000000142'
+);
+
+}
+
#-------------------------------------------------
sub addTimeZonesToUserPreferences {
print "\tDropping time offsets in favor of time zones.\n" unless ($quiet);
@@ -54,6 +108,7 @@ sub start {
);
WebGUI::Session::open("../..",$configFile);
WebGUI::Session::refreshUserInfo(3);
+ WebGUI::SQL->write("ALTER TABLE Collaboration ADD COLUMN rssTemplateId varchar(22) binary NOT NULL default 'PBtmpl0000000000000142' after notificationTemplateId");
WebGUI::SQL->write("insert into webguiVersion values (".quote($toVersion).",'upgrade',".time().")");
}
diff --git a/lib/WebGUI/Asset/Wobject/Collaboration.pm b/lib/WebGUI/Asset/Wobject/Collaboration.pm
index d2838c107..7d7c76a5b 100644
--- a/lib/WebGUI/Asset/Wobject/Collaboration.pm
+++ b/lib/WebGUI/Asset/Wobject/Collaboration.pm
@@ -359,6 +359,10 @@ sub definition {
fieldType=>"selectList",
defaultValue=>'dateUpdated'
},
+ rssTemplateId =>{
+ fieldType=>"template",
+ defaultValue=>'PBtmpl0000000000000142'
+ },
notificationTemplateId =>{
fieldType=>"template",
defaultValue=>'PBtmpl0000000000000027'
@@ -463,6 +467,13 @@ sub getEditForm {
-label=>WebGUI::International::get('notification template', 'Asset_Collaboration'),
-hoverHelp=>WebGUI::International::get('notification template description', 'Asset_Collaboration'),
);
+ $tabform->getTab("display")->template(
+ -name=>"rssTemplateId",
+ -value=>$self->getValue("rssTemplateId"),
+ -namespace=>"Collaboration/RSS",
+ -label=>WebGUI::International::get('rss template', 'Asset_Collaboration'),
+ -hoverHelp=>WebGUI::International::get('rss template description', 'Asset_Collaboration'),
+ );
$tabform->getTab("security")->group(
-name=>"moderateGroupId",
-label=>WebGUI::International::get('who moderates', 'Asset_Collaboration'),
@@ -703,7 +714,7 @@ sub getUnsubscribeUrl {
=head2 incrementReplies ( lastPostDate, lastPostId )
-Increments this forum's reply counter.
+Increments the reply counter for this forum.
=head3 lastPostDate
@@ -1125,17 +1136,19 @@ sub www_view {
# print out RSS 2.0 feed describing the items visible on the first page
sub www_viewRSS {
my $self = shift;
+ my %var;
+
$self->logView() if ($session{setting}{passiveProfilingEnabled});
- my $encTitle = _xml_encode($self->get("title"));
- my $encDescription = _xml_encode($self->get("description"));
- my $encUrl = _xml_encode($self->getUrl);
- my $xml = qq~
-
-
-$encTitle
-$encUrl
-$encDescription
-~;
+ # Set the required channel variables
+ $var{'title'} = _xml_encode($self->get("title"));
+ $var{'link'} = _xml_encode($self->getUrl);
+ $var{'description'} = _xml_encode($self->get("description"));
+ # Set some of the optional channel variables
+ $var{'generator'} = "WebGUI ".$WebGUI::VERSION;
+ $var{'lastBuildDate'} = _xml_encode(_get_rfc822_date($self->get("dateUpdated")));
+ $var{'webMaster'} = $WebGUI::Session::session{setting}{companyEmail};
+ $var{'docs'} = "http://blogs.law.harvard.edu/tech/rss";
+
my $sth = WebGUI::SQL->read("select asset.assetId, asset.className, max(assetData.revisionDate)
from Thread
left join asset on Thread.assetId=asset.assetId
@@ -1150,30 +1163,21 @@ sub www_viewRSS {
my $i = 1;
while (my ($id, $class, $version) = $sth->array) {
my $post = WebGUI::Asset::Wobject::Collaboration->new($id, $class, $version);
+ my $encUrl = _xml_encode(WebGUI::URL::getSiteURL().$post->getUrl);
- my $encUrl = _xml_encode(WebGUI::URL::getSiteURL().$post->getUrl);
- my $encTitle = _xml_encode($post->get("title"));
- my $encPubDate = _xml_encode(_get_rfc822_date($post->get("dateUpdated")));
- my $encDescription = _xml_encode($post->get("synopsis"));
- $xml .= qq~
-
-$encTitle
-$encUrl
-$encDescription
-$encUrl
-$encPubDate
-
-~;
+ push(@{$var{'item_loop'}}, {
+ title => _xml_encode($post->get("title")),
+ link => $encUrl,
+ description => _xml_encode($post->get("synopsis")),
+ guid => $encUrl,
+ pubDate => _xml_encode(_get_rfc822_date($post->get("dateUpdated")))
+ });
$i++;
last if ($i == $self->get("threadsPerPage"));
}
- $xml .=qq~
-
-
-~;
WebGUI::HTTP::setMimeType("text/xml");
- return $xml;
+ return $self->processTemplate(\%var,$self->get("rssTemplateId"));
}
@@ -1181,5 +1185,3 @@ sub www_viewRSS {
1;
-
-
diff --git a/lib/WebGUI/Help/Asset_Collaboration.pm b/lib/WebGUI/Help/Asset_Collaboration.pm
index 36e666a1f..72baa6eb2 100644
--- a/lib/WebGUI/Help/Asset_Collaboration.pm
+++ b/lib/WebGUI/Help/Asset_Collaboration.pm
@@ -35,6 +35,11 @@ our $HELP = {
description => 'notification template description',
namespace => 'Asset_Collaboration',
},
+ {
+ title => 'rss template',
+ description => 'rss template description',
+ namespace => 'Asset_Collaboration',
+ },
{
title => 'who moderates',
description => 'who moderates description',
@@ -191,6 +196,19 @@ our $HELP = {
]
},
+ 'collaboration rss template' => {
+ title => 'collaboration rss template title',
+ body => 'collaboration rss template body',
+ fields => [
+ ],
+ related => [
+ {
+ tag => 'collaboration post list template variables',
+ namespace => 'Asset_Collaboration',
+ },
+ ]
+ },
+
};
1;
diff --git a/lib/WebGUI/i18n/English/Asset_Collaboration.pm b/lib/WebGUI/i18n/English/Asset_Collaboration.pm
index dd896956e..216dc685b 100644
--- a/lib/WebGUI/i18n/English/Asset_Collaboration.pm
+++ b/lib/WebGUI/i18n/English/Asset_Collaboration.pm
@@ -433,6 +433,11 @@ our $I18N = {
lastUpdated => 1109698614,
},
+ 'rss template' => {
+ message => q|RSS Template|,
+ lastUpdated => 1109698614,
+ },
+
'who moderates' => {
message => q|Who can moderate?|,
lastUpdated => 1109698614,
@@ -847,6 +852,10 @@ properties listed below:
message => q|The template used to generate emails for users who have subscribed to this Asset.|,
lastUpdated => 1119070429,
},
+ 'rss template description' => {
+ message => q|The template used to generate the xml for an rss feed based on this Asset.|,
+ lastUpdated => 1119070429,
+ },
'who moderates description' => {
message => q|The group that will moderate posts to this Asset, if moderation is enabled.|,
@@ -1258,6 +1267,64 @@ A URL for sorting and displaying the list of posts by their ratings.
},
+ 'collaboration rss template title' => {
+ message => q|Collaboration RSS Template|,
+ lastUpdated => 1114467745,
+ },
+
+ 'collaboration rss template body' => {
+ message => q|The Collaboration RSS template is available to allow configuration of the XML produced as an RSS feed for a collaboration. To produce a valid rss feed, this template must adhere to the RSS 2.0 Specification. These variables are available in the Collaboration RSS Template:
+
+
+title
+The title of the rss feed (comes from the collaboration title).
+
+
+link
+The url to the collaboration.
+
+
+description
+The description of the rss feed (comes from the collaboration description).
+
+
+generator
+The program used to generate the rss feed, i.e. WebGUI plus version information. (optional field)
+
+webMaster
+The email address of the person responsible for the technical issues relating to this rss feed. (optional field)
+
+docs
+The url of documentation about the format of this file, RSS 2.0 (optional field)
+
+lastBuildDate
+The date that this feed was last updated. (optional field)
+
+
+item_loop
+Loops over the posts to be transmitted in this RSS feed.
+