From 376cc31e050ede48ae4ff27c92046d134181ab4d Mon Sep 17 00:00:00 2001 From: Metabox Date: Fri, 17 May 2019 12:42:14 +1000 Subject: [PATCH] Mayor changes, floating menu implementation. --- htdocs/cgi-bin/main.cgi | 1256 +++++++++++++++++++++------------------ 1 file changed, 673 insertions(+), 583 deletions(-) diff --git a/htdocs/cgi-bin/main.cgi b/htdocs/cgi-bin/main.cgi index ab45a67..0284a31 100755 --- a/htdocs/cgi-bin/main.cgi +++ b/htdocs/cgi-bin/main.cgi @@ -7,7 +7,7 @@ use strict; use warnings; use Try::Tiny; use Switch; - + use CGI; use CGI::Session '-ip_match'; use CGI::Carp qw ( fatalsToBrowser ); @@ -22,158 +22,198 @@ use Time::localtime; use Regexp::Common qw /URI/; #DEFAULT SETTINGS HERE! -our $REC_LIMIT = 25; -our $TIME_ZONE = 'Australia/Sydney'; -our $LANGUAGE = 'English'; -our $PRC_WIDTH = '60'; -our $LOG_PATH = '../../dbLifeLog/'; -our $SESSN_EXPR = '+30m'; -our $DATE_UNI = '0'; -our $RELEASE_VER = '1.4'; -our $AUTHORITY = ''; -our $IMG_W_H = '210x120'; -our $AUTO_WRD_LMT= 200; +our $REC_LIMIT = 25; +our $TIME_ZONE = 'Australia/Sydney'; +our $LANGUAGE = 'English'; +our $PRC_WIDTH = '60'; +our $LOG_PATH = '../../dbLifeLog/'; +our $SESSN_EXPR = '+30m'; +our $DATE_UNI = '0'; +our $RELEASE_VER = '1.4'; +our $AUTHORITY = ''; +our $IMG_W_H = '210x120'; +our $AUTO_WRD_LMT = 200; + #END OF SETTINGS my $cgi = CGI->new; -my $session = new CGI::Session("driver:File",$cgi, {Directory=>$LOG_PATH}); -my $sid=$session->id(); -my $dbname =$session->param('database'); -my $userid =$session->param('alias'); -my $password=$session->param('passw'); - -if($AUTHORITY){ - $userid = $password = $AUTHORITY; - $dbname = 'data_'.$userid.'_log.db'; -}elsif(!$userid||!$dbname){ - print $cgi->redirect("login_ctr.cgi?CGISESSID=$sid"); - exit; +my $session = + new CGI::Session( "driver:File", $cgi, { Directory => $LOG_PATH } ); +my $sid = $session->id(); +my $dbname = $session->param('database'); +my $userid = $session->param('alias'); +my $password = $session->param('passw'); + +if ($AUTHORITY) { + $userid = $password = $AUTHORITY; + $dbname = 'data_' . $userid . '_log.db'; +} +elsif ( !$userid || !$dbname ) { + print $cgi->redirect("login_ctr.cgi?CGISESSID=$sid"); + exit; } -my $database = '../../dbLifeLog/'.$dbname; -my $dsn= "DBI:SQLite:dbname=$database"; -my $db = DBI->connect($dsn, $userid, $password, { RaiseError => 1 }) or die "

Error->"& $DBI::errstri &"

"; +my $database = '../../dbLifeLog/' . $dbname; +my $dsn = "DBI:SQLite:dbname=$database"; +my $db = DBI->connect( $dsn, $userid, $password, { RaiseError => 1 } ) + or die "

Error->" & $DBI::errstri & "

"; -my ($imgw,$imgh); +my ( $imgw, $imgh ); ### Authenticate session to alias password &authenticate; -&getConfiguration($db); +&getConfiguration($db ); -my $tbl_rc = 0; +my $tbl_rc = 0; my $tbl_rc_prev = 0; my $tbl_cur_id; -my $rs_keys = $cgi->param('keywords'); -my $rs_cat_idx = $cgi->param('category'); -my $prm_vc = $cgi->param("vc"); +my $rs_keys = $cgi->param('keywords'); +my $rs_cat_idx = $cgi->param('category'); +my $prm_vc = $cgi->param("vc"); my $rs_dat_from = $cgi->param('v_from'); -my $rs_dat_to = $cgi->param('v_to'); -my $rs_prev = $cgi->param('rs_prev'); -my $rs_cur = $cgi->param('rs_cur'); -my $rs_page = $cgi->param('rs_page'); -my $stmS = "SELECT rowid, ID_CAT, DATE, LOG, AMMOUNT from LOG WHERE"; -my $stmE = " ORDER BY DATE DESC;"; -my $stmD = ""; -if(!$rs_dat_to){ - $rs_dat_to = 'now'; +my $rs_dat_to = $cgi->param('v_to'); +my $rs_prev = $cgi->param('rs_prev'); +my $rs_cur = $cgi->param('rs_cur'); +my $rs_page = $cgi->param('rs_page'); +my $stmS = "SELECT rowid, ID_CAT, DATE, LOG, AMMOUNT from LOG WHERE"; +my $stmE = " ORDER BY DATE DESC;"; +my $stmD = ""; +if ( !$rs_dat_to ) { + $rs_dat_to = 'now'; } -if($rs_dat_from && $rs_dat_to){ - $stmD = " DATE BETWEEN date('".$rs_dat_from."') AND date('".$rs_dat_to."') "; +if ( $rs_dat_from && $rs_dat_to ) { + $stmD =qq(" DATE BETWEEN date('$rs_dat_from') AND date('$rs_dat_to') "); } -my $toggle =""; if($rs_keys||$rs_cat_idx||$stmD){$toggle=1;}; +my $toggle = ""; +if ( $rs_keys || $rs_cat_idx || $stmD ) { $toggle = 1; } $session->expire($SESSN_EXPR); #tag related framed sizing. -my @arrwh = split /x/,$IMG_W_H; -if(@arrwh==2){ - $imgw = $arrwh[0]; - $imgh = $arrwh[1]; +my @arrwh = split /x/, $IMG_W_H; +if ( @arrwh == 2 ) { + $imgw = $arrwh[0]; + $imgh = $arrwh[1]; } -else{#defaults - $imgw = 210; - $imgh = 120; -} - - -print $cgi->header(-expires=>"0s", -charset=>"UTF-8"); -print $cgi->start_html(-title => "Personal Log", -BGCOLOR=>"#c8fff8", -onload => "loadedBody('".$toggle."');", - -style =>[{-type => 'text/css', -src => 'wsrc/main.css'}, - {-type => 'text/css', -src => 'wsrc/jquery-ui.css'}, - {-type => 'text/css', -src => 'wsrc/jquery-ui.theme.css'}, - {-type => 'text/css', -src => 'wsrc/jquery-ui-timepicker-addon.css'}, - {-type => 'text/css', -src => 'wsrc/tip-skyblue/tip-skyblue.css'}, - {-type => 'text/css', -src => 'wsrc/tip-yellowsimple/tip-yellowsimple.css'}, - ], - -script=>[{-type => 'text/javascript',-src => 'wsrc/main.js'}, - {-type => 'text/javascript',-src => 'wsrc/jquery.js'}, - {-type => 'text/javascript',-src => 'wsrc/jquery-ui.js'}, - {-type => 'text/javascript',-src => 'wsrc/jquery-ui-timepicker-addon.js'}, - {-type => 'text/javascript',-src => 'wsrc/jquery-ui-sliderAccess.js'}, - {-type => 'text/javascript',-src => 'wsrc/jquery.poshytip.js'} - ], - ); - +else { #defaults + $imgw = 210; + $imgh = 120; +} + +print $cgi->header( + -expires => "0s", + -charset => "UTF-8" + ); +print $cgi->start_html( + -title => "Personal Log", + -BGCOLOR => "#c8fff8", + -onload => "loadedBody('" . $toggle . "');", + -style => [ + { -type => 'text/css', -src => 'wsrc/main.css' }, + { -type => 'text/css', -src => 'wsrc/jquery-ui.css' }, + { -type => 'text/css', -src => 'wsrc/jquery-ui.theme.css' }, + { + -type => 'text/css', + -src => 'wsrc/jquery-ui-timepicker-addon.css' + }, + { -type => 'text/css', -src => 'wsrc/tip-skyblue/tip-skyblue.css' }, + { + -type => 'text/css', + -src => 'wsrc/tip-yellowsimple/tip-yellowsimple.css' + }, + ], + -script => [ + { -type => 'text/javascript', -src => 'wsrc/main.js' }, + { -type => 'text/javascript', -src => 'wsrc/jquery.js' }, + { -type => 'text/javascript', -src => 'wsrc/jquery-ui.js' }, + { + -type => 'text/javascript', + -src => 'wsrc/jquery-ui-timepicker-addon.js' + }, + { + -type => 'text/javascript', + -src => 'wsrc/jquery-ui-sliderAccess.js' + }, + { -type => 'text/javascript', -src => 'wsrc/jquery.poshytip.js' } + ], + ); + my $rv; my $st; -my $lang = Date::Language->new($LANGUAGE); +my $lang = Date::Language->new($LANGUAGE); my $today = DateTime->now; - $today->set_time_zone( $TIME_ZONE ); - +$today->set_time_zone($TIME_ZONE); my $stmtCat = "SELECT * FROM CAT;"; -my $stmt = "SELECT rowid, ID_CAT, DATE, LOG, AMMOUNT FROM LOG ORDER BY DATE DESC, rowid DESC;"; +my $stmt = +"SELECT rowid, ID_CAT, DATE, LOG, AMMOUNT FROM LOG ORDER BY DATE DESC, rowid DESC;"; - -$st = $db->prepare( $stmtCat ); -$rv = $st->execute() or die or die "

Error->"& $DBI::errstri &"

"; +$st = $db->prepare($stmtCat); +$rv = $st->execute() or die or die "

Error->" & $DBI::errstri & "

"; my $cats = qq('; - - +while ( my @row = $st->fetchrow_array() ) { + if ( $row[0] == $c_sel ) { + $cats = + $cats + . '\n'; + } + else { + $cats = + $cats + . '\n'; + } + if ( $row[0] == $prm_vc ) { + $cats_v = + $cats_v + . '\n'; + } + else { + $cats_v = + $cats_v + . '\n'; + } + $hshCats{ $row[0] } = $row[1]; + $desc{ $row[0] } = $row[2]; +} +$cats = $cats . ''; my $cat_descriptions = ""; -for my $key (keys %desc){ - my $kv = $desc{$key}; - if($kv ne ".."){ - $cat_descriptions .= qq(
  • $kv
  • \n); - } +for my $key ( keys %desc ) { + my $kv = $desc{$key}; + if ( $kv ne ".." ) { + $cat_descriptions .= qq(
  • $kv
  • \n); + } } - -my $tbl = qq(
    +my $tbl = +qq( @@ -182,211 +222,215 @@ my $tbl = qq(Category); -if($prm_vc){#view category form selection - $rs_cat_idx = $prm_vc; +if (defined $prm_vc) { #view category form selection + $rs_cat_idx = $prm_vc; } -if($rs_keys){ - - my @keywords = split / /, $rs_keys; - if($rs_cat_idx){ - $stmS = $stmS ." ID_CAT='".$rs_cat_idx."' AND"; - }else{ - $stmS = $stmS ." ID_CAT='0' OR"; - } - if($stmD){ - $stmS = $stmS .$stmD." AND"; - } - - if(@keywords){ - foreach (@keywords) - { - $stmS = $stmS . " LOWER(LOG) REGEXP '\\b" . lc $_."\\b'"; - if( \$_ != \$keywords[-1] ) { - $stmS = $stmS." OR "; - } - } - $stmt = $stmS . $stmE; - } -} -elsif($rs_cat_idx){ - - if($stmD){ - $stmt = $stmS.$stmD. " AND ID_CAT='".$rs_cat_idx."'" .$stmE; - } - else{ - $stmt = $stmS." ID_CAT='".$rs_cat_idx."'" .$stmE; - } -} -else{ - if($stmD){ - $stmt = $stmS.$stmD.$stmE; +if ($rs_keys) { + + my @keywords = split / /, $rs_keys; + if ($rs_cat_idx) { + $stmS = $stmS . " ID_CAT='" . $rs_cat_idx . "' AND"; + } + else { + $stmS = $stmS . " ID_CAT='0' OR"; + } + if ($stmD) { + $stmS = $stmS . $stmD . " AND"; } -} + if (@keywords) { + foreach (@keywords) { + $stmS = $stmS . " LOWER(LOG) REGEXP '\\b" . lc $_ . "\\b'"; + if ( \$_ != \$keywords[-1] ) { + $stmS = $stmS . " OR "; + } + } + $stmt = $stmS . $stmE; + } +} +elsif ($rs_cat_idx) { + if ($stmD) { + $stmt = $stmS . $stmD . " AND ID_CAT='" . $rs_cat_idx . "'" . $stmE; + } + else { + $stmt = $stmS . " ID_CAT='" . $rs_cat_idx . "'" . $stmE; + } +} +else { + if ($stmD) { + $stmt = $stmS . $stmD . $stmE; + } +} ############### - &processSubmit; +&processSubmit; ############### - # - # Uncomment bellow to see main query statement issued! +# +# Uncomment bellow to see main query statement issued! # print $cgi->pre("### -> ".$stmt); - # -my $tfId = 0; -my $id = 0; +# +my $tfId = 0; +my $id = 0; my $tbl_start = index $stmt, "<="; -my $re_a_tag = qr/.*<\/a>/si ; - -if($tbl_start>0){ - #check if we are at the beggining of the LOG table? - my $stc = $db->prepare('select rowid from LOG order by rowid DESC LIMIT 1;'); - $stc->execute(); - my @row =$stc->fetchrow_array(); - if($row[0] == $rs_prev && $rs_cur == $rs_prev){ - $tbl_start = -1; - } - $stc->finish(); +my $re_a_tag = qr/.*<\/a>/si; + +if ( $tbl_start > 0 ) { + + #check if we are at the beggining of the LOG table? + my $stc = + $db->prepare('select rowid from LOG order by rowid DESC LIMIT 1;'); + $stc->execute(); + my @row = $stc->fetchrow_array(); + if ( $row[0] == $rs_prev && $rs_cur == $rs_prev ) { + $tbl_start = -1; + } + $stc->finish(); } # #Fetch entries! # my $CID_EVENT = 9; -my $tags = ""; -$st = $db->prepare( $stmt ); -$rv = $st->execute() or die or die "

    Error->"& $DBI::errstri &"

    "; -if($rv < 0) { - print "

    Error->"& $DBI::errstri &"

    "; +my $tags = ""; +$st = $db->prepare($stmt); +$rv = $st->execute() or die or die "

    Error->" & $DBI::errstri & "

    "; +if ( $rv < 0 ) { + print "

    Error->" & $DBI::errstri & "

    "; } -while(my @row = $st->fetchrow_array()) { +while ( my @row = $st->fetchrow_array() ) { - $id = $row[0]; - - my $ct = $hshCats{$row[1]}; - my $dt = DateTime::Format::SQLite->parse_datetime($row[2]); - my $log = $row[3]; - my $amm = sprintf "%.2f", $row[4]; - - #Apostrophe in the log value is doubled to avoid SQL errors. - $log =~ s/''/'/g; - # - if(!$ct){ - $ct = $hshCats{1}; - } - if(!$dt){ - $dt = $today; - } - if(!$amm){ - $amm = "0.00"; - } - if($tbl_rc_prev == 0){ - $tbl_rc_prev = $id; - } - if($tfId==1){ - $tfId = 0; - }else{ - $tfId = 1; - } - - my $sub =""; - my $tagged = 0; - #Check for LNK takes precedence here as we also parse plain placed URL's for http protocol later. - if($log =~ /<', $idx); - $sub = substr($log, $idx+1,$len-$idx-1); - my $url = qq($sub); - $tags .= qq(\n); - $tagged = 1; - $log=~s/</$url/osi; - } + $id = $row[0]; - - if($log =~ /<', $idx); - $sub = substr($log,$idx+1,$len-$idx-1); - my $url = qq(); - if(!$tagged){ - $tags .= qq(\n); - } - $log=~s/</$url/osi; - } - elsif($log =~ /<', $idx); - $sub = substr($log, $idx+1,$len-$idx-1); - my $lnk = $sub; - if($lnk =~ /_frm.png/) { - my $ext = substr($lnk, index($lnk,'.')); - $lnk =~ s/_frm.png/$ext/; - if(not -e "./images/$lnk"){ - $lnk =~ s/$ext/.jpg/; - if(not -e "./images/$lnk"){ - $lnk =~ s/.jpg/.gif/; - } - } - $lnk = qq(\n + my $ct = $hshCats{ $row[1] }; + my $dt = DateTime::Format::SQLite->parse_datetime( $row[2] ); + my $log = $row[3]; + my $amm = sprintf "%.2f", $row[4]; + + #Apostrophe in the log value is doubled to avoid SQL errors. + $log =~ s/''/'/g; + # + if ( !$ct ) { + $ct = $hshCats{1}; + } + if ( !$dt ) { + $dt = $today; + } + if ( !$amm ) { + $amm = "0.00"; + } + if ( $tbl_rc_prev == 0 ) { + $tbl_rc_prev = $id; + } + if ( $tfId == 1 ) { + $tfId = 0; + } + else { + $tfId = 1; + } + + my $sub = ""; + my $tagged = 0; + +#Check for LNK takes precedence here as we also parse plain placed URL's for http protocol later. + if ( $log =~ /<', $idx ); + $sub = substr( $log, $idx + 1, $len - $idx - 1 ); + my $url = qq($sub); + $tags .= qq(\n); + $tagged = 1; + $log =~ s/</$url/osi; + } + + if ( $log =~ /<', $idx ); + $sub = substr( $log, $idx + 1, $len - $idx - 1 ); + my $url = qq(); + if ( !$tagged ) { + $tags .= qq(\n); + } + $log =~ s/</$url/osi; + } + elsif ( $log =~ /<', $idx ); + $sub = substr( $log, $idx + 1, $len - $idx - 1 ); + my $lnk = $sub; + if ( $lnk =~ /_frm.png/ ) { + my $ext = substr( $lnk, index( $lnk, '.' ) ); + $lnk =~ s/_frm.png/$ext/; + if ( not -e "./images/$lnk" ) { + $lnk =~ s/$ext/.jpg/; + if ( not -e "./images/$lnk" ) { + $lnk =~ s/.jpg/.gif/; + } + } + $lnk = + qq(\n ); - }else{ - #TODO fetch from web locally the original image. - $lnk = qq(\n); - } - if(!$tagged){ - $tags .= qq(\n); - } - $log=~s/</$lnk/o; - } - - #Replace with a full link an HTTP URI - my @chnks = split(/($re_a_tag)/si , $log) ; - foreach my $ch_i ( @chnks ) { - next if $ch_i =~ /$re_a_tag/; - next if index($ch_i, "-1; - $ch_i =~ s/https/http/gsi; - $ch_i =~ s/($RE{URI}{HTTP})/$1<\/a>/gsi; - } - $log = join('' , @chnks); - + } + else { + #TODO fetch from web locally the original image. + $lnk = +qq(\n); + } + if ( !$tagged ) { + $tags .= qq(\n); + } + $log =~ s/</$lnk/o; + } - while ($log =~ /<', $idx)-4; - my $sub = "".substr($log,$idx+4,$len-$idx).""; - $log=~s/</$sub/o; - } - while ($log =~ /<', $idx)-4; - my $sub = "".substr($log,$idx+4,$len-$idx).""; - $log=~s/</$sub/o; - } - while($log =~ /<', $idx)-8; - my $sub = "

    ".substr($log,$idx+8,$len-$idx)."

    "; - $log=~s/</$sub/o; - } - - - #Decode escaped \\n - $log =~ s/\\n/
    /gs; - - if($CID_EVENT == $row[1]){ - $log = "$log"; - }elsif(1 == $row[1]){ - $log = "$log"; - } - - my ($dty, $dtf) = $dt->ymd; - my $dth=$dt->hms; - if($DATE_UNI==1){ - $dtf = $dty; - } - else{ - $dtf= $lang->time2str("%d %b %Y", $dt->epoch); - } - $tbl .= qq(
    + #Replace with a full link an HTTP URI + my @chnks = split( /($re_a_tag)/si, $log ); + foreach my $ch_i (@chnks) { + next if $ch_i =~ /$re_a_tag/; + next if index( $ch_i, " -1; + $ch_i =~ s/https/http/gsi; + $ch_i =~ s/($RE{URI}{HTTP})/$1<\/a>/gsi; + } + $log = join( '', @chnks ); + + while ( $log =~ /<', $idx ) - 4; + my $sub = "" . substr( $log, $idx + 4, $len - $idx ) . ""; + $log =~ s/</$sub/o; + } + while ( $log =~ /<', $idx ) - 4; + my $sub = "" . substr( $log, $idx + 4, $len - $idx ) . ""; + $log =~ s/</$sub/o; + } + while ( $log =~ /<', $idx ) - 8; + my $sub = "

    " . substr( $log, $idx + 8, $len - $idx ) . "

    "; + $log =~ s/</$sub/o; + } + + #Decode escaped \\n + $log =~ s/\\n/
    /gs; + + if ( $CID_EVENT == $row[1] ) { + $log = "$log"; + } + elsif ( 1 == $row[1] ) { + $log = +"$log"; + } + + my ( $dty, $dtf ) = $dt->ymd; + my $dth = $dt->hms; + if ( $DATE_UNI == 1 ) { + $dtf = $dty; + } + else { + $dtf = $lang->time2str( "%d %b %Y", $dt->epoch ); + } + $tbl .= qq(
    @@ -397,58 +441,62 @@ while(my @row = $st->fetchrow_array()) { ); - $tbl_rc += 1; + $tbl_rc += 1; - if($REC_LIMIT>0 && $tbl_rc==$REC_LIMIT){ - &buildNavigationButtons; - last; - } + if ( $REC_LIMIT > 0 && $tbl_rc == $REC_LIMIT ) { + &buildNavigationButtons; + last; + } -}#while end +} #while end ## #Fetch Keywords autocomplete we go by words larger then three. # -$st = $db->prepare( 'select LOG from LOG;' ); +$st = $db->prepare('select LOG from LOG;'); my $aw_cnt = 0; -my $autows = qq("gas","money","today"); -$rv = $st->execute() or die or die "

    Error->"& $DBI::errstri &"

    "; -if($rv < 0) { - print "

    Error->"& $DBI::errstri &"

    "; +my $autowords = qq("gas","money","today"); +$rv = $st->execute() or die or die "

    Error->" & $DBI::errstri & "

    "; +if ( $rv < 0 ) { + print "

    Error->" & $DBI::errstri & "

    "; } &fetchAutocomplete; #End of table? -if($rs_prev && $tbl_rc < $REC_LIMIT){ - $st = $db->prepare( "SELECT count(*) FROM LOG;" ); - $st->execute(); - my @row = $st->fetchrow_array(); - if($row[0]>$REC_LIMIT){ - &buildNavigationButtons(1); - } +if ( $rs_prev && $tbl_rc < $REC_LIMIT ) { + $st = $db->prepare("SELECT count(*) FROM LOG;"); + $st->execute(); + my @row = $st->fetchrow_array(); + if ( $row[0] > $REC_LIMIT ) { + &buildNavigationButtons(1); + } } -if($tbl_rc==0){ - - if($stmD){ - $tbl = $tbl . '
    '; - } - elsif($rs_keys){ - my $criter = ""; - if($rs_cat_idx>0){ - $criter = "->Criteria[".$hshCats{$rs_cat_idx}."]"; - } - $tbl = $tbl . ' - '; - } - else{ - $tbl = $tbl . '\n'; - } +if ( $tbl_rc == 0 ) { + + if ($stmD) { + $tbl = $tbl . ''; + } + elsif ($rs_keys) { + my $criter = ""; + if ( $rs_cat_idx > 0 ) { + $criter = "->Criteria[" . $hshCats{$rs_cat_idx} . "]"; + } + $tbl = $tbl . qq( + ); + } + else { + $tbl = $tbl + . '\n'; + } } -$tbl .= ' - @@ -502,15 +551,14 @@ $cats $tags ); - -my $srh = qq( +my $srh = qq(
    DateEdit
    $dtf $dth $log
    - Search Failed to Retrive any records on select: ['. $stmD .'] !
    - Search Failed to Retrive any records on keywords: ['. $rs_keys .']'.$criter.' !
    Database is New or Empty!
    + Search Failed to Retrive any records on select: [' . $stmD + . '] !
    + Search Failed to Retrive any records on keywords: [$rs_keys]$criter!
    Database is New or Empty!
    +$tbl .= +'
    +   @@ -466,8 +514,9 @@ my $frm = qq(
    * LOG ENTRY FORM *
    Date:hms.qq("> + hms . qq(">    
    ); - -$srh .= qq( +$srh .= +qq( @@ -525,17 +573,29 @@ $srh .= qq( ); -if($rs_keys || $rs_cat_idx || $stmD){ - $srh .= ''; } -$srh.='
    Search/View By
    View by Category:$cats_v
    View by Category:$cats_v
    View by Category:$cats_v
    +if ( $rs_keys || $rs_cat_idx || $stmD ) { + $srh .= '

    '; +$srh .= '
    '; # #Page printout from here! # print qq(
    \n -
    +
    +
    +  + + +
    +
    +Stats
    +Config
    +
    +LOGOUT +
    +
    \n$frm\n
    \n
    \n
    $srh
    \n$tbl\n

    @@ -549,7 +609,7 @@ print qq(