diff options
-rw-r--r-- | FS/FS/Conf.pm | 24 | ||||
-rw-r--r-- | FS/FS/cust_bill.pm | 11 | ||||
-rw-r--r-- | FS/FS/cust_credit.pm | 3 | ||||
-rw-r--r-- | FS/FS/cust_pay.pm | 6 | ||||
-rwxr-xr-x | FS/bin/freeside-expiration-alerter | 87 | ||||
-rw-r--r-- | conf/invoice_html | 2 | ||||
-rw-r--r-- | conf/invoice_html_statement | 2 | ||||
-rw-r--r-- | httemplate/config/config-image.cgi | 19 | ||||
-rw-r--r-- | httemplate/config/config-process.cgi | 4 | ||||
-rw-r--r-- | httemplate/config/config-view.cgi | 73 | ||||
-rw-r--r-- | httemplate/config/config.cgi | 16 | ||||
-rw-r--r-- | httemplate/elements/header.html | 57 | ||||
-rwxr-xr-x | httemplate/view/REAL_logo.cgi | 14 | ||||
-rwxr-xr-x | httemplate/view/cust_bill-logo.cgi | 18 |
14 files changed, 229 insertions, 107 deletions
diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm index eb20590cf..4def46260 100644 --- a/FS/FS/Conf.pm +++ b/FS/FS/Conf.pm @@ -108,7 +108,11 @@ sub config { my $self = shift; return $self->_usecompat('config', @_) if use_confcompat; - my($name,$agentnum)=@_; + my($name, $agentnum)=@_; + + carp "FS::Conf->config($name, $agentnum) called" + if $DEBUG > 1; + my $cv = $self->_config($name, $agentnum) or return; if ( wantarray ) { @@ -146,7 +150,11 @@ sub exists { my $self = shift; return $self->_usecompat('exists', @_) if use_confcompat; - my($name,$agentnum)=@_; + my($name, $agentnum)=@_; + + carp "FS::Conf->exists($name, $agentnum) called" + if $DEBUG > 1; + defined($self->_config($name, $agentnum)); } @@ -556,6 +564,7 @@ worry that config_items is freeside-specific and icky. 'section' => 'billing', 'description' => 'Template file for billing method expiration alerts. See the <a href="http://www.freeside.biz/mediawiki/index.php/Freeside:1.7:Documentation:Administration#Credit_cards_and_Electronic_checks">billing documentation</a> for details.', 'type' => 'textarea', + 'per-agent' => 1, }, { @@ -1823,7 +1832,7 @@ worry that config_items is freeside-specific and icky. 'section' => 'required', 'description' => 'Your company name', 'type' => 'text', - 'per_agent' => 1, + 'per_agent' => 1, #XXX just FS/FS/ClientAPI/Signup.pm }, { @@ -2270,15 +2279,18 @@ worry that config_items is freeside-specific and icky. { 'key' => 'logo.png', 'section' => 'billing', #? - 'description' => 'An image to include in some types of invoices', - 'type' => 'binary', + 'description' => 'Company logo for HTML invoices and the backoffice interface, in PNG format. Suggested size somewhere near 92x62.', + 'type' => 'image', + 'per_agent' => 1, #XXX just view/logo.cgi, which is for the global + #old-style editor anyway...? }, { 'key' => 'logo.eps', 'section' => 'billing', #? - 'description' => 'An image to include in some types of invoices', + 'description' => 'Company logo for printed and PDF invoices, in EPS format.', 'type' => 'binary', + 'per_agent' => 1, #XXX as above, kinda }, { diff --git a/FS/FS/cust_bill.pm b/FS/FS/cust_bill.pm index 34feb40f7..704b3504a 100644 --- a/FS/FS/cust_bill.pm +++ b/FS/FS/cust_bill.pm @@ -1637,7 +1637,6 @@ L<Time::Local> and L<Date::Parse> for conversion functions. =cut sub print_latex { - my( $self, $today, $template ) = @_; my %params = ( 'format' => 'latex' ); @@ -1653,11 +1652,13 @@ sub print_latex { UNLINK => 0, ) or die "can't open temp file: $!\n"; - if ($template && $conf->exists("logo_${template}.eps")) { - print $lh $conf->config_binary("logo_${template}.eps") + my $agentnum = $self->cust_main->agentnum; + + if ( $template && $conf->exists("logo_${template}.eps", $agentnum) ) { + print $lh $conf->config_binary("logo_${template}.eps", $agentnum) or die "can't write temp file: $!\n"; - }else{ - print $lh $conf->config_binary('logo.eps') + } else { + print $lh $conf->config_binary('logo.eps', $agentnum) or die "can't write temp file: $!\n"; } close $lh; diff --git a/FS/FS/cust_credit.pm b/FS/FS/cust_credit.pm index 99c63cb7f..47a8119ee 100644 --- a/FS/FS/cust_credit.pm +++ b/FS/FS/cust_credit.pm @@ -229,7 +229,8 @@ sub delete { my $cust_main = $self->cust_main; my $error = send_email( - 'from' => $conf->config('invoice_from'), #??? well as good as any + 'from' => $conf->config('invoice_from', $self->cust_main->agentnum), + #invoice_from??? well as good as any 'to' => $conf->config('deletecredits'), 'subject' => 'FREESIDE NOTIFICATION: Credit deleted', 'body' => [ diff --git a/FS/FS/cust_pay.pm b/FS/FS/cust_pay.pm index 08699acd1..583a72410 100644 --- a/FS/FS/cust_pay.pm +++ b/FS/FS/cust_pay.pm @@ -220,7 +220,8 @@ sub insert { $payby =~ s/^CHEK$/Electronic check/; $error = send_email( - 'from' => $conf->config('invoice_from'), #??? well as good as any + 'from' => $conf->config('invoice_from', $self->cust_main->agentnum), + #invoice_from??? well as good as any 'to' => \@invoicing_list, 'subject' => 'Payment receipt', 'body' => [ $receipt_template->fill_in( HASH => { @@ -344,7 +345,8 @@ sub delete { my $cust_main = $self->cust_main; my $error = send_email( - 'from' => $conf->config('invoice_from'), #??? well as good as any + 'from' => $conf->config('invoice_from', $self->cust_main->agentnum), + #invoice_from??? well as good as any 'to' => $conf->config('deletepayments'), 'subject' => 'FREESIDE NOTIFICATION: Payment deleted', 'body' => [ diff --git a/FS/bin/freeside-expiration-alerter b/FS/bin/freeside-expiration-alerter index ffd75f9a5..0bb61db4a 100755 --- a/FS/bin/freeside-expiration-alerter +++ b/FS/bin/freeside-expiration-alerter @@ -13,7 +13,7 @@ use FS::UID qw(adminsuidsetup); use FS::Record qw(qsearch); use FS::cust_main; -use vars qw($smtpmachine @body); +use vars qw($smtpmachine %agent_failure_body); #hush, perl! $FS::alerter::_template::first = ""; @@ -47,11 +47,6 @@ adminsuidsetup $user; # Get the needed configuration files my $conf = new FS::Conf; $smtpmachine = $conf->config('smtpmachine'); -$mail_sender = $conf->config('invoice_from') - if $conf->exists('invoice_from'); -$failure_recipient = $conf->config('invoice_from') - if $conf->exists('invoice_from'); - my(@customers)=qsearch('cust_main',{}); if (scalar(@customers) == 0) @@ -59,24 +54,6 @@ if (scalar(@customers) == 0) exit 1; } -# Prepare for sending email - -$ENV{MAILADDRESS} = $mail_sender; -my $header = new Mail::Header ( [ - "From: Account Processor", - "To: $failure_recipient", - "Sender: $mail_sender", - "Reply-To: $mail_sender", - "Subject: Unnotified Billing Arrangement Expirations", -] ); - -my @alerter_template = $conf->config('alerter_template') - or die "cannot load config file alerter_template"; - -my $alerter = new Text::Template (TYPE => 'ARRAY', SOURCE => [ map "$_\n", @alerter_template ]) - or die "can't create new Text::Template object: Text::Template::ERROR"; -$alerter->compile() or die "can't compile template: Text::Template::ERROR"; - # Now I can start looping foreach my $customer (@customers) { @@ -110,7 +87,26 @@ foreach my $customer (@customers) ($expire_time < $_date + $panic_time && $expire_time > $_date + $panic_time - $window_time)) { + # Prepare for sending email, now inside the customer loop so i can be agent + # virtualized + + my $agentnum = $customer->agentnum; + + $mail_sender = $conf->config('invoice_from', $agentnum ) + if $conf->exists('invoice_from', $agentnum); + $failure_recipient = $conf->config('invoice_from', $agentnum) + if $conf->exists('invoice_from', $agentnum); + $ENV{MAILADDRESS} = $mail_sender; + + my @alerter_template = $conf->config('alerter_template', $agentnum) + or die "cannot load config file alerter_template"; + + my $alerter = new Text::Template TYPE => 'ARRAY', + SOURCE => [ map "$_\n", @alerter_template ] + or die "can't create new Text::Template object: $Text::Template::ERROR"; + + $alerter->compile() or die "can't compile template: $Text::Template::ERROR"; my @packages = $customer->ncancelled_pkgs; if (scalar(@packages) != 0) { @@ -138,9 +134,10 @@ foreach my $customer (@customers) } $FS::alerter::_template::expdate = $expire_time; - $FS::alerter::_template::company_name = $conf->config('company_name'); + $FS::alerter::_template::company_name = + $conf->config('company_name', $agentnum); $FS::alerter::_template::company_address = - join("\n", $conf->config('company_address') ). "\n"; + join("\n", $conf->config('company_address', $agentnum) ). "\n"; my $message = new Mail::Internet ( 'Header' => $header, @@ -152,23 +149,41 @@ foreach my $customer (@customers) or die "Can't send expiration email: $!"; } elsif ( ! @invoicing_list || grep { $_ eq 'POST' } @invoicing_list ) { - push @body, sprintf(qq{%5d %-32.32s %4s %10s %12s %12s}, - $custnum, - $first . " " . $last . " " . $company, - $payby, - $paydate, - $daytime, - $night); + push @{$agent_failure_body{$customer->agentnum}}, + sprintf(qq{%5d %-32.32s %4s %10s %12s %12s}, + $custnum, + $first . " " . $last . " " . $company, + $payby, + $paydate, + $daytime, + $night + ); } } } } -# Now I need to send EMAIL -if (scalar(@body)) { +# Now I need to send failure EMAIL + +foreach my $agentnum ( keys %agent_failure_body ) { + + $mail_sender = $conf->config('invoice_from', $agentnum ) + if $conf->exists('invoice_from', $agentnum); + $failure_recipient = $conf->config('invoice_from', $agentnum) + if $conf->exists('invoice_from', $agentnum); + + $ENV{MAILADDRESS} = $mail_sender; + my $header = new Mail::Header ( [ + "From: Account Processor", + "To: $failure_recipient", + "Sender: $mail_sender", + "Reply-To: $mail_sender", + "Subject: Unnotified Billing Arrangement Expirations", + ] ); + my $message = new Mail::Internet ( 'Header' => $header, - 'Body' => [ (@body) ], + 'Body' => [ @{$agent_failure_body{$agentnum}} ], ); $!=0; $message->smtpsend( Host => $smtpmachine ) diff --git a/conf/invoice_html b/conf/invoice_html index 49c11877c..7a43aa6d5 100644 --- a/conf/invoice_html +++ b/conf/invoice_html @@ -15,7 +15,7 @@ <table class="invoice_header" width="100%"> <tr> - <td><img src="<%= $cid ? "cid:$cid" : "cust_bill-logo.cgi?$template" %>"></td> + <td><img src="<%= $cid ? "cid:$cid" : "cust_bill-logo.cgi?invnum=$invnum;template=$template" %>"></td> <td align="left"><%= $returnaddress %></td> <td align="right"> <table CLASS="invoice_headerright" cellspacing=0> diff --git a/conf/invoice_html_statement b/conf/invoice_html_statement index 4e4d259af..0595602db 100644 --- a/conf/invoice_html_statement +++ b/conf/invoice_html_statement @@ -14,7 +14,7 @@ <table class="invoice_header" width="100%"> <tr> - <td><img src="<%= $cid ? "cid:$cid" : "cust_bill-logo.cgi?$template" %>"></td> + <td><img src="<%= $cid ? "cid:$cid" : "cust_bill-logo.cgi?invnum=$invnum;template=$template" %>"></td> <td align="left"><%= $returnaddress %></td> <td align="right"> <table CLASS="invoice_headerright" cellspacing=0> diff --git a/httemplate/config/config-image.cgi b/httemplate/config/config-image.cgi new file mode 100644 index 000000000..892f7c65b --- /dev/null +++ b/httemplate/config/config-image.cgi @@ -0,0 +1,19 @@ +<% $conf->config_binary($name, $agentnum) %> +<%init> + +die "access denied" + unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); + +my $conf = new FS::Conf; + +http_header( 'Content-Type' => 'image/png' ); #just png for now + +$cgi->param('key') =~ /^([-\w.]+)$/ or die "illegal config option"; +my $name = $1; + +my $agentnum = ''; +if ( $cgi->param('agentnum') =~ /^(\d+)$/ ) { + $agentnum = $1; +} + +</%init> diff --git a/httemplate/config/config-process.cgi b/httemplate/config/config-process.cgi index e220fd8ec..84bfdefcb 100644 --- a/httemplate/config/config-process.cgi +++ b/httemplate/config/config-process.cgi @@ -25,7 +25,7 @@ foreach my $type ( ref($i->type) ? @{$i->type} : $i->type ) { } else { $conf->delete($i->key, $agentnum); } - } elsif ( $type eq 'binary' ) { + } elsif ( $type eq 'binary' || $type eq 'image' ) { if ( defined($cgi->param($i->key.$n)) && $cgi->param($i->key.$n) ) { my $fh = $cgi->upload($i->key.$n); if (defined($fh)) { @@ -94,7 +94,7 @@ $conf->delete($_, $agentnum) foreach @delete; <% $conf->config($i->key, $agentnum) |js_string %> + ': ' + <% &{ $i->option_sub }( $conf->config($i->key, $agentnum) ) |js_string %>; % } else { - alert('unknown type <% $type %>'); + //alert('unknown type <% $type %>'); window.top.location.reload(); % } diff --git a/httemplate/config/config-view.cgi b/httemplate/config/config-view.cgi index b7e6f6797..0f5fd6213 100644 --- a/httemplate/config/config-view.cgi +++ b/httemplate/config/config-view.cgi @@ -1,10 +1,4 @@ -<% include("/elements/header.html", - $title, - menubar( - 'View all agents' => $p.'browse/agent.cgi', - ) - ) -%> +<% include("/elements/header.html", $title, menubar(@menubar)) %> Click on a configuration value to change it. <BR><BR> @@ -15,25 +9,20 @@ Click on a configuration value to change it. <FONT SIZE="+1" COLOR="#ff0000">CONFIGURATION NOT STORED IN DATABASE -- USING COMPATIBILITY MODE</FONT><BR><BR> %} -% foreach my $section ( qw(required billing username password UI session -% shell BIND -% ), -% '', 'deprecated') { - - <A NAME="<% $section || 'unclassified' %>"></A> - <FONT SIZE="-2"> -% foreach my $nav_section ( qw(required billing username password UI session -% shell BIND -% ), -% '', 'deprecated') { -% if ( $section eq $nav_section ) { +% foreach my $section (@sections) { - [<A NAME="not<% $nav_section || 'unclassified' %>" style="background-color: #cccccc"><% ucfirst($nav_section || 'unclassified') %></A>] -% } else { + <A NAME="<% $section || 'unclassified' %>"></A> + <FONT SIZE="-2"> - [<A HREF="#<% $nav_section || 'unclassified' %>"><% ucfirst($nav_section || 'unclassified') %></A>] -% } -% } +% foreach my $nav_section (@sections) { +% +% if ( $section eq $nav_section ) { + [<A NAME="not<% $nav_section || 'unclassified' %>" style="background-color: #cccccc"><% ucfirst($nav_section || 'unclassified') %></A>] +% } else { + [<A HREF="#<% $nav_section || 'unclassified' %>"><% ucfirst($nav_section || 'unclassified') %></A>] +% } +% +% } </FONT><BR> <TABLE BGCOLOR="#cccccc" BORDER=1 CELLSPACING=0 CELLPADDING=0 BORDERCOLOR="#999999"> @@ -42,7 +31,7 @@ Click on a configuration value to change it. <% ucfirst($section || 'unclassified') %> configuration options </th> </tr> -% foreach my $i (grep $_->section eq $section, @config_items) { +% foreach my $i (@{ $section_items{$section} }) { % my @types = ref($i->type) ? @{$i->type} : ($i->type); % my( $width, $height ) = ( 522, 336 ); % if ( grep $_ eq 'textarea', @types ) { @@ -76,9 +65,22 @@ Click on a configuration value to change it. <tr> <td><font color="#ff0000">no type</font></td> </tr> + +% } elsif ( $type eq 'image' ) { + + <tr> + + <% $conf->exists($i->key, $agentnum) + ? '<img src="config-image.cgi?key='. $i->key. + ';agentnum='. $agentnum. '">' + : 'empty' + %> + </tr> + % } elsif ( $type eq 'binary' ) { <tr> + <% $conf->exists($i->key, $agentnum) ? qq!<a href="config-download.cgi?key=!. $i->key. ';agentnum='. $agentnum. qq!">download</a>! : 'empty' @@ -143,16 +145,15 @@ die "access denied" unless $FS::CurrentUser::CurrentUser->access_right('Configuration'); my $agentnum = ''; +my $title; +my @menubar = (); if ($cgi->param('agentnum') =~ /^(\d+)$/) { $agentnum = $1; -} - -my $title; -if ($agentnum) { my $agent = qsearchs('agent', { 'agentnum' => $agentnum } ); die "Agent $agentnum not found!" unless $agent; - $title = "Configuration for ". $agent->agent; + push @menubar, 'View all agents' => $p.'browse/agent.cgi'; + $title = 'Agent Configuration for '. $agent->agent; } else { $title = 'Global Configuration'; } @@ -162,5 +163,15 @@ my $conf = new FS::Conf; my @config_items = grep { $agentnum ? $_->per_agent : 1 } grep { $_->key != ~/^invoice_(html|latex|template)/ } $conf->config_items; - + +my @sections = qw(required billing username password UI session shell BIND ); +push @sections, '', 'deprecated'; + +my %section_items = (); +foreach my $section (@sections) { + $section_items{$section} = [ grep $_->section eq $section, @config_items ]; +} + +@sections = grep scalar( @{ $section_items{$_} } ), @sections; + </%init> diff --git a/httemplate/config/config.cgi b/httemplate/config/config.cgi index 4bcd8e414..f390c64a3 100644 --- a/httemplate/config/config.cgi +++ b/httemplate/config/config.cgi @@ -44,13 +44,25 @@ Setting <b><% $key %></b> <font color="#ff0000">no type</font> +% } elsif ( $type eq 'image' ) { + + <% $conf->exists($key, $agentnum) + ? 'Current image<br>'. + '<img src="config-image.cgi?key='. $key. + ';agentnum='. $agentnum. '"><br>' + : '' + %> + + <BR> + New image filename <input type="file" name="<% "$key$n" %>"> + % } elsif ( $type eq 'binary' ) { Filename <input type="file" name="<% "$key$n" %>"> % } elsif ( $type eq 'textarea' ) { - <textarea name="<% "$key$n" %>" rows=12 cols=78 wrap="off"><% join("\n", $conf->config($key, $agentnum)) %></textarea> + <textarea name="<% "$key$n" %>" rows=12 cols=78 wrap="off"><% join("\n", $conf->config($key, $agentnum)) |h %></textarea> % } elsif ( $type eq 'checkbox' ) { @@ -259,7 +271,7 @@ Setting <b><% $key %></b> % } else { - <font color="#ff0000">unknown type $type</font> + <font color="#ff0000">unknown type <% $type %></font> % } % $n++; diff --git a/httemplate/elements/header.html b/httemplate/elements/header.html index 0a939aa9e..8e902f038 100644 --- a/httemplate/elements/header.html +++ b/httemplate/elements/header.html @@ -10,10 +10,10 @@ <% include('menu.html', 'freeside_baseurl' => $fsurl, 'position' => $menu_position, - ) + ) |n %> - <% include('init_overlib.html') %> + <% include('init_overlib.html') |n %> <SCRIPT TYPE="text/javascript"> function clearhint_search_cust (what) { @@ -37,20 +37,20 @@ } function clearhint_search_ticket (what) { - if ( what.value == '(ticket # or subject string)' ) + if ( what.value == '(ticket #, subject, email or fulltext:text)' ) what.value = ''; } </SCRIPT> - <% $head %> + <% $head |n %> </HEAD> - <BODY <% $menu_position eq 'left' ? qq( BACKGROUND="${fsurl}images/background-cheat.png" ) : ' BGCOLOR="#e8e8e8" ' %> <% $etc %> STYLE="margin-top:0; margin-bottom:0; margin-left:0; margin-right:0"> + <BODY <% $menu_position eq 'left' ? qq( BACKGROUND="${fsurl}images/background-cheat.png" ) : ' BGCOLOR="#e8e8e8" ' %> <% $etc |n %> STYLE="margin-top:0; margin-bottom:0; margin-left:0; margin-right:0"> <table width="100%" CELLPADDING=0 CELLSPACING=0 STYLE="padding-left:0; padding-right:4"> <tr> - <td rowspan=2 BGCOLOR="#ffffff"><IMG BORDER=0 ALT="freeside" SRC="<%$fsurl%>images/small-logo.png"></td> + <td rowspan=2 BGCOLOR="#ffffff"><IMG BORDER=0 ALT="freeside" SRC="<%$fsurl%>view/REAL_logo.cgi"></td> <td align=left rowspan=2 BGCOLOR="#ffffff"> <!-- valign="top" --> - <font size=6><% $conf->config('company_name') || 'ExampleCo' %></font> + <font size=6><% $company_name || 'ExampleCo' %></font> </td> <td align=right valign=top BGCOLOR="#ffffff"><FONT SIZE="-1">Logged in as <b><% getotaker %> </b><br></FONT><FONT SIZE="-2"><a href="<%$fsurl%>pref/pref.html">Preferences</a> <BR></FONT> </td> @@ -70,7 +70,7 @@ 'height' => 360, 'color' => '#7e0079', 'scrolling' => 'no', - ) + ) |n %> v<% $FS::VERSION %><BR> <A HREF="<% $conf->config('support-key') ? "http://www.freeside.biz/mediawiki/index.php/Supported:Documentation" : "http://www.freeside.biz/mediawiki/index.php/Freeside:1.9:Documentation" %>" TARGET="_blank">Documentation</A><BR> </FONT> @@ -165,7 +165,7 @@ input.fsblackbuttonselected { </TD> <TD COLSPAN=1 BGCOLOR="#000000" ALIGN="right"> -% if ( $FS::CurrentUser::CurrentUser->access_right('List customers') ) { +% if ( $curuser->access_right('List customers') ) { <FORM ACTION="<%$fsurl%>search/cust_main.cgi" METHOD="GET" STYLE="margin:0"> <INPUT NAME="search_cust" TYPE="text" VALUE="(cust #, name, company or phone)" SIZE="28" onFocus="clearhint_search_cust(this);" onClick="clearhint_search_cust(this);" STYLE="vertical-align:bottom;text-align:right"><BR> <A HREF="<%$fsurl%>search/report_cust_main.html" STYLE="color: #ffffff; font-size: 70%">Advanced</A> @@ -186,11 +186,11 @@ input.fsblackbuttonselected { </TD> <TD COLSPAN=1 BGCOLOR="#000000" ALIGN="right"> -% if ( $FS::CurrentUser::CurrentUser->access_right('View invoices') ) { +% if ( $curuser->access_right('View invoices') ) { <FORM ACTION="<%$fsurl%>search/cust_bill.html" METHOD="GET" STYLE="margin:0;display:inline"> <INPUT NAME="invnum" TYPE="text" VALUE="(inv #)" SIZE="4" onFocus="clearhint_search_invoice(this);" onClick="clearhint_search_invoice(this);" STYLE="vertical-align:bottom;text-align:right;margin-bottom:1px"> -% if ( $FS::CurrentUser::CurrentUser->access_right('List invoices') ) { +% if ( $curuser->access_right('List invoices') ) { <A HREF="<%$fsurl%>search/report_cust_bill.html" STYLE="color: #ffffff; font-size: 70%">Advanced</A> % } @@ -212,7 +212,7 @@ input.fsblackbuttonselected { <TD COLSPAN=1 BGCOLOR="#000000" ALIGN="right" STYLE="padding-right:4px"> % if ( $conf->config("ticket_system") ) { <FORM ACTION="<% FS::TicketSystem->baseurl %>index.html" METHOD="GET" STYLE="margin:0"> - <INPUT NAME="q" TYPE="text" VALUE="(ticket # or subject string)" onFocus="clearhint_search_ticket(this);" onClick="clearhint_search_ticket(this);" STYLE="vertical-align:bottom;text-align:right"><BR> + <INPUT NAME="q" TYPE="text" VALUE="(ticket #, subject, email or fulltext:text)" onFocus="clearhint_search_ticket(this);" onClick="clearhint_search_ticket(this);" STYLE="vertical-align:bottom;text-align:right"><BR> <A HREF="<% FS::TicketSystem->baseurl %>Search/Build.html" STYLE="color: #ffffff; font-size: 70%">Advanced</A> <INPUT TYPE="submit" VALUE="Search tickets" CLASS="fsblackbutton" onMouseOver="this.className='fsblackbuttonselected'; return true;" onMouseOut="this.className='fsblackbutton'; return true;" STYLE="font-size:70%;padding-left:2px;padding-right:2px"> </FORM> @@ -259,16 +259,41 @@ input.fsblackbuttonselected { <% $title %> </FONT> +% unless ( $nobr ) { <BR><BR> +% } + <% $menubar !~ /^\s*$/ ? "$menubar<BR><BR>" : '' %> <%init> -my($title, $menubar) = ( shift, shift ); -my $etc = @_ ? shift : ''; #$etc is for things like onLoad= etc. -my $head = @_ ? shift : ''; #$head is for things that go in the <HEAD> section +my( $title, $menubar, $etc, $head ) = ( '', '', '', '' ); +my( $nobr ) = ( 0 ); +if ( ref($_[0]) ) { + my $opt = shift; + $title = $opt->{title}; + $menubar = $opt->{menubar}; + $etc = $opt->{etc}; + $head = $opt->{head}; + $nobr = $opt->{nobr}; +} else { + ($title, $menubar) = ( shift, shift ); + $etc = @_ ? shift : ''; #$etc is for things like onLoad= etc. + $head = @_ ? shift : ''; #$head is for things that go in the <HEAD> section +} + my $conf = new FS::Conf; -my $menu_position = $FS::CurrentUser::CurrentUser->option('menu_position') +my $curuser = $FS::CurrentUser::CurrentUser; + +my $menu_position = $curuser->option('menu_position') || 'top'; #new default for 1.9 +my $company_name; +my @agentnums = $curuser->agentnums; +if ( scalar(@agentnums) == 1 ) { + $company_name = $conf->config('company_name', $agentnums[0] ); +} else { + $company_name = $conf->config('company_name'); +} + </%init> diff --git a/httemplate/view/REAL_logo.cgi b/httemplate/view/REAL_logo.cgi new file mode 100755 index 000000000..c269c7d04 --- /dev/null +++ b/httemplate/view/REAL_logo.cgi @@ -0,0 +1,14 @@ +<% $conf->config_binary("logo.png", $agentnum) %> +<%init> + +my $conf = new FS::Conf; + +my $agentnum = ''; +my @agentnums = $FS::CurrentUser::CurrentUser->agentnums; +if ( scalar(@agentnums) == 1 ) { + $agentnum = $agentnums[0]; +} + +http_header('Content-Type' => 'image/png' ); + +</%init> diff --git a/httemplate/view/cust_bill-logo.cgi b/httemplate/view/cust_bill-logo.cgi index 9c1c1d71d..09ac9a717 100755 --- a/httemplate/view/cust_bill-logo.cgi +++ b/httemplate/view/cust_bill-logo.cgi @@ -1,4 +1,4 @@ -<% $conf->config_binary("logo$templatename.png") %> +<% $conf->config_binary("logo$templatename.png", $agentnum) %> <%init> die "access denied" @@ -7,9 +7,19 @@ die "access denied" my $conf = new FS::Conf; -my($query) = $cgi->keywords; -$query =~ /^([^\.\/]*)$/; -my $templatename = $1; +my $templatename; +my $agentnum = ''; +if ( $cgi->param('invnum') ) { + $templatename = $cgi->param('templatename'); + my $cust_bill = qsearchs('cust_bill', { 'invnum' => $cgi->param('invnum') } ) + or die 'unknown invnum'; + $agentnum = $cust_bill->cust_main->agentnum; +} else { + my($query) = $cgi->keywords; + $query =~ /^([^\.\/]*)$/ or die 'illegal query'; + $templatename = $1; +} + if ( $templatename && $conf->exists("logo_$templatename.png") ) { $templatename = "_$templatename"; } else { |