1#!/usr/bin/perl
2
3# $Id: maint.pl 11896 2003-03-04 21:21:05Z ralfbecker $
4#
5# This script is used by WikkiTikkiTavi versions 0.1 and greater to maintain
6# the list of known remote pages.  This is used by the TwinPages feature.
7# Typically, it will be set up as a cron job to run periodically (e.g.,
8# once per week).
9#
10# See http://tavi.sourceforge.net/SisterWiki for more information.
11
12$database = "";                         # Database name.
13$user     = "";                         # Database use name.
14$pass     = "";                         # Database password.
15$prefix   = "";                         # Table name prefix (e.g. "wiki_").
16$linkptn  = "([A-Z][a-z]+[A-Z][A-Za-z]*(/[A-Z][A-Za-z]+)?)";
17
18use DBI;
19
20$dbh = DBI->connect("DBI:mysql:$database:127.0.0.1", $user, $pass)
21       or die "Connecting: $DBI::errstr\n";
22
23sub insert_page
24{
25  my ($page) = @_;
26  my ($qid);
27
28  $qid = $dbh->prepare("SELECT page FROM " . $prefix . "remote_pages " .
29                       "WHERE site='$site' and page='$page'");
30  $qid->execute;
31  if(!$qid->fetchrow_hashref)
32  {
33    $qid = $dbh->prepare("INSERT INTO " . $prefix . "remote_pages " .
34                         "VALUES('$page', '$site')");
35    $qid->execute;
36  }
37
38  return "";
39}
40
41$qid = $dbh->prepare("SELECT prefix, url FROM " . $prefix . "sisterwiki)");
42$qid->execute;
43
44while($row = $qid->fetchrow_hashref)
45{
46  $site = $row->{'prefix'};
47  print "Scanning $site\n";
48
49  $_ = "lynx -source " . $row->{'url'};
50  s/&/\\&/g;
51  s/;/\\;/g;
52  $html = `$_`;
53
54  $q2 = $dbh->prepare("DELETE FROM " . $prefix . "remote_pages " .
55                       "WHERE site='$site'");
56  $q2->execute;
57
58  foreach(split(/\n/, $html))
59  {
60    s/<[Aa].*>($linkptn)<\/[Aa]>/&insert_page($1)/geo;
61  }
62}
63
64