Date: Saturday January 4, 2003 @ 0:39
Author: matt
Update of /home/cvs/AxKit-XSP-Wiki/lib/AxKit/XSP
In directory ted.sergeant.org:/home/matt/Perl/AxKit-XSP-Wiki/lib/AxKit/XSP
Modified Files:
Wiki.pm
Log Message:
Lots of cleanup and added stuff
Log:
PR:
Index: Wiki.pm
===================================================================
RCS file: /home/cvs/AxKit-XSP-Wiki/lib/AxKit/XSP/Wiki.pm,v
retrieving revision 1.7
retrieving revision 1.8
diff -b -u -r1.7 -r1.8
--- Wiki.pm 2002/12/29 17:47:05 1.7
+++ Wiki.pm 2003/01/04 00:39:06 1.8
@@ -14,6 +14,7 @@
@EXPORT_TAGLIB = (
'display_page($dbpath,$db,$page,$action;$id):as_xml=1',
+ 'preview_page($dbpath,$db,$page,$text,$texttype):as_xml=1',
);
use DBI;
@@ -62,6 +63,68 @@
}
}
+sub preview_page ($$$$$) {
+ my ($dbpath, $dbname, $page, $text, $texttype) = @_;
+ my $db = _mkdb($dbpath, $dbname);
+ my $sth = $db->prepare(<<'EOT');
+ SELECT Formatter.module
+ FROM Formatter
+ WHERE Formatter.id = ?
+EOT
+ $sth->execute($texttype);
+
+ my $output = '';
+ my $handler = XML::SAX::Writer->new(Output => \$output);
+ while ( my $row = $sth->fetch ) {
+ # create the parser
+ my $parser = $row->[0]->new(Handler => $handler);
+ eval {
+ $parser->parse_string($text);
+ };
+ if ($@) {
+ $output = '<pod>
+ <para>
+ Error parsing the page: ' . xml_escape($@) . '
+ </para>
+</pod>
+ ';
+ }
+ last;
+ }
+ if (!$output) {
+ $output = <<'EOT';
+<pod>
+ <para>
+Eek.
+ </para>
+</pod>
+EOT
+ }
+
+ $output =~ s/^<\?xml\s.*?\?>//s;
+
+ # Now add edit stuff
+ $output .= '<edit><text>';
+ $output .= xml_escape($text);
+ $output .= '</text><texttypes>';
+
+ $sth = $db->prepare(<<'EOT');
+ SELECT Formatter.id, Formatter.name
+ FROM Formatter
+EOT
+ $sth->execute();
+ while (my $row = $sth->fetch) {
+ $output .= '<texttype id="'. xml_escape($row->[0]) .
+ ($texttype == $row->[0] ? '" selected="selected">' : '">') .
+ xml_escape($row->[1]) . '</texttype>';
+ }
+ $sth->finish;
+
+ $output .= '</texttypes></edit>';
+
+ return $output;
+} # preview
+
sub view_page {
my ($db, $page) = @_;
my $sth = $db->prepare(<<'EOT');
@@ -92,15 +155,11 @@
}
if (!$output) {
$output = <<'EOT';
-<pod>
- <para>
-New page
- </para>
-</pod>
+<newpage/>
EOT
}
$output =~ s/^<\?xml\s.*?\?>//s;
-AxKit::Debug(1, "Wiki Got: $output");
+ AxKit::Debug(10, "Wiki Got: $output");
return $output;
}
@@ -108,6 +167,7 @@
my $text = shift;
$text =~ s/&/&/g;
$text =~ s/</</g;
+ $text =~ s/]]>/]]>/g;
return $text;
}
@@ -149,14 +209,14 @@
}
sub save_page {
- my ($dbpath, $dbname, $page, $contents, $texttype, $ip) = @_;
-
+ my ($dbpath, $dbname, $page, $contents, $texttype, $ip, $rss) = @_;
+ $rss = [$rss, _mkrssheader($dbname)];
my $db = _mkdb($dbpath, $dbname);
- _save_page($db, $page, $contents, $texttype, $ip);
+ _save_page($db, $page, $contents, $texttype, $ip, $rss);
}
sub _save_page {
- my ($db, $page, $contents, $texttype, $ip) = @_;
+ my ($db, $page, $contents, $texttype, $ip, $rss) = @_;
# NB fix hard coded formatterid
my $last_modified = time;
my (@row) = $db->selectrow_array("SELECT * FROM Page WHERE name = ?", {}, $page);
@@ -166,6 +226,27 @@
$db->do('INSERT INTO History (name, formatterid, content, modified,
ip_address)
VALUES (?, ?, ?, ?, ?)', {}, @row);
}
+ else {
+ # New page
+ if ($rss->[0]) {
+ use Fatal qw(open close);
+ open(RSS, ">$rss->[0]");
+ flock(RSS, 2); # lock ex
+ print RSS $rss->[1];
+ my $sth = $db->prepare('SELECT * FROM Page ORDER BY last_modified DESC');
+ $sth->execute;
+ while (my $row = $sth->fetch) {
+ print RSS <<"EOT";
+<item>
+<title>$row->[1]</title>
+</item>
+EOT
+ }
+ print RSS "</rdf:RDF>\n";
+ flock(RSS, 8); # unlock
+ close(RSS);
+ }
+ }
my $sth = $db->prepare(<<'EOT');
INSERT OR REPLACE INTO Page ( name, formatterid, content, last_modified, ip_address
)
VALUES ( ?, ?, ?, ?, ? )
@@ -174,6 +255,25 @@
$db->commit;
}
+sub _mkrssheader {
+ my ($dbname) = @_;
+ return <<"EOT";
+<rdf:RDF
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns="http://purl.org/rss/1.0/"
+>
+
+ <channel rdf:about="http://take23.org/view/$dbname">
+ <title>$dbname</title>
+ <link>http://take23.org/view/$dbname</link>
+ <description>
+ Take23 $dbname
+ </description>
+
+EOT
+}
+
sub show_history {
my ($db, $page) = @_;
my $sth = $db->prepare('SELECT * FROM History WHERE name = ? ORDER BY modified
DESC');
@@ -291,6 +391,24 @@
insert into Formatter (module, name) values ('XML::LibXML::SAX::Parser', 'xml
(freeform)')
});
$db->commit;
+}
+
+sub extract_page_info {
+ my ($path_info) = @_;
+ $path_info =~ s/^\///;
+ my ($db, $page) = split("/", $path_info, 2);
+ $page ||= ''; # can't have page named 0. Ah well.
+
+ if (!$db) {
+ return ('', '');
+ }
+ elsif ($db !~ /^[A-Z][A-Za-z0-9:_-]+$/) {
+ die "Invalid db name: $db";
+ }
+ elsif (length($page) && $page !~ /^[A-Z][A-Za-z0-9:_-]+$/) {
+ die "Invalid page name: $page";
+ }
+ return ($db, $page);
}
1;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]