working message catalogs (not used for enough yet)
[freeside.git] / FS / FS / Conf.pm
index f8d6462..6e58820 100644 (file)
@@ -2,6 +2,7 @@ package FS::Conf;
 
 use vars qw($default_dir @config_items $DEBUG );
 use IO::File;
+use File::Basename;
 use FS::ConfItem;
 
 $DEBUG = 0;
@@ -25,6 +26,10 @@ FS::Conf - Freeside configuration values
   @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
@@ -67,7 +72,7 @@ sub dir {
   $1;
 }
 
-=item config 
+=item config KEY
 
 Returns the configuration value or values (depending on context) for key.
 
@@ -90,7 +95,7 @@ sub config {
   }
 }
 
-=item exists
+=item exists KEY
 
 Returns true if the specified key exists, even if the corresponding value
 is undefined.
@@ -103,7 +108,9 @@ sub exists {
   -e "$dir/$file";
 }
 
-=item touch
+=item touch KEY
+
+Creates the specified configuration key if it does not exist.
 
 =cut
 
@@ -116,7 +123,9 @@ sub touch {
   }
 }
 
-=item set
+=item set KEY VALUE
+
+Sets the specified configuration key to the given value.
 
 =cut
 
@@ -125,7 +134,7 @@ sub set {
   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);
@@ -139,7 +148,9 @@ sub set {
 #             return ! eval { join('',@_), kill 0; 1; };
 #         }
 
-=item delete
+=item delete KEY
+
+Deletes the specified configuration key.
 
 =cut
 
@@ -160,16 +171,27 @@ L<FS::ConfItem>.
 =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.
 
@@ -185,12 +207,19 @@ httemplate/docs/config.html
 
   {
     'key'         => 'address',
-    'section'     => 'depreciated',
+    'section'     => 'deprecated',
     'description' => 'This configuration option is no longer used.  See <a href="#invoice_template">invoice_template</a> instead.',
     'type'        => 'text',
   },
 
   {
+    'key'         => 'alerter_template',
+    'section'     => 'billing',
+    'description' => 'Template file for billing method expiration alerts.  See the <a href="../docs/billing.html#invoice_template">billing documentation</a> for details.',
+    'type'        => 'textarea',
+  },
+
+  {
     'key'         => 'apacheroot',
     'section'     => 'apache',
     'description' => 'The directory containing Apache virtual hosts',
@@ -240,6 +269,13 @@ httemplate/docs/config.html
   },
 
   {
+    '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'        => 'textarea',
+  },
+
+  {
     'key'         => 'bsdshellmachines',
     'section'     => 'shell',
     'description' => 'Your BSD flavored shell (and mail) machines, one per line.  This enables export of `/etc/passwd\' and `/etc/master.passwd\'.',
@@ -284,8 +320,8 @@ httemplate/docs/config.html
   {
     '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 )],
   },
 
   {
@@ -304,7 +340,7 @@ httemplate/docs/config.html
 
   {
     'key'         => 'domain',
-    'section'     => 'depreciated',
+    'section'     => 'deprecated',
     'description' => 'Your domain name.',
     'type'        => 'text',
   },
@@ -367,29 +403,29 @@ httemplate/docs/config.html
 
   {
     '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&nbsp;radius_db&nbsp;radius_user&nbsp;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&nbsp;radius_db&nbsp;radius_user&nbsp;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',
   },
 
@@ -416,8 +452,8 @@ httemplate/docs/config.html
 
   {
     'key'         => 'maildisablecatchall',
-    'section'     => 'depreciated',
-    'description' => '<b>DEPRECIATED</b>, now the default.  Turning this option on used to disable the requirement that each virtual domain have a catch-all mailbox.',
+    'section'     => 'deprecated',
+    'description' => '<b>DEPRECATED</b>, now the default.  Turning this option on used to disable the requirement that each virtual domain have a catch-all mailbox.',
     'type'        => 'checkbox',
   },
 
@@ -430,19 +466,45 @@ httemplate/docs/config.html
 
   {
     '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'         => 'defaultrecords',
+    'section'     => 'BIND',
+    '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'     => 'deprecated',
+    'description' => 'A list of tab seperated CNAME records to add automatically when creating a domain',
+    'type'        => 'textarea',
+  },
+
+  {
     'key'         => 'nismachines',
     'section'     => 'shell',
     'description' => 'Your NIS master (not slave master) machines, one per line.  This enables export of `/etc/global/passwd\' and `/etc/global/shadow\'.',
@@ -491,6 +553,14 @@ httemplate/docs/config.html
 #  },
 
   {
+    'key'         => 'report_template',
+    'section'     => 'required',
+    'description' => 'Required template file for reports.  See the <a href="../docs/billing.html">billing documentation</a> for details.',
+    'type'        => 'textarea',
+  },
+
+
+  {
     'key'         => 'maxsearchrecordsperpage',
     'section'     => 'UI',
     'description' => 'If set, number of search records to return per page.',
@@ -654,8 +724,8 @@ httemplate/docs/config.html
 
   {
     'key'         => 'textradiusprepend',
-    'section'     => 'depreciated',
-    'description' => '<b>DEPRECIATED</b>, use RADIUS check attributes instead.  This option will be removed soon.  The contents will be prepended to the first line of a user\'s RADIUS entry in text exports.',
+    'section'     => 'deprecated',
+    'description' => '<b>DEPRECATED</b>, use RADIUS check attributes instead.  This option will be removed soon.  The contents will be prepended to the first line of a user\'s RADIUS entry in text exports.',
     'type'        => 'text',
   },
 
@@ -766,6 +836,50 @@ httemplate/docs/config.html
     'type'        => 'checkbox',
   },
 
+  {
+    'key'         => 'legacy_link',
+    'section'     => 'UI',
+    'description' => 'Display options in the web interface to link legacy pre-Freeside services.',
+    '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'         => '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',
+  },
+
 );
 
 1;