$1;
}
-=item config KEY [ AGENTNUM ]
+=item conf KEY [ AGENTNUM [ NODEFAULT ] ]
+
+Returns the L<FS::conf> record for the key and agent.
+
+=cut
+
+sub conf {
+ my $self = shift;
+ $self->_config(@_);
+}
+
+=item config KEY [ AGENTNUM [ NODEFAULT ] ]
Returns the configuration value or values (depending on context) for key.
The optional agent number selects an agent specific value instead of the
-global default if one is present.
+global default if one is present. If NODEFAULT is true only the agent
+specific value(s) is returned.
=cut
$compat->$method(@_);
}
-# needs a non _ name, called externally by config-view now (and elsewhere?)
sub _config {
- my($self,$name,$agentnum)=@_;
+ my($self,$name,$agentnum,$agentonly)=@_;
my $hashref = { 'name' => $name };
$hashref->{agentnum} = $agentnum;
local $FS::Record::conf = undef; # XXX evil hack prevents recursion
my $cv = FS::Record::qsearchs('conf', $hashref);
- if (!$cv && defined($agentnum) && $agentnum) {
+ if (!$agentonly && !$cv && defined($agentnum) && $agentnum) {
$hashref->{agentnum} = '';
$cv = FS::Record::qsearchs('conf', $hashref);
}
my $self = shift;
return $self->_usecompat('config', @_) if use_confcompat;
- my($name, $agentnum)=@_;
-
- carp "FS::Conf->config($name, $agentnum) called"
+ carp "FS::Conf->config(". join(', ', @_). ") called"
if $DEBUG > 1;
- my $cv = $self->_config($name, $agentnum) or return;
+ my $cv = $self->_config(@_) or return;
if ( wantarray ) {
my $v = $cv->value;
}
}
-=item config_binary KEY [ AGENTNUM ]
+=item config_binary KEY [ AGENTNUM [ NODEFAULT ] ]
Returns the exact scalar value for key.
my $self = shift;
return $self->_usecompat('config_binary', @_) if use_confcompat;
- my($name,$agentnum)=@_;
- my $cv = $self->_config($name, $agentnum) or return;
+ my $cv = $self->_config(@_) or return;
decode_base64($cv->value);
}
-=item exists KEY [ AGENTNUM ]
+=item exists KEY [ AGENTNUM [ NODEFAULT ] ]
Returns true if the specified key exists, even if the corresponding value
is undefined.
my($name, $agentnum)=@_;
- carp "FS::Conf->exists($name, $agentnum) called"
+ carp "FS::Conf->exists(". join(', ', @_). ") called"
if $DEBUG > 1;
- defined($self->_config($name, $agentnum));
+ defined($self->_config(@_));
}
=item config_orbase KEY SUFFIX
'type' => 'text',
},
+ {
+ 'key' => 'alert_expiration',
+ 'section' => 'billing',
+ 'description' => 'Enable alerts about billing method expiration.',
+ 'type' => 'checkbox',
+ 'per_agent' => 1,
+ },
+
{
'key' => 'alerter_template',
'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,
+ 'per_agent' => 1,
},
{
'type' => 'textarea',
},
+ {
+ 'key' => 'billco-url',
+ 'section' => 'billing',
+ 'description' => 'The url to use for performing uploads to the invoice mailing service.',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ },
+
+ {
+ 'key' => 'billco-username',
+ 'section' => 'billing',
+ 'description' => 'The login name to use for uploads to the invoice mailing service.',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ 'agentonly' => 1,
+ },
+
+ {
+ 'key' => 'billco-password',
+ 'section' => 'billing',
+ 'description' => 'The password to use for uploads to the invoice mailing service.',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ 'agentonly' => 1,
+ },
+
+ {
+ 'key' => 'billco-clicode',
+ 'section' => 'billing',
+ 'description' => 'The clicode to use for uploads to the invoice mailing service.',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ },
+
{
'key' => 'business-onlinepayment',
'section' => 'billing',
{
'key' => 'deletecustomers',
'section' => 'UI',
- 'description' => 'Enable customer deletions. Be very careful! Deleting a customer will remove all traces that this customer ever existed! It should probably only be used when auditing a legacy database. Normally, you cancel all of a customers\' packages if they cancel service.',
+ 'description' => 'Enable customer deletions. Be very careful! Deleting a customer will remove all traces that the customer ever existed! It should probably only be used when auditing a legacy database. Normally, you cancel all of a customers\' packages if they cancel service.',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'deleteinvoices',
+ 'section' => 'UI',
+ 'description' => 'Enable invoices deletions. Be very careful! Deleting an invoice will remove all traces that the invoice ever existed! Normally, you would apply a credit against the invoice instead.', #invoice voiding?
'type' => 'checkbox',
},
'type' => 'checkbox',
},
+ {
+ 'key' => 'unapplypayments',
+ 'section' => 'deprecated',
+ 'description' => '<B>DEPRECATED</B>, now controlled by ACLs. Used to enable "unapplication" of unclosed payments.',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'unapplycredits',
+ 'section' => 'deprecated',
+ 'description' => '<B>DEPRECATED</B>, now controlled by ACLs. Used to nable "unapplication" of unclosed credits.',
+ 'type' => 'checkbox',
+ },
+
{
'key' => 'dirhash',
'section' => 'shell',
'type' => 'text',
},
+ {
+ 'key' => 'disable_cust_attachment',
+ 'section' => '',
+ 'description' => 'Disable customer file attachments',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'max_attachment_size',
+ 'section' => '',
+ 'description' => 'Maximum size for customer file attachments (leave blank for unlimited)',
+ 'type' => 'text',
+ },
+
{
'key' => 'disable_customer_referrals',
'section' => 'UI',
'per_agent' => 1,
},
+ {
+ 'key' => 'invoice_usesummary',
+ 'section' => 'billing',
+ 'description' => 'Indicates that html and latex invoices should be in summary style and make use of invoice_latexsummary.',
+ 'type' => 'checkbox',
+ },
+
{
'key' => 'invoice_template',
'section' => 'billing',
'per_agent' => 1,
},
+ {
+ 'key' => 'invoice_htmlsummary',
+ 'section' => 'billing',
+ 'description' => 'Summary initial page for HTML invoices.',
+ 'type' => 'textarea',
+ 'per_agent' => 1,
+ },
+
{
'key' => 'invoice_htmlreturnaddress',
'section' => 'billing',
'per_agent' => 1,
},
+ {
+ 'key' => 'invoice_latexsummary',
+ 'section' => 'billing',
+ 'description' => 'Summary initial page for LaTeX typeset PostScript invoices.',
+ 'type' => 'textarea',
+ 'per_agent' => 1,
+ },
+
{
'key' => 'invoice_latexcoupon',
'section' => 'billing',
{
'key' => 'invoice_sections',
'section' => 'billing',
- 'description' => 'Split invoice into sections and label according to package class when enabled.',
+ 'description' => 'Split invoice into sections and label according to package category when enabled.',
'type' => 'checkbox',
},
+ {
+ 'key' => 'finance_pkgclass',
+ 'section' => 'billing',
+ 'description' => 'The package class for finance charges',
+ 'type' => 'select-sub',
+ 'options_sub' => sub { require FS::Record;
+ require FS::pkg_class;
+ map { $_->classnum => $_->classname }
+ FS::Record::qsearch('pkg_class', {} );
+ },
+ 'option_sub' => sub { require FS::Record;
+ require FS::pkg_class;
+ my $pkg_class = FS::Record::qsearchs(
+ 'pkg_class', { 'classnum'=>shift }
+ );
+ $pkg_class ? $pkg_class->classname : '';
+ },
+ },
+
{
'key' => 'separate_usage',
'section' => 'billing',
'type' => 'checkbox',
},
+ {
+ 'key' => 'invoice_send_receipts',
+ 'section' => 'deprecated',
+ 'description' => '<b>DEPRECATED</b>, this used to send an invoice copy on payments and credits. See the payment_receipt_email and XXXX instead.',
+ 'type' => 'checkbox',
+ },
+
{
'key' => 'payment_receipt_email',
'section' => 'billing',
- 'description' => 'Template file for payment receipts. Payment receipts are sent to the customer email invoice destination(s) when a payment is received. See the <a href="http://search.cpan.org/dist/Text-Template/lib/Text/Template.pm">Text::Template</a> documentation for details on the template substitution language. The following variables are available: <ul><li><code>$date</code> <li><code>$name</code> <li><code>$paynum</code> - Freeside payment number <li><code>$paid</code> - Amount of payment <li><code>$payby</code> - Payment type (Card, Check, Electronic check, etc.) <li><code>$payinfo</code> - Masked credit card number or check number <li><code>$balance</code> - New balance</ul>',
+ 'description' => 'Template file for payment receipts. Payment receipts are sent to the customer email invoice destination(s) when a payment is received. See the <a href="http://search.cpan.org/dist/Text-Template/lib/Text/Template.pm">Text::Template</a> documentation for details on the template substitution language. The following variables are available: <ul><li><code>$date</code> <li><code>$name</code> <li><code>$paynum</code> - Freeside payment number <li><code>$paid</code> - Amount of payment <li><code>$payby</code> - Payment type (Card, Check, Electronic check, etc.) <li><code>$payinfo</code> - Masked credit card number or check number <li><code>$balance</code> - New balance<li><code>$pkg</code> - Package (requires payment_receipt-trigger set to "when payment is applied".)</ul>',
'type' => [qw( checkbox textarea )],
},
+ {
+ 'key' => 'payment_receipt-trigger',
+ 'section' => 'billing',
+ 'description' => 'When payment receipts are triggered. Defaults to when payment is made.',
+ 'type' => 'select',
+ 'select_hash' => [
+ 'cust_pay' => 'When payment is made.',
+ 'cust_bill_pay_pkg' => 'When payment is applied.',
+ ],
+ },
+
{
'key' => 'lpr',
'section' => 'required',
# 'description' => 'Directory which contains domain registry information. Each registry is a directory.',
# },
+ {
+ 'key' => 'report_template',
+ 'section' => 'deprecated',
+ 'description' => 'Deprecated template file for reports.',
+ 'type' => 'textarea',
+ },
+
{
'key' => 'maxsearchrecordsperpage',
'section' => 'UI',
'section' => 'username',
'description' => 'Usernames must contain at least one letter',
'type' => 'checkbox',
+ 'per_agent' => 1,
},
{
'key' => 'signup_server-default_pkgpart',
'section' => '',
'description' => 'Default package for the signup server',
- 'type' => 'select-sub',
- 'options_sub' => sub { require FS::Record;
- require FS::part_pkg;
- map { $_->pkgpart => $_->pkg.' - '.$_->comment }
- FS::Record::qsearch( 'part_pkg',
- { 'disabled' => ''}
- );
- },
- 'option_sub' => sub { require FS::Record;
- require FS::part_pkg;
- my $part_pkg = FS::Record::qsearchs(
- 'part_pkg', { 'pkgpart'=>shift }
- );
- $part_pkg
- ? $part_pkg->pkg.' - '.$part_pkg->comment
- : '';
- },
+ 'type' => 'select-part_pkg',
},
{
'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 : '';
- },
+ 'description' => 'Default service definition for the signup server - only necessary for services that trigger special provisioning widgets (such as DID provisioning).',
+ 'type' => 'select-part_svc',
+ },
+
+ {
+ 'key' => 'signup_server-mac_addr_svcparts',
+ 'section' => '',
+ 'description' => 'Service definitions which can receive mac addresses (current mapped to username for svc_acct).',
+ 'type' => 'select-part_svc',
+ 'multiple' => 1,
+ },
+
+ {
+ 'key' => 'signup_server-nomadix',
+ 'section' => '',
+ 'description' => 'Signup page Nomadix integration',
+ 'type' => 'checkbox',
},
{
'type' => 'checkbox',
},
+ {
+ 'key' => 'bill_usage_on_cancel',
+ 'section' => 'billing',
+ 'description' => 'Enable automatic generation of an invoice for usage when a package is cancelled. Not all packages can do this. Usage data must already be available.',
+ 'type' => 'checkbox',
+ },
+
{
'key' => 'require_cardname',
'section' => 'billing',
'select_enum' => [ 'Framed-IP-Address', 'Framed-Address' ],
},
+ #http://dev.coova.org/svn/coova-chilli/doc/dictionary.chillispot
+ {
+ 'key' => 'radius-chillispot-max',
+ 'section' => '',
+ 'description' => 'Enable ChilliSpot (and CoovaChilli) Max attributes, specifically ChilliSpot-Max-{Input,Output,Total}-{Octets,Gigawords}.',
+ 'type' => 'checkbox',
+ },
+
{
'key' => 'svc_acct-alldomains',
'section' => '',
'type' => 'text',
},
+ {
+ 'key' => 'users-allow_comp',
+ 'section' => 'deprecated',
+ 'description' => '<b>DEPRECATED</b>, enable the <i>Complimentary customer</i> access right instead. Was: Usernames (Freeside users, created with <a href="../docs/man/bin/freeside-adduser.html">freeside-adduser</a>) which can create complimentary customers, one per line. If no usernames are entered, all users can create complimentary accounts.',
+ 'type' => 'textarea',
+ },
+
{
'key' => 'credit_card-recurring_billing_flag',
'section' => 'billing',
'select_enum' => \@card_types,
},
+ {
+ 'key' => 'manual_process-pkgpart',
+ 'section' => 'billing',
+ 'description' => 'Package to add to each manual credit card and ACH payments entered from the backend. Enabling this option may be in violation of your merchant agreement(s), so please check them carefully before enabling this option.',
+ 'type' => 'select-part_pkg',
+ },
+
+ {
+ 'key' => 'manual_process-display',
+ 'section' => 'billing',
+ 'description' => 'When using manual_process-pkgpart, add the fee to the amount entered (default), or subtract the fee from the amount entered.',
+ 'type' => 'select',
+ 'select_hash' => [
+ 'add' => 'Add fee to amount entered',
+ 'subtract' => 'Subtract fee from amount entered',
+ ],
+ },
+
+
{
'key' => 'allow_negative_charges',
'section' => 'billing',
'key' => 'svc_www-usersvc_svcpart',
'section' => '',
'description' => 'Allowable service definition svcparts for virtual hosts, one per line.',
- 'type' => 'textarea',
+ 'type' => 'select-part_svc',
+ 'multiple' => 1,
},
{
'per_agent' => 1,
},
+ {
+ 'key' => 'echeck-void',
+ 'section' => 'deprecated',
+ 'description' => '<B>DEPRECATED</B>, now controlled by ACLs. Used to enable local-only voiding of echeck payments in addition to refunds against the payment gateway',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'cc-void',
+ 'section' => 'deprecated',
+ 'description' => '<B>DEPRECATED</B>, now controlled by ACLs. Used to enable local-only voiding of credit card payments in addition to refunds against the payment gateway',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'unvoid',
+ 'section' => 'deprecated',
+ 'description' => '<B>DEPRECATED</B>, now controlled by ACLs. Used to enable unvoiding of voided payments',
+ 'type' => 'checkbox',
+ },
+
{
'key' => 'address2-search',
'section' => 'UI',
{
'key' => 'svc_acct-usage_threshold',
'section' => 'billing',
- 'description' => 'The threshold (expressed as percentage) of acct.seconds or acct.up|down|totalbytes at which a warning message is sent to a service holder. Typically used in conjunction with prepaid packages and freeside-sqlradius-radacctd. Defaults to 80.',
+ 'description' => 'The threshold (expressed as percentage) of acct.seconds or acct.up|down|totalbytes at which a warning message is sent to a service holder. Typically used in conjunction with prepaid packages and freeside-sqlradius-radacctd.',
'type' => 'text',
},
'type' => 'checkbox',
},
+ {
+ 'key' => 'voip-cdr_email',
+ 'section' => '',
+ 'description' => 'Include the call details on emailed invoices even if the customer is configured for not printing them on the invoices.',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'voip-cust_email_csv_cdr',
+ 'section' => '',
+ 'description' => 'Enable the per-customer option for including CDR information as a CSV attachment on emailed invoices.',
+ 'type' => 'checkbox',
+ },
+
{
'key' => 'svc_forward-arbitrary_dst',
'section' => '',
'key' => 'postal_invoice-fee_pkgpart',
'section' => 'billing',
'description' => 'This allows selection of a package to insert on invoices for customers with postal invoices selected.',
- 'type' => 'select-sub',
- 'options_sub' => sub { require FS::Record;
- require FS::part_pkg;
- map { $_->pkgpart => $_->pkg }
- FS::Record::qsearch('part_pkg', { disabled=>'' } );
- },
- 'option_sub' => sub { require FS::Record;
- require FS::part_pkg;
- my $part_pkg = FS::Record::qsearchs(
- 'part_pkg', { 'pkgpart'=>shift }
- );
- $part_pkg ? $part_pkg->pkg : '';
- },
+ 'type' => 'select-part_pkg',
},
{
'type' => 'text',
},
+ {
+ 'key' => 'batchconfig-paymentech',
+ 'section' => 'billing',
+ 'description' => 'Configuration for Chase Paymentech batching, four lines: 1. BIN, 2. Terminal ID, 3. Merchant ID, 4. Username',
+ 'type' => 'textarea',
+ },
+
{
'key' => 'payment_history-years',
'section' => 'UI',
'type' => 'text',
},
+ {
+ 'key' => 'change_history-years',
+ 'section' => 'UI',
+ 'description' => 'Number of years of change history to show by default. Currently defaults to 0.5.',
+ 'type' => 'text',
+ },
+
{
'key' => 'cust_main-packages-years',
'section' => 'UI',
'type' => 'checkbox',
},
+ {
+ 'key' => 'dashboard-install_welcome',
+ 'section' => 'UI',
+ 'description' => 'New install welcome screen.',
+ 'type' => 'select',
+ 'select_enum' => [ '', 'ITSP_fsinc_hosted', ],
+ },
+
{
'key' => 'dashboard-toplist',
'section' => 'UI',
'key' => 'support_packages',
'section' => '',
'description' => 'A list of packages eligible for RT ticket time transfer, one pkgpart per line.', #this should really be a select multiple, or specified in the packages themselves...
- 'type' => 'textarea',
+ 'type' => 'select-part_pkg',
+ 'multiple' => 1,
},
{
'type' => 'checkbox',
},
+ {
+ 'key' => 'cust_main-require_censustract',
+ 'section' => 'UI',
+ 'description' => 'Customer is required to have a census tract. Useful for FCC form 477 reports. See also: cust_main-auto_standardize_address',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'census_year',
+ 'section' => 'UI',
+ 'description' => 'The year to use in census tract lookups',
+ 'type' => 'select',
+ 'select_enum' => [ qw( 2009 2008 2007 2006 ) ],
+ },
+
+ {
+ 'key' => 'company_latitude',
+ 'section' => 'UI',
+ 'description' => 'Your company latitude (-90 through 90)',
+ 'type' => 'text',
+ },
+
+ {
+ 'key' => 'company_longitude',
+ 'section' => 'UI',
+ 'description' => 'Your company longitude (-180 thru 180)',
+ 'type' => 'text',
+ },
+
{
'key' => 'disable_acl_changes',
'section' => '',
{
'key' => 'cust_main-default_agent_custid',
'section' => 'UI',
- 'description' => 'Display the agent_custid field instead of the custnum field.',
+ 'description' => 'Display the agent_custid field when available instead of the custnum field.',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'cust_bill-default_agent_invid',
+ 'section' => 'UI',
+ 'description' => 'Display the agent_invid field when available instead of the invnum field.',
'type' => 'checkbox',
},
'key' => 'mcp_svcpart',
'section' => '',
'description' => 'Master Control Program svcpart. Leave this blank.',
- 'type' => 'text',
+ 'type' => 'text', #select-part_svc
},
{
'type' => 'text',
},
+ {
+ 'key' => 'selfservice-bulk_format',
+ 'section' => '',
+ 'description' => 'Parameter arrangement for selfservice bulk features',
+ 'type' => 'select',
+ 'select_enum' => [ '', 'izoom-soap', 'izoom-ftp' ],
+ 'per_agent' => 1,
+ },
+
+ {
+ 'key' => 'selfservice-bulk_ftp_dir',
+ 'section' => '',
+ 'description' => 'Enable bulk ftp provisioning in this folder',
+ 'type' => 'text',
+ 'per_agent' => 1,
+ },
+
{
'key' => 'signup-no_company',
'section' => '',
},
{
- 'key' => 'cdr-charged_party-truncate_prefix',
+ 'key' => 'cdr-charged_party-accountcode-trim_leading_0s',
'section' => '',
- 'description' => 'If the charged_party field has this prefix, truncate it to the length in cdr-charged_party-truncate_length.',
- 'type' => 'text',
+ 'description' => 'When setting the charged_party field of CDRs to the accountcode, trim any leading zeros.',
+ 'type' => 'checkbox',
},
- {
- 'key' => 'cdr-charged_party-truncate_length',
- 'section' => '',
- 'description' => 'If the charged_party field has the prefix in cdr-charged_party-truncate_prefix, truncate it to this length.',
- 'type' => 'text',
- },
+# {
+# 'key' => 'cdr-charged_party-truncate_prefix',
+# 'section' => '',
+# 'description' => 'If the charged_party field has this prefix, truncate it to the length in cdr-charged_party-truncate_length.',
+# 'type' => 'text',
+# },
+#
+# {
+# 'key' => 'cdr-charged_party-truncate_length',
+# 'section' => '',
+# 'description' => 'If the charged_party field has the prefix in cdr-charged_party-truncate_prefix, truncate it to this length.',
+# 'type' => 'text',
+# },
{
'key' => 'cdr-charged_party_rewrite',
'type' => 'checkbox',
},
+ {
+ 'key' => 'sg-ping_username',
+ 'section' => '',
+ 'description' => "Don't use this.",
+ 'type' => 'text',
+ },
+
+ {
+ 'key' => 'sg-ping_password',
+ 'section' => '',
+ 'description' => "Don't use this.",
+ 'type' => 'text',
+ },
+
+ {
+ 'key' => 'sg-login_username',
+ 'section' => '',
+ 'description' => "Don't use this.",
+ 'type' => 'text',
+ },
+
{
'key' => 'disable-cust-pkg_class',
'section' => 'UI',
'type' => 'text',
},
+ #more fine-grained, service def-level control could be useful eventually?
+ {
+ 'key' => 'svc_broadband-allow_null_ip_addr',
+ 'section' => '',
+ 'description' => '',
+ 'type' => 'checkbox',
+ },
+
{
'key' => 'tax-report_groups',
'section' => '',
'type' => 'textarea',
},
+ {
+ 'key' => 'tax-cust_exempt-groups',
+ 'section' => '',
+ 'description' => 'List of grouping possibilities for tax names, for per-customer exemption purposes, one tax name per line. For example, "GST" would indicate the ability to exempt customers individually from taxes named "GST" (but not other taxes).',
+ 'type' => 'textarea',
+ },
+
+ {
+ 'key' => 'cust_main-default_view',
+ 'section' => 'UI',
+ 'description' => 'Default customer view, for users who have not selected a default view in their preferences.',
+ 'type' => 'select',
+ 'select_hash' => [
+ #false laziness w/view/cust_main.cgi and pref/pref.html
+ 'basics' => 'Basics',
+ 'notes' => 'Notes',
+ 'tickets' => 'Tickets',
+ 'packages' => 'Packages',
+ 'payment_history' => 'Payment History',
+ 'change_history' => 'Change History',
+ 'jumbo' => 'Jumbo',
+ ],
+ },
+
+ {
+ 'key' => 'enable_tax_adjustments',
+ 'section' => 'billing',
+ 'description' => 'Enable the ability to add manual tax adjustments.',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'rt-crontool',
+ 'section' => '',
+ 'description' => 'Enable the RT CronTool extension.',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'pkg-balances',
+ 'section' => 'billing',
+ 'description' => 'Enable experimental package balances. Not recommended for general use.',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'cust_main-edit_signupdate',
+ 'section' => 'UI',
+ 'descritpion' => 'Enable manual editing of the signup date.',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'svc_acct-disable_access_number',
+ 'section' => 'UI',
+ 'descritpion' => 'Disable access number selection.',
+ 'type' => 'checkbox',
+ },
+
+ { key => "apacheroot", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "apachemachine", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "apachemachines", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "bindprimary", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "bindsecondaries", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "bsdshellmachines", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "cyrus", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "cp_app", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "erpcdmachines", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "icradiusmachines", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "icradius_mysqldest", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "icradius_mysqlsource", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "icradius_secrets", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "maildisablecatchall", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "mxmachines", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "nsmachines", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "arecords", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "cnamerecords", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "nismachines", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "qmailmachines", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "radiusmachines", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "sendmailconfigpath", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "sendmailmachines", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "sendmailrestart", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "shellmachine", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "shellmachine-useradd", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "shellmachine-userdel", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "shellmachine-usermod", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "shellmachines", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "radiusprepend", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "textradiusprepend", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "username_policy", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "vpopmailmachines", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "vpopmailrestart", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "safe-part_pkg", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "selfservice_server-quiet", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "signup_server-quiet", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "signup_server-email", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "vonage-username", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "vonage-password", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+ { key => "vonage-fromnumber", section => "deprecated", description => "<b>DEPRECATED</b>", type => "text" },
+
);
1;