⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.pm

📁 Insipid 是一款基于Web书签仓库。很方面的记录下各种输入输出信息。
💻 PM
📖 第 1 页 / 共 3 页
字号:
	      }	    }	    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 "&nbsp;";  }      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 + -