]> lifelog.hopto.org Git - LifeLog.git/commitdiff
Print View Selected.
authorWill Budicm <redacted>
Wed, 23 Dec 2020 22:22:42 +0000 (09:22 +1100)
committerWill Budicm <redacted>
Wed, 23 Dec 2020 22:22:42 +0000 (09:22 +1100)
Current Development Check List.md
htdocs/cgi-bin/data.cgi
htdocs/cgi-bin/main.cgi
htdocs/cgi-bin/wsrc/main.js
htdocs/cgi-bin/wsrc/print.css [new file with mode: 0644]

index 586d5962367d63a60e01651874cd0bef08af1df3..72db1f52d287e40c74b8b0003e9e7d4644ee065b 100644 (file)
@@ -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.*
 
+* &#10004; Print View Selected.
 * &#10004; Config. page set session expires times has to be validated not to be under 2 minutes.
 * &#10004; 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.
index 1b4cfc5e70124e7f5a06c280bac9e079738d2b59..5476f9894e382cc111287581d907a194425ecaef 100755 (executable)
@@ -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 = '<table class="tbl" width="'.$PRC_WIDTH.'%">
         <tr class="r0"><td colspan="2"><b>* DATE DIFFERENCES *</b></td></tr>';
 
@@ -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 .= '<tr class="r0"><td colspan="4"><a name="bottom"></a><a href="#top">&#x219F;</a>
         <center>
-        <h3>Please Confirm You Want<br>The Above Record'.$plural.' Deleted?</h3><br><button onclick="window.history.back();">No Go Back</button></center>
+        <h3>Please Confirm You Want<br>The Above Record'.$plural.' Deleted?</h3><br><button onclick="window.history.back()">No Go Back</button></center>
         </td></tr>
         <tr class="r0"><td colspan="4"><center>
         <input type="submit" value="I AM CONFIRMING!">
@@ -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 = '<table class="tbl_print" border="0" width="'.$PRC_WIDTH.'%">
+        <tr class="hdr"><th>Date</th> <th>Time</th> <th>Log</th><th>Category</th></tr>';
+
+    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 . '<tr><td class="ctr">'. $dt->ymd . "</td>" .
+            '<td class="ctr">' . $dt->hms . "</td>" .
+            '<td>'."$log</td>\n".
+            '<td>' . $ct. '<input type="hidden" name="chk" value="'.$row[0].'"></td></tr>';
+    }
+    $tbl .= '</table>';
+    
+    print "<center><div>\n$tbl\n</div></center>";
+
+    print $cgi->end_html();
+
+    
+}catch{
+    print "<font color=red><b>SERVER ERROR</b>-> Method NotConfirmed() Page Build Failed!.</font>:<pre>".$@."</pre>";
+}
+}
+
+sub log2html{
+    my $log = shift;
+    my ($re_a_tag, $sub)  = qr/<a\s+.*?>.*<\/a>/si;
+    $log =~ s/^(^\*)(.*)(\*)(\\n)/<b>$2<\/b><br>/oi;
+    $log =~ s/''/'/g;
+    $log =~ s/\r\n/<br>/gs;
+    $log =~ s/\\n/<br>/gs;
+    
+
+    if ( $log =~ /<<LNK</ ) {
+        my $idx = $-[0] + 5;
+        my $len = index( $log, '>', $idx );
+        $sub = substr( $log, $idx + 1, $len - $idx - 1 );
+        my $url = qq(<a href="$sub" target=_blank>$sub</a>);
+        $log =~ s/<<LNK<(.*?)>+/$url/osi;
+    }
+
+    if ( $log =~ /<<IMG</ ) {
+            my $idx = $-[0] + 5;
+            my $len = index( $log, '>', $idx );
+            $sub = substr( $log, $idx + 1, $len - $idx - 1 );
+            my $url = qq(<img src="$sub"/>);
+            $log =~ s/<<IMG<(.*?)>+/$url/osi;
+    }
+    elsif ( $log =~ /<<FRM</ ) {
+            my $idx = $-[0] + 5;
+            my $len = index( $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<a href="./images/$lnk" style="border=0;" target="_IMG">
+                             <img src="./images/$sub" width="$imgw" height="$imgh" class="tag_FRM"/></a>);
+            }
+            else {
+                #TODO fetch from web locally the original image.
+                $lnk =  qq(\n<img src="$lnk" width="$imgw" height="$imgh" class="tag_FRM"/>);
+            }
+            $log =~ s/<<FRM<(.*?)>+/$lnk/o;
+        }
+
+    #Replace with a full link an HTTP URI
+    if ( $log =~ /<iframe / ) {
+        my $a = q(<iframe width="560" height="315");
+        my $b;
+        given (&Settings::frameSize) {
+            when("0") { $b = q(width="390" height="215") }
+            when("1") { $b = q(width="280" height="180") }
+            when("2") { $b = q(width="160" height="120") }
+            default {
+                $b = &Settings::frameSize;
+            }
+        }
+        $b = qq(<div><iframe align="center" $b);
+        $log =~ s/$a/$b/o;
+        $a = q(</iframe>);
+        $b = q(</iframe></div>);
+        $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, "<img" ) > -1;
+            $ch_i =~ s/https/http/gsi;
+            $ch_i =~ s/($RE{URI}{HTTP})/<a href="$1" target=_blank>$1<\/a>/gsi;
+        }
+        $log = join( '', @chnks );
+    }
+
+    #$log =~ s/\<\</&#60;&#60/gs;
+    #$log =~ s/\>\>/&#62&#62;/gs;
+    
+return $log;
+}
+
+
+
 1;
\ No newline at end of file
index cbf923281aeb77534254df27c980489094e84ee9..e1acdce54e127a4da55dc78cb0db9211a69de078 100755 (executable)
@@ -744,11 +744,12 @@ $log_output .= <<_TXT;
 <a href="#top">&#x219F;</a></td>
 <td colspan="4" align="right">
     <input type="hidden" name="opr" id="opr" value="0"/>
-    <input type="submit" value="Export Selected" onclick="return exportSelected()"/>&nbsp;
+    <input type="submit" value="Export Selected" onclick="return exportSelected()"/>&nbsp;    
     <input type="submit" value="Sum Selected" onclick="return sumSelected()"/>&nbsp;
     <input type="submit" value="Date Diff Selected" onclick="return dateDiffSelected()"/>&nbsp;
     <button onclick="return selectAllLogs()">Select All</button>
     <input type="reset" value="Unselect All"/>
+    <input type="submit" value="Print View Selected" onclick="return viewSelected()"/>&nbsp;
     <input id="del_sel" type="submit" value="Delete Selected"/>
 </td></tr>
 </TABLE></FORM>
@@ -983,8 +984,8 @@ if($isPUBViewMode){$sideMenu=$frm=$srh=$tail=""}else{
         <a class="a_" onclick="return toggle('#div_srh',true);">Search</a><hr>
         <a class="a_" onclick="return deleteSelected();">Delete</a><hr>
         <a class="a_" onclick="return toggle('#tbl_hlp',true);">Help</a><hr>
-        <a class="a_" href="stats.cgi">Stats</a><hr>
-        <a class="a_" href="config.cgi">Config</a><hr>
+        <a class="a_" href="stats.cgi" onclick="display('Please Wait!');">Stats</a><hr>
+        <a class="a_" href="config.cgi" onclick="display('Please Wait!');>Config</a><hr>
         <a class="a_" id="lnk_show_all" onclick="return showAll();">Show All <span  class="ui-icon ui-icon-heart"></span></a><hr>
         $sm_reset_all
         <a class="a_" href="login_ctr.cgi?logout=bye">LOGOUT</a><br><hr>
index f0a870058f1783dbc1475bd20f7770af3e90ed5b..a88852ee79492d2670399ba725fac48c5856099b 100644 (file)
@@ -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 (file)
index 0000000..cf23c7c
--- /dev/null
@@ -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