#! /usr/bin/perl $workpath = "/tmp"; use CGI qw(:standard); use Pg; $query = new CGI; $dbmain = "ldp"; @row; # Read parameters $doc_id = param('doc_id'); $conn=Pg::connectdb("dbname=$dbmain"); die $conn->errorMessage unless PGRES_CONNECTION_OK eq $conn->status; $username = $query->remote_user(); $result=$conn->exec("SELECT username, admin, maintainer_id FROM username WHERE username='$username'"); @row = $result->fetchrow; if ($username ne $row[0]) { print $query->redirect("../newaccount.html"); exit; } else { if (($row[1] ne 't') and ($row[2] != $doc_id)) { print $query->redirect("../wrongpermission.html"); exit; } } $save = param('Save'); $preview = param('Preview'); $docbook = param('DocBook'); $wiki = param('wiki'); while ($wiki =~ /\'/) { $wiki =~ s/\'/a1s2d3f4/; } while ($wiki =~ /a1s2d3f4/) { $wiki =~ s/a1s2d3f4/\'\'/; } $notes = param('notes'); while ($notes =~ /\'/) { $notes =~ s/\'/a1s2d3f4/; } while ($notes =~ /a1s2d3f4/) { $notes =~ s/a1s2d3f4/\'\'/; } $revision = param('revision'); $username = $query->remote_user(); if ($save) { #find out how many prior revisions there were $result = $conn->exec("SELECT count(*) FROM document_wiki WHERE doc_id = $doc_id"); die $conn->errorMessage unless PGRES_TUPLES_OK eq $result->resultStatus; @row = $result->fetchrow; $revisions = $row[0]; if ($revisions >= $revision ) { &printheader; print "

Edit conflict!\n"; print "

You were editing version $revisions, but trying to save to version $revision\n"; print end_html; } else { $revision = $revisions + 1; $sql = "INSERT INTO document_wiki(doc_id, revision, date_entered, wiki, notes, username) VALUES ($doc_id, $revision, now(), '$wiki', '$notes', '$username')"; $result=$conn->exec($sql); print $query->redirect("document_edit.pl?doc_id=$doc_id"); } exit; } #load document meta-data $result = $conn->exec("SELECT title, filename FROM document WHERE doc_id = $doc_id"); die $conn->errorMessage unless PGRES_TUPLES_OK eq $result->resultStatus; @row = $result->fetchrow; $title = $row[0]; $title =~ s/\s+$//; $filename = $row[1]; #find out how many prior revisions there were $result = $conn->exec("SELECT count(*) FROM document_wiki WHERE doc_id = $doc_id"); die $conn->errorMessage unless PGRES_TUPLES_OK eq $result->resultStatus; @row = $result->fetchrow; $revisions = $row[0]; #if we're not previewing, load data from database and determine version unless ($preview or $docbook) { $result = $conn->exec("SELECT wiki FROM document_wiki WHERE doc_id = $doc_id ORDER BY revision DESC LIMIT 1, 0"); die $conn->errorMessage unless PGRES_TUPLES_OK eq $result->resultStatus; @row = $result->fetchrow; $revision = $revisions + 1; $wiki = $row[0]; $wiki =~ s/\s+$//; &printheader; print "

\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; if ($revisions == 0) { print "\n"; } else { print "\n"; } print "
Document Text
Comments:
There are no previous versions of this document. Your changes will be saved as version $revision
You are editing version $revisions. Your changes will be saved as version $revision
\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print end_html; } if ($preview or $docbook) { $txtfile = "$workpath/foo.txt"; $sgmlfile = $txtfile; $sgmlfile =~ s/\.txt/\.sgml/; $htmlfile = $txtfile; $htmlfile =~ s/\.txt/\.html/; open(TXT, "> $txtfile"); print TXT $wiki; close(TXT); $cmd = "/usr/lib/cgi-bin/gldp.org/txt2db.pl -o $sgmlfile $txtfile"; system($cmd); $sgml = '' . "\n"; $sgml .= "
\n"; $sgml .= "\n"; $result = $conn->exec("SELECT title, last_update, abstract FROM document WHERE doc_id = $doc_id"); die $conn->errorMessage unless PGRES_TUPLES_OK eq $result->resultStatus; while (@row = $result->fetchrow) { $title = $row[0]; $date = $row[1]; $abstract = $row[2]; $sgml .= "$title\n"; $sgml .= "$date\n"; $sgml .= "$date\n"; $sgml .= "$abstract\n"; } $result = $conn->exec("SELECT m.maintainer_name, dm.email FROM document_maintainer dm, maintainer m WHERE doc_id = $doc_id AND dm.maintainer_id = m.maintainer_id AND active='t'"); die $conn->errorMessage unless PGRES_TUPLES_OK eq $result->resultStatus; while (@row = $result->fetchrow) { $name = $row[0]; $email = $row[1]; $sgml .= "\n"; $sgml .= "\n"; $sgml .= "
\n"; $sgml .= "$name\n"; $sgml .= "
\n"; $sgml .= "
\n"; $sgml .= "
\n"; } $sgml .= "
\n"; open(SGML, $sgmlfile); while () { $line = $_; $sgml .= $line; while ($line =~ //) { $line =~ s/>/>/; } $buf .= "
$line"; } close(SGML); $sgml .= "
\n"; open(SGML, "> $sgmlfile"); print SGML $sgml; close(SGML); } if ($docbook) { &printheader; print "


\n"; print "
\n";
	while ($sgml =~ /\/) {
		$sgml =~ s/\>/>/;
	}
	print $sgml;
	print "
\n"; print "\n"; } if ($preview) { $cmd = "xsltproc --docbook /usr/share/sgml/docbook/stylesheet/xsl/nwalsh/html/docbook.xsl $sgmlfile > $htmlfile"; system($cmd); print header(-expires=>'now'); open(HTML, "$htmlfile"); $i = 0; while () { $line = $_; $i += 1; # if ($i > 8) { print $line; # } } close(HTML); } sub printheader { print header(-expires=>'now'); print "$title Wiki"; print ""; print ""; print ""; print "

$title Wiki

\n"; print "

Index "; print "Documents "; print "Topics "; print "Maintainers "; print "Editors "; print "Statistics "; print "Help "; print "

"; print "Meta-Data\n"; print " | "; print "Version History\n"; }