break _bytecount subroutines out of FS::UI::Web
[freeside.git] / FS / FS / UI / Web.pm
index 23f0e83..682dc31 100644 (file)
@@ -1,13 +1,18 @@
 package FS::UI::Web;
 
 use strict;
-use vars qw($DEBUG $me);
+use vars qw($DEBUG @ISA @EXPORT_OK $me);
+use Exporter;
+use Number::Format;
 use FS::Conf;
 use FS::Record qw(dbdef);
 
 #use vars qw(@ISA);
 #use FS::UI
 #@ISA = qw( FS::UI );
+@ISA = qw( Exporter );
+
+@EXPORT_OK = qw( svc_url );
 
 $DEBUG = 0;
 $me = '[FS::UID::Web]';
@@ -18,19 +23,20 @@ $me = '[FS::UID::Web]';
 
 use Date::Parse;
 sub parse_beginning_ending {
-  my($cgi) = @_;
+  my($cgi, $prefix) = @_;
+  $prefix .= '_' if $prefix;
 
   my $beginning = 0;
-  if ( $cgi->param('begin') =~ /^(\d+)$/ ) {
+  if ( $cgi->param($prefix.'begin') =~ /^(\d+)$/ ) {
     $beginning = $1;
-  } elsif ( $cgi->param('beginning') =~ /^([ 0-9\-\/]{1,64})$/ ) {
+  } elsif ( $cgi->param($prefix.'beginning') =~ /^([ 0-9\-\/]{1,64})$/ ) {
     $beginning = str2time($1) || 0;
   }
 
   my $ending = 4294967295; #2^32-1
-  if ( $cgi->param('end') =~ /^(\d+)$/ ) {
+  if ( $cgi->param($prefix.'end') =~ /^(\d+)$/ ) {
     $ending = $1 - 1;
-  } elsif ( $cgi->param('ending') =~ /^([ 0-9\-\/]{1,64})$/ ) {
+  } elsif ( $cgi->param($prefix.'ending') =~ /^([ 0-9\-\/]{1,64})$/ ) {
     #probably need an option to turn off the + 86399
     $ending = str2time($1) + 86399;
   }
@@ -112,6 +118,7 @@ sub svc_url {
     $url .= 'svcnum=' if $query =~ /^\d+(;|$)/ or $query eq '';
   }
 
+  import FS::CGI 'rooturl'; #WTF!  why is this necessary
   my $return = rooturl(). "$opt{action}/$url$query";
 
   $return = qq!<A HREF="$return">! if $opt{ahref};
@@ -174,17 +181,6 @@ sub parse_lt_gt {
 
 }
 
-sub bytecount_unexact {
-  my $bc = shift;
-  return("$bc bytes")
-    if ($bc < 1000);
-  return(sprintf("%.2f Kbytes", $bc/1000))
-    if ($bc < 1000000);
-  return(sprintf("%.2f Mbytes", $bc/1000000))
-    if ($bc < 1000000000);
-  return(sprintf("%.2f Gbytes", $bc/1000000000));
-}
-
 ###
 # cust_main report subroutines
 ###
@@ -198,15 +194,16 @@ configuration value.
 
 =cut
 
-use vars qw( @cust_fields );
+use vars qw( @cust_fields @cust_colors @cust_styles @cust_aligns );
 
 sub cust_header {
 
-  warn "FS::svc_Common::cust_header called"
+  warn "FS::UI:Web::cust_header called"
     if $DEBUG;
 
   my %header2method = (
     'Customer'                 => 'name',
+    'Cust. Status'             => 'ucfirst_cust_status',
     'Cust#'                    => 'custnum',
     'Name'                     => 'contact',
     'Company'                  => 'company',
@@ -227,6 +224,16 @@ sub cust_header {
     'Invoicing email(s)'       => 'invoicing_list_emailonly_scalar',
   );
 
+  my %header2colormethod = (
+    'Cust. Status' => 'cust_statuscolor',
+  );
+  my %header2style = (
+    'Cust. Status' => 'b',
+  );
+  my %header2align = (
+    'Cust. Status' => 'c',
+  );
+
   my $cust_fields;
   my @cust_header;
   if ( @_ && $_[0] ) {
@@ -240,22 +247,31 @@ sub cust_header {
 
     my $conf = new FS::Conf;
     if (    $conf->exists('cust-fields')
-         && $conf->config('cust-fields') =~ /^([\w \|\#\(\)]+):?/
+         && $conf->config('cust-fields') =~ /^([\w\. \|\#\(\)]+):?/
        )
     {
       warn "  found cust-fields configuration value"
         if $DEBUG;
       $cust_fields = $1;
     } else { 
-      warn "  no cust-fields configuration value found; using default 'Customer'"
+      warn "  no cust-fields configuration value found; using default 'Cust. Status | Customer'"
         if $DEBUG;
-      $cust_fields = 'Customer';
+      $cust_fields = 'Cust. Status | Customer';
     }
   
   }
 
   @cust_header = split(/ \| /, $cust_fields);
   @cust_fields = map { $header2method{$_} } @cust_header;
+  @cust_colors = map { exists $header2colormethod{$_}
+                         ? $header2colormethod{$_}
+                         : ''
+                     }
+                     @cust_header;
+  @cust_styles = map { exists $header2style{$_} ? $header2style{$_} : '' }
+                     @cust_header;
+  @cust_aligns = map { exists $header2align{$_} ? $header2align{$_} : 'l' }
+                     @cust_header;
 
   #my $svc_x = shift;
   @cust_header;
@@ -286,9 +302,9 @@ sub cust_sql_fields {
   map "cust_main.$_", @fields;
 }
 
-=item cust_fields SVC_OBJECT [ CUST_FIELDS_VALUE ]
+=item cust_fields OBJECT [ CUST_FIELDS_VALUE ]
 
-Given a svc_ object that contains fields from cust_main (say, from a
+Given an object that contains fields from cust_main (say, from a
 JOINed search.  See httemplate/search/svc_* for examples), returns an array
 of customer information, or "(unlinked)" if this service is not linked to a
 customer.
@@ -301,7 +317,7 @@ setting is supplied, the <B>cust-fields</B> configuration value.
 
 sub cust_fields {
   my $svc_x = shift;
-  warn "FS::svc_Common::cust_fields called for $svc_x ".
+  warn "FS::UI::Web::cust_fields called for $svc_x ".
        "(cust_fields: @cust_fields)"
     if $DEBUG > 1;
 
@@ -322,6 +338,67 @@ sub cust_fields {
   } @cust_fields;
 }
 
+=item cust_colors
+
+Returns an array of subroutine references (or empty strings) for returning
+customer information colors.
+
+As with L<the cust_header subroutine|/cust_header>, the fields returned are
+defined by the supplied customer fields setting, or if no customer fields
+setting is supplied, the <B>cust-fields</B> configuration value. 
+
+=cut
+
+sub cust_colors {
+  map { 
+    my $method = $_;
+    if ( $method ) {
+      sub { shift->$method(@_) };
+    } else {
+      '';
+    }
+  } @cust_colors;
+}
+
+=item cust_styles
+
+Returns an array of customer information styles.
+
+As with L<the cust_header subroutine|/cust_header>, the fields returned are
+defined by the supplied customer fields setting, or if no customer fields
+setting is supplied, the <B>cust-fields</B> configuration value. 
+
+=cut
+
+sub cust_styles {
+  map { 
+    if ( $_ ) {
+      $_;
+    } else {
+      '';
+    }
+  } @cust_styles;
+}
+
+=item cust_aligns
+
+Returns an array or scalar (depending on context) of customer information
+alignments.
+
+As with L<the cust_header subroutine|/cust_header>, the fields returned are
+defined by the supplied customer fields setting, or if no customer fields
+setting is supplied, the <B>cust-fields</B> configuration value. 
+
+=cut
+
+sub cust_aligns {
+  if ( wantarray ) {
+    @cust_aligns;
+  } else {
+    join('', @cust_aligns);
+  }
+}
+
 ###
 # begin JSRPC code...
 ###