X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2FConf.pm;h=0c9dd657765b2985763f6109b5b7c84bf33951c3;hb=84cb979c86a35805cfc6c4530ad4505243b7cfd0;hp=2b47bf0b5c05fdf5f154c41e8b484fa29793708e;hpb=45aa7a5ce1e0420a97d8af399ba53f7c322f7999;p=freeside.git
diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index 2b47bf0b5..0c9dd6577 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -8,6 +8,7 @@ use MIME::Base64;
use FS::ConfItem;
use FS::ConfDefaults;
use FS::Conf_compat17;
+use FS::payby;
use FS::conf;
use FS::Record qw(qsearch qsearchs);
use FS::UID qw(dbh datasrc use_confcompat);
@@ -97,7 +98,7 @@ sub _config {
$hashref->{agentnum} = $agentnum;
local $FS::Record::conf = undef; # XXX evil hack prevents recursion
my $cv = FS::Record::qsearchs('conf', $hashref);
- if (!$cv && defined($agentnum)) {
+ if (!$cv && defined($agentnum) && $agentnum) {
$hashref->{agentnum} = '';
$cv = FS::Record::qsearchs('conf', $hashref);
}
@@ -108,7 +109,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 +151,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));
}
@@ -326,7 +335,7 @@ sub import_config_item {
warn "Inserting $key\n" if $DEBUG;
local $/;
my $value = readline(new IO::File "$dir/$key");
- if ($item->type eq 'binary') {
+ if ($item->type =~ /^(binary|image)$/ ) {
$self->set_binary($key, $value);
}else{
$self->set($key, $value);
@@ -355,7 +364,8 @@ sub verify_config_item {
$error .= "$key fails existential comparison; "
if $self->exists($key) xor $compat->exists($key);
- unless ($type eq 'binary') {
+ if ( $type !~ /^(binary|image)$/ ) {
+
{
no warnings;
$error .= "$key fails scalar comparison; "
@@ -372,22 +382,24 @@ sub verify_config_item {
$error .= "$key fails list comparison; "
unless $r;
}
- }
- if ($type eq 'binary') {
+ } else {
+
$error .= "$key fails binary comparison; "
unless scalar($self->config_binary($key)) eq scalar($compat->config_binary($key));
- }
- if ($error =~ /existential comparison/ && $item->section eq 'deprecated') {
- my $proto;
- for ( @config_items ) { $proto = $_; last if $proto->key eq $key; }
- unless ($proto->key eq $key) {
- warn "removed config item $error\n" if $DEBUG;
- $error = '';
- }
}
+#remove deprecated config on our own terms, not freeside-upgrade's
+# if ($error =~ /existential comparison/ && $item->section eq 'deprecated') {
+# my $proto;
+# for ( @config_items ) { $proto = $_; last if $proto->key eq $key; }
+# unless ($proto->key eq $key) {
+# warn "removed config item $error\n" if $DEBUG;
+# $error = '';
+# }
+# }
+
$error;
}
@@ -441,7 +453,7 @@ sub _orbase_items {
map { new FS::ConfItem {
'key' => $_,
'section' => $proto->section,
- 'description' => 'Alternate ' . $proto->description . ' See the billing documentation for details.',
+ 'description' => 'Alternate ' . $proto->description . ' See the billing documentation for details.',
'type' => $proto->type,
};
} &$listmaker($base);
@@ -471,7 +483,7 @@ sub config_items {
=item init-config DIR
-Imports the non-deprecated configuration items from DIR (1.7 compatible)
+Imports the configuration items from DIR (1.7 compatible)
to conf records in the database.
=cut
@@ -533,21 +545,7 @@ worry that config_items is freeside-specific and icky.
invoice_latexfooter
invoice_latexsmallfooter
invoice_latexnotes
- invoice_html
- invoice_htmlreturnaddress
- invoice_htmlfooter
- invoice_htmlnotes
- logo.png
- logo.eps
- );
-
-@base_items = qw (
- invoice_template
- invoice_latex
- invoice_latexreturnaddress
- invoice_latexfooter
- invoice_latexsmallfooter
- invoice_latexnotes
+ invoice_latexcoupon
invoice_html
invoice_htmlreturnaddress
invoice_htmlfooter
@@ -568,14 +566,18 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'alerter_template',
'section' => 'billing',
- 'description' => 'Template file for billing method expiration alerts. See the billing documentation for details.',
+ 'description' => 'Template file for billing method expiration alerts. See the billing documentation for details.',
'type' => 'textarea',
+ 'per-agent' => 1,
},
{
'key' => 'apacheip',
- 'section' => 'deprecated',
- 'description' => 'DEPRECATED, add an apache export instead. Used to be the current IP address to assign to new virtual hosts',
+ #not actually deprecated yet
+ #'section' => 'deprecated',
+ #'description' => 'DEPRECATED, add an apache export instead. Used to be the current IP address to assign to new virtual hosts',
+ 'section' => '',
+ 'description' => 'IP address to assign to new virtual hosts',
'type' => 'text',
},
@@ -622,6 +624,17 @@ worry that config_items is freeside-specific and icky.
},
{
+ 'key' => 'business-onlinepayment-namespace',
+ 'section' => 'billing',
+ 'description' => 'Specifies which perl module namespace (which group of collection routines) is used by default.',
+ 'type' => 'select',
+ 'select_hash' => [
+ 'Business::OnlinePayment' => 'Direct API (Business::OnlinePayment)',
+ 'Business::OnlineThirdPartyPayment' => 'Web API (Business::ThirdPartyPayment)',
+ ],
+ },
+
+ {
'key' => 'business-onlinepayment-description',
'section' => 'billing',
'description' => 'String passed as the description field to Business::OnlinePayment. Evaluated as a double-quoted perl string, with the following variables available: $agent
(the agent name), and $pkgs
(a comma-separated list of packages for which these charges apply)',
@@ -676,8 +689,11 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'deletecredits',
- 'section' => 'deprecated',
- 'description' => 'DEPRECATED, now controlled by ACLs. Used to enable deletion of unclosed credits. Be very careful! Only delete credits that were data-entry errors, not adjustments. Optionally specify one or more comma-separated email addresses to be notified when a credit is deleted.',
+ #not actually deprecated yet
+ #'section' => 'deprecated',
+ #'description' => 'DEPRECATED, now controlled by ACLs. Used to enable deletion of unclosed credits. Be very careful! Only delete credits that were data-entry errors, not adjustments. Optionally specify one or more comma-separated email addresses to be notified when a credit is deleted.',
+ 'section' => '',
+ 'description' => 'One or more comma-separated email addresses to be notified when a credit is deleted.',
'type' => [qw( checkbox text )],
},
@@ -745,6 +761,13 @@ worry that config_items is freeside-specific and icky.
},
{
+ 'key' => 'auto_router',
+ 'section' => '',
+ 'description' => 'Automatically choose the correct router/block based on supplied ip address when possible while provisioning broadband services',
+ 'type' => 'checkbox',
+ },
+
+ {
'key' => 'hidecancelledpackages',
'section' => 'UI',
'description' => 'Prevent cancelled packages from showing up in listings (though they will still be in the database)',
@@ -770,19 +793,28 @@ worry that config_items is freeside-specific and icky.
'section' => 'required',
'description' => 'Return address on email invoices',
'type' => 'text',
+ 'per_agent' => 1,
+ },
+
+ {
+ 'key' => 'invoice_subject',
+ 'section' => 'billing',
+ 'description' => 'Subject: header on email invoices. Defaults to "Invoice". The following substitutions are available: $name, $name_short, $invoice_number, and $invoice_date.',
+ 'type' => 'text',
+ 'per_agent' => 1,
},
{
'key' => 'invoice_template',
'section' => 'billing',
- 'description' => 'Text template file for invoices. Used if no invoice_html template is defined, and also seen by users using non-HTML capable mail clients. See the billing documentation for details.',
+ 'description' => 'Text template file for invoices. Used if no invoice_html template is defined, and also seen by users using non-HTML capable mail clients. See the billing documentation for details.',
'type' => 'textarea',
},
{
'key' => 'invoice_html',
'section' => 'billing',
- 'description' => 'Optional HTML template for invoices. See the billing documentation for details.',
+ 'description' => 'Optional HTML template for invoices. See the billing documentation for details.',
'type' => 'textarea',
},
@@ -792,6 +824,7 @@ worry that config_items is freeside-specific and icky.
'section' => 'billing',
'description' => 'Notes section for HTML invoices. Defaults to the same data in invoice_latexnotes if not specified.',
'type' => 'textarea',
+ 'per_agent' => 1,
},
{
@@ -799,6 +832,7 @@ worry that config_items is freeside-specific and icky.
'section' => 'billing',
'description' => 'Footer for HTML invoices. Defaults to the same data in invoice_latexfooter if not specified.',
'type' => 'textarea',
+ 'per_agent' => 1,
},
{
@@ -811,7 +845,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'invoice_latex',
'section' => 'billing',
- 'description' => 'Optional LaTeX template for typeset PostScript invoices. See the billing documentation for details.',
+ 'description' => 'Optional LaTeX template for typeset PostScript invoices. See the billing documentation for details.',
'type' => 'textarea',
},
@@ -820,6 +854,7 @@ worry that config_items is freeside-specific and icky.
'section' => 'billing',
'description' => 'Notes section for LaTeX typeset PostScript invoices.',
'type' => 'textarea',
+ 'per_agent' => 1,
},
{
@@ -827,6 +862,15 @@ worry that config_items is freeside-specific and icky.
'section' => 'billing',
'description' => 'Footer for LaTeX typeset PostScript invoices.',
'type' => 'textarea',
+ 'per_agent' => 1,
+ },
+
+ {
+ 'key' => 'invoice_latexcoupon',
+ 'section' => 'billing',
+ 'description' => 'Remittance coupon for LaTeX typeset PostScript invoices.',
+ 'type' => 'textarea',
+ 'per_agent' => 1,
},
{
@@ -841,6 +885,7 @@ worry that config_items is freeside-specific and icky.
'section' => 'billing',
'description' => 'Optional small footer for multi-page LaTeX typeset PostScript invoices.',
'type' => 'textarea',
+ 'per_agent' => 1,
},
{
@@ -873,6 +918,13 @@ worry that config_items is freeside-specific and icky.
'type' => 'checkbox',
},
+ {
+ 'key' => 'separate_usage',
+ 'section' => 'billing',
+ 'description' => 'Split the rated call usage into a separate line from the recurring charges.',
+ 'type' => 'checkbox',
+ },
+
{
'key' => 'payment_receipt_email',
'section' => 'billing',
@@ -999,7 +1051,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'signupurl',
'section' => 'UI',
- 'description' => 'if you are using customer-to-customer referrals, and you enter the URL of your signup server CGI, the customer view screen will display a customized link to the signup server with the appropriate customer as referral',
+ 'description' => 'if you are using customer-to-customer referrals, and you enter the URL of your signup server CGI, the customer view screen will display a customized link to the signup server with the appropriate customer as referral',
'type' => 'text',
},
@@ -1143,6 +1195,13 @@ worry that config_items is freeside-specific and icky.
'type' => 'checkbox',
},
+ {
+ 'key' => 'username-colon',
+ 'section' => 'username',
+ 'description' => 'Allow the colon character (:) in usernames.',
+ 'type' => 'checkbox',
+ },
+
{
'key' => 'safe-part_bill_event',
'section' => 'UI',
@@ -1264,7 +1323,7 @@ worry that config_items is freeside-specific and icky.
{
'key' => 'signup_server-default_pkgpart',
'section' => '',
- 'description' => 'Default pakcage for the signup server',
+ 'description' => 'Default package for the signup server',
'type' => 'select-sub',
'options_sub' => sub { require FS::Record;
require FS::part_pkg;
@@ -1285,6 +1344,45 @@ worry that config_items is freeside-specific and icky.
},
{
+ 'key' => 'signup_server-default_svcpart',
+ 'section' => '',
+ 'description' => 'Default svcpart for the signup server - only necessary for services that trigger special provisioning widgets (such as DID provisioning).',
+ 'type' => 'select-sub',
+ 'options_sub' => sub { require FS::Record;
+ require FS::part_svc;
+ map { $_->svcpart => $_->svc }
+ FS::Record::qsearch( 'part_svc',
+ { 'disabled' => ''}
+ );
+ },
+ 'option_sub' => sub { require FS::Record;
+ require FS::part_svc;
+ my $part_svc = FS::Record::qsearchs(
+ 'part_svc', { 'svcpart'=>shift }
+ );
+ $part_svc ? $part_svc->svc : '';
+ },
+ },
+
+ {
+ 'key' => 'signup_server-service',
+ 'section' => '',
+ 'description' => 'Service for the signup server - "Account (svc_acct)" is the default setting, or "Phone number (svc_phone)" for ITSP signup',
+ 'type' => 'select',
+ 'select_hash' => [
+ 'svc_acct' => 'Account (svc_acct)',
+ 'svc_phone' => 'Phone number (svc_phone)',
+ ],
+ },
+
+ {
+ 'key' => 'selfservice_server-base_url',
+ 'section' => '',
+ 'description' => 'Base URL for the self-service web interface - necessary for special provisioning widgets to find their way.',
+ 'type' => 'text',
+ },
+
+ {
'key' => 'show-msgcat-codes',
'section' => 'UI',
'description' => 'Show msgcat codes in error messages. Turn this option on before reporting errors to the mailing list.',
@@ -1413,6 +1511,13 @@ worry that config_items is freeside-specific and icky.
},
{
+ 'key' => 'ignore_incalculable_taxes',
+ 'section' => 'billing',
+ 'description' => 'Prefer to invoice without tax over not billing at all',
+ 'type' => 'checkbox',
+ },
+
+ {
'key' => 'welcome_email',
'section' => '',
'description' => 'Template file for welcome email. Welcome emails are sent to the customer email invoice destination(s) each time a svc_acct record is created. See the Text::Template documentation for details on the template substitution language. The following variables are available
$username
$password
$first
$last
$pkg