Bug 15774: Add permission for managing additional fields
authorNick Clemens <nick@bywatersolutions.com>
Tue, 18 Dec 2018 12:05:10 +0000 (12:05 +0000)
committerNick Clemens <nick@bywatersolutions.com>
Thu, 7 Mar 2019 20:37:06 +0000 (20:37 +0000)
To test:
 1 - Have three borrowers, one with order_manage permission, one with
 edit_subscription permisson, andone with both
 2 - Apply patch, updatedatabase
 3 - Verify all three now have the manage_additional_fields permission
 4 - Visit the admin page with these users, they should all see the
 'Manage additional fields' link
 5 - Click the link
 6 - User with order_manage should see 'Order baskest'
 7 - User with edit_subscription should see 'Subscriptions'
 8 - User with both should see both
 9 - Remove the additional permissions from a user - they should see a
 note about needing additional permissions

Signed-off-by: Josef Moravec <josef.moravec@gmail.com>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>

admin/additional-fields.pl
installer/data/mysql/atomicupdate/Bug_15774_add_additional_fields_permissions.perl [new file with mode: 0644]
installer/data/mysql/userpermissions.sql
koha-tmpl/intranet-tmpl/prog/en/includes/admin-menu.inc
koha-tmpl/intranet-tmpl/prog/en/includes/permissions.inc
koha-tmpl/intranet-tmpl/prog/en/modules/admin/additional-fields.tt
koha-tmpl/intranet-tmpl/prog/en/modules/admin/admin-home.tt

index 5bc722c..1b306f1 100755 (executable)
@@ -26,19 +26,28 @@ use Koha::AdditionalFields;
 
 my $input = new CGI;
 
+my %flagsrequired;
+$flagsrequired{parameters} = 'manage_additional_fields';
+
+my $tablename = $input->param('tablename');
+my $op = $input->param('op') // ( $tablename ? 'list' : 'list_tables' );
+
+if( $op ne 'list_tables' ){
+    $flagsrequired{acquisition} = 'order_manage' if $tablename eq 'aqbasket';
+    $flagsrequired{serials} = 'edit_subscription' if $tablename eq 'subscription';
+}
+
 my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
     {
         template_name   => "admin/additional-fields.tt",
         query           => $input,
         type            => "intranet",
         authnotrequired => 0,
-        flagsrequired   => { parameters => 1 },
+        flagsrequired   => \%flagsrequired,
         debug           => 1,
     }
 );
 
-my $tablename = $input->param('tablename');
-my $op = $input->param('op') // ( $tablename ? 'list' : 'list_tables' );
 my $field_id = $input->param('field_id');
 my @messages;
 
diff --git a/installer/data/mysql/atomicupdate/Bug_15774_add_additional_fields_permissions.perl b/installer/data/mysql/atomicupdate/Bug_15774_add_additional_fields_permissions.perl
new file mode 100644 (file)
index 0000000..314bfdc
--- /dev/null
@@ -0,0 +1,18 @@
+$DBversion = 'XXX';
+if( CheckVersion( $DBversion ) ) {
+    $dbh->do( q{
+        INSERT IGNORE INTO permissions (module_bit,code,description)
+        VALUES
+        (3,'manage_additional_fields','Add, edit, or delete additional custom fields for baskets or subscriptions (also requires order_manage or edit_subscription permissions)')
+    });
+    $dbh->do( q{
+        INSERT INTO user_permissions (borrowernumber, module_bit, code)
+        SELECT borrowernumber, 3, 'manage_additional_fields' FROM borrowers WHERE borrowernumber IN (SELECT DISTINCT borrowernumber FROM user_permissions WHERE code = 'order_manage' OR code = 'edit_subscription');
+    });
+    $dbh->do( q{
+        INSERT INTO user_permissions (borrowernumber, module_bit, code)
+        SELECT borrowernumber, 3, 'manage_additional_fields' FROM borrowers WHERE borrowernumber IN (SELECT borrowernumber FROM borrowers WHERE MOD(flags DIV POWER(2,11),2)=1 OR MOD(flags DIV POWER(2,15),2) =1);
+    });
+    SetVersion( $DBversion );
+    print "Upgrade to $DBversion done (Bug 15774 - Add permission for managing additional fields)\n";
+}
index 16b003e..6876fad 100644 (file)
@@ -31,6 +31,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES
    ( 3, 'manage_audio_alerts', 'Manage audio alerts'),
    ( 3, 'manage_usage_stats', 'Manage usage statistics settings'),
    ( 3, 'manage_mana', 'Manage Mana KB content sharing'),
+   ( 3, 'manage_additional_fields', 'Add, edit, or delete additional custom fields for baskets or subscriptions (also requires order_manage or edit_subscription permissions)'),
    ( 4, 'edit_borrowers', 'Add, modify and view patron information'),
    ( 4, 'view_borrower_infos_from_any_libraries', 'View patron infos from any libraries'),
    ( 6, 'place_holds', 'Place holds for patrons'),
index b2f3242..1677280 100644 (file)
         </ul>
     [% END %]
 
-    [% IF ( CAN_user_parameters_manage_search_targets || CAN_user_parameters_manage_didyoumean || CAN_user_parameters_manage_column_config || CAN_user_parameters_manage_audio_alerts || ( CAN_user_parameters_manage_sms_providers && Koha.Preference('SMSSendDriver') == 'Email' ) || CAN_user_parameters_manage_usage_stats || CAN_user_parameters_manage_additional_fields_baskets || CAN_user_parameters_manage_additional_fields_subscriptions ) %]
+    [% IF ( CAN_user_parameters_manage_search_targets || CAN_user_parameters_manage_didyoumean || CAN_user_parameters_manage_column_config || CAN_user_parameters_manage_audio_alerts || ( CAN_user_parameters_manage_sms_providers && Koha.Preference('SMSSendDriver') == 'Email' ) || CAN_user_parameters_manage_usage_stats || CAN_user_parameters_manage_additional_fields ) %]
         <h5>Additional parameters</h5>
         <ul>
             <!-- <li><a href="/cgi-bin/koha/admin/printers.pl">Network Printers</a></li> -->
             [% IF ( CAN_user_parameters_manage_mana ) %]
                 <li><a href="/cgi-bin/koha/admin/share_content.pl">Share content with Mana KB</a></li>
             [% END %]
-            [% IF ( CAN_user_parameters_manage_additional_fields_baskets || CAN_user_parameters_manage_additional_fields_subscriptions ) %]
+            [% IF ( CAN_user_parameters_manage_additional_fields ) %]
                 <li><a href="/cgi-bin/koha/admin/additional-fields.pl">Additional fields</a></li>
             [% END %]
         </ul>
index 9d538a3..e014db7 100644 (file)
@@ -57,6 +57,7 @@
     [%- CASE 'manage_didyoumean' -%]<span>Manage Did you mean? configuration</span>
     [%- CASE 'manage_column_config' -%]<span>Manage column configuration</span>
     [%- CASE 'manage_audio_alerts' -%]<span>Manage audio alerts</span>
+    [%- CASE 'manage_additional_fields' -%]<span>Manage additional fields for baskets or subscriptions (requires edit_subscription or order_manage permissions)</span>
     [%- CASE 'manage_sms_providers' -%]<span>Manage SMS cellular providers</span>
     [%- CASE 'manage_usage_stats' -%]<span>Manage usage statistics settings</span>
     [%- CASE 'manage_mana' -%]<span>Manage Mana KB content sharing</span>
index 3b5309c..ad1ebb7 100755 (executable)
     [% END %]
 
     [% IF op == 'list_tables' %]
+        [% IF CAN_user_acquisitions_order_manage || CAN_user_serials_edit_subscription %]
         <h3>Additional fields</h3>
         <p>Select a table:</p>
         [% BLOCK table_option %]
             <li><a href="?tablename=[% value | uri %]">[% content | html %] (<tt>[% value | html %]</tt>)</a></li>
         [% END %]
         <ul>
-            [% WRAPPER table_option value="aqbasket" %]Order baskets[% END %]
-            [% WRAPPER table_option value="subscription" %]Subscriptions[% END %]
+            [% IF CAN_user_acquisition_order_manage %]
+                [% WRAPPER table_option value="aqbasket" %]Order baskets[% END %]
+            [% END %]
+            [% IF CAN_user_serials_edit_subscription %]
+                [% WRAPPER table_option value="subscription" %]Subscriptions[% END %]
+            [% END %]
         </ul>
+        [% ELSE %]
+            Additional permissions in the acquisitions or serials modules are required for editing additional fields
+        [% END %]
     [% ELSIF op == 'list' %]
         <h3>Additional fields for '[% tablename | html %]'</h3>
         [% IF fields %]
index ee1abfc..a672b69 100644 (file)
                 </dl>
             [% END %]
 
-            [% IF ( ( CAN_user_parameters_manage_search_targets || CAN_user_parameters_manage_didyoumean || CAN_user_parameters_manage_column_config || CAN_user_parameters_manage_audio_alerts || CAN_user_parameters_manage_sms_providers && Koha.Preference('SMSSendDriver') == 'Email' ) || CAN_user_parameters_manage_usage_stats || CAN_user_parameters_manage_additional_fields_baskets || CAN_user_parameters_manage_additional_fields_subscriptions || CAN_user_parameters_manage_mana ) %]
+            [% IF ( ( CAN_user_parameters_manage_search_targets || CAN_user_parameters_manage_didyoumean || CAN_user_parameters_manage_column_config || CAN_user_parameters_manage_audio_alerts || CAN_user_parameters_manage_sms_providers && Koha.Preference('SMSSendDriver') == 'Email' ) || CAN_user_parameters_manage_usage_stats || CAN_user_parameters_manage_additional_fields || CAN_user_parameters_manage_mana ) %]
                 <h3>Additional parameters</h3>
                 <dl>
                         <!-- <dt><a href="/cgi-bin/koha/admin/printers.pl">Network Printers</a></dt>
                         <dt><a href="/cgi-bin/koha/admin/usage_statistics.pl">Share your usage statistics</a></dt>
                         <dd>Share with the Koha community the usage statistics of your Koha installation.</dd>
                     [% END %]
+<<<<<<< HEAD
                     [% IF ( CAN_user_parameters_manage_mana ) %]
                         <dt><a href="/cgi-bin/koha/admin/share_content.pl">Share content with Mana KB</a></dt>
                         <dd>Share content (subscriptions, reports) with the Koha community</dd>
                     [% END %]
                     [% IF ( CAN_user_parameters_manage_additional_fields_baskets || CAN_user_parameters_manage_additional_fields_subscriptions ) %]
+=======
+                    [% IF ( CAN_user_parameters_manage_additional_fields ) %]
+>>>>>>> Bug 15774: Add permission for managing additional fields
                     <dt><a href="/cgi-bin/koha/admin/additional-fields.pl">Additional fields</a></dt>
                     <dd>Add additional fields to certain tables</dd>
                     [% END %]