From 1947a37ec66d1c3a78606612f0fe415f367bfcb0 Mon Sep 17 00:00:00 2001 From: Will Budicm Date: Thu, 24 Dec 2020 09:22:42 +1100 Subject: [PATCH] Print View Selected. --- Current Development Check List.md | 1 + htdocs/cgi-bin/data.cgi | 162 ++++++++++++++++++++++++++++-- htdocs/cgi-bin/main.cgi | 7 +- htdocs/cgi-bin/wsrc/main.js | 29 ++++-- htdocs/cgi-bin/wsrc/print.css | 78 ++++++++++++++ 5 files changed, 256 insertions(+), 21 deletions(-) create mode 100644 htdocs/cgi-bin/wsrc/print.css diff --git a/Current Development Check List.md b/Current Development Check List.md index 586d596..72db1f5 100644 --- a/Current Development Check List.md +++ b/Current Development Check List.md @@ -10,6 +10,7 @@ between 2018-08-22 04:13:55 **Moon Stable** production release and this 2020-12-22 13:10:50 **Sun Stable v.2.1**, next and final is the Earth release stage.* +* ✔ Print View Selected. * ✔ Config. page set session expires times has to be validated not to be under 2 minutes. * ✔ Implement mapped provision of named timezones via main.inf, for cities not available in global zone list. * Javascript also needs to be updated to translate this properly. diff --git a/htdocs/cgi-bin/data.cgi b/htdocs/cgi-bin/data.cgi index 1b4cfc5..5476f98 100755 --- a/htdocs/cgi-bin/data.cgi +++ b/htdocs/cgi-bin/data.cgi @@ -31,7 +31,11 @@ my $opr = $cgi->param("opr"); my $confirmed = $cgi->param('confirmed'); if ($opr == 1){ DisplayDateDiffs(); -}elsif ($confirmed){ +} +if ($opr == 3){ + PrintView(); +} +elsif ($confirmed){ DeletionConfirmed(); }else{ print $cgi->redirect('main.cgi') if not $cgi->param('chk'); @@ -41,7 +45,7 @@ $db->disconnect(); sub DisplayDateDiffs { - printHeader(); + printHeader("Date Difference Report"); my $tbl = ''; @@ -131,12 +135,13 @@ try{ } sub printHeader { +my $title = shift; print $cgi->header(-expires=>"+6os"); -print $cgi->start_html(-title => "Date Difference Report", -BGCOLOR => &Settings::bgcol, +print $cgi->start_html(-title => $title, -BGCOLOR => &Settings::bgcol, -script=> [{-type => 'text/javascript', -src => 'wsrc/main.js'}, {-type => 'text/javascript', -src => 'wsrc/jquery.js'}, {-type => 'text/javascript', -src => 'wsrc/jquery-ui.js'}], - -style => [{-type => 'text/css', -src => "wsrc/".&Settings::css}, + -style => [{-type => 'text/css', -src => "wsrc/".&Settings::css}, {-type => 'text/css', -src => "wsrc/print.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.theme.css'}], @@ -145,8 +150,7 @@ print $cgi->start_html(-title => "Date Difference Report", -BGCOLOR => &Settings sub NotConfirmed { -try{ - my ($stm,$st); +try{ my $SQLID = 'rowid'; $SQLID = 'ID' if( Settings::isProgressDB() ); my $stmS = "SELECT ID, PID, (select NAME from CAT WHERE ID_CAT = CAT.ID) as CAT, DATE, LOG from VW_LOG WHERE"; my $stmE = " ORDER BY DATE DESC, ID DESC;"; @@ -166,11 +170,11 @@ try{ } } $stm =~ s/ OR $//; $stm .= $stmE; - $st = Settings::selectRecords($db, $stm); + my $st = Settings::selectRecords($db, $stm); if($opr == 0){ - printHeader(); + printHeader('Confirm Deletion'); print $cgi->pre("###NotConfirmed()->[stm:$stm]") if($DEBUG); my $r_cnt = 0; @@ -206,7 +210,7 @@ try{ $tbl .= '
* DATE DIFFERENCES *
-

Please Confirm You Want
The Above Record'.$plural.' Deleted?


+

Please Confirm You Want
The Above Record'.$plural.' Deleted?


@@ -317,4 +321,144 @@ sub log2html{ return $log; } + + +sub PrintView { + +try{ + my $SQLID = 'rowid'; $SQLID = 'ID' if( Settings::isProgressDB() ); + my $stmS = "SELECT ID, PID, (select NAME from CAT WHERE ID_CAT = CAT.ID) as CAT, DATE, LOG from VW_LOG WHERE"; + my $stmE = " ORDER BY DATE DESC, ID DESC;"; + + #Get ids and build confirm table and check + my $stm = $stmS ." "; + foreach my $id ($cgi->param('chk')){ + if($opr == 2){ + $stm = $stm . "$SQLID = " . $id . " OR "; + } + else{ + $stm = $stm . "PID = " . $id . " OR "; + } + } + $stm =~ s/ OR $//; $stm .= $stmE; + my $st = Settings::selectRecords($db, $stm); + + print $cgi->header(-expires=>"+6os"); + print $cgi->start_html(-title => "LifeLog Excerpt ".Settings::dbFile()." - ".$today->strftime('%d/%m/%Y %H:%M'), + -style => {-type => 'text/css', -src => "wsrc/print.css"} + ); + print $cgi->pre("###PrintView()->[stm:$stm]") if($DEBUG); + + + my $tbl = ' + '; + + while(my @row = $st->fetchrow_array()) { + my $ct = $row[2]; + my $dt = DateTime::Format::SQLite->parse_datetime( $row[3] ); + my $log = log2html($row[4]); + + $tbl = $tbl . '" . + '" . + '\n". + ''; + } + $tbl .= '
Date Time LogCategory
'. $dt->ymd . "' . $dt->hms . "'."$log' . $ct. '
'; + + print "
\n$tbl\n
"; + + print $cgi->end_html(); + + +}catch{ + print "SERVER ERROR-> Method NotConfirmed() Page Build Failed!.:
".$@."
"; +} +} + +sub log2html{ + my $log = shift; + my ($re_a_tag, $sub) = qr/.*<\/a>/si; + $log =~ s/^(^\*)(.*)(\*)(\\n)/$2<\/b>
/oi; + $log =~ s/''/'/g; + $log =~ s/\r\n/
/gs; + $log =~ s/\\n/
/gs; + + + if ( $log =~ /<', $idx ); + $sub = substr( $log, $idx + 1, $len - $idx - 1 ); + my $url = qq($sub); + $log =~ s/<+/$url/osi; + } + + if ( $log =~ /<', $idx ); + $sub = substr( $log, $idx + 1, $len - $idx - 1 ); + my $url = qq(); + $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); + } + $log =~ s/<+/$lnk/o; + } + + #Replace with a full link an HTTP URI + if ( $log =~ /); + $b = q(); + $log =~ s/$a/$b/o; + } + else { + 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 ); + } + + #$log =~ s/\<\\>/>>/gs; + +return $log; +} + + + 1; \ No newline at end of file diff --git a/htdocs/cgi-bin/main.cgi b/htdocs/cgi-bin/main.cgi index cbf9232..e1acdce 100755 --- a/htdocs/cgi-bin/main.cgi +++ b/htdocs/cgi-bin/main.cgi @@ -744,11 +744,12 @@ $log_output .= <<_TXT;
-   +       +  
@@ -983,8 +984,8 @@ if($isPUBViewMode){$sideMenu=$frm=$srh=$tail=""}else{ Search
Delete
Help
- Stats
- Config
+ Stats
+ Show All
$sm_reset_all LOGOUT

diff --git a/htdocs/cgi-bin/wsrc/main.js b/htdocs/cgi-bin/wsrc/main.js index f0a8700..a88852e 100644 --- a/htdocs/cgi-bin/wsrc/main.js +++ b/htdocs/cgi-bin/wsrc/main.js @@ -527,11 +527,6 @@ function selectAllLogs() { return false; } -function deleteSelected() { - $("#del_sel").click(); - display("Please Wait!",150); - return false; -} function submitTop(top) { var frm = document.getElementById("frm_entry"); @@ -586,7 +581,7 @@ function submitEnd(limit) { function viewAll() { - + display("Please Wait!"); var frm = document.getElementById("frm_entry"); frm.submit_is_view.value = 1; frm.rs_all.value = 1; @@ -594,7 +589,7 @@ function viewAll() { frm.rs_prev.value = 0; frm.submit_is_view.value = 1; frm.submit(); - + return false; } @@ -929,15 +924,31 @@ function submitNewCategory() { return true; } +function deleteSelected() { + display("Please Wait!",150); + $("#opr").val(0); + $("#del_sel").click(); + display("Please Wait!",150); + return false; +} function dateDiffSelected() { - $("#opr").val(1); + display("Please Wait!"); + $("#opr").val(1); return true; } - function exportSelected() { + display("Please Wait!"); $("#opr").val(2); + return true; } +function viewSelected() { + display("Please Wait!"); + $("#opr").val(3); + return true; +} + + function exportToCSV(dat, view){ var csv; diff --git a/htdocs/cgi-bin/wsrc/print.css b/htdocs/cgi-bin/wsrc/print.css new file mode 100644 index 0000000..cf23c7c --- /dev/null +++ b/htdocs/cgi-bin/wsrc/print.css @@ -0,0 +1,78 @@ +body { + font: 13pt Georgia, "Times New Roman", Times, serif; + line-height: 1.3; + background: #fff !important; + color: #000; +} + +.ctr{ + text-align: center; +} + +.tbl_print { + text-align:left; + border: 1px solid #000; + border-collapse: collapse +} +.hdr, th, td{ + padding-left: 5px; + border: 1px solid #000; +} +tr{ + page-break-before:auto; + page-break-after:avoid; +} + +a { + page-break-inside:avoid +} +blockquote { + page-break-inside: avoid; +} +h1, h2, h3, h4, h5, h6 { page-break-after:avoid; + page-break-inside:avoid } +img { page-break-inside:avoid; + page-break-after:avoid; } +table, pre { page-break-inside:avoid } +ul, ol, dl { page-break-before:avoid } + +a:link, a:visited, a { +background: transparent; +color: #520; +font-weight: bold; +text-decoration: underline; +text-align: left; +} + +a { +page-break-inside:avoid +} + + +$a:after > img { +content: ""; +} + +code, pre { font-family: "Courier New", Courier, mono} + +ul, ol { +list-style: square; margin-left: 18pt; +margin-bottom: 20pt; +} + +li { +line-height: 1.6em; +} + +@page { + size: A4; + margin:18mm 0mm 5mm 5mm; +} + +@media print { + + tr{ + page-break-inside: avoid; + } +} + \ No newline at end of file -- 2.34.1