improving RSSCapable upgrade procedure, adding feed header selection

This commit is contained in:
Graham Knop 2009-04-03 00:07:19 +00:00
parent ae01ea2cd8
commit a829304bae
7 changed files with 189 additions and 45 deletions

View file

@ -2340,9 +2340,9 @@ sub update {
# next unless (exists $properties->{$property} || exists $definition->{properties}{$property}{defaultValue});
# skip a property unless it was specified to be set by the properties field
next unless (exists $properties->{$property});
my $propertyDefinition = $definition->{property}{$property};
# skip a property if it has the display only flag set
next if ($definition->{properties}{$property}{displayOnly});
next if ($propertyDefinition->{displayOnly});
# skip properties that aren't yet in the table
if (!exists $tableFields{$property}) {
@ -2358,14 +2358,16 @@ sub update {
}
# apply filter logic on a property to validate or fix it's value
if (exists $definition->{properties}{$property}{filter}) {
my $filter = $definition->{properties}{$property}{filter};
$value = $self->$filter($value, $property);
}
if (exists $propertyDefinition->{filter}) {
my $filter = $propertyDefinition->{filter};
$value = $self->$filter($value, $property);
}
# use the default value because default and update were both undef
if ($value eq "" && exists $definition->{properties}{$property}{defaultValue}) {
$value = $definition->{properties}{$property}{defaultValue};
# if the value is undefined, use the default if possible
# unless allowEmpty has been set, do this for empty strings as well
if ( ( !defined $value || ( $value eq q{} && ! $propertyDefinition->{allowEmpty} ) )
&& exists $propertyDefinition->{defaultValue} ) {
$value = $propertyDefinition->{defaultValue};
if (ref($value) eq 'ARRAY') {
$value = $value->[0];
}

View file

@ -62,16 +62,6 @@ sub _visitorCacheOk {
&& !$self->session->form->process('sortBy'));
}
#-------------------------------------------------------------------
# encode a string to include in xml (for RSS export)
sub _xml_encode {
my $text = shift;
$text =~ s/&/&/g;
$text =~ s/</&lt;/g;
$text =~ s/\]\]>/\]\]&gt;/g;
return $text;
}
#-------------------------------------------------------------------
sub addChild {
my $self = shift;
@ -1174,7 +1164,6 @@ sub prepareView {
my $self = shift;
$self->next::method;
my $template = WebGUI::Asset::Template->new($self->session, $self->get("collaborationTemplateId")) or die "no good: ".$self->get("collaborationTemplateId");
$self->session->style->setLink($self->getRssFeedUrl,{ rel=>'alternate', type=>'application/rss+xml', title=>$self->get('title') . ' RSS' });
$template->prepare($self->getMetaDataAsTemplateVariables);
$self->{_viewTemplate} = $template;
}

View file

@ -308,11 +308,6 @@ sub prepareView {
my $template = WebGUI::Asset::Template->new($self->session, $self->get("templateId"));
$template->prepare($self->getMetaDataAsTemplateVariables);
$self->{_viewTemplate} = $template;
my $title = $self->get("title");
my $style = $self->session->style;
$style->setLink($self->getUrl("func=viewRss"), { rel=>'alternate', type=>'application/rss+xml', title=>$title.' (RSS)' });
$style->setLink($self->getUrl("func=viewRdf"), { rel=>'alternate', type=>'application/rdf+xml', title=>$title.' (RDF)' });
$style->setLink($self->getUrl("func=viewAtom"), { rel=>'alternate', type=>'application/atom+xml', title=>$title.' (Atom)' });
}
@ -408,6 +403,20 @@ sub www_viewRSS10 {
return $self->www_viewRdf;
}
#-------------------------------------------------------------------
=head2 www_viewRSS ( )
Deprecated. Use www_viewRss() instead.
=cut
sub www_viewRSS {
my $self = shift;
return $self->www_viewRss;
}
#-------------------------------------------------------------------
=head2 www_viewRSS20 ( )

View file

@ -113,6 +113,23 @@ sub definition {
label => $i18n->get('feedImageDescription'),
hoverHelp => $i18n->get('feedImageDescription hoverHelp')
},
feedHeaderLinks => {
fieldType => "checkList",
defaultValue => "rss\natom",
tab => "rss",
options => do {
my %headerLinksOptions;
tie %headerLinksOptions, 'Tie::IxHash';
%headerLinksOptions = (
rss => $i18n->get('rssLinkOption'),
atom => $i18n->get('atomLinkOption'),
rdf => $i18n->get('rdfLinkOption'),
);
\%headerLinksOptions;
},
label => $i18n->get('feedHeaderLinks'),
hoverHelp => $i18n->get('feedHeaderLinks hoverHelp')
},
);
push(@{$definition}, {
autoGenerateForms => 1,
@ -261,6 +278,18 @@ sub getAtomFeedUrl {
#-------------------------------------------------------------------
=head2 getRdfFeedUrl ()
Returns $self->getUrl('func=viewRdf').
=cut
sub getRdfFeedUrl {
shift->getUrl("func=viewRdf");
}
#-------------------------------------------------------------------
=head2 getRssFeedUrl ()
Returns $self->getUrl('func=viewRss').
@ -280,7 +309,33 @@ Returns the current asset's URL with .atom concatenated onto it.
=cut
sub getStaticAtomFeedUrl {
shift->getUrl() . '.atom';
my $self = shift;
my $url = $self->get("url") . '.atom';
$url = $self->session->url->gateway($url);
if ($self->get("encryptPage")) {
$url = $self->session->url->getSiteURL . $url;
$url =~ s/^http:/https:/;
}
return $url;
}
#-------------------------------------------------------------------
=head2 getStaticRdfFeedUrl ()
Returns the current asset's URL with .rdf concatenated onto it.
=cut
sub getStaticRdfFeedUrl {
my $self = shift;
my $url = $self->get("url") . '.rdf';
$url = $self->session->url->gateway($url);
if ($self->get("encryptPage")) {
$url = $self->session->url->getSiteURL . $url;
$url =~ s/^http:/https:/;
}
return $url;
}
#-------------------------------------------------------------------
@ -292,7 +347,14 @@ Returns the current asset's URL with .rss concatenated onto it.
=cut
sub getStaticRssFeedUrl {
shift->getUrl() . '.rss';
my $self = shift;
my $url = $self->get("url") . '.rss';
$url = $self->session->url->gateway($url);
if ($self->get("encryptPage")) {
$url = $self->session->url->getSiteURL . $url;
$url =~ s/^http:/https:/;
}
return $url;
}
#-------------------------------------------------------------------
@ -342,6 +404,41 @@ sub getFeed {
return $feed;
}
sub prepareView {
my $self = shift;
$self->addHeaderLinks;
return $self->next::method(@_);
}
sub addHeaderLinks {
my $self = shift;
my $style = $self->session->style;
my $title = $self->get('feedTitle') || $self->get("title");
my %feeds = map { $_ => 1 } split /\n/, $self->get('feedHeaderLinks');
my $addType = keys %feeds > 1;
if ($feeds{rss}) {
$style->setLink($self->getRssFeedUrl, {
rel => 'alternate',
type => 'application/rss+xml',
title => $title . ( $addType ? ' (RSS)' : ''),
});
}
if ($feeds{atom}) {
$style->setLink($self->getAtomFeedUrl, {
rel => 'alternate',
type => 'application/atom+xml',
title => $title . ( $addType ? ' (Atom)' : ''),
});
}
if ($feeds{rdf}) {
$style->setLink($self->getRdfFeedUrl, {
rel => 'alternate',
type => 'application/rdf+xml',
title => $title . ( $addType ? ' (RDF)' : ''),
});
}
}
#-------------------------------------------------------------------
=head2 www_viewAtom ()

View file

@ -92,8 +92,23 @@ our $I18N = {
lastUpdated => 1236820473,
context => q|The title of the RSS tab on the asset's edit form.|
},
'feedHeaderLinks' => {
message => q|HTML Header Feed Links|,
},
'feedHeaderLinks hoverHelp' => {
message => q|Select which feed types to include in the HTML headers, which many browsers will offer as options to users.|,
},
'rssLinkOption' => {
message => q|RSS 2.0|,
},
'atomLinkOption' => {
message => 'Atom',
},
'rdfLinkOption' => {
message => 'RDF/RSS 1.0',
},
};
1;
#vim:ft=perl
#vim:ft=perl