📄 main.pm
字号:
} } if(param('op') eq 'bookmarklets') { my $ad = <<BLET; javascript:location.href='$site_url/insipid.cgi?op=add_bookmark&url='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title)+'&redirect=true'BLET print "<ul><li><a href=\"$ad\">Post This Page</a></li></ul>"; print "</body></html>"; exit; } if(param('op') eq 'options') { show_options(); print "</body></html>"; exit; } } } foreach (@errors) { print "<div class=\"error\">$_</div>"; } show_bookmarks(); print "<br /><br /></body></html>";} # main################################################################sub show_options { # Save options if they were posted. print "<br /><br />"; if(param('save')) { print "<div class=\"error\">Your options have been saved.</div>"; my %save; foreach my $p (@valid) { if(param($p)) { $save{$p} = param($p); } } foreach my $k (keys %save) { my $sql = "update options set value=? where name=(?)"; my $sth = $dbh->prepare($sql); $sth->execute($save{$k}, $k); } } # Now show em my $sql = "select name, description, value from options"; my $sth = $dbh->prepare($sql); $sth->execute(); print "<form method=\"post\">"; print "<table id=\"options\" cellpadding=5 cellspacing=5>"; while(my $hr = $sth->fetchrow_hashref) { print "<td>$hr->{'description'}</td>"; if($hr->{'name'} eq 'version') { print "<td>$hr->{'value'}</td>"; } else { print "<td><input name=\"$hr->{'name'}\" value=\"$hr->{'value'}\" /></td>"; } print "</tr>"; } print "<input type=hidden name=op value=options>"; print "<input type=hidden name=save value=yes>"; print "<tr><td></td><td><input type='submit' value='Save'></td></tr>"; print "</table></form>";}sub show_footer { my $older = 2; if(defined(url_param('page'))) { $older = url_param('page') + 1; } if($last_page eq 0) { if($query ne "") { print " | <a href=\"?page=$older&q="; print $query; print "\">More Results</a>"; } else { print " | <a href=\"?page=$older\">older</a>"; } }}sub do_import { my $old_fh = select(OUTPUT_HANDLE); my $cbuffer = ""; my $pcount = 0; $| = 1; select($old_fh); my ($omd5, $ourl, $otype, $olength, $odate, $sql); $sql = "insert into pagecache_references (md5_parent, md5_child) values(?,?)"; my $insert_reference = $dbh->prepare($sql); $sql = "insert into pagecache (md5,url,content_type, content_length,content,date) values(?,?,?,?,?,?)"; my $insert_snapshot = $dbh->prepare($sql); my $parser = new XML::Parser(); $parser->setHandlers(Start => sub { my %attr; my $expat = shift; my $element = shift; while(@_) { my $att = shift; my $val = shift; $attr{$att} = $val; } # A pagecache object if($element eq "object") { $omd5 = $attr{'md5'}; $ourl = $attr{'url'}; $otype = $attr{'type'}; $olength = $attr{'length'}; $odate = $attr{'date'}; } # A pagecache relationship if($element eq "relationship") { my $parent = $attr{parent}; my $child = $attr{child}; $insert_reference->execute($parent, $child); } # A bookmark if($element eq "post") { my $url = $attr{href}; my $title = $attr{description}; my $tagvalue = $attr{tag}; my $datevalue = $attr{time}; my $access_level; if(defined($attr{access_level})) { $access_level = $attr{access_level}; } else { $access_level = 1; } my $epoch = str2time($datevalue); if($tagvalue eq "system:unfiled") { $tagvalue = ""; } add_bookmark($url, $title, "", $access_level, $epoch, $tagvalue); } }, Char => sub { my $expat = shift; my $chars = shift; $cbuffer = $cbuffer . $chars; undef $chars; }, End => sub { my $expat = shift; my $element = shift; if($element eq 'object') { $insert_snapshot->bind_param(1, $omd5); $insert_snapshot->bind_param(2, $ourl); $insert_snapshot->bind_param(3, $otype); $insert_snapshot->bind_param(4, $olength); if($dbtype eq "Pg") { $insert_snapshot->bind_param(5, decode_base64($cbuffer), SQL_BINARY); } else { $insert_snapshot->bind_param(5, decode_base64($cbuffer)); } $insert_snapshot->bind_param(6, $odate); $insert_snapshot->execute; if(!defined($DBI::errstr)) { $pcount++; } $cbuffer = ""; } }); my $source = 'S'; if(defined(param('from'))) { $source = param('from'); } if($source eq 'L') { my $xml = ""; my $fh = upload('fileupload'); while(<$fh>) { $xml .= $_; } $parser->parse($xml); } else { my $filename; if(defined(param('filename'))) { $filename = param('filename'); } else { $filename = $ARGV[0]; } print "Reading $filename...$NL"; open(RND, $filename); $parser->parse(*RND, ProtocolEncoding => 'UTF-8'); close(RND); } print "Import successful - $icount bookmarks and $pcount snapshot objects imported.$NL"}sub do_export { my ($target, $filename) = (@_); my $writer; if($target eq 'L') { print "Content-Type: text/xml;charset=UTF-8\r\n\r\n";# print "Content-Disposition: attachment; filename=bookmarks.xml\r\n\r\n"; $writer = new XML::Writer(ENCODING => "utf-8"); } else { # Server side if($filename eq "") { push(@errors, "You need to specify a filename."); return; } my $output = new IO::File(">$filename"); $writer = new XML::Writer(ENCODING => "utf-8", OUTPUT => $output); } $writer->xmlDecl("UTF-8"); $writer->startTag("insipid"); export_bookmarks($writer); if(defined(param('snapshots'))) { export_snapshots($writer); } $writer->endTag("insipid"); $writer->end(); if($target eq 'L') { exit; } else { push(@errors, "Export to $filename successful."); } }sub login_form { print <<FORM;<br /><form method="post" action="$site_url/insipid.cgi"><span class="formtext">Username:</span><br /><input style="width:250px" name="username" /><br /><span class="formtext">Password:</span><br /><input style="width:250px" name="password" type="password" /><br /><input type="submit" value="Login" /></form><br />FORM}sub show_toolbar { my $rdata = ""; if(defined(url_param('tag'))) { $rdata = "/" . url_param('tag'); $rdata =~ s/ /\+/g; } # Toolbar print "<center>"; print "<table border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"3\"><tr>"; print "<td valign=\"top\" bgcolor=\"#CCCCCC\">"; # Title print "<div class=\"title\"><a href=\"$site_url/bookmarks\">$site_title</a></div>"; if((get_option("public_searches") eq "yes") || ($logged_in eq 1)) { print "<div class=\"search\">"; print "<form action=\"$pagepath/bookmarks\" method=\"post\">"; print "<input type=\"text\" name=\"q\"> <input type=\"submit\" value=\"search\">"; print "</form>"; print "</div>"; } else { print " "; } print "</td><td valign=\"top\" bgcolor=\"#CCCCCC\" align=\"right\">"; print "<div class=\"toolbar\">"; if($logged_in eq 1) { print "<a class=\"tools\" href=\"$site_url/insipid.cgi?op=options\">options</a> | "; print "<a class=\"tools\" href=\"$site_url/insipid.cgi?op=import\">import</a> | "; print "<a class=\"tools\" href=\"$site_url/insipid.cgi?op=export\">export</a> | "; print "<a class=\"tools\" href=\"$site_url/insipid.cgi?op=snapshots\">snapshots</a> | "; print "<a class=\"tools\" href=\"$site_url/insipid.cgi?op=logout\">logout</a><br />"; print "<a class=\"tools\" href=\"$site_url/insipid.cgi?op=add_bookmark\">add</a> | "; print "<a class=\"tools\" href=\"$site_url/insipid.cgi?op=bookmarklets\">bookmarklets</a> | "; } print "<a class=\"tools\" href=\"$pagepath/feeds/bookmarks$rdata\">RSS feed</a>"; if($logged_in ne 1) { print " | <a class=\"tools\" href=\"$site_url/insipid.cgi?op=login\">login</a>"; } print " | <a class=\"tools\" href=\"javascript:void window.open('$site_url/help.html','width=300,height=500');\">help</a> "; print " | <a class=\"tools\" href=\"http://www.neuro-tech.net/insipid/\">source</a>"; print "</div></tr></table></center>";}sub delete_bookmark { my($id) = (@_); my($sql, $sth, $md5) = ("", "", ""); if($logged_in ne 1) { push(@errors, "You have to be logged in to perform that operation."); return; } # Check for cached version to delete. $sql = "select pagecache.md5 from pagecache join bookmarks on (pagecache.md5 = bookmarks.md5) where (bookmarks.id = ?)"; $sth = $dbh->prepare($sql); $sth->execute($id); while(my @r = $sth->fetchrow_array) { $md5 = $r[0]; } # Drop the tags for the bookmark $sql = "delete from bookmark_tags where (bookmark_id = ?)"; $sth = $dbh->prepare($sql); $sth->execute($id); # Drop the bookmark. $sql = "delete from bookmarks where (id = ?)"; $sth = $dbh->prepare($sql); $sth->execute($id); # Delete the cached page. if($md5 ne "") { delete_snapshot($md5); }}sub send_rss { my @parms; my $ew = ""; my $joins = ""; my $title = get_option("feed_name"); if(url_param('tag')) { if(url_param('tag') =~ / /) { my @tags = split(/ /, url_param('tag')); my $icount = 1; foreach(@tags) { push(@parms, $_); $joins = "$joins join bookmark_tags as bt$icount on (bookmarks.id = bt$icount.bookmark_id) join tags as t$icount on (t$icount.id = bt$icount.tag_id and t$icount.name = ?) "; $icount++; } } else { push(@parms, url_param('tag')); $joins = " join bookmark_tags on (bookmarks.id = bookmark_tags.bookmark_id) join tags on (bookmark_tags.tag_id = tags.id)"; $ew = "and (tags.name = ?)"; } } my $access_where = "where (access_level = 1)"; if($logged_in eq 1) { $access_where = ""; } my $sql = " select bookmarks.id, bookmarks.title, bookmarks.url from bookmarks $joins $access_where $ew order by bookmarks.date desc limit 30"; my $sth = $dbh->prepare($sql); $sth->execute(@parms); print <<RDFHEADER;<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -