[ic] UserDB Last Login bug when running with mysql

Mike Heins mike at perusion.com
Wed Jun 7 09:25:51 EDT 2006


Quoting Carl Bailey (carl at triangleresearch.com):
> Using IC 5.4, we noticed that the user's last login time in the UI was 
> showing up as December 1969 for everyone.  We traced the issue to this:
> 
> The mysql column type is timestamp, which returns the data like 
> YYYYMMDDHHMMSS.
> However the UI page customer_view.html uses a [time] tag to display the 
> value.  The problem is that the time tag only works correctly when 
> given a "unix" time value, and fails when given the mysqlvalue above.
> 
> We solved it by changing the UI page as follows:
>         [calc]
>             my $dt = "[loop-param mod_time]";
>             $dt =~ m/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/;
>             return "$2/$3/$1 $4:$5:$6"
>         [/calc]
> 
> However, this fix works only for mysql and does not allow such flexible 
> formatting as the time tag.
> A more general fix would be to adjust the time tag something along the 
> lines that follow:
> 
> -- use POSIX qw(ceil strftime LC_CTYPE);
> ++ use POSIX qw(ceil mktime strftime LC_CTYPE);
> 
> my $now = $opt->{time} || time;
> ++ if (length($now) == 14) {
> ++  # we have a mysql timestamp on our hands
> ++  $now = m/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/;
> ++  my $now = mktime($6,$5,$4,$3,$2 - 1,$1 - 1900);
> ++}

Hmm. I am not sure about this, as it is quite possible that time values
will be changing as UNIX moves to a 64-bit number. Also, MySQL could
easily change the length of the return value, and it may even change
based on locale or other settings.

However, I am willing to look at something that can reliably detect
an iso time and do something with it. Any suggestions from the 
group?

-- 
Mike Heins
Perusion -- Expert Interchange Consulting    http://www.perusion.com/
phone +1.765.647.1295  tollfree 800-949-1889 <mike at perusion.com>

Fast, reliable, cheap.  Pick two and we'll talk.  -- unknown


More information about the interchange-users mailing list