package FS::Setup;
+use base qw( Exporter );
use strict;
-use vars qw( @ISA @EXPORT_OK );
-use Exporter;
+use vars qw( ISA @EXPORT_OK );
#use Tie::DxHash;
use Tie::IxHash;
+use Crypt::OpenSSL::RSA;
use FS::UID qw( dbh driver_name );
-use FS::Record;
+#use FS::Record;
use FS::svc_domain;
$FS::svc_domain::whois_hack = 1;
$FS::svc_domain::whois_hack = 1;
-@ISA = qw( Exporter );
-@EXPORT_OK = qw( create_initial_data );
+#populate_locales
+use Locale::Country;
+use Locale::SubCountry 1.42;
+use FS::cust_main_county;
+
+#populate_access
+use FS::AccessRight;
+use FS::access_right;
+use FS::access_groupagent;
+
+#populate_msgcat
+use FS::Record qw(qsearch);
+use FS::msgcat;
+
+@EXPORT_OK = qw( create_initial_data enable_encryption );
=head1 NAME
populate_access();
populate_msgcat();
+
+ populate_numbering();
+
+ enable_encryption();
if ( $oldAutoCommit ) {
dbh->commit or die dbh->errstr;
}
-sub populate_locales {
+sub enable_encryption {
- use Locale::Country;
- use FS::cust_main_county;
+ eval "use FS::Conf";
+ die $@ if $@;
+
+ my $conf = new FS::Conf;
+
+ die "encryption key(s) already in place"
+ if $conf->exists('encryptionpublickey')
+ || $conf->exists('encryptionprivatekey');
+
+ my $length = 2048;
+ my $rsa = Crypt::OpenSSL::RSA->generate_key($length);
+
+ $conf->set('encryption', 1);
+ $conf->set('encryptionmodule', 'Crypt::OpenSSL::RSA');
+ $conf->set('encryptionpublickey', $rsa->get_public_key_string );
+ $conf->set('encryptionprivatekey', $rsa->get_private_key_string );
+
+}
+
+sub populate_numbering {
+ eval "use FS::lata_Data;"; # this automatically populates the lata table, if unpopulated
+ eval "use FS::msa_Data;"; # this automatically populates the msa table, if unpopulated
+}
+
+sub populate_locales {
#cust_main_county
foreach my $country ( sort map uc($_), all_country_codes ) {
sub _add_country {
- use Locale::SubCountry;
-
my( $country ) = shift;
my $subcountry = eval { new Locale::SubCountry($country) };
foreach my $table ( keys %$data ) {
+ #warn "popuilating $table\n";
+
my $class = "FS::$table";
eval "use $class;";
die $@ if $@;
$class->_populate_initial_data(%opt)
- if $class->can('_populate_inital_data');
+ if $class->can('_populate_initial_data');
my @records = @{ $data->{$table} };
foreach my $record ( @records ) {
+
my $args = delete($record->{'_insert_args'}) || [];
my $object = $class->new( $record );
my $error = $object->insert( @$args );
die "error inserting record into $table: $error\n"
if $error;
+
+ #my $pkey = $object->primary_key;
+ #my $pkeyvalue = $object->$pkey();
+ #warn " inserted $pkeyvalue\n";
+
}
}
sub initial_data {
my %opt = @_;
+ my $cust_location = FS::cust_location->new({
+ 'address1' => '1234 System Lane',
+ 'city' => 'Systemtown',
+ 'state' => 'CA',
+ 'zip' => '54321',
+ 'country' => 'US',
+ });
+
#tie my %hash, 'Tie::DxHash',
tie my %hash, 'Tie::IxHash',
+ #bootstrap user
+ 'access_user' => [
+ { 'username' => 'fs_bootstrap',
+ '_password' => 'changeme', #will trigger warning if you try to enable
+ 'last' => 'User',
+ 'first' => 'Bootstrap',
+ 'disabled' => 'Y',
+ },
+ ],
+
#superuser group
'access_group' => [
{ 'groupname' => 'Superuser' },
#which would only sell regular packages of services. Click on View/Edit
#agent types and Add a new agent type.
'agent_type' => [
- { 'atype' => 'internal' },
+ { 'atype' => 'Internal' },
],
#Allow this agent type to sell the package you created above.
'refnum' => 1, #XXX
'first' => 'System',
'last' => 'Accounts',
- 'address1' => '1234 System Lane',
- 'city' => 'Systemtown',
- 'state' => 'CA',
- 'zip' => '54321',
- 'country' => 'US',
'payby' => 'COMP',
'payinfo' => 'system', #or something
'paydate' => '1/2037',
+ 'bill_location' => $cust_location,
+ 'ship_location' => $cust_location,
},
],
#not yet....
- #)
-
#usage classes
'usage_class' => [],
+ #phone types
+ 'phone_type' => [],
+
+ #message templates
+ 'msg_template' => [],
+
;
\%hash;
sub populate_access {
- use FS::AccessRight;
- use FS::access_right;
-
- foreach my $rightname ( FS::AccessRight->rights ) {
+ foreach my $rightname ( FS::AccessRight->default_superuser_rights ) {
my $access_right = new FS::access_right {
'righttype' => 'FS::access_group',
'rightobjnum' => 1, #$supergroup->groupnum,
sub populate_msgcat {
- use FS::Record qw(qsearch);
- use FS::msgcat;
-
foreach my $del_msgcat ( qsearch('msgcat', {}) ) {
my $error = $del_msgcat->delete;
die $error if $error;
}
- my %messages = msgcat_messages();
+ my %messages = FS::msgcat::_legacy_messages();
foreach my $msgcode ( keys %messages ) {
foreach my $locale ( keys %{$messages{$msgcode}} ) {
}
-sub msgcat_messages {
-
- # 'msgcode' => {
- # 'en_US' => 'Message',
- # },
-
- (
-
- 'passwords_dont_match' => {
- 'en_US' => "Passwords don't match",
- },
-
- 'invalid_card' => {
- 'en_US' => 'Invalid credit card number',
- },
-
- 'unknown_card_type' => {
- 'en_US' => 'Unknown card type',
- },
-
- 'not_a' => {
- 'en_US' => 'Not a ',
- },
-
- 'empty_password' => {
- 'en_US' => 'Empty password',
- },
-
- 'no_access_number_selected' => {
- 'en_US' => 'No access number selected',
- },
-
- 'illegal_text' => {
- 'en_US' => 'Illegal (text)',
- #'en_US' => 'Only letters, numbers, spaces, and the following punctuation symbols are permitted: ! @ # $ % & ( ) - + ; : \' " , . ? / in field',
- },
-
- 'illegal_or_empty_text' => {
- 'en_US' => 'Illegal or empty (text)',
- #'en_US' => 'Only letters, numbers, spaces, and the following punctuation symbols are permitted: ! @ # $ % & ( ) - + ; : \' " , . ? / in required field',
- },
-
- 'illegal_username' => {
- 'en_US' => 'Illegal username',
- },
-
- 'illegal_password' => {
- 'en_US' => 'Illegal password (',
- },
-
- 'illegal_password_characters' => {
- 'en_US' => ' characters)',
- },
-
- 'username_in_use' => {
- 'en_US' => 'Username in use',
- },
-
- 'illegal_email_invoice_address' => {
- 'en_US' => 'Illegal email invoice address',
- },
-
- 'illegal_name' => {
- 'en_US' => 'Illegal (name)',
- #'en_US' => 'Only letters, numbers, spaces and the following punctuation symbols are permitted: , . - \' in field',
- },
-
- 'illegal_phone' => {
- 'en_US' => 'Illegal (phone)',
- #'en_US' => '',
- },
-
- 'illegal_zip' => {
- 'en_US' => 'Illegal (zip)',
- #'en_US' => '',
- },
-
- 'expired_card' => {
- 'en_US' => 'Expired card',
- },
-
- 'daytime' => {
- 'en_US' => 'Day Phone',
- },
-
- 'night' => {
- 'en_US' => 'Night Phone',
- },
-
- 'svc_external-id' => {
- 'en_US' => 'External ID',
- },
-
- 'svc_external-title' => {
- 'en_US' => 'Title',
- },
-
- 'stateid' => {
- 'en_US' => 'Driver\'s License',
- },
-
- 'stateid_state' => {
- 'en_US' => 'Driver\'s License State',
- },
-
- 'invalid_domain' => {
- 'en_US' => 'Invalid domain',
- },
-
- );
-}
-
=back
=head1 BUGS