use vars qw($default_dir @config_items $DEBUG );
use IO::File;
+use File::Basename;
use FS::ConfItem;
$DEBUG = 0;
@list = $conf->config('key');
$bool = $conf->exists('key');
+ $conf->touch('key');
+ $conf->set('key' => 'value');
+ $conf->delete('key');
+
@config_items = $conf->config_items;
=head1 DESCRIPTION
$1;
}
-=item config
+=item config KEY
Returns the configuration value or values (depending on context) for key.
}
}
-=item exists
+=item exists KEY
Returns true if the specified key exists, even if the corresponding value
is undefined.
-e "$dir/$file";
}
-=item touch
+=item touch KEY
+
+Creates the specified configuration key if it does not exist.
=cut
}
}
-=item set
+=item set KEY VALUE
+
+Sets the specified configuration key to the given value.
=cut
my $dir = $self->dir;
$value =~ /^(.*)$/s;
$value = $1;
- unless ( $self->config($file) eq $value ) {
+ unless ( join("\n", @{[ $self->config($file) ]}) eq $value ) {
warn "[FS::Conf] SET $file\n" if $DEBUG;
# warn "$dir" if is_tainted($dir);
# warn "$dir" if is_tainted($file);
# return ! eval { join('',@_), kill 0; 1; };
# }
-=item delete
+=item delete KEY
+
+Deletes the specified configuration key.
=cut
=cut
sub config_items {
-# my $self = shift;
- @config_items;
+ my $self = shift;
+ #quelle kludge
+ @config_items,
+ map {
+ my $basename = basename($_);
+ $basename =~ /^(.*)$/;
+ $basename = $1;
+ new FS::ConfItem {
+ 'key' => $basename,
+ 'section' => 'billing',
+ 'description' => 'Alternate template file for invoices. See the <a href="../docs/billing.html">billing documentation</a> for details.',
+ 'type' => 'textarea',
+ }
+ } glob($self->dir. '/invoice_template_*')
+ ;
}
=back
=head1 BUGS
-Write access (touch, set, delete) should be documented.
-
If this was more than just crud that will never be useful outside Freeside I'd
worry that config_items is freeside-specific and icky.
'type' => 'textarea',
},
+ {
+ 'key' => 'business-onlinepayment-description',
+ 'section' => 'billing',
+ 'description' => 'String passed as the description field to <a href="http://search.cpan.org/search?mode=module&query=Business%3A%3AOnlinePayment">Business::OnlinePayment</a>. Evaluated as a double-quoted perl string, with the following variables available: <code>$agent</code> (the agent name), and <code>$pkgs</code> (a comma-separated list of packages to which the invoiced being charged applies)',
+ 'type' => 'text',
+ },
+
{
'key' => 'bsdshellmachines',
'section' => 'shell',
{
'key' => 'deletepayments',
'section' => 'UI',
- 'description' => 'Enable deletion of unclosed payments. Be very careful! Only delete payments that were data-entry errors, not adjustments.',
- 'type' => 'checkbox',
+ 'description' => 'Enable deletion of unclosed payments. Be very careful! Only delete payments that were data-entry errors, not adjustments. Optionally specify one or more comma-separated email addresses to be notified when a payment is deleted.',
+ 'type' => [qw( checkbox text )],
},
{
{
'key' => 'icradiusmachines',
- 'section' => 'radius',
- 'description' => 'Turn this option on to enable radcheck and radreply table population - by default in the Freeside database, or in the database specified by the <a href="http://rootwood.haze.st/aspside/config/config-view.cgi#icradius_secrets">icradius_secrets</a> config option (the radcheck and radreply tables needs to be created manually). You do not need to use MySQL for your Freeside database to export to an ICRADIUS/FreeRADIUS MySQL database with this option. <blockquote><b>ADDITIONAL DEPRECATED FUNCTIONALITY</b> (instead use <a href="http://www.mysql.com/documentation/mysql/bychapter/manual_MySQL_Database_Administration.html#Replication">MySQL replication</a> or point icradius_secrets to the external database) - your <a href="ftp://ftp.cheapnet.net/pub/icradius">ICRADIUS</a> machines or <a href="http://www.freeradius.org/">FreeRADIUS</a> (with MySQL authentication) machines, one per line. Machines listed in this file will have the radcheck table exported to them. Each line should contain four items, separted by whitespace: machine name, MySQL database name, MySQL username, and MySQL password. For example: <CODE>"radius.isp.tld radius_db radius_user passw0rd"</CODE></blockquote>',
+ 'section' => 'deprecated',
+ 'description' => '<b>DEPRECATED</b>, add <i>sqlradius</i> exports to <a href="../browse/part_svc">Service definitions</a> instead. This option used to enable radcheck and radreply table population - by default in the Freeside database, or in the database specified by the <a href="http://rootwood.haze.st/aspside/config/config-view.cgi#icradius_secrets">icradius_secrets</a> config option (the radcheck and radreply tables needs to be created manually). You do not need to use MySQL for your Freeside database to export to an ICRADIUS/FreeRADIUS MySQL database with this option. <blockquote><b>ADDITIONAL DEPRECATED FUNCTIONALITY</b> (instead use <a href="http://www.mysql.com/documentation/mysql/bychapter/manual_MySQL_Database_Administration.html#Replication">MySQL replication</a> or point icradius_secrets to the external database) - your <a href="ftp://ftp.cheapnet.net/pub/icradius">ICRADIUS</a> machines or <a href="http://www.freeradius.org/">FreeRADIUS</a> (with MySQL authentication) machines, one per line. Machines listed in this file will have the radcheck table exported to them. Each line should contain four items, separted by whitespace: machine name, MySQL database name, MySQL username, and MySQL password. For example: <CODE>"radius.isp.tld radius_db radius_user passw0rd"</CODE></blockquote>',
'type' => [qw( checkbox textarea )],
},
{
'key' => 'icradius_mysqldest',
- 'section' => 'radius',
+ 'section' => 'deprecated',
'description' => '<b>DEPRECATED</b> (instead use <a href="http://www.mysql.com/documentation/mysql/bychapter/manual_MySQL_Database_Administration.html#Replication">MySQL replication</a> or point icradius_secrets to the external database) - Destination directory for the MySQL databases, on the ICRADIUS/FreeRADIUS machines. Defaults to "/usr/local/var/".',
'type' => 'text',
},
{
'key' => 'icradius_mysqlsource',
- 'section' => 'radius',
+ 'section' => 'deprecated',
'description' => '<b>DEPRECATED</b> (instead use <a href="http://www.mysql.com/documentation/mysql/bychapter/manual_MySQL_Database_Administration.html#Replication">MySQL replication</a> or point icradius_secrets to the external database) - Source directory for for the MySQL radcheck table files, on the Freeside machine. Defaults to "/usr/local/var/freeside".',
'type' => 'text',
},
{
'key' => 'icradius_secrets',
- 'section' => 'radius',
- 'description' => 'Optionally specifies a database for ICRADIUS/FreeRADIUS export. Three lines: DBI data source, username and password.',
+ 'section' => 'deprecated',
+ 'description' => '<b>DEPRECATED</b>, add <i>sqlradius</i> exports to <a href="../browse/part_svc">Service definitions</a> instead. This option used to specify a database for ICRADIUS/FreeRADIUS export. Three lines: DBI data source, username and password.',
'type' => 'textarea',
},
{
'key' => 'mxmachines',
- 'section' => 'BIND',
+ 'section' => 'deprecated',
'description' => 'MX entries for new domains, weight and machine, one per line, with trailing `.\'',
'type' => 'textarea',
},
{
'key' => 'nsmachines',
- 'section' => 'BIND',
+ 'section' => 'deprecated',
'description' => 'NS nameservers for new domains, one per line, with trailing `.\'',
'type' => 'textarea',
},
{
- 'key' => 'arecords',
+ 'key' => 'defaultrecords',
'section' => 'BIND',
- 'description' => 'A list of tab seperated A records to add automatically when creating a domain',
+ 'description' => 'DNS entries add automatically when creating a domain',
+ 'type' => 'editlist',
+ 'editlist_parts' => [ { type=>'text' },
+ { type=>'immutable', value=>'IN' },
+ { type=>'select',
+ select_enum=>{ map { $_=>$_ } qw(A CNAME MX NS)} },
+ { type=> 'text' }, ],
+ },
+
+ {
+ 'key' => 'arecords',
+ 'section' => 'deprecated',
+ 'description' => 'A list of tab seperated CNAME records to add automatically when creating a domain',
'type' => 'textarea',
},
{
'key' => 'cnamerecords',
- 'section' => 'BIND',
+ 'section' => 'deprecated',
'description' => 'A list of tab seperated CNAME records to add automatically when creating a domain',
'type' => 'textarea',
},
'type' => 'checkbox',
},
+ {
+ 'key' => 'queue_dangerous_controls',
+ 'section' => 'UI',
+ 'description' => 'Enable queue modification controls on account pages and for new jobs. Unless you are a developer working on new export code, you should probably leave this off to avoid causing provisioning problems.',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'security_phrase',
+ 'section' => 'password',
+ 'description' => 'Enable the tracking of a "security phrase" with each account. Not recommended, as it is vulnerable to social engineering.',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'locale',
+ 'section' => 'UI',
+ 'description' => 'Message locale',
+ 'type' => 'select',
+ 'select_enum' => [ qw(en_US) ],
+ },
+
+ {
+ 'key' => 'signup_server-payby',
+ 'section' => '',
+ 'description' => 'Acceptable payment types for the signup server',
+ 'type' => 'selectmultiple',
+ 'select_enum' => [ qw(CARD PREPAY BILL COMP) ],
+ },
+
+ {
+ 'key' => 'signup_server-email',
+ 'section' => '',
+ 'description' => 'Comma-separated list of email addresses to receive notification of signups via the signup server.',
+ '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.',
+ 'type' => 'checkbox',
+ },
+
+ {
+ 'key' => 'signup_server-realtime',
+ 'section' => '',
+ 'description' => 'Run billing for signup server signups immediately, and suspend accounts which subsequently have a balance.',
+ 'type' => 'checkbox',
+ },
+
+
+
);
1;