226 lines
6.9 KiB
Perl
Executable File
226 lines
6.9 KiB
Perl
Executable File
#!/usr/local/bin/perl
|
|
# ==================================================================
|
|
# Gossamer Links - enhanced directory management system
|
|
#
|
|
# Website : http://gossamer-threads.com/
|
|
# Support : http://gossamer-threads.com/scripts/support/
|
|
# CVS Info : 087,071,086,086,085
|
|
# Revision : $Id: nph-index.cgi,v 1.38 2006/05/04 02:52:10 brewt Exp $
|
|
#
|
|
# Copyright (c) 2001 Gossamer Threads Inc. All Rights Reserved.
|
|
# Redistribution in part or in whole strictly prohibited. Please
|
|
# see LICENSE file for full details.
|
|
# ==================================================================
|
|
|
|
# Load Time::HiRes if available for better time checking.
|
|
# Must appear here, or we get strange errors.
|
|
BEGIN { eval { require Time::HiRes; import Time::HiRes qw/time/; }; }
|
|
|
|
use strict;
|
|
use lib '/var/home/slowtwitch/slowtwitch.com/cgi-bin/articles/admin';
|
|
use Links qw/:objects/;
|
|
|
|
$| = 1;
|
|
local $SIG{__DIE__} = \&Links::fatal;
|
|
Links::init('/var/home/slowtwitch/slowtwitch.com/cgi-bin/articles/admin');
|
|
Links::init_admin();
|
|
|
|
main();
|
|
|
|
sub main {
|
|
# -------------------------------------------------------------------
|
|
# Reindexes the entire database.
|
|
#
|
|
if (! $ENV{REQUEST_METHOD} ) {
|
|
if (! @ARGV) {
|
|
return usage();
|
|
}
|
|
else {
|
|
if ($ARGV[0] =~ /change-driver=(\w+)/) {
|
|
$PLG->dispatch('change_driver', \&change_driver, "$1");
|
|
}
|
|
elsif ($ARGV[0] =~ /reindex/) {
|
|
$PLG->dispatch('reindex_database', \&reindex);
|
|
}
|
|
else {
|
|
print "Invalid Argument: @ARGV\n";
|
|
return usage();
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
$PLG->dispatch('reindex_database', \&reindex);
|
|
}
|
|
}
|
|
|
|
sub usage {
|
|
# ------------------------------------------------------------------
|
|
# Print a usage summary.
|
|
#
|
|
require GT::SQL::Search;
|
|
my $drivers = join ",", GT::SQL::Search->available_drivers;
|
|
print <<END_OF_USAGE;
|
|
|
|
USAGE: $0 [ --change-driver=DRIVER --reindex ]
|
|
|
|
This utility will either rebuild a search index, or allow you to switch
|
|
between different search drivers.
|
|
|
|
The following drivers are currently available:
|
|
|
|
$drivers
|
|
|
|
To switch to a new driver, pass in the driver you want to use like:
|
|
|
|
$0 --change-driver=MYSQL
|
|
|
|
To rebuild the search index, call:
|
|
|
|
$0 --reindex
|
|
|
|
END_OF_USAGE
|
|
|
|
}
|
|
|
|
sub reindex {
|
|
# -------------------------------------------------------------------
|
|
# Do a database re-index.
|
|
#
|
|
my ($s, $e, $f, $t, $in, $links, $category, $total, $found, $weights, $use_html);
|
|
|
|
# Print full header.
|
|
$s = time();
|
|
$t = scalar localtime;
|
|
|
|
$use_html = $ENV{REQUEST_METHOD} ? 1 : 0;
|
|
|
|
if ($use_html) {
|
|
print $IN->header ( -nph => $CFG->{nph_headers} );
|
|
print qq~
|
|
<html>
|
|
<head>
|
|
<title>Reindexing Database</title>
|
|
</head>
|
|
<body bgcolor="white">
|
|
<table border="1" cellpadding="0" cellspacing="0"><tr><td>
|
|
<table bgColor="#ffffff" border="0" cellPadding="3" cellSpacing="3" width="500" valign="top">
|
|
<tr>
|
|
<td align="left" bgColor="navy"><b><font color="#ffffff" size="2" face="Tahoma,Arial,Helvetica">Reindexing Database ...</font></b></td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<p align="center"><b><font color="#000000" size="2" face="Tahoma,Arial,Helvetica">Reindexing Database ...</font></b></p>
|
|
<p><font size="2" face="Tahoma,Arial,Helvetica">Gossamer Links is now going to re-index your database, please be patient, this can take a while. Please note: this is only neccessary if you have manually changed the database outside of Gossamer Links.</font>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</td></tr>
|
|
</table>
|
|
~;
|
|
print qq~
|
|
<pre>Started at $t.
|
|
|
|
Indexing Links Database ... ~;
|
|
}
|
|
else {
|
|
print "Started at $t.\n\nReindexing Gossamer Links Database ... ";
|
|
}
|
|
|
|
# Get our Links db object.
|
|
$links = $DB->table('Links');
|
|
if ($links->{schema}->{search_driver} ne 'NONINDEXED') {
|
|
$total = $links->count(VIEWABLE) || 0;
|
|
$weights = $links->weight || {};
|
|
$found = 0;
|
|
foreach (keys %$weights) {
|
|
$weights->{$_} > 0 and ($found = 1);
|
|
}
|
|
if (! $found) {
|
|
if ($use_html) {
|
|
print "<font color=red><b>No search weights have been defined, skipping!</b></font>\n";
|
|
}
|
|
else {
|
|
print "No search weights have been defined, skipping!\n\n";
|
|
}
|
|
}
|
|
else {
|
|
print "$total links.\n";
|
|
$links->reindex( { tick => 1000, max => 10000, cond => VIEWABLE } );
|
|
print "\nDone!\n\n";
|
|
}
|
|
}
|
|
else {
|
|
if ($use_html) {
|
|
print "<font color=red><b>Links table is using the NONINDEXED indexing scheme, skipping!</b></font>\n";
|
|
}
|
|
else {
|
|
print "Links table is using the NONINDEXED indexing scheme, skipping!\n\n";
|
|
}
|
|
}
|
|
|
|
print "Reindexing Category Database ... ";
|
|
$category = $DB->table('Category');
|
|
if ($category->{schema}->{search_driver} ne 'NONINDEXED') {
|
|
$total = $category->count || 0;
|
|
$weights = $category->weight || {};
|
|
$found = 0;
|
|
foreach (keys %$weights) {
|
|
$weights->{$_} > 0 and ($found = 1);
|
|
}
|
|
if (! $found) {
|
|
if ($use_html) {
|
|
print "<font color=red><b>No search weights have been defined, skipping!</b></font>\n";
|
|
}
|
|
else {
|
|
print "No search weights have been defined, skipping!\n\n";
|
|
}
|
|
}
|
|
else {
|
|
print "$total categories.\n";
|
|
$category->reindex( { tick => 1000, max => 10000 } );
|
|
|
|
print "\nDone!\n\n";
|
|
}
|
|
}
|
|
else {
|
|
if ($use_html) {
|
|
print "<font color=red><b>Category table is using the NONINDEXED indexing scheme, skipping!</b></font>\n";
|
|
}
|
|
else {
|
|
print "Category table is using the NONINDEXED indexing scheme, skipping!\n\n";
|
|
}
|
|
}
|
|
|
|
# All done.
|
|
$f = time();
|
|
$e = $f - $s;
|
|
printf ("All Done (%.2f s)\n\n", $e);
|
|
if ($use_html) {
|
|
print "</pre></body></html>";
|
|
}
|
|
}
|
|
|
|
sub change_driver {
|
|
# -------------------------------------------------------------------
|
|
my $new_driver = shift or die "Please supply a drivername to change to";
|
|
|
|
my $err = '';
|
|
my $eLinks = $DB->editor('Links');
|
|
my $eCats = $DB->editor('Category');
|
|
|
|
print "Please be warned that this action may take an extended period of time to complete\n\n";
|
|
print "Updating Links Table search driver...\n";
|
|
print " "x5, $eLinks->change_search_driver( $new_driver ) ? "Completed\n" : ( $err = "Error: $GT::SQL::error\n" );
|
|
|
|
print "\nUpdating Category Table search driver...\n";
|
|
print " "x5, $eCats->change_search_driver( $new_driver ) ? "Completed\n" : ( $err ="Error: $GT::SQL::error\n" );
|
|
|
|
if ($err) {
|
|
print "\nThere were problems switching drivers.\n\n";
|
|
}
|
|
else {
|
|
print "\nThe drivers have now been switched. Please be sure to reindex the tables.\n\n";
|
|
}
|
|
}
|
|
|