From: Will Budic Date: Tue, 4 Feb 2020 14:31:52 +0000 (+1100) Subject: Issue 15. X-Git-Url: https://lifelog.hopto.org/gitweb/?a=commitdiff_plain;h=a1140a20e245ec78f021474a04c18f8f2e44161b;p=LifeLog.git Issue 15. --- diff --git a/Current Development Check List.md b/Current Development Check List.md index 4a85df6..557a876 100644 --- a/Current Development Check List.md +++ b/Current Development Check List.md @@ -55,8 +55,8 @@ This version is not compatible in data structure to prior versions. Data migrati ### v. 1.8 Encountered/Fixed -* Bug 16 - Saving new log entries with rtf overrites previous log entries rtf. -* Issue 15 Date diff, showes upside down first range by current date with multiple selections. +* Bug 16 - Saving new log entries with rtf overides previous log entries rtf. +* ✔ Issue 15 Date diff, showes upside down first range by current date with multiple selections. * Range should be selected from date in selected latest to current date last as inbetween difference. diff --git a/htdocs/cgi-bin/remove.cgi b/htdocs/cgi-bin/data.cgi similarity index 77% rename from htdocs/cgi-bin/remove.cgi rename to htdocs/cgi-bin/data.cgi index db7792b..fc602e0 100755 --- a/htdocs/cgi-bin/remove.cgi +++ b/htdocs/cgi-bin/data.cgi @@ -9,7 +9,7 @@ use warnings; use Try::Tiny; use Switch; - + use CGI; use CGI::Session '-ip_match'; use DBI; @@ -52,26 +52,16 @@ my $PRC_WIDTH = &Settings::pagePrcWidth; my $TH_CSS = &Settings::css; my $BGCOL = &Settings::bgcol; #Set to 1 to get debug help. Switch off with 0. -my $DEBUG = &Settings::debug; +my $DEBUG = &Settings::debug; #END OF SETTINGS my $today = DateTime->now; $today->set_time_zone(&Settings::timezone); -my %hshCats ={}; my $tbl_rc =0; -my $stm; -my $stmtCat = "SELECT ID, NAME FROM CAT;"; -my $st = $db->prepare( $stmtCat ); -my $rv = $st->execute(); - - -while(my @row = $st->fetchrow_array()) { - $hshCats{$row[0]} = $row[1]; -} - +my ($stm,$st, $rv); -my $tbl = '
+my $tbl = ' '; @@ -79,25 +69,25 @@ my $tbl = 'param('confirmed'); if ($datediff){ - print $cgi->header(-expires=>"+6os"); + print $cgi->header(-expires=>"+6os"); print $cgi->start_html(-title => "Date Difference Report", -BGCOLOR => $BGCOL, -script=>{-type => 'text/javascript', -src => 'wsrc/main.js'}, -style =>{-type => 'text/css', -src => "wsrc/$TH_CSS"} - ); + ); &DisplayDateDiffs; -}elsif (!$confirmed){ - print $cgi->header(-expires=>"+6os"); +}elsif ($confirmed){ + &ConfirmedDelition; +}else{ + print $cgi->header(-expires=>"+6os"); print $cgi->start_html(-title => "Personal Log Record Removal", -BGCOLOR => $BGCOL, -script=>{-type => 'text/javascript', -src => 'wsrc/main.js'}, -style =>{-type => 'text/css', -src => "wsrc/$TH_CSS"} - ); + ); &NotConfirmed; -}else{ - &ConfirmedDelition; } @@ -106,31 +96,45 @@ $db->disconnect(); exit; sub DisplayDateDiffs{ + $tbl = '
Date TimeLogCategory
'; - $stm = 'SELECT DATE, LOG FROM LOG WHERE '; + $stm = 'SELECT DATE, LOG FROM VW_LOG WHERE '; my @ids = $cgi->param('chk'); + @ids = reverse @ids; + foreach (@ids){ - $stm .= "rowid = '" . $_ ."'"; + $stm .= "PID = " . $_ .""; if( \$_ != \$ids[-1] ) { $stm = $stm." OR "; } } $stm .= ';'; + print $cgi->pre("###[stm:$stm]") if($DEBUG); $st = $db->prepare( $stm ); $st->execute() or die or die "

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

"; - my $dt_prev = $today; + my ($dt,$dif,$first,$last,$tnext, $dt_prev) = (0,0,0,0,0,$today); while(my @row = $st->fetchrow_array()) { - my $dt = DateTime::Format::SQLite->parse_datetime( $row[0] ); - my $dif = dateDiff($dt_prev, $dt); - $tbl .= ' + $dt = DateTime::Format::SQLite->parse_datetime( $row[0] ); + $dif = dateDiff($dt_prev, $dt); + $tbl .= '". - ''; - $dt_prev = $dt; + ''; + $last = $dt_prev; + $dt_prev = $dt; + if($tnext){ + $dif = dateDiff($today, $dt,''); + $tbl .= ''; + } + else{$tnext=1; $first = $dt;} + } + if($first != $last){ + $dif = dateDiff($first, $dt_prev,'(first above)'); + $tbl .= ''; } $tbl .= '
* DATE DIFFERENCES *
'. $dt->ymd . '
'. $dt->ymd . ' '.$row[1]."
'.$dif. '
'.$dif.'
'.$dif. '
'.$dif. '
'; @@ -138,57 +142,61 @@ print '
'.$tbl.'

Back to Main Lognew(); my $dur = $span->format_duration($d2 - $d1); -return sprintf( "%s
between %s and %s", $dur, boldDate($d1), boldDate($d2)); + my $t = " today "; + $t = "" if ($d1!=$today); +return sprintf( "%s
between $t $ff %s and %s", $dur, boldDate($d1), boldDate($d2)); } -sub boldDate{ +sub boldDate { my($d)=@_; return "".$d->ymd." ".$d->hms; } -sub ConfirmedDelition{ +sub ConfirmedDelition { +try{ foreach my $id ($cgi->param('chk')){ - + print $cgi->p("###[deleting:$id]") if(Settings::debug()); $st = $db->prepare("DELETE FROM LOG WHERE rowid = '$id';"); $rv = $st->execute() or die or die "

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

"; $st = $st = $db->prepare("DELETE FROM NOTES WHERE LID = '$id';"); $rv = $st->execute(); - if($rv < 0) { - print "

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

"; - exit; - } - + # if($rv == 0) { + # die "

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

"; + # } + } - - $st->finish; print $cgi->redirect('main.cgi'); +}catch{ + print $cgi->p("ERROR " . $_); +} + } -sub NotConfirmed{ +sub NotConfirmed { - my $stmS = "SELECT rowid, ID_CAT, DATE, LOG from LOG WHERE"; - my $stmE = " ORDER BY DATE DESC, rowid DESC;"; + 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')){ - $stm = $stm . "rowid = '" . $id . "' OR "; + $stm = $stm . "PID = " . $id . " OR "; } - #OR end to rid=0 hack! ;) - $stm = $stm . "rowid = '0' " . $stmE; - # + $stm =~ s/ OR $//; $stm .= $stmE; + + print $cgi->pre("###[stm:$stm][confirmed:$confirmed]") if($DEBUG); $st = $db->prepare( $stm ); $rv = $st->execute() or die "

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

"; if($rv < 0) { @@ -199,11 +207,11 @@ sub NotConfirmed{ my $rs = "r1"; while(my @row = $st->fetchrow_array()) { - my $ct = $hshCats{$row[1]}; - my $dt = DateTime::Format::SQLite->parse_datetime( $row[2] ); - my $log = log2html($row[3]); - - $tbl = $tbl . ''. $dt->ymd . "" . + my $ct = $row[2]; + my $dt = DateTime::Format::SQLite->parse_datetime( $row[3] ); + my $log = log2html($row[4]); + + $tbl = $tbl . ''. $dt->ymd . "" . '' . $dt->hms . "" . ''."$log\n". '' . $ct. ''; @@ -222,7 +230,7 @@ sub NotConfirmed{ $tbl = $tbl . '
-

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

+

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

(Or hit you Browsers Back Button!)
@@ -240,7 +248,7 @@ print '
' . $tbl .'
'; sub log2html{ my $log = shift; my ($re_a_tag, $sub) = qr/.*<\/a>/si; - $log =~ s/''/'/g; + $log =~ s/''/'/g; $log =~ s/\r\n/
/gs; $log =~ s/\\n/
/gs; @@ -300,7 +308,7 @@ sub log2html{ $log =~ s/$a/$b/o; $a = q(); $b = q(
); - $log =~ s/$a/$b/o; + $log =~ s/$a/$b/o; } else { my @chnks = split( /($re_a_tag)/si, $log ); diff --git a/htdocs/cgi-bin/main.cgi b/htdocs/cgi-bin/main.cgi index 9159591..24eaa45 100755 --- a/htdocs/cgi-bin/main.cgi +++ b/htdocs/cgi-bin/main.cgi @@ -66,7 +66,7 @@ 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 ID, ID_CAT, DATE, LOG, AMOUNT, AFLAG, RTF, STICKY from VW_LOG WHERE'; +my $stmS = 'SELECT PID, ID_CAT, DATE, LOG, AMOUNT, AFLAG, RTF, STICKY from VW_LOG WHERE'; my $stmE = ""; my $stmD = ""; my $sm_reset_all; @@ -212,7 +212,7 @@ print $cgi->start_html( my $rv; my $st; my $stmtCat = "SELECT ID, NAME, DESCRIPTION FROM CAT ORDER BY ID;"; -my $stmt = "SELECT ID, ID_CAT, DATE, LOG, AMOUNT, AFLAG, RTF, STICKY FROM VW_LOG WHERE STICKY = 1;"; +my $stmt = "SELECT PID, ID_CAT, DATE, LOG, AMOUNT, AFLAG, RTF, STICKY FROM VW_LOG WHERE STICKY = 1;"; print qq("## Using db -> $dsn) if $DEBUG; @@ -267,7 +267,7 @@ for my $key ( keys %hshDesc ) { } } my $log_output = -qq( +qq( @@ -1032,14 +1032,14 @@ try { if(scalar @lid > 0){ - #By Notes.LID contraint, there should NOT be an already existing log rowid entry just submitted in the Notes table! + #By Notes.LID constraint, there should NOT be an already existing log rowid entry just submitted in the Notes table! #What happened? We must check and delete, regardles. As data is renumerated and shuffled from perl in database. :( $st = $db->prepare("SELECT LID FROM NOTES WHERE LID = '$lid[0]';"); $st->execute(); if($st->fetchrow_array()){ $st = $db->prepare("DELETE FROM NOTES WHERE LID = '$lid[0]';"); $st->execute(); - print qq(

Warning deleted (possible old) NOTES.LID[$lid[0]] -> lid:$lid[0]

); + print qq(

Warning deleted (possible old) NOTES.LID[$lid[0]] -> lid:@lid

); } $st = $db->prepare("INSERT INTO NOTES(LID, DOC) VALUES (?, ?);"); #
Date