of WebGUI sites. We also suggest not using them for upgrades of custom code. The reason is that the database is becoming very complex, and it's easier to introduce errors to the database when modifying it directly rather than using the APIs.
833 lines
24 KiB
Perl
833 lines
24 KiB
Perl
#!/usr/bin/perl
|
|
|
|
use lib "../../lib";
|
|
use File::Path;
|
|
use Getopt::Long;
|
|
use strict;
|
|
use WebGUI::Asset;
|
|
use WebGUI::Asset::Wobject::Folder;
|
|
use WebGUI::Asset::Snippet;
|
|
use WebGUI::Session;
|
|
use WebGUI::SQL;
|
|
use WebGUI::Group;
|
|
|
|
my $configFile;
|
|
my $quiet;
|
|
|
|
GetOptions(
|
|
'configFile=s'=>\$configFile,
|
|
'quiet'=>\$quiet
|
|
);
|
|
|
|
WebGUI::Session::open("../..",$configFile);
|
|
|
|
WebGUI::SQL->write("insert into webguiVersion values ('6.7.0','upgrade',unix_timestamp())");
|
|
|
|
giveSnippetsMimeTypes();
|
|
addAssetVersioning();
|
|
updateConfigFile();
|
|
insertHelpTemplate();
|
|
makeSyndicatedContentChanges();
|
|
removeOldThemeSystem();
|
|
addSectionsToSurveys();
|
|
|
|
WebGUI::Session::close();
|
|
|
|
#-------------------------------------------------
|
|
sub giveSnippetsMimeTypes {
|
|
print "\tAllowing snippets to handle mime types.\n" unless ($quiet);
|
|
WebGUI::SQL->write("alter table snippet add column mimeType varchar(50) not null default 'text/html'");
|
|
}
|
|
|
|
|
|
#-------------------------------------------------
|
|
sub removeOldThemeSystem {
|
|
print "\tRemoving the old theme system.\n" unless ($quiet);
|
|
WebGUI::SQL->write("drop table theme");
|
|
WebGUI::SQL->write("drop table themeComponent");
|
|
WebGUI::Group->new('9')->delete;
|
|
}
|
|
|
|
#-------------------------------------------------
|
|
sub makeSyndicatedContentChanges {
|
|
print "\tMaking changes to the syndicated content asset.\n" unless ($quiet);
|
|
WebGUI::SQL->write("alter table SyndicatedContent add column displayMode varchar(20) not null default 'interleaved'");
|
|
WebGUI::SQL->write("alter table SyndicatedContent add column hasTerms varchar(255) not null");
|
|
insertXSLTSheets();
|
|
insertSyndicatedContentTemplate();
|
|
}
|
|
|
|
#-------------------------------------------------
|
|
sub addSectionsToSurveys {
|
|
print "\tAdding sections to Surveys.\n" unless ($quiet);
|
|
WebGUI::SQL->write("alter table Survey_question add column Survey_sectionId varchar(22) null");
|
|
WebGUI::SQL->write("create table Survey_section (Survey_id varchar(22) null, Survey_sectionId varchar(22) not null, sectionName text null, sequenceNumber int(11) not null default 1, primary key (Survey_sectionId))");
|
|
my $template = q|<a name="<tmpl_var assetId>"></a>
|
|
<tmpl_if session.var.adminOn>
|
|
<p><tmpl_var controls></p>
|
|
</tmpl_if>
|
|
<tmpl_if displayTitle>
|
|
<h1><tmpl_var title></h1>
|
|
</tmpl_if>
|
|
|
|
|
|
<tmpl_if description>
|
|
<tmpl_var description><p />
|
|
</tmpl_if>
|
|
|
|
|
|
<tmpl_if user.canTakeSurvey>
|
|
<tmpl_if response.isComplete>
|
|
<tmpl_if mode.isSurvey>
|
|
<tmpl_var thanks.survey.label>
|
|
<tmpl_else>
|
|
<tmpl_var thanks.quiz.label>
|
|
<div align="center">
|
|
<b><tmpl_var questions.correct.count.label>:</b> <tmpl_var questions.correct.count> / <tmpl_var questions.total>
|
|
<br />
|
|
<b><tmpl_var questions.correct.percent.label>:</b><tmpl_var questions.correct.percent>%
|
|
</div>
|
|
</tmpl_if>
|
|
<tmpl_if user.canRespondAgain>
|
|
<br /> <br /> <a href="<tmpl_var start.newResponse.url>"><tmpl_var start.newResponse.label></a>
|
|
</tmpl_if>
|
|
<tmpl_else>
|
|
<tmpl_if response.id>
|
|
<tmpl_var form.header>
|
|
<table width="100%" cellpadding="3" cellspacing="0" border="0" class="content">
|
|
<tr>
|
|
<td valign="top">
|
|
<tmpl_loop question_loop>
|
|
<p><tmpl_var question.question></p>
|
|
<tmpl_var question.answer.label><br />
|
|
<tmpl_var question.answer.field><br />
|
|
<br />
|
|
<tmpl_if question.allowComment>
|
|
<tmpl_var question.comment.label><br />
|
|
<tmpl_var question.comment.field><br />
|
|
</tmpl_if>
|
|
</tmpl_loop>
|
|
</td>
|
|
<td valign="top" nowrap="1">
|
|
<b><tmpl_var questions.sofar.label>:</b> <tmpl_var questions.sofar.count> / <tmpl_var questions.total> <br />
|
|
<tmpl_unless mode.isSurvey>
|
|
<b><tmpl_var questions.correct.count.label>:</b> <tmpl_var questions.correct.count> / <tmpl_var questions.sofar.count><br />
|
|
<b><tmpl_var questions.correct.percent.label>:</b><tmpl_var questions.correct.percent>% / 100%<br />
|
|
</tmpl_unless>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<div align="center"><tmpl_var form.submit></div>
|
|
<tmpl_var form.footer>
|
|
<tmpl_else>
|
|
<a href="<tmpl_var start.newResponse.url>"><tmpl_var start.newResponse.label></a>
|
|
</tmpl_if>
|
|
</tmpl_if>
|
|
<tmpl_else>
|
|
<tmpl_if mode.isSurvey>
|
|
<tmpl_var survey.noprivs.label>
|
|
<tmpl_else>
|
|
<tmpl_var quiz.noprivs.label>
|
|
</tmpl_if>
|
|
</tmpl_if>
|
|
<br />
|
|
<br />
|
|
<tmpl_if user.canViewReports>
|
|
<a href="<tmpl_var report.gradebook.url>"><tmpl_var report.gradebook.label></a>
|
|
•
|
|
<a href="<tmpl_var report.overview.url>"><tmpl_var report.overview.label></a>
|
|
•
|
|
<a href="<tmpl_var delete.all.responses.url>"><tmpl_var delete.all.responses.label></a>
|
|
<br />
|
|
<a href="<tmpl_var export.answers.url>"><tmpl_var export.answers.label></a>
|
|
•
|
|
<a href="<tmpl_var export.questions.url>"><tmpl_var export.questions.label></a>
|
|
•
|
|
<a href="<tmpl_var export.responses.url>"><tmpl_var export.responses.label></a>
|
|
•
|
|
<a href="<tmpl_var export.composite.url>"><tmpl_var export.composite.label></a>
|
|
</tmpl_if>
|
|
|
|
|
|
<tmpl_if session.var.adminOn>
|
|
<p>
|
|
<a href="<tmpl_var question.add.url>"><tmpl_var question.add.label></a>
|
|
</p>
|
|
<p><a href="<tmpl_var section.add.url>"><tmpl_var section.add.label></a></p>
|
|
|
|
<tmpl_loop section.edit_loop>
|
|
<tmpl_var section.edit.controls>
|
|
<b><tmpl_var section.edit.sectionName></b>
|
|
<br />
|
|
<tmpl_loop section.questions_loop>
|
|
<tmpl_var question.edit.controls><tmpl_var question.edit.question>
|
|
</tmpl_loop>
|
|
<br />
|
|
</tmpl_loop>
|
|
|
|
|
|
</tmpl_if> |;
|
|
my $properties = { 'template' => $template };
|
|
my $currentVersion = WebGUI::Asset::Template->new('PBtmpl0000000000000061');
|
|
my $newVersion = $currentVersion->addRevision($properties);
|
|
|
|
|
|
}
|
|
|
|
#-------------------------------------------------
|
|
sub updateConfigFile {
|
|
print "\tUpdating config file.\n" unless ($quiet);
|
|
my $pathToConfig = '../../etc/'.$configFile;
|
|
my $conf = Parse::PlainConfig->new('DELIM' => '=', 'FILE' => $pathToConfig, 'PURGE'=>1);
|
|
my %newConfig;
|
|
foreach my $key ($conf->directives) { # delete unwanted stuff
|
|
unless ($key eq "wobject") {
|
|
$newConfig{$key} = $conf->get($key);
|
|
}
|
|
}
|
|
$newConfig{fileCacheSizeLimit} = 100000000;
|
|
$newConfig{DeleteExpiredRevisions_offset} = 365;
|
|
$conf->purge;
|
|
$conf->set(%newConfig);
|
|
$conf->write;
|
|
}
|
|
|
|
#-------------------------------------------------
|
|
sub addAssetVersioning {
|
|
print "\tMaking changes for asset versioning\n" unless ($quiet);
|
|
WebGUI::SQL->write("insert into settings values ('autoCommit','1')");
|
|
WebGUI::SQL->write("create table assetVersionTag (
|
|
tagId varchar(22) not null primary key,
|
|
name varchar(255) not null,
|
|
isCommitted int not null default 0,
|
|
creationDate bigint not null default 0,
|
|
createdBy varchar(22),
|
|
commitDate bigint not null default 0,
|
|
committedBy varchar(22)
|
|
)");
|
|
my $now = time();
|
|
WebGUI::SQL->write("insert into assetVersionTag values ('pbversion0000000000001','Initial Import','1',$now,'3',$now,'3')");
|
|
WebGUI::SQL->write("insert into assetVersionTag values ('pbversion0000000000002','Auto Commit','1',$now,'3',$now,'3')");
|
|
foreach my $table (qw(FileAsset Post RichEdit snippet EventsCalendar_event ImageAsset Thread redirect Shortcut template Article EventsCalendar IndexedSearch MessageBoard SQLReport Folder Navigation Survey WSClient Collaboration HttpProxy Layout Poll SyndicatedContent Product DataForm wobject)) {
|
|
WebGUI::SQL->write("alter table $table add column revisionDate bigint not null");
|
|
WebGUI::SQL->write("update $table set revisionDate=$now");
|
|
WebGUI::SQL->write("alter table $table drop primary key");
|
|
WebGUI::SQL->write("alter table $table add primary key (assetId,revisionDate)");
|
|
}
|
|
WebGUI::SQL->write("create table assetData (
|
|
assetId varchar(22) not null,
|
|
revisionDate bigint,
|
|
revisedBy varchar(22) not null,
|
|
tagId varchar(22) not null,
|
|
status varchar(35) not null default 'pending',
|
|
title varchar(255) not null default 'untitled',
|
|
menuTitle varchar(255) not null default 'untitled',
|
|
url varchar(255) not null,
|
|
ownerUserId varchar(22) not null default '3',
|
|
groupIdView varchar(22) not null default '7',
|
|
groupIdEdit varchar(22) not null default '4',
|
|
startDate bigint not null default 997995720,
|
|
endDate bigint not null default 32472169200,
|
|
synopsis text,
|
|
newWindow int not null default 0,
|
|
isHidden int not null default 0,
|
|
isPackage int not null default 0,
|
|
isPrototype int not null default 0,
|
|
encryptPage int not null default 0,
|
|
assetSize int not null default 0,
|
|
extraHeadTags text,
|
|
primary key (assetId,revisionDate)
|
|
)");
|
|
my $statement = WebGUI::SQL->prepare("insert into assetData values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
|
|
my $sth = WebGUI::SQL->read("select * from asset");
|
|
while (my $data = $sth->hashRef) {
|
|
$statement->execute([
|
|
$data->{assetId},
|
|
$now,
|
|
'3',
|
|
'pbversion0000000000001',
|
|
'approved',
|
|
$data->{title},
|
|
$data->{menuTitle},
|
|
$data->{url},
|
|
$data->{ownerUserId},
|
|
$data->{groupIdView},
|
|
$data->{groupIdEdit},
|
|
$data->{startDate},
|
|
$data->{endDate},
|
|
$data->{synopsis},
|
|
$data->{newWindow},
|
|
$data->{isHidden},
|
|
$data->{isPackage},
|
|
$data->{isPrototype},
|
|
$data->{encryptPage},
|
|
$data->{assetSize},
|
|
$data->{extraHeadTags}
|
|
]);
|
|
}
|
|
$sth->finish;
|
|
WebGUI::SQL->write("alter table asset add column creationDate bigint not null default 997995720");
|
|
WebGUI::SQL->write("alter table asset add column createdBy varchar(22) not null default '3'");
|
|
WebGUI::SQL->write("alter table asset add column stateChanged varchar(22) not null default 997995720");
|
|
WebGUI::SQL->write("alter table asset add column stateChangedBy varchar(22) not null default '3'");
|
|
WebGUI::SQL->write("alter table asset add column isLockedBy varchar(22)");
|
|
WebGUI::SQL->write("update asset set creationDate=$now, createdBy='3'");
|
|
foreach my $field (qw(url groupIdView title menuTitle startDate endDate ownerUserId groupIdEdit synopsis newWindow isHidden isSystem encryptPage assetSize lastUpdated lastUpdatedBy isPackage extraHeadTags isPrototype)) {
|
|
WebGUI::SQL->write("alter table asset drop column $field");
|
|
}
|
|
|
|
}
|
|
|
|
#-------------------------------------------------
|
|
sub insertHelpTemplate{
|
|
print "\tInserting new Help template\n" unless ($quiet);
|
|
my $helpTemplate = <<EOT;
|
|
<p><tmpl_var body></p>
|
|
|
|
<tmpl_if fields>
|
|
<dl>
|
|
<tmpl_loop fields>
|
|
|
|
<dt><tmpl_var title></dt>
|
|
<dd><tmpl_var description></dd>
|
|
</tmpl_loop>
|
|
</dl>
|
|
</tmpl_if>
|
|
EOT
|
|
my $import=WebGUI::Asset->getImportNode;
|
|
my $folder = $import->addChild({
|
|
title=>"6.7.0 Help System Template",
|
|
menuTitle=>"6.7.0 Help System Template",
|
|
url=>"6-7-0HelpSystemTemplate",
|
|
className=>"WebGUI::Asset::Wobject::Folder"
|
|
});
|
|
$folder->addChild({
|
|
namespace=>'AdminConsole',
|
|
title=>'Help',
|
|
menuTitle=>'Help',
|
|
url=>'Help',
|
|
showInForms=>1,
|
|
isEditable=>1,
|
|
className=>"WebGUI::Asset::Template",
|
|
template=>$helpTemplate},'PBtmplHelp000000000001');
|
|
}
|
|
|
|
|
|
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
sub insertSyndicatedContentTemplate{
|
|
print "\tInserting new syndicated content template\n" unless ($quiet);
|
|
|
|
my $template=q|<a name="<tmpl_var assetId>"></a>
|
|
<tmpl_if session.var.adminOn>
|
|
<p><tmpl_var controls></p>
|
|
</tmpl_if>
|
|
|
|
<p>
|
|
<a href="<tmpl_var rss.url.0.9>">RSS 0.90</a>
|
|
<a href="<tmpl_var rss.url.0.91>">RSS 0.91</a>
|
|
<a href="<tmpl_var rss.url.1.0>">RSS 1.0</a>
|
|
<a href="<tmpl_var rss.url.2.0>">RSS 2.0</a>
|
|
</p>
|
|
|
|
<tmpl_if displayTitle>
|
|
<h1><tmpl_var title></h1>
|
|
</tmpl_if>
|
|
|
|
<tmpl_if description>
|
|
<tmpl_var description><p />
|
|
</tmpl_if>
|
|
|
|
<h1>
|
|
<tmpl_if channel.link>
|
|
<a href="<tmpl_var channel.link>" target="_blank"><tmpl_var channel.title></a>
|
|
<tmpl_else>
|
|
<tmpl_var channel.title>
|
|
</tmpl_if>
|
|
</h1>
|
|
|
|
<tmpl_if channel.description>
|
|
<tmpl_var channel.description><p />
|
|
</tmpl_if>
|
|
|
|
|
|
<tmpl_loop item_loop>
|
|
|
|
<tmpl_if new_rss_site>
|
|
<!-- We're in a new RSS group. Output the header. -->
|
|
<h2><a href="<tmpl_var site_link>" target="_blank"><tmpl_var site_title></a></h2>
|
|
</tmpl_if>
|
|
|
|
<li>
|
|
<tmpl_if link>
|
|
<a href="<tmpl_var link>" target="_blank"><tmpl_var title></a>
|
|
<tmpl_else>
|
|
<tmpl_var title>
|
|
</tmpl_if>
|
|
<tmpl_if description>
|
|
- <tmpl_var description>
|
|
</tmpl_if>
|
|
<b><tmpl_var site_title></b>
|
|
<br>
|
|
|
|
</tmpl_loop>|;
|
|
|
|
my $import=WebGUI::Asset->getImportNode;
|
|
my $template=$import->addChild(
|
|
{
|
|
className=>'WebGUI::Asset::Template',
|
|
title=>'Default Grouped Aggregate Feeds',
|
|
namespace=>'SyndicatedContent',
|
|
menuTitle=>'Default Grouped Aggregate Feeds',
|
|
url=>'templates/syndicatedcontent/default_grouped_feeds',
|
|
ownerUserID=>3,
|
|
groupIdView=>7,
|
|
groupIdEdit=>4,
|
|
isHidden=>1,
|
|
template=>$template
|
|
},'DPUROtmpl0000000000001'
|
|
);
|
|
}
|
|
|
|
|
|
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
sub insertXSLTSheets{
|
|
print "\tInserting syndicated content XSLT\n" unless ($quiet);
|
|
my $import=WebGUI::Asset->getImportNode;
|
|
|
|
my $folder=$import->addChild(
|
|
{
|
|
className=>'WebGUI::Asset::Wobject::Folder',
|
|
title=>'Syndicated Content XSLT',
|
|
menuTitle=>'Syndicated Content XSLT',
|
|
url=>'xslt',
|
|
startDate=>time(),
|
|
endDate=>time()+ 60*60*24*365*10,
|
|
groupEditId=>4,
|
|
groupViewId=>2
|
|
}
|
|
);
|
|
add_090xslt($folder);
|
|
add_091xslt($folder);
|
|
add_10xslt($folder);
|
|
add_20xslt($folder);
|
|
}
|
|
|
|
|
|
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
sub add_090xslt{
|
|
my $folder=shift;
|
|
my $snippet090=q|<?xml version="1.0"?>
|
|
<!--
|
|
Based on XSLT stylesheets originally designed by Rich Manalang (http://manalang.com)
|
|
This XSLT sheet will convert any valid RSS 0.9 feed into basic HTML.
|
|
-->
|
|
<xsl:stylesheet version="1.0"
|
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
xmlns:foo="http://my.netscape.com/rdf/simple/0.9/">
|
|
<xsl:output method="html"/>
|
|
<xsl:template match="/">
|
|
<style>
|
|
<xsl:comment>
|
|
.syndication-content-area {
|
|
}
|
|
.syndication-title {
|
|
font-size: 1.1em;
|
|
font-weight: bold;
|
|
}
|
|
.syndication-description {
|
|
font-size: .9em;
|
|
margin: 0 0 10px 0;
|
|
}
|
|
.syndication-list {
|
|
font-size: .8em;
|
|
margin:0 0 0 20px;
|
|
}
|
|
.syndication-list-item {
|
|
margin: 0 0 5px 0;
|
|
}
|
|
.syndication-list-item a,
|
|
.syndication-list-item a:link {
|
|
color: blue;
|
|
}
|
|
.syndication-list-item a:active,
|
|
.syndication-list-item a:hover {
|
|
color: red;
|
|
}
|
|
li.syndication-list-item{
|
|
padding-bottom: .2em;
|
|
background-color: #e4e4e4;
|
|
}
|
|
.syndication-list-item a:visited {
|
|
color: black;
|
|
text-decoration: none;
|
|
}
|
|
.syndication-list-item-date {
|
|
font-size: .8em;
|
|
}
|
|
.syndication-list-item-description {
|
|
font-size: .9em;
|
|
}
|
|
</xsl:comment>
|
|
</style>
|
|
<xsl:apply-templates select="/rdf:RDF/foo:channel"/>
|
|
</xsl:template>
|
|
<xsl:template match="/rdf:RDF/foo:channel">
|
|
You're viewing an <a href="http://www.purplepages.ie/RSS/netscape/rss0.90.html">RSS version 0.9 feed</a>. Please use an RSS feed reader to view this content as intended.
|
|
<div class="syndication-content-area">
|
|
<div class="syndication-title">
|
|
<xsl:value-of select="foo:title"/>
|
|
</div>
|
|
<div class="syndication-description">
|
|
<xsl:value-of select="foo:description"/>
|
|
</div>
|
|
<ul class="syndication-list">
|
|
<xsl:apply-templates select="/rdf:RDF/foo:item"/>
|
|
</ul>
|
|
</div>
|
|
</xsl:template>
|
|
<xsl:template match="/rdf:RDF/foo:item">
|
|
<li class="syndication-list-item">
|
|
<a href="{foo:link}" title="{foo:description}">
|
|
<xsl:value-of select="foo:title"/>
|
|
</a>
|
|
</li>
|
|
</xsl:template>
|
|
</xsl:stylesheet>|;
|
|
|
|
my $snippet=$folder->addChild(
|
|
{
|
|
className=>'WebGUI::Asset::Snippet',
|
|
title=>'RSS 0.9 XSLT Stylesheet',
|
|
menuTitle=>'RSS 0.9 XSLT ',
|
|
url=>'xslt/rss0.9.xsl',
|
|
mimeType=>'application/xml',
|
|
startDate=>time(),
|
|
endDate=>time()+ 60*60*24*365*10,
|
|
groupEditId=>4,
|
|
groupViewId=>2,
|
|
snippet=>$snippet090
|
|
},'SynConXSLT000000000001'
|
|
);
|
|
}
|
|
|
|
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
sub add_091xslt{
|
|
my $folder=shift;
|
|
my $snippet091=q|<?xml version="1.0"?>
|
|
<!--
|
|
Title: RSS 0.91, 0.92, 0.93 XSL Template
|
|
Author: Rich Manalang (http://manalang.com)
|
|
Description: This sample XSLT will convert any valid RSS 0.91, 0.92, or 0.93 feed to HTML.
|
|
-->
|
|
<xsl:stylesheet version="1.0"
|
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|
xmlns:wfw="http://wellformedweb.org/CommentAPI/">
|
|
<xsl:output method="html"/>
|
|
<xsl:template match="/">
|
|
<style>
|
|
<xsl:comment>
|
|
.syndication-content-area {
|
|
}
|
|
.syndication-title {
|
|
font-size: 1.1em;
|
|
font-weight: bold;
|
|
}
|
|
.syndication-description {
|
|
font-size: .9em;
|
|
margin: 0 0 10px 0;
|
|
}
|
|
.syndication-list {
|
|
font-size: .8em;
|
|
margin:0 0 0 20px;
|
|
}
|
|
li.syndication-list-item{
|
|
padding-bottom: .2em;
|
|
background-color: #e4e4e4;
|
|
}
|
|
.syndication-list-item {
|
|
margin: 0 0 5px 0;
|
|
}
|
|
.syndication-list-item a,
|
|
.syndication-list-item a:link {
|
|
color: blue;
|
|
}
|
|
.syndication-list-item a:active,
|
|
.syndication-list-item a:hover {
|
|
color: red;
|
|
}
|
|
.syndication-list-item a:visited {
|
|
color: black;
|
|
text-decoration: none;
|
|
}
|
|
.syndication-list-item-date {
|
|
font-size: .8em;
|
|
}
|
|
.syndication-list-item-description {
|
|
font-size: .9em;
|
|
}
|
|
</xsl:comment>
|
|
</style>
|
|
<xsl:apply-templates select="/rss/channel"/>
|
|
</xsl:template>
|
|
<xsl:template match="/rss/channel">
|
|
<div class="syndication-content-area">
|
|
You're viewing an <a href="http://backend.userland.com/rss091">RSS version 0.91 feed</a>. Please use an RSS feed reader to view this content as intended.
|
|
<div class="syndication-title">
|
|
<xsl:value-of select="title"/>
|
|
</div>
|
|
<div class="syndication-description">
|
|
<xsl:value-of select="description"/>
|
|
</div>
|
|
<ul class="syndication-list">
|
|
<xsl:apply-templates select="item"/>
|
|
</ul>
|
|
|
|
</div>
|
|
</xsl:template>
|
|
<xsl:template match="/rss/channel/item">
|
|
<li class="syndication-list-item">
|
|
<a href="{link}" title="{description}">
|
|
<xsl:value-of select="title"/>
|
|
</a>
|
|
<div class="syndication-list-item-description">
|
|
<xsl:value-of select="description"/>
|
|
|
|
</div>
|
|
</li>
|
|
</xsl:template>
|
|
</xsl:stylesheet>|;
|
|
|
|
my $snippet=$folder->addChild(
|
|
{
|
|
className=>'WebGUI::Asset::Snippet',
|
|
title=>'RSS 0.91 XSLT Stylesheet',
|
|
menuTitle=>'RSS 0.91 XSLT',
|
|
url=>'xslt/rss0.91.xsl',
|
|
mimeType=>'application/xml',
|
|
startDate=>time(),
|
|
endDate=>time()+ 60*60*24*365*10,
|
|
groupEditId=>4,
|
|
groupViewId=>2,
|
|
snippet=>$snippet091
|
|
},'SynConXSLT000000000002'
|
|
);
|
|
}
|
|
|
|
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
sub add_10xslt{
|
|
my $folder=shift;
|
|
my $snippet10=q|<?xml version="1.0" encoding="utf-8"?>
|
|
<!--
|
|
Title: RSS 1.0 XSL Template
|
|
Author: Rich Manalang (http://manalang.com)
|
|
Description: This sample XSLT will convert any valid RSS 1.0 feed to HTML.
|
|
-->
|
|
<xsl:stylesheet version="1.0"
|
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
xmlns:foo="http://purl.org/rss/1.0/">
|
|
<xsl:output method="html"/>
|
|
<xsl:template match="/">
|
|
<style>
|
|
<xsl:comment>
|
|
.syndication-content-area {
|
|
}
|
|
.syndication-title {
|
|
font-size: 1.1em;
|
|
font-weight: bold;
|
|
}
|
|
.syndication-description {
|
|
font-size: .9em;
|
|
margin: 0 0 10px 0;
|
|
}
|
|
.syndication-list {
|
|
font-size: .8em;
|
|
margin:0 0 0 20px;
|
|
}
|
|
.syndication-list-item {
|
|
margin: 0 0 5px 0;
|
|
}
|
|
li.syndication-list-item{
|
|
padding-bottom: .2em;
|
|
background-color: #e4e4e4;
|
|
}
|
|
.syndication-list-item a,
|
|
.syndication-list-item a:link {
|
|
color: blue;
|
|
}
|
|
.syndication-list-item a:active,
|
|
.syndication-list-item a:hover {
|
|
color: red;
|
|
}
|
|
.syndication-list-item a:visited {
|
|
color: black;
|
|
text-decoration: none;
|
|
}
|
|
.syndication-list-item-date {
|
|
font-size: .8em;
|
|
}
|
|
.syndication-list-item-description {
|
|
font-size: .9em;
|
|
}
|
|
</xsl:comment>
|
|
</style>
|
|
<xsl:apply-templates select="/rdf:RDF/foo:channel"/>
|
|
</xsl:template>
|
|
<xsl:template match="/rdf:RDF/foo:channel">
|
|
<div class="syndication-content-area">
|
|
You're viewing an <a href="http://web.resource.org/rss/1.0/">RSS version 1.0 feed</a>. Please use an RSS feed reader to view this content as intended.
|
|
<div class="syndication-title">
|
|
<xsl:value-of select="foo:title"/>
|
|
</div>
|
|
<div class="syndication-description">
|
|
<xsl:value-of select="foo:description"/>
|
|
</div>
|
|
<ul class="syndication-list">
|
|
<xsl:apply-templates select="/rdf:RDF/foo:item"/>
|
|
</ul>
|
|
|
|
</div>
|
|
</xsl:template>
|
|
<xsl:template match="/rdf:RDF/foo:item">
|
|
<li class="syndication-list-item">
|
|
<a href="{foo:link}" title="{foo:description}">
|
|
<xsl:value-of select="foo:title"/>
|
|
</a>
|
|
<span class="syndication-list-item-date">
|
|
(
|
|
<xsl:value-of select="dc:date"/>)
|
|
</span>
|
|
|
|
<div class="syndication-list-item-description">
|
|
<xsl:value-of select="foo:description"/>
|
|
</div>
|
|
</li>
|
|
</xsl:template>
|
|
</xsl:stylesheet>
|
|
|;
|
|
my $snippet=$folder->addChild(
|
|
{
|
|
className=>'WebGUI::Asset::Snippet',
|
|
title=>'RSS 1.0 XSLT Stylesheet',
|
|
menuTitle=>'RSS 1.0 XSLT',
|
|
mimeType=>'application/xml',
|
|
url=>'xslt/rss1.0.xsl',
|
|
startDate=>time(),
|
|
endDate=>time()+ 60*60*24*365*10,
|
|
groupEditId=>4,
|
|
groupViewId=>2,
|
|
snippet=>$snippet10
|
|
},'SynConXSLT000000000003'
|
|
);
|
|
}
|
|
|
|
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
sub add_20xslt{
|
|
my $folder=shift;
|
|
my $snippet20=q|<?xml version="1.0"?>
|
|
<!--
|
|
Title: RSS 2.0 XSL Template
|
|
Author: Rich Manalang (http://manalang.com)
|
|
Description: This sample XSLT will convert any valid RSS 2.0 feed to HTML.
|
|
-->
|
|
<xsl:stylesheet version="1.0"
|
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|
xmlns:wfw="http://wellformedweb.org/CommentAPI/">
|
|
<xsl:output method="html"/>
|
|
<xsl:template match="/">
|
|
<style>
|
|
<xsl:comment>
|
|
.syndication-content-area {
|
|
}
|
|
.syndication-title {
|
|
font-size: 1.1em;
|
|
font-weight: bold;
|
|
}
|
|
.syndication-description {
|
|
font-size: .9em;
|
|
margin: 0 0 10px 0;
|
|
}
|
|
.syndication-list {
|
|
font-size: .8em;
|
|
margin:0 0 0 20px;
|
|
}
|
|
.syndication-list-item {
|
|
margin: 0 0 5px 0;
|
|
}
|
|
li.syndication-list-item{
|
|
padding-bottom: .2em;
|
|
background-color: #e4e4e4;
|
|
}
|
|
.syndication-list-item a,
|
|
.syndication-list-item a:link {
|
|
color: blue;
|
|
}
|
|
.syndication-list-item a:active,
|
|
.syndication-list-item a:hover {
|
|
color: red;
|
|
}
|
|
.syndication-list-item a:visited {
|
|
color: black;
|
|
text-decoration: none;
|
|
}
|
|
.syndication-list-item-date {
|
|
font-size: .8em;
|
|
}
|
|
.syndication-list-item-description {
|
|
font-size: .9em;
|
|
}
|
|
</xsl:comment>
|
|
</style>
|
|
<xsl:apply-templates select="/rss/channel"/>
|
|
</xsl:template>
|
|
<xsl:template match="/rss/channel">
|
|
<div class="syndication-content-area">
|
|
You're viewing an <a href="http://blogs.law.harvard.edu/tech/rss">RSS version 2.0 feed</a>. Please use an RSS feed reader to view this content as intended.
|
|
<div class="syndication-title">
|
|
<xsl:value-of select="title"/>
|
|
</div>
|
|
<div class="syndication-description">
|
|
<xsl:value-of select="description"/>
|
|
</div>
|
|
<ul class="syndication-list">
|
|
<xsl:apply-templates select="item"/>
|
|
</ul>
|
|
|
|
</div>
|
|
</xsl:template>
|
|
<xsl:template match="/rss/channel/item">
|
|
<li class="syndication-list-item">
|
|
<a href="{link}" title="{description}">
|
|
<xsl:value-of select="title"/>
|
|
</a>
|
|
<span class="syndication-list-item-date">
|
|
(<xsl:value-of select="pubDate"/>)
|
|
</span>
|
|
|
|
<div class="syndication-list-item-description">
|
|
<xsl:value-of select="description"/>
|
|
</div>
|
|
</li>
|
|
</xsl:template>
|
|
</xsl:stylesheet>|;
|
|
|
|
my $snippet=$folder->addChild(
|
|
{
|
|
className=>'WebGUI::Asset::Snippet',
|
|
title=>'RSS 2.0 XSLT Stylesheet',
|
|
menuTitle=>'RSS 2.0 XSLT',
|
|
url=>'xslt/rss2.0.xsl',
|
|
mimeType=>'application/xml',
|
|
startDate=>time(),
|
|
endDate=>time()+ 60*60*24*365*10,
|
|
groupEditId=>4,
|
|
groupViewId=>2,
|
|
snippet=>$snippet20
|
|
},'SynConXSLT000000000004'
|
|
);
|
|
}
|
|
|
|
|
|
|