#!/usr/bin/perl -w use strict; use CGI; use DBI; use MyConText; use vars qw! $q $dbh !; $q = new CGI; print $q->header('text/html'); print $q->start_html; print "

MyConText Administration

\n"; print $q->dump; if (defined $q->param('dsn')) { my $dsn = $q->param('dsn'); my $user = $q->param('user'); my $password = $q->param('password'); $dbh = DBI->connect($dsn, $user, $password, { 'RaiseError' => 0, 'PrintError' => 1, }); if (defined $dbh and defined $q->param('test_connect')) { print $q->pre("Connect was successfull."), "\n"; } if (not defined $dbh) { print $q->pre("Connect failed:\n$DBI::errstr."), "\n"; offer_dbi_connect(); exit; } my $tables = $dbh->selectall_arrayref('show tables'); my %possible_indexes = map { ( $_->[0] => 1 ) } @$tables if defined $tables; for my $table (keys %possible_indexes) { local $dbh->{'PrintError'} = 0; unless ($dbh->selectrow_array( "select 1 from $table where param = 'data_table'")) { delete $possible_indexes{$table}; } } my @tables = sort keys %possible_indexes; if (@tables) { print "Select existing MyConText index to work with:\n", $q->start_form, $q->scrolling_list('index_name', \@tables), $q->br, $q->submit('test_index', 'Select index'), $q->hidden('dsn'), $q->hidden('user'), $q->hidden('password'), $q->end_form; } else { print "No existing MyConText index was found.\n"; } my $myself = $q->url('-relative' => 1); print $q->hr, "\n", $q->a({'href' => $myself}, 'Change database connection'), "\n"; } else { offer_dbi_connect(); } if (defined $q->param('index_name')) { my $ctx_name = $q->param('index_name'); my $ctx = MyConText->open($dbh, $ctx_name); if (defined $ctx and defined $q->param('test_index')) { print $q->pre("MyConText index $ctx_name loaded OK.\n"); } if (not defined $ctx) { print $q->pre("Loading MyConText index $ctx_name failed: $MyConText::errstr.\n"); exit; } use Data::Dumper; print '
', Dumper($ctx), "
\n"; if (defined $q->param('search')) { my $search = $q->param('search'); my @documents = $ctx->contains($search); print "Documents containing string `$search' are @documents.

\n"; } elsif (defined $q->param('esearch')) { my $search = $q->param('esearch'); my @documents = $ctx->econtains(split /\s+/, $search); print "Documents matching expression `$search' are @documents.

\n"; } print $q->start_form, $q->hidden('dsn'), $q->hidden('user'), $q->hidden('password'), $q->hidden('index_name'), $q->textfield('search'), $q->submit('Search in index'), $q->end_form, "

\n"; print $q->start_form, $q->hidden('dsn'), $q->hidden('user'), $q->hidden('password'), $q->hidden('index_name'), $q->textfield('esearch'), $q->submit('Search in index (extended)'), $q->end_form, "

\n"; } sub offer_dbi_connect { print "Please specify the DBI connect string, the user and password info for the database connection:\n"; print $q->start_form, $q->table( $q->Tr( $q->td("DBI connect"), $q->td($q->textfield('dsn', 'dbi:mysql:test')) ), "\n", $q->Tr( $q->td("Database user"), $q->td($q->textfield('user', 'test')) ), "\n", $q->Tr( $q->td("Password"), $q->td($q->password_field('password', 'test')) ), "\n", ), $q->submit('test_connect', 'Test connection'), $q->end_form; } END { print $q->end_html; } END { $dbh->disconnect if defined $dbh; }