#!/usr/local/bin/perl ############################################################################### # Program : main.cgi # Author : Eric Deutsch # $Id$ # # Description : implements caching of (potentially long) urls and retrieval # via 10 character alphanumeric 'url_key' # # SBEAMS is Copyright (C) 2000-2005 Institute for Systems Biology # This program is governed by the terms of the GNU General Public License (GPL) # version 2 as published by the Free Software Foundation. It is provided # WITHOUT ANY WARRANTY. See the full description of GPL terms in the # LICENSE file distributed with this software. ############################################################################### use strict; use FindBin; use lib "$FindBin::Bin/../lib/perl"; use SBEAMS::Connection qw($q $log); use SBEAMS::Connection::SBPage; use SBEAMS::Connection::Tables; { # 'Main' block my $sbeams = new SBEAMS::Connection; my $username = $sbeams->Authenticate(); exit unless $username; # Read cgi parameters my %params; $sbeams->parse_input_parameters( q => $q, parameters_ref => \%params ); my $extra = ''; my $id; if ( $params{url} ) { my $id = $sbeams->setShortURL( $params{url} ); my $shorty = $q->url(); $shorty =~ s/mkShort\.cgi/shortURL/; my $url = "$shorty?key=$id"; my $olen = length($params{url}); my $nlen = length($url); $extra = qq~ Original URL was $olen characters long, new URL is $nlen characters long. Short URL: $url
Try link: $id

~; } else { my $page = SBEAMS::Connection::SBPage->new( user_context => 1, sbeams => $sbeams ); } my $size = $params{pagesize}; $size ||= 50; my $limit = $sbeams->buildLimitClause( row_limit => $size ); my $sql = "select $limit->{top_clause} url, url_key FROM $TB_SHORT_URL WHERE url NOT LIKE '%ManageTable%' $limit->{trailing_limit_clause} ORDER BY url_id DESC"; my @rows = $sbeams->selectSeveralColumns( $sql ); my $examples = ''; my $params; foreach my $row ( @rows ) { my $url_tokens = parseURL( $row->[0] ); if ( $url_tokens->[2] ) { my @ps = split "=", $url_tokens->[2]; $params = scalar(@ps) . ' params'; } $examples .= "\n"; } $examples .= '
[1] TARGET=_shorty>$row->[1]$url_tokens->[0]$url_tokens->[1]$params
'; my $more = "more"; my $less = int( $size/2 ) || 1; $less = "fewer"; my $sp = ' '; my $page = SBEAMS::Connection::SBPage->new( user_context => 1, sbeams => $sbeams ); $page->addContent( <<" END" ); $extra
URL:


$sp $more $sp | $sp $less $examples END $page->printPage(); } # end main sub parseURL { my $url = shift; my ( $base, $params ) = split /\?/, $url; my @tokens = split "/", $base; $params = '' if !defined $params; my $host = ''; my $script = ''; if ( $tokens[0] ) { if ( $#tokens ) { $host = join "", @tokens[0,1,2]; $script = $tokens[$#tokens]; } else { $script = $tokens[0]; } } else { $host = $tokens[1]; $script = $tokens[$#tokens]; } return [ $host, $script, $params ]; }