#!/usr/bin/perl #use lib '../bin/webdb'; #use lib '../bin/perl5/lib'; use lib '/data/www/o/obm/www.obm.co.uk/bin/webdb'; use lib '/data/www/o/obm/www.obm.co.uk/bin/perl5/lib'; #use lib '/usr/local/apache/virtual/o/www.obm.co.uk/bin/perl5/lib/sun4-solaris'; use strict; use WebDB; use HTML; use Cache; # Program name my $ProgramName; my $ProgramDir; if($0=~/\//) { ($ProgramDir=$0)=~s/^(.*)\/[^\/]*$/$1/; } else { $ProgramDir=$ENV{'CWD'}; } $ProgramName=$0; $ProgramName=~s/^.*\/([^\/]+)$/$1/; $ProgramName=~s/\.([^\.]+)$//; $ProgramDir="." if(!$ProgramDir); my $DEBUG = 0; my $show_currency = 1; my $basket_url = "https://www.obm.co.uk/cgi-bin/basket"; my $basket_returnlink_title = "Catalogue"; my $basket_returnlink_url = "/cgi-bin/catalogue"; my $sterling_symbol = "£"; #my $template_file = '/usr/local/apache/virtual/o/www.obm.co.uk/data/template/catalogue.thtml'; my $template_file = '../data/template/catalogue.thtml'; my $products_url = '/products/db/$MODEL.htm'; # Pricing codes my $pricePOA="P.O.A."; # Price code = -2 # Set the devlopment environment if($ENV{'SERVER_NAME'} eq 'wwwdev.obm.co.uk') { $basket_url =~ s/www.obm.co.uk/192.168.1.11/; } &main(); 1; sub main { my $db = WebDB->new('leisuretec'); my $cache = Cache->new('catalogue'); # Firstly, check whether the cache update is requested if($ARGV[0] =~ /^-updatecache$/i) { # Update the manufacturer list my $output = &build_manufacturer_list($db); $cache->store('#MANULIST#',$output); # Update each manufacturer page foreach my $manu ($db->Get_Record_List('CATALOGUE')) { my $output = &build_manufacturer_items($db,$manu); $cache->store($manu,$output); } return; } my %web_data = HTML->HTMLinput; HTML->CGI_Header; $web_data{'MANUFACTURER'} = $web_data{'manufacturer'} if(length($web_data{'MANUFACTURER'})==0); #printf "Catalogue Requested: %s\n",$web_data{'MANUFACTURER'}; if(length($web_data{'MANUFACTURER'})>0 && $db->Check_Record_Exists('CATALOGUE',$web_data{'MANUFACTURER'})) { # We display the requested manufacturer page if it exists #printf "Displaying manufacturer items\n"; my $data = $cache->retrieve($web_data{'MANUFACTURER'}); if(defined($data)) { print output_template($db,\%web_data,$template_file,$data); } else { my $output = &build_manufacturer_items($db,$web_data{'MANUFACTURER'}); print output_template($db,\%web_data,$template_file,$output); } } else { # We display the list of available manufacturers #printf "Displaying manufacturer list\n"; my $data = $cache->retrieve('#MANULIST#'); if(defined($data)) { print output_template($db,\%web_data,$template_file,$data); } else { my $output = &build_manufacturer_list($db); print output_template($db,\%web_data,$template_file,$output); } } return; } # Build Manufacturer List HTML sub build_manufacturer_list { my $db = shift; my %manu_title; foreach my $manu ($db->Get_Record_List('CATALOGUE')) { my ($ec,$es,%data) = $db->Read_Record('CATALOGUE',$manu); $manu_title{$manu} = $db->Get_Field('CATALOGUE',$manu,'--DESC--'); } my $list = ""; $list .= "\n"; $list .= "\n"; $list .= "\n"; $list .= "\n"; $list .= "

Optics Catalogue

"; my $a_tag = sprintf("",$basket_url."?RETURN_LINK=".&HTML::HTMLencodeURL($basket_returnlink_url)."&RETURN_DESC=".&HTML::HTMLencodeURL($basket_returnlink_title)); $list .= $a_tag."View Basket ".$a_tag."\n"; $list .= "
\n"; foreach my $manu (sort { $manu_title{$a} cmp $manu_title{$b} } keys(%manu_title)) { $list .= sprintf "\"*\" %s
\n",$ProgramName,$manu,$manu_title{$manu}; } $list .= "
\n"; return $list; } # Build Manufacturer Items HTML sub build_manufacturer_items { my $db = shift; my $manu = shift; my($ec,$es,%data) = $db->Read_Record('CATALOGUE',$manu); if($ec>0) { printf "Couldn't retrieve catalogue data: $es\n"; return ""; } $data{'--COL_TITLE_3--'} = "Retail Price" if(length($data{'--COL_TITLE_1--'})==0); my $output = ""; $output .= "\n"; $output .= "\n"; $output .= "\n"; $output .= "\n"; $output .= "

Optics Catalogue

"; $output .= sprintf("

%s

\n",$data{'--DESC--'}); $output .= "
Retail price is shown in UK Sterling including VAT"; my $a_tag = sprintf("",$basket_url."?RETURN_LINK=".&HTML::HTMLencodeURL($basket_returnlink_url)."&RETURN_DESC=".&HTML::HTMLencodeURL($basket_returnlink_title." ".$data{'--DESC--'})); $output .= $a_tag."View Basket ".$a_tag."\n"; $output .= "
\n"; my $table_start = 0; my $table_colwidth = 6; # Number of columns foreach my $rangcode (sort {$a <=> $b} grep(/^\d+$/,keys(%data))) { my $rangedata = $data{$rangcode}; printf "Rangecode: $rangcode\n" if($DEBUG); $output .= "
\n
\n" if($table_start==1); $output .= "\n"; $table_start = 1; $output .= sprintf("\n",$table_colwidth,$$rangedata{'--DESC--'}); $output .= ""; $output .= sprintf("","Model"); $output .= sprintf("","Description"); $output .= sprintf("",$data{'--COL_TITLE_1--'}); $output .= sprintf("",$data{'--COL_TITLE_2--'}); $output .= sprintf("",$data{'--COL_TITLE_3--'}); $output .= sprintf("","\$CURRENCY_TITLE") if($show_currency); $output .= "\n"; foreach my $sectcode (sort {$a <=> $b} grep(/^\d+$/,keys(%{$rangedata}))) { my $sectdata = $$rangedata{$sectcode}; printf "Sectioncode: $sectcode\n" if($DEBUG); $output .= sprintf("\n",$table_colwidth,$$sectdata{'--DESC--'}); foreach my $itemdata (@{$$sectdata{'ITEM_LIST'}}) { printf "Itemmodel: %s\n",$$itemdata{'MODEL'} if($DEBUG); $output .= ""; my $model_url_string_begin = ""; my $model_url_string_end = ""; my $model_url = $$itemdata{'MODEL'}; $model_url =~ tr/[A-Z]/[a-z]/; if($db->Check_Record_Exists("PRODUCTS",$$itemdata{'MODEL'})) { print "ProductDetail found: $$itemdata{'MODEL'}\n" if($DEBUG); $model_url_string_begin = sprintf("",$products_url); $model_url_string_end = ""; $model_url_string_begin =~ s/\$MODEL/$model_url/g; $model_url_string_end =~ s/\$MODEL/$model_url/g; } $output .= sprintf("",$$itemdata{'MODEL'}); $output .= sprintf("",$$itemdata{'DESC'}); $output .= sprintf("",$$itemdata{'COL1'}); $output .= sprintf("",$$itemdata{'COL2'}); my $price = $$itemdata{'PRICE'}; if($price =~ /[^0-9\.]/) { if($price == -2) { $price = $pricePOA; } else { $price = ""; } } my $basket_tag_start = undef; my $basket_tag_end = undef; $basket_tag_start = sprintf("",$basket_url."?ACTION=ADD&ITEM=".$model_url."&RETURN_LINK=".&HTML::HTMLencodeURL($basket_returnlink_url."?MANUFACTURER=".$manu)."&RETURN_DESC=".&HTML::HTMLencodeURL($basket_returnlink_title." ".$data{'--DESC--'})); $basket_tag_end = ""; if($price =~ /[^0-9\.]/) { $basket_tag_start = undef; $basket_tag_end = undef; } $output .= sprintf("",(length($price)>0)?$basket_tag_start.$sterling_symbol.$price.$basket_tag_end." ".$basket_tag_start."".$basket_tag_end:""); my $currency = $$itemdata{'PRICE'}; $currency =~ s/[^0-9\.]//g; $currency = '$CURRENCY{'.$currency.'}' if(length($currency)>0); if($price =~ /[^0-9\.]/) { $currency = $price; } $output .= sprintf("",$currency); $output .= "\n"; } } } $output .= "
%s
%s%s%s%s%s* %s
%s
$model_url_string_begin%s$model_url_string_end%s%s%s%s%s
\n" if($table_start==1); $output .= "\n"; $output .= "
* The \$CURRENCY_TITLE currency shown here is based on an exchange rate of approximately \$CURRENCY_RATE
\$VAT_DEDUCTED_MESSAGE\n" if($show_currency); $output .= "\n"; return $output; } # Output the data in the template sub output_template { my $db = shift; my $webdata = shift; my $template = shift; my $data = shift; my $output; if(open(TEMPLATE,$template)) { my $ofs = $/; $/ = undef; $output =