[interchange-cvs] interchange - heins modified lib/Vend/Interpolate.pm

interchange-core@interchange.redhat.com interchange-core@interchange.redhat.com
Fri Nov 9 18:30:00 2001


User:      heins
Date:      2001-11-09 23:29:58 GMT
Modified:  lib/Vend Interpolate.pm
Log:
	* Fix adjust code in $Tag->time() to take a value like
	  "+ 1 hour" or "-10 min". Also honor the old type.

	* Default to %c format for [time][/time]

	* Fix problem with setting preselects in select box builds
	  when the value had a comma.

Revision  Changes    Path
2.27      +15 -4     interchange/lib/Vend/Interpolate.pm


rev 2.27, prev_rev 2.26
Index: Interpolate.pm
===================================================================
RCS file: /anon_cvs/repository/interchange/lib/Vend/Interpolate.pm,v
retrieving revision 2.26
retrieving revision 2.27
diff -u -r2.26 -r2.27
--- Interpolate.pm	2001/11/06 22:50:51	2.26
+++ Interpolate.pm	2001/11/09 23:29:58	2.27
@@ -1,6 +1,6 @@
 # Vend::Interpolate - Interpret Interchange tags
 # 
-# $Id: Interpolate.pm,v 2.26 2001/11/06 22:50:51 mheins Exp $
+# $Id: Interpolate.pm,v 2.27 2001/11/09 23:29:58 mheins Exp $
 #
 # Copyright (C) 1996-2001 Red Hat, Inc. <interchange@redhat.com>
 #
@@ -27,7 +27,7 @@
 require Exporter;
 @ISA = qw(Exporter);
 
-$VERSION = substr(q$Revision: 2.26 $, 10);
+$VERSION = substr(q$Revision: 2.27 $, 10);
 
 @EXPORT = qw (
 
@@ -1716,6 +1716,7 @@
 
 		my $vvalue = $value;
 		$vvalue =~ s/"/&quot;/;
+		HTML::Entities::decode($value);
 		$run .= qq| VALUE="$vvalue"|;
 		if ($default) {
 			$regex	= qr/$re_b\Q$value\E$re_e/;
@@ -2966,15 +2967,25 @@
 	}
 
 	local($ENV{TZ}) = $opt->{tz} if $opt->{tz};
-
+	
 	my $now = $opt->{time} || time();
 	$fmt = '%Y%m%d' if $opt->{sortable};
 
 	if($opt->{adjust}) {
-		$opt->{adjust} =~ s/00$//;
-        $opt->{adjust} =~ s/^(-)?[0+]/$1/;
-        $now += (60 * 60) * $opt->{adjust};
+		my $neg = $opt->{adjust} =~ s/^\s*-\s*//;
+		my $diff;
+		$opt->{adjust} =~ s/^\s*\+\s*//;
+		if($opt->{adjust} !~ /[a-z]/) {
+			$opt->{adjust} =~ s/00$//;
+			$diff = (60 * 60) * $opt->{adjust};
+		}
+		else {
+			$diff = Vend::Config::time_to_seconds($opt->{adjust});
+		}
+		$now = $neg ? $now - $diff : $now + $diff;
 	}
+
+	$fmt ||= '%c';
     my $out = $opt->{gmt} ? ( POSIX::strftime($fmt, gmtime($now)    ))
                           : ( POSIX::strftime($fmt, localtime($now) ));
 	$out =~ s/\b0(\d)\b/$1/g if $opt->{zerofix};