X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_main_Mixin.pm;h=ded6cc69703b1833ef2e10caa2c1c768c86e73ea;hb=d353c1f9bbfee93e96219851af27a78f56837c50;hp=92dea284048adbda3004e22c1f169cf6f043f9df;hpb=48fc9f425ec3454f4346089318994ae6c1e080a8;p=freeside.git diff --git a/FS/FS/cust_main_Mixin.pm b/FS/FS/cust_main_Mixin.pm index 92dea2840..ded6cc697 100644 --- a/FS/FS/cust_main_Mixin.pm +++ b/FS/FS/cust_main_Mixin.pm @@ -2,11 +2,12 @@ package FS::cust_main_Mixin; use strict; use vars qw( $DEBUG $me ); -use Carp qw( confess ); +use Carp qw( confess carp cluck ); use FS::UID qw(dbh); use FS::cust_main; use FS::Record qw( qsearch qsearchs ); use FS::Misc qw( send_email generate_email ); +use HTML::Entities; $DEBUG = 0; $me = '[FS::cust_main_Mixin]'; @@ -37,6 +38,7 @@ sub cust_linked { $_[0]->custnum; } sub cust_main { my $self = shift; + cluck ref($self). '->cust_main called' if $DEBUG; $self->cust_linked ? qsearchs('cust_main', {custnum => $self->custnum}) : ''; } @@ -233,12 +235,25 @@ linked to a customer. =cut sub ucfirst_cust_status { + carp "ucfirst_cust_status deprecated, use cust_status_label"; my $self = shift; $self->cust_linked ? ucfirst( $self->cust_status(@_) ) : $self->cust_unlinked_msg; } +=item cust_status_label + +=cut + +sub cust_status_label { + my $self = shift; + + $self->cust_linked + ? FS::cust_main::cust_status_label($self) + : $self->cust_unlinked_msg; +} + =item cust_statuscolor Given an object that contains fields from cust_main (say, from a JOINed @@ -524,7 +539,7 @@ sub process_email_search_result { my $job = shift; #warn "$me process_re_X $method for job $job\n" if $DEBUG; - my $param = thaw(decode_base64(shift)); + my $param = shift; warn Dumper($param) if $DEBUG; $param->{'job'} = $job; @@ -582,16 +597,31 @@ sub mt { return $lh->maketext(@_); } -=item time2str_local FORMAT, TIME +=item time2str_local FORMAT, TIME[, ESCAPE] Localizes a date (see L) for the customer's locale. +FORMAT can be a L string, or one of these special words: + +- "short": the value of the "date_format" config setting for the customer's + locale, defaulting to "%x". +- "rdate": the same as "short" except that the default has a four-digit year. +- "long": the value of the "date_format_long" config setting for the + customer's locale, defaulting to "%b %o, %Y". + +ESCAPE, if specified, is one of "latex" or "html", and will escape non-ASCII +characters and convert spaces to nonbreaking spaces. + =cut sub time2str_local { # renamed so that we don't have to change every single reference to # time2str everywhere my $self = shift; + my ($format, $time, $escape) = @_; + return '' unless $time > 0; # work around time2str's traditional stupidity + + $self->{_date_format} ||= {}; if (!exists($self->{_dh})) { my $cust_main = $self->cust_main; my $locale = $cust_main->locale if $cust_main; @@ -601,7 +631,31 @@ sub time2str_local { Date::Language->new(); # fall back to English $self->{_dh} = $dh; } - $self->{_dh}->time2str(@_); + + if ($format eq 'short') { + $format = $self->{_date_format}->{short} + ||= $self->conf->config('date_format') || '%x'; + } elsif ($format eq 'rdate') { + $format = $self->{_date_format}->{rdate} + ||= $self->conf->config('date_format') || '%m/%d/%Y'; + } elsif ($format eq 'long') { + $format = $self->{_date_format}->{long} + ||= $self->conf->config('date_format_long') || '%b %o, %Y'; + } + + # actually render the date + my $string = $self->{_dh}->time2str($format, $time); + + if ($escape) { + if ($escape eq 'html') { + $string = encode_entities($string); + $string =~ s/ +/ /g; + } elsif ($escape eq 'latex') { # just do nbsp's here + $string =~ s/ +/~/g; + } + } + + $string; } =back