fix ACL upgrade, RT#17056
[freeside.git] / FS / FS / access_right.pm
index 719577f..fc01746 100644 (file)
@@ -183,9 +183,28 @@ sub _upgrade_data { # class method
   my @all_groups = qsearch('access_group', {});
 
   my %onetime = (
-    'List customers' => 'List all customers',
-    'List packages'  => 'Summarize packages',
-    'Post payment'   => 'Backdate payment',
+    'List customers'   => 'List all customers',
+    'List packages'    => 'Summarize packages',
+    'Post payment'     => 'Backdate payment',
+    'List services'    => [ 'Services: Accounts',
+                            'Services: Domains',
+                            'Services: Certificates',
+                            'Services: Mail forwards',
+                            'Services: Virtual hosting services',
+                            'Services: Wireless broadband services',
+                            'Services: DSLs',
+                            'Services: Dish services',
+                            'Services: Hardware',
+                            'Services: Phone numbers',
+                            'Services: PBXs',
+                            'Services: Ports',
+                            'Services: Mailing lists',
+                            'Services: External services',
+                          ],
+    'List rating data' => [ 'Usage: RADIUS sessions',
+                            'Usage: Call Detail Records (CDRs)',
+                            'Usage: Unrateable CDRs',
+                          ],
   );
 
   foreach my $old_acl ( keys %onetime ) {
@@ -196,20 +215,20 @@ sub _upgrade_data { # class method
 
     foreach my $new_acl ( @new_acl ) {
 
-      ( my $journal = 'ACL_'.lc($new_acl) ) =~ s/ /_/g;
+      ( my $journal = 'ACL_'.lc($new_acl) ) =~ s/\W/_/g;
       next if FS::upgrade_journal->is_done($journal);
 
       # grant $new_acl to all groups who have $old_acl
       for my $group (@all_groups) {
-        if ( $group->access_right($old_acl) ) {
-          my $access_right = FS::access_right->new( {
-              'righttype'   => 'FS::access_group',
-              'rightobjnum' => $group->groupnum,
-              'rightname'   => $new_acl,
-          } );
-          my $error = $access_right->insert;
-          die $error if $error;
-        }
+        next unless $group->access_right($old_acl);
+        next if     $group->access_right($new_acl);
+        my $access_right = FS::access_right->new( {
+            'righttype'   => 'FS::access_group',
+            'rightobjnum' => $group->groupnum,
+            'rightname'   => $new_acl,
+        } );
+        my $error = $access_right->insert;
+        die $error if $error;
       }
     
       FS::upgrade_journal->set_done($journal);