diff --git a/Makefile b/Makefile index 270f8b3..7de421b 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ SHELL = umask 002; exec /bin/sh FILES = events.ics events.atom news.atom index.html stats.html \ favicon.ico default.css csclub.der csclub.pem -SUBDIRS = about events office news services media buttons logos flash +SUBDIRS = about events office news services media buttons logos flash library include common.mk diff --git a/buttons/Makefile b/buttons/Makefile index 56201dd..f33fe0c 100644 --- a/buttons/Makefile +++ b/buttons/Makefile @@ -1,4 +1,5 @@ FILES = about.png events.png gitweb.png home.png mailman.png media.png \ - office.png services.png stats.png webmail.png wiki.png gallery.png + office.png services.png stats.png webmail.png wiki.png gallery.png \ + library.png RELDIR = buttons/ include ../common.mk diff --git a/buttons/library.png b/buttons/library.png new file mode 100644 index 0000000..534b710 Binary files /dev/null and b/buttons/library.png differ diff --git a/common.mk.in b/common.mk.in index ec3d455..2fb6e4b 100644 --- a/common.mk.in +++ b/common.mk.in @@ -37,6 +37,10 @@ $(OUTDIR)%.ics: %.xml $(OUTDIR)%.html: %.html cp -f $< $@ +$(OUTDIR)%.cgi: %.cgi + cp -f $< $@ +$(OUTDIR).htaccess: + cp -f .htaccess $@ $(OUTDIR)%.ico: %.ico cp -f $< $@ $(OUTDIR)%.css: %.css diff --git a/directory.xml b/directory.xml index abf3bf2..f7e7a35 100644 --- a/directory.xml +++ b/directory.xml @@ -8,8 +8,9 @@ - - - - + + + + + diff --git a/events.xml b/events.xml index 0e0ff2d..cafd3c5 100644 --- a/events.xml +++ b/events.xml @@ -59,16 +59,26 @@ and its guranteed to be dazzling. -

A brief intro to Quantum Computing and why it matters, - followed by a talk on programming quantum computers. + followed by a talk on programming quantum computers. Meet at + the CSC at 4:00PM for a guided walk to the RAC.

-

- TBA

+ +

+ Raymond Laflamme is the director of the Institute for Quantum + Computing at the University of Waterloo and holds the Canada + Research Chair in Quantum Information. He will give a brief + introduction to quantum computing and why it matters, followed + by a talk on programming quantum computers. There will be + tours of the IQC labs at the end, and pizza will be provided + back at the CSC for all attendees. +

+
diff --git a/library/.htaccess b/library/.htaccess new file mode 100755 index 0000000..d54535d --- /dev/null +++ b/library/.htaccess @@ -0,0 +1,3 @@ +AddHandler cgi-script .cgi +Options +Indexes +ExecCGI +DirectoryIndex index.cgi diff --git a/library/Makefile b/library/Makefile new file mode 100644 index 0000000..18618b5 --- /dev/null +++ b/library/Makefile @@ -0,0 +1,6 @@ +FILES = index.cgi .htaccess +RELDIR = library/ +include ../common.mk + +.htaccess: .htaccess + cp -f $< $@ \ No newline at end of file diff --git a/library/index.cgi b/library/index.cgi new file mode 100755 index 0000000..6195400 --- /dev/null +++ b/library/index.cgi @@ -0,0 +1,403 @@ +#!/usr/bin/perl + +############################################### +# Postgres SQL Library Database Web Interface # +# Matt Thiffault (January 22,2009) # +# matt.thiffault@gmail.com # +############################################### + + +use DBI; + +print "Content-type: text/html\n\n"; + +$in = $ENV{'QUERY_STRING'}; + +@pairs = split(/[&=]/,$in); +%field = @pairs; +chomp(%field); +$webroot = ".."; + +print < + + + +Computer Science Club of the University of Waterloo: Home + + +
+ + +
+ +END + + +open(DIR,"/users/www/www/directory.xml") or print "Couldn't open file\n"; +@items = ; +close(MENU); + +shift @items; +shift @items; +shift @items; +shift @items; +shift @items; +$items[-1] = undef; + +foreach $item (@items){ + if($item){ + + $item =~ s/[<>]//g; + $item =~ s/\/$//g; + $item =~ s/menuitem//g; + $item =~ s/ //; + @pairs = split(/[ =]/,$item); + shift @pairs; + %fields = @pairs; + + $fields{'href'} =~ s/"//g; + + chomp($fields{'href'}); + + $fields{'title'} =~ s/"//g; + + if($fields{'absolute'} =~ /true/){ + print "$fields{'title'}\n"; + }else{ + print "$fields{'title'}\n"; + } + } +} + +print "


\n"; + +#display the search form +if($field{'do'} eq "home" || $field{'do'} eq ""){ + +#isbn,title,authors,year,edition,publisher + + print < +
+

Computer Science Library Collection Search

+
+
+ + + + + + + + + + + + + + + + + + + + + +
Title:
Publisher:
Edition:
Year:
ISBN:

+
+ + +END + +} + +#query the database +if($field{'do'} eq "query"){ + + print "

Search Results

"; + + #build query string here, query and display. + my $dbh = DBI->connect("dbi:Pg:dbname=library;host=localhost", + 'librarian', + 'KJI3RVgszrxrxe6W4gX3', + {AutoCommit => 1}) + or print "Couldn't connect to database: " . DBI->errstr; + + $searchterm = undef; + $orterm = undef; + @results; + @oresults; + $title = $field{'title'}; + $title =~ s/[';:"]/ /g; + $publisher = $field{'publisher'}; + $publisher =~ s/[';:"]/ /g; + $edition = $field{'edition'}; + $edition =~ s/[';:"]/ /g; + $year = $field{'year'}; + $year =~ s/[';:"]/ /g; + $isbn = $field{'isbn'}; + $isbn =~ s/[';:"]/ /g; + + if($title){ + + @tmp = split(/\+/,$title); + my @keywords; + my @orwords; + push @keywords,"'%$tmp[0]%'"; + push @orwords,"'%tmp[0]%'"; + shift @tmp; + + foreach $keyword (@tmp){ + push @keywords,"AND (title ILIKE '%$keyword%')"; + push @orwords,"OR (title ILIKE '%$keyword%')"; + } + + $searchterm = "(title ILIKE @keywords)"; + $orterm = "(title ILIKE @orwords)"; + + } + + if($publisher){ + + @tmp = split(/\+/,$publisher); + my @keywords; + my @orwords; + push @keywords,"'%$tmp[0]%'"; + shift @tmp; + + foreach $keyword (@tmp){ + push @keywords,"AND (publisher ILIKE '%$keyword%')"; + push @orwords,"OR (publisher ILIKE '%$keyword%')"; + } + + if($searchterm eq undef){ + $searchterm = "(publisher ILIKE @keywords)"; + $orterm = "(publisher ILIKE @orwords)"; + }else{ + $temp = $searchterm; + $searchterm = $temp." AND (publisher ILIKE @keywords)"; + $temp = $orterm; + $orterm = $temp." OR (publisher ILIKE @keywords)"; + } + + } + + if($edition){ + + @tmp = split(/\+/,$edition); + my @keywords; + my @orwords; + push @keywords,"'%$tmp[0]%'"; + push @orwords,"'%$tmp[0]%'"; + shift @tmp; + + foreach $keyword (@tmp){ + push @keywords,"AND (edition ILIKE '%$keyword%')"; + push @keywords,"OR (edition ILIKE '%$keyword%')"; + } + + if($searchterm eq undef){ + $searchterm = "(edition ILIKE @keywords)"; + $orterm = "(edition ILIKE @keywords)" + }else{ + $temp = $searchterm; + $searchterm = $temp." AND (edition ILIKE @keywords)"; + $temp = $orterm; + $orterm = $temp." OR (edition ILIKE @keywords)"; + } + + } + + if($year){ + + @tmp = split(/\+/,$year); + my @keywords; + my @orwords; + push @keywords,"'%$tmp[0]%'"; + push @orwords,"'%$tmp[0]%'"; + shift @tmp; + + foreach $keyword (@tmp){ + push @keywords,"AND (year ILIKE '%$keyword%')"; + push @orwords,"OR (year ILIKE '%$keyword%')"; + } + + if($searchterm eq undef){ + $searchterm = "(year ILIKE @keywords)"; + $orterm = "(year ILIKE $orwords)"; + }else{ + $temp = $searchterm; + $searchterm = $temp." AND (year ILIKE @keywords)"; + $temp = $orterm; + $orterm = $temp." OR (year ILIKE @orwords)"; + + } + + } + + if($isbn){ + + @tmp = split(/\+/,$isbn); + my @keywords; + my @orwords; + push @keywords,"'%$tmp[0]%'"; + push @orwords,"'%$tmp[0]%'"; + shift @tmp; + + foreach $keyword (@tmp){ + push @keywords,"AND (isbn ILIKE '%$keyword%')"; + push @orwords,"OR (isbn ILIKE '%keyword%')"; + } + + if($searchterm eq undef){ + $searchterm = "(isbn ILIKE @keywords)"; + $orterm = "(isbn ILIKE @keywords)"; + }else{ + $temp = $searchterm; + $searchterm = $temp." AND (isbn ILIKE @keywords)"; + $temp = $orterm; + $orterm = $temp." OR (year ILIKE @orwords)"; + } + + } + + if($searchterm){ + + my $sth = $dbh->prepare("SELECT title,isbn,year,publisher,edition FROM book WHERE $searchterm;") + or print "Couldn't prepare statement: " . $dbh->errstr; + + my $oth = $dbh->prepare("SELECT title,isbn,year,publisher,edition FROM book WHERE $orterm;") + or print "Couldn't prepare statement: " . $dbh->errstr; + + $sth->execute() # Execute the query + or print "Couldn't execute statement: " . $sth->errstr; + + while($data = $sth->fetchrow_arrayref()){ + push @results, [@{$data}]; + } + + $oth->execute() + or print "Couldn't execute statement: " . $oth->errstr; + + while($ordata = $oth->fetchrow_arrayref()){ + push @oresults, [@{$ordata}]; + } + + $sth->finish; + $oth->finish; + + + if ($sth->rows == 0 && $oth->rows == 0) { + print "
No names matched

"; + }else{ + print "
"; + print ""; + + for my $book (@results){ + print ""; + for my $field (@{$book}){ + print "\n"; + } + print ""; + } + + for my $book (@oresults){ + foreach $andbook (@results){ + if(@{$book}[0] eq @{$andbook}[0]){ + $book = undef; + } + } + + if($book){ + print ""; + for my $field (@{$book}){ + print "\n"; + } + print ""; + } + } + + print "
Title ISBN Year Publisher Edition
$field
$field
"; + } + + }else{ + print "
You did not enter any search terms.

"; + } +} + +print <
+ +