summaryrefslogtreecommitdiff
path: root/httemplate/config
diff options
context:
space:
mode:
Diffstat (limited to 'httemplate/config')
-rw-r--r--httemplate/config/config-delete.cgi15
-rw-r--r--httemplate/config/config-image.cgi5
-rw-r--r--httemplate/config/config-process.cgi34
-rw-r--r--httemplate/config/config-view.cgi247
-rw-r--r--httemplate/config/config.cgi30
5 files changed, 274 insertions, 57 deletions
diff --git a/httemplate/config/config-delete.cgi b/httemplate/config/config-delete.cgi
index cdac434fa..a05cb1e14 100644
--- a/httemplate/config/config-delete.cgi
+++ b/httemplate/config/config-delete.cgi
@@ -2,14 +2,21 @@
die "access denied\n"
unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
-die "No configuration item specified (bad URL)!" unless $cgi->keywords;
-my ($query) = $cgi->keywords;
-$query =~ /^(\d+)$/;
+$cgi->param('confnum') =~ /^(\d+)$/ or die "illegal or missing confnum";
my $confnum = $1;
my $conf = qsearchs('conf', {'confnum' => $confnum});
die "Configuration not found!" unless $conf;
$conf->delete;
+my $redirect = popurl(2);
+if ( $cgi->param('redirect') eq 'config_view_showagent' ) {
+ $redirect .= 'config/config-view.cgi?showagent=1#'. $conf->name;
+} elsif ( $cgi->param('redirect') eq 'config_view' ) {
+ $redirect .= 'config/config-view.cgi';
+} else {
+ $redirect .= 'browse/agent.cgi';
+}
+
</%init>
-<% $cgi->redirect(popurl(2) . "browse/agent.cgi") %>
+<% $cgi->redirect($redirect) %>
diff --git a/httemplate/config/config-image.cgi b/httemplate/config/config-image.cgi
index 892f7c65b..0de9d4278 100644
--- a/httemplate/config/config-image.cgi
+++ b/httemplate/config/config-image.cgi
@@ -1,4 +1,4 @@
-<% $conf->config_binary($name, $agentnum) %>
+<% $logo %>
<%init>
die "access denied"
@@ -16,4 +16,7 @@ if ( $cgi->param('agentnum') =~ /^(\d+)$/ ) {
$agentnum = $1;
}
+my $logo = $conf->config_binary($name, $agentnum);
+$logo = eps2png($logo) if $name =~ /\.eps$/i;
+
</%init>
diff --git a/httemplate/config/config-process.cgi b/httemplate/config/config-process.cgi
index 84bfdefcb..a241de854 100644
--- a/httemplate/config/config-process.cgi
+++ b/httemplate/config/config-process.cgi
@@ -41,15 +41,18 @@ foreach my $type ( ref($i->type) ? @{$i->type} : $i->type ) {
} else {
push @delete, $i->key;
}
- } elsif ( $type eq 'text' || $type eq 'select' || $type eq 'select-sub' ) {
- if ( $cgi->param($i->key.$n) ne '' ) {
- $conf->set($i->key, $cgi->param($i->key.$n), $agentnum);
+ } elsif (
+ $type =~ /^(editlist|selectmultiple)$/
+ or ( $type =~ /^select(-(sub|part_svc|part_pkg))?$/ || $i->multiple )
+ ) {
+ if ( scalar(@{[ $cgi->param($i->key.$n) ]}) ) {
+ $conf->set($i->key, join("\n", @{[ $cgi->param($i->key.$n) ]} ), $agentnum);
} else {
$conf->delete($i->key, $agentnum);
}
- } elsif ( $type eq 'editlist' || $type eq 'selectmultiple' ) {
- if ( scalar(@{[ $cgi->param($i->key.$n) ]}) ) {
- $conf->set($i->key, join("\n", @{[ $cgi->param($i->key.$n) ]} ), $agentnum);
+ } elsif ( $type =~ /^(text|select(-(sub|part_svc|part_pkg))?)$/ ) {
+ if ( $cgi->param($i->key.$n) ne '' ) {
+ $conf->set($i->key, $cgi->param($i->key.$n), $agentnum);
} else {
$conf->delete($i->key, $agentnum);
}
@@ -65,7 +68,10 @@ $conf->delete($_, $agentnum) foreach @delete;
<SCRIPT TYPE="text/javascript">
% my $n = 0;
% foreach my $type ( ref($i->type) ? @{$i->type} : $i->type ) {
- var configCell = window.top.document.getElementById('<% $i->key. $n %>');
+ var configCell = window.top.document.getElementById('<% $agentnum. $i->key. $n %>');
+ if ( ! configCell ) {
+ window.top.location.reload();
+ }
//alert('found cell ' + configCell);
% if ( $type eq 'textarea'
% || $type eq 'editlist'
@@ -87,8 +93,22 @@ $conf->delete($_, $agentnum) foreach @delete;
configCell.style.backgroundColor = '#ff0000';
configCell.innerHTML = 'NO';
% }
+% } elsif ( $type eq 'select' && $i->select_hash ) {
+% my %hash;
+% if ( ref($i->select_hash) eq 'ARRAY' ) {
+% tie %hash, 'Tie::IxHash', '' => '', @{ $i->select_hash };
+% } else {
+% tie %hash, 'Tie::IxHash', '' => '', %{ $i->select_hash };
+% }
+ configCell.innerHTML = <% $conf->exists($i->key, $agentnum) ? $hash{ $conf->config($i->key, $agentnum) } : '' |js_string %>;
+
% } elsif ( $type eq 'text' || $type eq 'select' ) {
configCell.innerHTML = <% $conf->exists($i->key, $agentnum) ? $conf->config($i->key, $agentnum) : '' |js_string %>;
+% } elsif ( $type =~ /^select-(part_svc|part_pkg)$/ && ! $i->multiple ) {
+ configCell.innerHTML =
+ <% $conf->config($i->key, $agentnum) |js_string %>
+%# + ': ' +
+%# <% &{ $i->option_sub }( $conf->config($i->key, $agentnum) ) |js_string %>;
% } elsif ( $type eq 'select-sub' ) {
configCell.innerHTML =
<% $conf->config($i->key, $agentnum) |js_string %> + ': ' +
diff --git a/httemplate/config/config-view.cgi b/httemplate/config/config-view.cgi
index 0f5fd6213..51535d762 100644
--- a/httemplate/config/config-view.cgi
+++ b/httemplate/config/config-view.cgi
@@ -3,6 +3,21 @@
Click on a configuration value to change it.
<BR><BR>
+% unless ( $page_agent ) {
+%
+% if ( $cgi->param('showagent') ) {
+% $cgi->param('showagent', 0);
+ ( <a href="<% $cgi->self_url %>">hide agent overrides</a> )
+% $cgi->param('showagent', 1);
+% } else {
+% $cgi->param('showagent', 1);
+ ( <a href="<% $cgi->self_url %>">show agent overrides</a> )
+% $cgi->param('showagent', 0);
+% }
+%
+% }
+<BR><BR>
+
<% include('/elements/init_overlib.html') %>
% if ($FS::UID::use_confcompat) {
@@ -33,7 +48,8 @@ Click on a configuration value to change it.
</tr>
% foreach my $i (@{ $section_items{$section} }) {
% my @types = ref($i->type) ? @{$i->type} : ($i->type);
-% my( $width, $height ) = ( 522, 336 );
+%# my( $width, $height ) = ( 522, 336 );
+% my( $width, $height ) = ( 600, 336 );
% if ( grep $_ eq 'textarea', @types ) {
% #800x600
% $width = 763;
@@ -42,6 +58,34 @@ Click on a configuration value to change it.
% #$width =
% #$height =
% }
+%
+% my @agents = ();
+% my @add_agents = ();
+% if ( $page_agent ) {
+% @agents = ( $page_agent );
+% } else {
+% @agents = ( '' );
+% if ( $i->per_agent ) {
+% foreach my $agent (@all_agents) {
+% if ( defined($conf->conf( $i->key, $agent->agentnum, 1 ) ) ) {
+% push @agents, $agent;
+% } else {
+% push @add_agents, $agent;
+% }
+% }
+% }
+% }
+%
+% foreach my $agent ( @agents ) {
+% my $agentnum = $agent ? $agent->agentnum : '';
+%
+% next if $section eq 'deprecated' && ! $conf->exists($i->key, $agentnum);
+%
+% my $label = $i->key;
+% $label = '['. $agent->agent. "] $label"
+% if $agent && $cgi->param('showagent');
+%
+% #indentation :/
<tr>
<td><% include('/elements/popup_link.html',
@@ -50,10 +94,24 @@ Click on a configuration value to change it.
'width' => $width,
'height' => $height,
'actionlabel' => 'Enter configuration value',
- 'label' => '<b>'. $i->key. '</b>',
- 'aname' => $i->key,
+ 'label' => "<b>$label</b>",
+ 'aname' => $i->key, #agentnum
+ # if $cgi->param('showagent')?
)
%>: <% $i->description %>
+% if ( $agent && $cgi->param('showagent') ) {
+% my $confnum = $conf->conf( $i->key, $agent->agentnum, 1 )->confnum;
+ (<A HREF="javascript:areyousure('delete this agent override', 'config-delete.cgi?confnum=<% $confnum %>;redirect=config_view_showagent')">delete agent override</A>)
+% } elsif ( $i->base_key
+% || ( $deleteable{$i->key} && $conf->exists($i->key) ) ) {
+% my $confnum =
+% $agent
+% ? $conf->conf( $i->key, $agent->agentnum, 1 )->confnum
+% : $conf->conf( $i->key )->confnum;
+% my $showagent = $cgi->param('showagent') ? '_showagent' : '';
+ (<A HREF="javascript:areyousure('delete this configuration item', 'config-delete.cgi?confnum=<% $confnum %>;redirect=config_view<%$showagent%>')">delete configuration item</A>)
+% }
+
</td>
<td><table border=0>
@@ -66,77 +124,181 @@ Click on a configuration value to change it.
<td><font color="#ff0000">no type</font></td>
</tr>
-% } elsif ( $type eq 'image' ) {
+% } elsif ( $type eq 'image' ) {
<tr>
-
- <% $conf->exists($i->key, $agentnum)
- ? '<img src="config-image.cgi?key='. $i->key.
- ';agentnum='. $agentnum. '">'
- : 'empty'
- %>
+ <td bgcolor='#ffffff'>
+ <% $conf->exists($i->key, $agentnum)
+ ? '<img src="config-image.cgi?key='. $i->key.
+ ';agentnum='. $agentnum. '">'
+ : 'empty'
+ %>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <% $conf->exists($i->key, $agentnum)
+ ? qq!<a href="config-download.cgi?key=!. $i->key. ';agentnum='. $agentnum. qq!">download</a>!
+ : ''
+ %>
+ </td>
</tr>
-% } elsif ( $type eq 'binary' ) {
+% } 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'
- %>
+ <td>
+ <% $conf->exists($i->key, $agentnum)
+ ? qq!<a href="config-download.cgi?key=!. $i->key. ';agentnum='. $agentnum. qq!">download</a>!
+ : 'empty'
+ %>
+ </td>
</tr>
% } elsif ( $type eq 'textarea'
% || $type eq 'editlist'
-% || $type eq 'selectmultiple' ) {
+% || $type eq 'selectmultiple'
+% )
+% {
<tr>
- <td id="<% $i->key.$n %>" bgcolor="#ffffff">
-<font size="-2"><pre>
-<% encode_entities(join("\n",
+ <td id="<% $agentnum.$i->key.$n %>" bgcolor="#ffffff">
+<font size="-2"><pre><% encode_entities(join("\n",
map { length($_) > 88 ? substr($_,0,88).'...' : $_ }
$conf->config($i->key, $agentnum)
) )
-%>
-</pre></font>
+%></pre></font>
</td>
</tr>
+
% } elsif ( $type eq 'checkbox' ) {
<tr>
- <td id="<% $i->key.$n %>" bgcolor="#<% $conf->exists($i->key, $agentnum) ? '00ff00">YES' : 'ff0000">NO' %></td>
+ <td id="<% $agentnum.$i->key.$n %>" bgcolor="#<% $conf->exists($i->key, $agentnum) ? '00ff00">YES' : 'ff0000">NO' %></td>
</tr>
+
+% } elsif ( $type eq 'select' && $i->select_hash ) {
+%
+% my %hash;
+% if ( ref($i->select_hash) eq 'ARRAY' ) {
+% tie %hash, 'Tie::IxHash', '' => '', @{ $i->select_hash };
+% } else {
+% tie %hash, 'Tie::IxHash', '' => '', %{ $i->select_hash };
+% }
+
+ <tr>
+ <td id="<% $agentnum.$i->key.$n %>" bgcolor="#ffffff">
+ <% $conf->exists($i->key, $agentnum) ? $hash{ $conf->config($i->key, $agentnum) } : '' %>
+ </td>
+ </tr>
+
% } elsif ( $type eq 'text' || $type eq 'select' ) {
<tr>
- <td id="<% $i->key.$n %>" bgcolor="#ffffff">
+ <td id="<% $agentnum.$i->key.$n %>" bgcolor="#ffffff">
<% $conf->exists($i->key, $agentnum) ? $conf->config($i->key, $agentnum) : '' %>
- </td></tr>
-% } elsif ( $type eq 'select-sub' ) {
+ </td>
+ </tr>
+
+% } elsif ( $type eq 'select-sub' ) {
<tr>
- <td id="<% $i->key.$n %>" bgcolor="#ffffff">
+ <td id="<% $agentnum.$i->key.$n %>" bgcolor="#ffffff">
<% $conf->config($i->key, $agentnum) %>:
<% &{ $i->option_sub }( $conf->config($i->key, $agentnum) ) %>
</td>
</tr>
-% } else {
+
+% } elsif ( $type =~ /^select-(part_svc|part_pkg)$/ ) {
+% my @keys = $conf->config($i->key, $agentnum);
+
+ <tr>
+ <td id="<% $agentnum.$i->key.$n %>" bgcolor="#ffffff">
+ <% join('<BR>', map { $_ # ': '. $svc, $pkg, whatever
+ }
+ @keys
+ )
+ %>
+ </td>
+ </tr>
+
+% } else {
<tr><td>
<font color="#ff0000">unknown type <% $type %></font>
</td></tr>
-% }
+% }
% $n++;
% }
</table></td>
</tr>
-% }
+
+% } # foreach my $agentnum
+
+% if ( @add_agents ) {
+
+ <tr>
+ <td>
+ <FORM>
+ Add <b><% $i->key %></b> override for
+ <% include('/elements/select-agent.html',
+ 'agents' => \@add_agents,
+ 'empty_label' => 'Select agent',
+ 'onchange' => "agent_changed",
+ 'id' => 'agent_'. $i->key,
+ )
+ %>
+ agent
+
+% my $agent_el = "document.getElementById('agent_". $i->key. "')";
+ <INPUT TYPE = "button"
+ VALUE = "Add"
+ ID = "add_<% $i->key %>"
+ DISABLED
+ onClick = "<%
+ include('/elements/popup_link_onclick.html',
+ 'action' =>
+ 'config.cgi?key='. $i->key.
+ ";agentnum=' + ".
+ "$agent_el.options[$agent_el.selectedIndex].value".
+ " + '",
+ 'width' => $width,
+ 'height' => $height,
+ 'actionlabel' => 'Enter configuration value',
+ )
+ %>"
+ >
+ </FORM>
+ </td>
+ </tr>
+
+% } #if @add_agents
+
+% } # foreach my $i
</table><br><br>
-% }
+% } # foreach my $nav_section
+
+<SCRIPT TYPE="text/javascript">
+
+ function agent_changed(what) {
+ var key = what.id.substring(6); // trim agent_
+ var button = document.getElementById('add_'+key);
+ if ( what.selectedIndex > 0 ) {
+ button.disabled = false;
+ } else {
+ button.disabled = true;
+ }
+ }
+
+ function areyousure(what, href) {
+ if ( confirm("Are you sure you want to " + what + "?") == true )
+ window.location.href = href;
+ }
+
+</SCRIPT>
</body></html>
<%init>
@@ -144,26 +306,29 @@ Click on a configuration value to change it.
die "access denied"
unless $FS::CurrentUser::CurrentUser->access_right('Configuration');
-my $agentnum = '';
+my $page_agent = '';
my $title;
my @menubar = ();
if ($cgi->param('agentnum') =~ /^(\d+)$/) {
- $agentnum = $1;
- my $agent = qsearchs('agent', { 'agentnum' => $agentnum } );
- die "Agent $agentnum not found!" unless $agent;
+ my $page_agentnum = $1;
+ $page_agent = qsearchs('agent', { 'agentnum' => $page_agentnum } );
+ die "Agent $page_agentnum not found!" unless $page_agent;
push @menubar, 'View all agents' => $p.'browse/agent.cgi';
- $title = 'Agent Configuration for '. $agent->agent;
+ $title = 'Agent Configuration for '. $page_agent->agent;
} else {
$title = 'Global Configuration';
}
my $conf = new FS::Conf;
-my @config_items = grep { $agentnum ? $_->per_agent : 1 }
- grep { $_->key != ~/^invoice_(html|latex|template)/ }
+my @config_items = grep { $page_agent ? $_->per_agent : 1 }
+ grep { $page_agent ? 1 : !$_->agentonly }
$conf->config_items;
+my @deleteable = qw( invoice_latexreturnaddress invoice_htmlreturnaddress );
+my %deleteable = map { $_ => 1 } @deleteable;
+
my @sections = qw(required billing username password UI session shell BIND );
push @sections, '', 'deprecated';
@@ -174,4 +339,10 @@ foreach my $section (@sections) {
@sections = grep scalar( @{ $section_items{$_} } ), @sections;
+my @all_agents = ();
+if ( $cgi->param('showagent') ) {
+ @all_agents = qsearch('agent', { 'disabled' => '' } );
+}
+warn 'all agents: '. join('-', @all_agents);
+
</%init>
diff --git a/httemplate/config/config.cgi b/httemplate/config/config.cgi
index f390c64a3..45d77ffce 100644
--- a/httemplate/config/config.cgi
+++ b/httemplate/config/config.cgi
@@ -84,11 +84,9 @@ Setting <b><% $key %></b>
% '' => '', map { $_ => $_ } @{ $config_item->select_enum };
% } elsif ( $config_item->select_hash ) {
% if ( ref($config_item->select_hash) eq 'ARRAY' ) {
-% tie %hash, 'Tie::IxHash',
-% '' => '', @{ $config_item->select_hash };
+% tie %hash, 'Tie::IxHash', '' => '', @{ $config_item->select_hash };
% } else {
-% tie %hash, 'Tie::IxHash',
-% '' => '', %{ $config_item->select_hash };
+% tie %hash, 'Tie::IxHash', '' => '', %{ $config_item->select_hash };
% }
% } else {
% %hash = ( '' => 'WARNING: neither select_enum nor select_hash specified in Conf.pm for configuration option "'. $key. '"' );
@@ -269,9 +267,24 @@ Setting <b><% $key %></b>
<td><input type="button" value="add" onClick="doadd<% "$key$n" %>(this.form)"></td>
</tr></table>
+% } elsif ( $element_types{$type} ) {
+%
+% my %opt = ( 'element_name' => "$key$n",
+% 'empty_label' => ' ',
+% );
+% if ( $config_item->multiple ) {
+% $opt{'multiple'} = 1 if $config_item->multiple;
+% $opt{'curr_value'} = [ $conf->config($key, $agentnum) ];
+% } else {
+% $opt{'curr_value'} =
+% $conf->exists($key, $agentnum) ? $conf->config($key, $agentnum) : '';
+% }
+
+ <% include("/elements/$type.html", %opt ) %>
+
% } else {
- <font color="#ff0000">unknown type <% $type %></font>
+ <font color="#ff0000">unknown type <% $type %></font>
% }
% $n++;
@@ -291,10 +304,13 @@ Setting <b><% $key %></b>
<%once>
my $conf = new FS::Conf;
-my @config_items = grep { $_->key != ~/^invoice_(html|latex|template)/ }
- $conf->config_items;
+my @config_items = $conf->config_items;
my %confitems = map { $_->key => $_ } @config_items;
+my %element_types = map { $_ => 1 } qw(
+ select-part_svc select-part_pkg
+);
+
</%once>
<%init>