Bug 31028: Only show pending concerns if there are some
[koha-ffzg.git] / koha-tmpl / intranet-tmpl / prog / en / modules / admin / marc-overlay-rules.tt
index ecf8f73..7814576 100644 (file)
 [% USE raw %]
+[% USE Asset %]
+[% SET footerjs = 1 %]
 [% USE Koha %]
+[% USE KohaSpan %]
+[% PROCESS 'i18n.inc' %]
 [% INCLUDE 'doc-head-open.inc' %]
-<title>Koha &rsaquo; Administration &rsaquo; MARC overlay rules</title>
+<title>MARC overlay rules &rsaquo; Koha &rsaquo; Administration</title>
 [% INCLUDE 'doc-head-close.inc' %]
-[% Asset.css("css/datatables.css") | $raw %]
-[% INCLUDE 'datatables.inc' %]
 
-<style type="text/css">
+<style>
     .required {
         background-color: #C00;
     }
 </style>
 
-<script type="text/javascript">
-function doSubmit(op, id) {
-    $('<input type="hidden"/>')
-    .attr('name', 'op')
-    .attr('value', op)
-    .appendTo('#marc-overlay-rules-form');
-
-    if(id) {
-        $('<input type="hidden"/>')
-        .attr('name', 'id')
-        .attr('value', id)
-        .appendTo('#marc-overlay-rules-form');
-    }
+</head>
+<body id="admin_marc-overlay-rules" class="admin">
+[% WRAPPER 'header.inc' %]
+    [% INCLUDE 'cat-search.inc' %]
+[% END %]
 
-    var valid = true;
-    if (op == 'add' || op == 'edit') {
-        var validate = [
-            $('#marc-overlay-rules-form input[name="filter"]'),
-            $('#marc-overlay-rules-form input[name="tag"]')
-        ];
-        for(var i = 0; i < validate.length; i++) {
-            if (validate[i].length) {
-                if(validate[i].val().length == 0) {
-                    validate[i].addClass('required');
-                    valid = false;
-                } else {
-                    validate[i].removeClass('required');
-                }
-            }
-        }
-    }
+    [% WRAPPER 'sub-header.inc' %]
+    <nav id="breadcrumbs" aria-label="Breadcrumb" class="breadcrumb">
+        <ol>
+            <li>
+                <a href="/cgi-bin/koha/mainpage.pl">Home</a>
+            </li>
+            <li>
+                <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a>
+            </li>
+            <li>
+                <a href="#" aria-current="page">
+                     MARC overlay rules
+                </a>
+            </li>
+        </ol>
+    </nav>
+    [% END %]
 
-    if (valid) {
-        $('#marc-overlay-rules-form').submit();
-    }
+    <div class="main container-fluid">
+        <div class="row">
+            <div class="col-sm-10 col-sm-push-2">
+
+                <h1>Manage MARC overlay rules</h1>
+
+                [% FOR m IN messages %]
+                <div class="dialog [% m.type | html %]">
+                    [% SWITCH m.code %]
+                    [% CASE 'invalid_tag_regexp' %]
+                      <span>Invalid regular expression "[% m.tag | html %]".</span>
+                    [% CASE 'invalid_control_field_actions' %]
+                      <span>Invalid combination of actions for tag [% m.tag | html %]. Control field rules do not allow "Appended: Append" and "Removed: Skip".</span>
+                    [% CASE %]
+                      <span>[% m.code | html %]</span>
+                    [% END %]
+                </div>
+                [% END %]
+
+                [% UNLESS Koha.Preference( 'MARCOverlayRules' ) %]
+                [% SET pref_MARCOverlayRules_link = '<a href="/cgi-bin/koha/admin/preferences.pl?op=search&searchfield=MARCOverlayRules">MARCOverlayRules</a>' %]
+                <div class="dialog message">
+                    The [%  pref_MARCOverlayRules_link | $raw | $KohaSpan %] preference is not set, don't forget to enable it for rules to take effect.
+                </div>
+                [% END %]
+                [% IF removeConfirm %]
+                <div class="dialog alert">
+                    <h3>Remove rule?</h3>
+                    <p>Are you sure you want to remove the selected rule(s)?</p>
+
+                    <form action="/cgi-bin/koha/admin/marc-overlay-rules.pl" method="GET">
+                        <button type="submit" class="deny"><i class="fa fa-fw fa-remove"></i> No, do not remove</button>
+                    </form>
+                    <button type="button" class="approve" id="doremove"><i class="fa fa-fw fa-check"></i> Yes, remove</button>
+                </div>
+                [% END %]
+
+                <div class="page-section">
+                <form action="/cgi-bin/koha/admin/marc-overlay-rules.pl" method="POST" id="marc-overlay-rules-form">
+                    <table id="marc-overlay-rules">
+                        <thead><tr>
+                            <th>Rule</th>
+                            <th>Module</th>
+                            <th>[% tp('noun', 'Filter') | html %]</th>
+                            <th>Tag</th>
+                            <th>Preset</th>
+                            <th>Added <i id="info_added" data-toggle="tooltip" title="If a field matching the rule tag only exists in the incoming record" data-placement="right" class="fa fa-info-circle"></i></th>
+                            <th>Appended <i id="info_appended" data-toggle="tooltip" title="If the original record has one or more fields matching with the rule tag, but one or more fields matching the rule tag differ in the incoming record" data-placement="right" class="fa fa-info-circle"></i></th>
+                            <th>Removed <i id="info_removed" data-toggle="tooltip" title="If the original record has a field matching the rule tag, but the matching field is not in the incoming record" data-placement="right" class="fa fa-info-circle"></i></th>
+                            <th>Deleted <i id="info_deleted" data-toggle="tooltip" title="If the original record has fields matching the rule tag, but no fields with this are found in the incoming record" data-placement="right" class="fa fa-info-circle"></i></th>
+                            <th>Actions</th>
+                            <th>&nbsp;</th>
+                        </tr></thead>
+                        [% UNLESS edit %]
+                        <tfoot>
+                            <tr class="rule-new">
+                                <th>&nbsp;</th>
+                                <th>
+                                    <select name="module">
+                                        <option value="source">Source</option>
+                                        <option value="categorycode">User category</option>
+                                        <option value="userid">Username</option>
+                                    </select>
+                                </th>
+                                <th id="filter-container"></th>
+                                <th><input type="text" size="5" name="tag"/></th>
+                                <th>
+                                    <select name="preset">
+                                        <option value="" selected>Custom</option>
+                                        <option value="Protect">Protect</option>
+                                        <option value="Overwrite">Overwrite</option>
+                                        <option value="Add new">Add new</option>
+                                        <option value="Add and append">Add and append</option>
+                                        <option value="Protect from deletion">Protect from deletion</option>
+                                    </select>
+                                </th>
+                                <th class="rule-operation-action-edit">
+                                    <select name="add">
+                                        <option value="0">Skip</option>
+                                        <option value="1">Add</option>
+                                    </select>
+                                </th>
+                                <th class="rule-operation-action-edit">
+                                    <select name="append">
+                                        <option value="0">Skip</option>
+                                        <option value="1">Append</option>
+                                    </select>
+                                </th>
+                                <th class="rule-operation-action-edit">
+                                    <select name="remove">
+                                        <option value="0">Skip</option>
+                                        <option value="1">Remove</option>
+                                    </select>
+                                </th>
+                                <th class="rule-operation-action-edit">
+                                    <select name="delete">
+                                        <option value="0">Skip</option>
+                                        <option value="1">Delete</option>
+                                    </select>
+                                </th>
+                                <th><button class="btn btn-default btn-xs" title="Add" id="add"><i class="fa fa-plus"></i> Add rule</button></th>
+                                <th><button id="btn_batchremove" disabled="disabled" class="btn btn-default btn-xs" title="Batch remove"><i class="fa fa-trash"></i> Delete selected</button></th>
+                            </tr>
+                        </tfoot>
+                        [% END %]
+                        <tbody>
+                            [% FOREACH rule IN rules %]
+                                <tr id="[% rule.id | html %]" class="rule[% IF rule.edit %]-edit[% END %]">
+                                [% IF rule.edit %]
+                                    <td>[% rule.id | html %]</td>
+                                    <td>
+                                        <select name="module">
+                                            [% IF rule.module == "source" %]
+                                                <option value="source" selected="selected">Source</option>
+                                            [% ELSE %]
+                                                <option value="source">Source</option>
+                                            [% END %]
+                                            [% IF rule.module == "categorycode" %]
+                                                <option value="categorycode" selected="selected">User category</option>
+                                            [% ELSE %]
+                                                <option value="categorycode">User category</option>
+                                            [% END %]
+                                            [% IF rule.module == "userid" %]
+                                                <option value="userid" selected="selected">Username</option>
+                                            [% ELSE %]
+                                                <option value="userid">Username</option>
+                                            [% END %]
+                                        </select>
+                                    </td>
+                                    <td id="filter-container" data-filter="[% rule.filter | html %]"></td>
+                                    <td><input type="text" size="3" name="tag" value="[% rule.tag | html %]"/></td>
+                                    <th>
+                                        <select name="preset">
+                                            <option value="" selected>Custom</option>
+                                            <option value="Protect">Protect</option>
+                                            <option value="Overwrite">Overwrite</option>
+                                            <option value="Add new">Add new</option>
+                                            <option value="Add and append">Add and append</option>
+                                            <option value="Protect from deletion">Protect from deletion</option>
+                                        </select>
+                                    </th>
+                                    <td class="rule-operation-action-edit">
+                                        <select name="add">
+                                            [% IF rule.add %]
+                                                <option value="0">Skip</option>
+                                                <option value="1" selected="selected">Add</option>
+                                            [% ELSE %]
+                                                <option value="0" selected="selected">Skip</option>
+                                                <option value="1">Add</option>
+                                            [% END %]
+                                        </select>
+                                    </td>
+                                    <td class="rule-operation-action-edit">
+                                        <select name="append">
+                                            [% IF rule.append %]
+                                                <option value="0">Skip</option>
+                                                <option value="1" selected="selected">Append</option>
+                                            [% ELSE %]
+                                                <option value="0" selected="selected">Skip</option>
+                                                <option value="1">Append</option>
+                                            [% END %]
+                                        </select>
+                                    </td>
+                                    <td class="rule-operation-action-edit">
+                                        <select name="remove">
+                                            [% IF rule.remove %]
+                                                <option value="0">Skip</option>
+                                                <option value="1" selected="selected">Remove</option>
+                                            [% ELSE %]
+                                                <option value="0" selected="selected">Skip</option>
+                                                <option value="1">Remove</option>
+                                            [% END %]
+                                        </select>
+                                    </td>
+                                    <td class="rule-operation-action-edit">
+                                        <select name="delete">
+                                            [% IF rule.delete %]
+                                                <option value="0">Skip</option>
+                                                <option value="1" selected="selected">Delete</option>
+                                            [% ELSE %]
+                                                <option value="0" selected="selected">Skip</option>
+                                                <option value="1">Delete</option>
+                                            [% END %]
+                                        </select>
+                                    </td>
+                                    <td class="actions">
+                                        <button class="btn btn-default btn-xs" title="Save" id="doedit" value="[% rule.id | html %]"><i class="fa fa-check"></i> Save</button>
+                                        <button type="submit" class="btn btn-default btn-xs" title="Cancel" ><i class="fa fa-times"></i> Cancel</button>
+                                    </td>
+                                    <td></td>
+                                [% ELSE %]
+                                    <td>[% rule.id | html %]</td>
+                                    <td class="rule-module">[% rule.module | html %]</td>
+                                    <td class="rule-filter">[% rule.filter | html %]</td>
+                                    <td>[% rule.tag | html %]</td>
+                                    <td class="rule-preset"></td>
+                                    <td class="rule-operation-action" data-operation="add">[% IF rule.add %]Add[% ELSE %]Skip[% END %]</td>
+                                    <td class="rule-operation-action" data-operation="append">[% IF rule.append %]Append[% ELSE %]Skip[% END %]</td>
+                                    <td class="rule-operation-action" data-operation="remove">[% IF rule.remove %]Remove[% ELSE %]Skip[% END %]</td>
+                                    <td class="rule-operation-action" data-operation="delete">[% IF rule.delete %]Delete[% ELSE %]Skip[% END %]</td>
+                                    <td class="actions">
+                                        <a href="?op=remove&id=[% rule.id | uri %]" title="Delete" class="btn btn-default btn-xs"><i class="fa fa-trash"></i> Delete</a>
+                                        <a href="?op=edit&id=[% rule.id | uri %]" title="Edit" class="btn btn-default btn-xs"><i class="fa fa-pencil"></i> Edit</a>
+                                    </td>
+                                    <td>
+                                        [% IF rule.removemarked %]
+                                            <input type="checkbox" name="batchremove" value="[% rule.id | html %]" checked="checked"/>
+                                        [% ELSE %]
+                                            <input type="checkbox" name="batchremove" value="[% rule.id | html %]"/>
+                                        [% END %]
+                                    </td>
+                                [% END %]
+                                </tr>
+                            [% END %]
+                        </tbody>
+                    </table>
+                </form>
+                </div> <!-- /.page-section -->
+
+                <form action="/cgi-bin/koha/admin/marc-overlay-rules.pl" method="post">
+                    <input type="hidden" name="op" value="redo-matching" />
+                </form>
+
+            </div><!-- /.col-sm-10.col-sm-push-2 -->
+
+            <div class="col-sm-2 col-sm-pull-10">
+                <aside>
+                    [% INCLUDE 'admin-menu.inc' %]
+                </aside>
+            </div>
+
+        </div><!-- /.row -->
+    </div><!-- /main container-fluid -->
+
+[% MACRO jsinclude BLOCK %]
+    [% Asset.js("js/admin-menu.js") | $raw %]
+    [% INCLUDE 'datatables.inc' %]
+
+    <script>
+    $(document).ready(function(){
+        function doSubmit(op, id) {
+            $('<input type="hidden"/>')
+            .attr('name', 'op')
+            .attr('value', op)
+            .appendTo('#marc-overlay-rules-form');
+
+            if(id) {
+                $('<input type="hidden"/>')
+                .attr('name', 'id')
+                .attr('value', id)
+                .appendTo('#marc-overlay-rules-form');
+            }
 
-    return valid;
-}
+            var valid = true;
+            if (op == 'add' || op == 'edit') {
+                var validate = [
+                    $('#marc-overlay-rules-form input[name="filter"]'),
+                    $('#marc-overlay-rules-form input[name="tag"]')
+                ];
+                for(var i = 0; i < validate.length; i++) {
+                    if (validate[i].length) {
+                        if(validate[i].val().length == 0) {
+                            validate[i].addClass('required');
+                            valid = false;
+                        } else {
+                            validate[i].removeClass('required');
+                        }
+                    }
+                }
+            }
 
-$(document).ready(function(){
-    $('#doremove').on('click', function(){
-        doSubmit('doremove');
-    });
-    $('#doedit').on('click', function(){
-        doSubmit('doedit', $("#doedit").attr('value'));
-    });
-    $('#add').on('click', function(){
-        doSubmit('add');
-        return false;
-    });
-    $('#btn_batchremove').on('click', function(){
-        doSubmit('remove');
-    });
+            if (valid) {
+                $('#marc-overlay-rules-form').submit();
+            }
 
-    /* Disable batch remove unless one or more checkboxes are checked */
-    $('input[name="batchremove"]').change(function() {
-        if($('input[name="batchremove"]:checked').length > 0) {
-            $('#btn_batchremove').removeAttr('disabled');
-        } else {
-            $('#btn_batchremove').attr('disabled', 'disabled');
+            return valid;
         }
-    });
-
-    $.fn.dataTable.ext.order['dom-input'] = function (settings, col) {
-        return this.api().column(col, { order: 'index' }).nodes()
-            .map(function (td, i) {
-                if($('input', td).val() != undefined) {
-                    return $('input', td).val();
-                } else if($('select', td).val() != undefined) {
-                    return $('option[selected="selected"]', td).val();
-                } else {
-                    return $(td).html();
-                }
-            });
-    }
-
-    $('#marc-overlay-rules').dataTable($.extend(true, {}, dataTablesDefaults, {
-        "aoColumns": [
-            {"bSearchable": false, "bSortable": false},
-            {"sSortDataType": "dom-input"},
-            {"sSortDataType": "dom-input"},
-            {"bSearchable": false, "sSortDataType": "dom-input"},
-            {"bSearchable": false, "sSortDataType": "dom-input"},
-            {"bSearchable": false, "sSortDataType": "dom-input"},
-            {"bSearchable": false, "sSortDataType": "dom-input"},
-            {"bSearchable": false, "sSortDataType": "dom-input"},
-            {"bSearchable": false, "sSortDataType": "dom-input"},
-            {"bSearchable": false, "bSortable": false},
-            {"bSearchable": false, "bSortable": false}
-        ],
-        "pagingType": "simple"
-    }));
-
-    var overlay_rules_presets = {};
-    overlay_rules_presets[_("Protect")] = {
-      'add': 0,
-      'append': 0,
-      'remove': 0,
-      'delete': 0
-    };
-    overlay_rules_presets[_("Overwrite")] = {
-      'add': 1,
-      'append': 1,
-      'remove': 1,
-      'delete': 1
-    };
-    overlay_rules_presets[_("Add new")] = {
-      'add': 1,
-      'append': 0,
-      'remove': 0,
-      'delete': 0
-    };
-    overlay_rules_presets[_("Add and append")] = {
-      'add': 1,
-      'append': 1,
-      'remove': 0,
-      'delete': 0
-    };
-    overlay_rules_presets[_("Protect from deletion")] = {
-      'add': 1,
-      'append': 1,
-      'remove': 1,
-      'delete': 0
-    };
-
-    var overlay_rules_label_to_value = {};
-    overlay_rules_label_to_value[_("Add")] = 1;
-    overlay_rules_label_to_value[_("Append")] = 1;
-    overlay_rules_label_to_value[_("Remove")] = 1;
-    overlay_rules_label_to_value[_("Delete")] = 1;
-    overlay_rules_label_to_value[_("Skip")] = 0;
-
-    function hash_config(config) {
-      return JSON.stringify(config, Object.keys(config).sort());
-    }
 
-    var overlay_rules_preset_map = {};
-    $.each(overlay_rules_presets, function(preset, config) {
-      overlay_rules_preset_map[hash_config(config)] = preset;
-    });
+        $('#doremove').on('click', function(){
+            doSubmit('doremove');
+        });
+        $('#doedit').on('click', function(){
+            doSubmit('doedit', $("#doedit").attr('value'));
+        });
+        $('#add').on('click', function(){
+            doSubmit('add');
+            return false;
+        });
+        $('#btn_batchremove').on('click', function(){
+            doSubmit('remove');
+        });
 
-    function operations_config_overlay_rule_preset(config) {
-      return overlay_rules_preset_map[hash_config(config)] || '';
-    }
+        /* Disable batch remove unless one or more checkboxes are checked */
+        $('input[name="batchremove"]').change(function() {
+            if($('input[name="batchremove"]:checked').length > 0) {
+                $('#btn_batchremove').removeAttr('disabled');
+            } else {
+                $('#btn_batchremove').attr('disabled', 'disabled');
+            }
+        });
 
-    /* Set preset values according to operation config */
-    $('.rule').each(function() {
-      var $this = $(this);
-      var operations_config = {};
-      $('.rule-operation-action', $this).each(function() {
-        var $operation = $(this);
-        operations_config[$operation.data('operation')] = overlay_rules_label_to_value[$operation.text()];
-      });
-      $('.rule-preset', $this).text(
-        operations_config_overlay_rule_preset(operations_config) || _("Custom")
-      );
-    });
+        $.fn.dataTable.ext.order['dom-input'] = function (settings, col) {
+            return this.api().column(col, { order: 'index' }).nodes()
+                .map(function (td, i) {
+                    if($('input', td).val() != undefined) {
+                        return $('input', td).val();
+                    } else if($('select', td).val() != undefined) {
+                        return $('option[selected="selected"]', td).val();
+                    } else {
+                        return $(td).html();
+                    }
+                });
+        }
 
-    /* Listen to operations config changes and set presets accordingly */
-    $('.rule-operation-action-edit select').change(function() {
-      var operations_config = {};
-      var $parent_row = $(this).closest('tr');
-      $('.rule-operation-action-edit select', $parent_row).each(function() {
-        var $this = $(this);
-        operations_config[$this.attr('name')] = parseInt($this.val());
-      });
-      $('select[name="preset"]', $parent_row).val(
-          operations_config_overlay_rule_preset(operations_config)
-      );
-    });
+        $('#marc-overlay-rules').dataTable($.extend(true, {}, dataTablesDefaults, {
+            "aoColumns": [
+                {"bSearchable": false, "bSortable": false},
+                {"sSortDataType": "dom-input"},
+                {"sSortDataType": "dom-input"},
+                {"bSearchable": false, "sSortDataType": "dom-input"},
+                {"bSearchable": false, "sSortDataType": "dom-input"},
+                {"bSearchable": false, "sSortDataType": "dom-input"},
+                {"bSearchable": false, "sSortDataType": "dom-input"},
+                {"bSearchable": false, "sSortDataType": "dom-input"},
+                {"bSearchable": false, "sSortDataType": "dom-input"},
+                {"bSearchable": false, "bSortable": false},
+                {"bSearchable": false, "bSortable": false}
+            ],
+            "pagingType": "simple"
+        }));
+
+        var overlay_rules_presets = {};
+        overlay_rules_presets[_("Protect")] = {
+          'add': 0,
+          'append': 0,
+          'remove': 0,
+          'delete': 0
+        };
+        overlay_rules_presets[_("Overwrite")] = {
+          'add': 1,
+          'append': 1,
+          'remove': 1,
+          'delete': 1
+        };
+        overlay_rules_presets[_("Add new")] = {
+          'add': 1,
+          'append': 0,
+          'remove': 0,
+          'delete': 0
+        };
+        overlay_rules_presets[_("Add and append")] = {
+          'add': 1,
+          'append': 1,
+          'remove': 0,
+          'delete': 0
+        };
+        overlay_rules_presets[_("Protect from deletion")] = {
+          'add': 1,
+          'append': 1,
+          'remove': 1,
+          'delete': 0
+        };
+
+        var overlay_rules_label_to_value = {};
+        overlay_rules_label_to_value[_("Add")] = 1;
+        overlay_rules_label_to_value[_("Append")] = 1;
+        overlay_rules_label_to_value[_("Remove")] = 1;
+        overlay_rules_label_to_value[_("Delete")] = 1;
+        overlay_rules_label_to_value[_("Skip")] = 0;
+
+        function hash_config(config) {
+          return JSON.stringify(config, Object.keys(config).sort());
+        }
 
-    /* Listen to preset changes and set operations config accordingly */
-    $('select[name="preset"]').change(function() {
-      var $this = $(this);
-      var $parent_row = $this.closest('tr');
-      var preset = $this.val();
-      if (preset) {
-        $.each(overlay_rules_presets[preset], function(operation, action) {
-          $('select[name="' + operation + '"]', $parent_row).val(action);
+        var overlay_rules_preset_map = {};
+        $.each(overlay_rules_presets, function(preset, config) {
+          overlay_rules_preset_map[hash_config(config)] = preset;
         });
-      }
-    });
 
-    var module_filter_options = {
-      source: {
-        '*': '*',
-        batchmod: _("Batch record modification"),
-        intranet: _("Staff client MARC editor"),
-        batchimport: _("Staged MARC import"),
-        z3950: _("Z39.50"),
-        /* bulkmarcimport: _("bulkmarcimport.pl"), */
-        import_lexile: _("import_lexile.pl")
-      },
-      categorycode: {
-        '*': '*',
-        [% FOREACH categorycode IN categorycodes %]
-          [% categorycode.categorycode | html %]: "[% categorycode.description | html %]",
-        [% END %]
-      }
-    };
-
-    //Kind of hack: Replace filter value with label when one exist
-    $('.rule-module').each(function() {
-      var $this = $(this);
-      var module = $this.text();
-      if (module in module_filter_options) {
-        let $filter = $this.siblings('.rule-filter');
-        if ($filter.text() in module_filter_options[module]) {
-          $filter.text(module_filter_options[module][$filter.text()]);
+        function operations_config_overlay_rule_preset(config) {
+          return overlay_rules_preset_map[hash_config(config)] || '';
         }
-      }
-    });
 
-    var $filter_container = $('#filter-container');
-
-    /* Listen to module changes and set filter input accordingly */
-    $('select[name="module"]').change(function() {
-      var $this = $(this);
-      var module_name = $this.val();
-
-      /* Remove current element if any */
-      $filter_container.empty();
-
-      var filter_elem = null;
-      if (module_name in module_filter_options) {
-        // Create select element
-        filter_elem = document.createElement('select');
-        for (var filter_value in module_filter_options[module_name]) {
-          var option = document.createElement('option');
-          option.value = filter_value;
-          option.text = module_filter_options[module_name][filter_value];
-          filter_elem.appendChild(option);
-        }
-      }
-      else {
-        // Create text input element
-        filter_elem = document.createElement('input');
-        filter_elem.type = 'text';
-        filter_elem.setAttribute('size', 5);
-      }
-      filter_elem.name = 'filter';
-      filter_elem.id = 'filter';
-      $filter_container.append(filter_elem);
-    }).change(); // Trigger change
-
-    // Hack: set value if editing rule
-    if ($filter_container.data('filter')) {
-      $('#filter').val($filter_container.data('filter'));
-    }
+        /* Set preset values according to operation config */
+        $('.rule').each(function() {
+          var $this = $(this);
+          var operations_config = {};
+          $('.rule-operation-action', $this).each(function() {
+            var $operation = $(this);
+            operations_config[$operation.data('operation')] = overlay_rules_label_to_value[$operation.text()];
+          });
+          $('.rule-preset', $this).text(
+            operations_config_overlay_rule_preset(operations_config) || _("Custom")
+          );
+        });
 
-});
-</script>
-</head>
-<body id="admin_marc-overlay-rules" class="admin">
-[% INCLUDE 'header.inc' %]
-[% INCLUDE 'cat-search.inc' %]
-
-<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a>
- &rsaquo; MARC overlay rules
-</div>
-
-<div class="main container-fluid">
-<div class="row">
-<div class="col-sm-10 col-sm-push-2">
-
-<h1>Manage MARC overlay rules</h1>
-
-[% FOR m IN messages %]
-  <div class="dialog [% m.type | html %]">
-    [% SWITCH m.code %]
-    [% CASE 'invalid_tag_regexp' %]
-      Invalid regular expression "[% m.tag | html %]".
-    [% CASE 'invalid_control_field_actions' %]
-      Invalid combination of actions for tag [% m.tag | html %]. Control field rules do not allow "Appended: Append" and "Removed: Skip".
-    [% CASE %]
-      [% m.code | html %]
-    [% END %]
-  </div>
-[% END %]
+        /* Listen to operations config changes and set presets accordingly */
+        $('.rule-operation-action-edit select').change(function() {
+          var operations_config = {};
+          var $parent_row = $(this).closest('tr');
+          $('.rule-operation-action-edit select', $parent_row).each(function() {
+            var $this = $(this);
+            operations_config[$this.attr('name')] = parseInt($this.val());
+          });
+          $('select[name="preset"]', $parent_row).val(
+              operations_config_overlay_rule_preset(operations_config)
+          );
+        });
 
-[% UNLESS Koha.Preference( 'MARCOverlayRules' ) %]
-    <div class="dialog message">
-        The <b>MARCOverlayRules</b> preference is not set, don't forget to enable it for rules to take effect.
-    </div>
-[% END %]
-[% IF removeConfirm %]
-<div class="dialog alert">
-<h3>Remove rule?</h3>
-<p>Are you sure you want to remove the selected rule(s)?</p>
-
-<form action="[% script_name | uri %]" method="GET">
-    <button type="submit" class="deny"><i class="fa fa-fw fa-remove"></i> No, do not remove</button>
-</form>
-    <button type="button" class="approve" id="doremove"><i class="fa fa-fw fa-check"></i> Yes, remove</button>
-</div>
-[% END %]
+        /* Listen to preset changes and set operations config accordingly */
+        $('select[name="preset"]').change(function() {
+          var $this = $(this);
+          var $parent_row = $this.closest('tr');
+          var preset = $this.val();
+          if (preset) {
+            $.each(overlay_rules_presets[preset], function(operation, action) {
+              $('select[name="' + operation + '"]', $parent_row).val(action);
+            });
+          }
+        });
 
-<form action="[% script_name | uri %]" method="POST" id="marc-overlay-rules-form">
-<table id="marc-overlay-rules">
-    <thead><tr>
-        <th>Rule</th>
-        <th>Module</th>
-        <th>Filter</th>
-        <th>Tag</th>
-        <th>Preset</th>
-        <th>Added <i id="info_added" data-toggle="tooltip" title="If a field matching the rule tag only exists in the incoming record" data-placement="right" class="fa fa-info-circle"></i></th>
-        <th>Appended <i id="info_appended" data-toggle="tooltip" title="If the original record has one or more fields matching with the rule tag, but one or more fields matching the rule tag differ in the incoming record" data-placement="right" class="fa fa-info-circle"></i></th>
-        <th>Removed <i id="info_removed" data-toggle="tooltip" title="If the original record has a field matching the rule tag, but the matching field is not in the incoming record" data-placement="right" class="fa fa-info-circle"></i></th>
-        <th>Deleted <i id="info_deleted" data-toggle="tooltip" title="If the original record has fields matching the rule tag, but no fields with this are found in the incoming record" data-placement="right" class="fa fa-info-circle"></i></th>
-        <th>Actions</th>
-        <th>&nbsp;</th>
-    </tr></thead>
-    [% UNLESS edit %]
-    <tfoot>
-        <tr class="rule-new">
-            <th>&nbsp;</th>
-            <th>
-                <select name="module">
-                    <option value="source">Source</option>
-                    <option value="categorycode">User category</option>
-                    <option value="userid">Username</option>
-                </select>
-            </th>
-            <th id="filter-container"></th>
-            <th><input type="text" size="5" name="tag"/></th>
-            <th>
-                <select name="preset">
-                    <option value="" selected>Custom</option>
-                    <option value="Protect">Protect</option>
-                    <option value="Overwrite">Overwrite</option>
-                    <option value="Add new">Add new</option>
-                    <option value="Add and append">Add and append</option>
-                    <option value="Protect from deletion">Protect from deletion</option>
-                </select>
-            </th>
-            <th class="rule-operation-action-edit">
-                <select name="add">
-                    <option value="0">Skip</option>
-                    <option value="1">Add</option>
-                </select>
-            </th>
-            <th class="rule-operation-action-edit">
-                <select name="append">
-                    <option value="0">Skip</option>
-                    <option value="1">Append</option>
-                </select>
-            </th>
-            <th class="rule-operation-action-edit">
-                <select name="remove">
-                    <option value="0">Skip</option>
-                    <option value="1">Remove</option>
-                </select>
-            </th>
-            <th class="rule-operation-action-edit">
-                <select name="delete">
-                    <option value="0">Skip</option>
-                    <option value="1">Delete</option>
-                </select>
-            </th>
-            <th><button class="btn btn-default btn-xs" title="Add" id="add"><i class="fa fa-plus"></i> Add rule</button></th>
-            <th><button id="btn_batchremove" disabled="disabled" class="btn btn-default btn-xs" title="Batch remove"><i class="fa fa-trash"></i> Delete selected</button></th>
-        </tr>
-    </tfoot>
-    [% END %]
-    <tbody>
-        [% FOREACH rule IN rules %]
-            <tr id="[% rule.id | html %]" class="rule[% IF rule.edit %]-edit[% END %]">
-            [% IF rule.edit %]
-                <td>[% rule.id | html %]</td>
-                <td>
-                    <select name="module">
-                        [% IF rule.module == "source" %]
-                            <option value="source" selected="selected">Source</option>
-                        [% ELSE %]
-                            <option value="source">Source</option>
-                        [% END %]
-                        [% IF rule.module == "categorycode" %]
-                            <option value="categorycode" selected="selected">User category</option>
-                        [% ELSE %]
-                            <option value="categorycode">User category</option>
-                        [% END %]
-                        [% IF rule.module == "userid" %]
-                            <option value="userid" selected="selected">Username</option>
-                        [% ELSE %]
-                            <option value="userid">Username</option>
-                        [% END %]
-                    </select>
-                </td>
-                <td id="filter-container" data-filter="[% rule.filter | html %]"></td>
-                <td><input type="text" size="3" name="tag" value="[% rule.tag | html %]"/></td>
-                <th>
-                    <select name="preset">
-                        <option value="" selected>Custom</option>
-                        <option value="Protect">Protect</option>
-                        <option value="Overwrite">Overwrite</option>
-                        <option value="Add new">Add new</option>
-                        <option value="Add and append">Add and append</option>
-                        <option value="Protect from deletion">Protect from deletion</option>
-                    </select>
-                </th>
-                <td class="rule-operation-action-edit">
-                    <select name="add">
-                        [% IF rule.add %]
-                            <option value="0">Skip</option>
-                            <option value="1" selected="selected">Add</option>
-                        [% ELSE %]
-                            <option value="0" selected="selected">Skip</option>
-                            <option value="1">Add</option>
-                        [% END %]
-                    </select>
-                </td>
-                <td class="rule-operation-action-edit">
-                    <select name="append">
-                        [% IF rule.append %]
-                            <option value="0">Skip</option>
-                            <option value="1" selected="selected">Append</option>
-                        [% ELSE %]
-                            <option value="0" selected="selected">Skip</option>
-                            <option value="1">Append</option>
-                        [% END %]
-                    </select>
-                </td>
-                <td class="rule-operation-action-edit">
-                    <select name="remove">
-                        [% IF rule.remove %]
-                            <option value="0">Skip</option>
-                            <option value="1" selected="selected">Remove</option>
-                        [% ELSE %]
-                            <option value="0" selected="selected">Skip</option>
-                            <option value="1">Remove</option>
-                        [% END %]
-                    </select>
-                </td>
-                <td class="rule-operation-action-edit">
-                    <select name="delete">
-                        [% IF rule.delete %]
-                            <option value="0">Skip</option>
-                            <option value="1" selected="selected">Delete</option>
-                        [% ELSE %]
-                            <option value="0" selected="selected">Skip</option>
-                            <option value="1">Delete</option>
-                        [% END %]
-                    </select>
-                </td>
-                <td class="actions">
-                    <button class="btn btn-default btn-xs" title="Save" id="doedit" value="[% rule.id | html %]"><i class="fa fa-check"></i> Save</button>
-                    <button type="submit" class="btn btn-default btn-xs" title="Cancel" ><i class="fa fa-times"></i> Cancel</button>
-                </td>
-                <td></td>
-            [% ELSE %]
-                <td>[% rule.id | html %]</td>
-                <td class="rule-module">[% rule.module | html %]</td>
-                <td class="rule-filter">[% rule.filter | html %]</td>
-                <td>[% rule.tag | html %]</td>
-                <td class="rule-preset"></td>
-                <td class="rule-operation-action" data-operation="add">[% IF rule.add %]Add[% ELSE %]Skip[% END %]</td>
-                <td class="rule-operation-action" data-operation="append">[% IF rule.append %]Append[% ELSE %]Skip[% END %]</td>
-                <td class="rule-operation-action" data-operation="remove">[% IF rule.remove %]Remove[% ELSE %]Skip[% END %]</td>
-                <td class="rule-operation-action" data-operation="delete">[% IF rule.delete %]Delete[% ELSE %]Skip[% END %]</td>
-                <td class="actions">
-                    <a href="?op=remove&id=[% rule.id | uri %]" title="Delete" class="btn btn-default btn-xs"><i class="fa fa-trash"></i> Delete</a>
-                    <a href="?op=edit&id=[% rule.id | uri %]" title="Edit" class="btn btn-default btn-xs"><i class="fa fa-pencil"></i> Edit</a>
-                </td>
-                <td>
-                    [% IF rule.removemarked %]
-                        <input type="checkbox" name="batchremove" value="[% rule.id | html %]" checked="checked"/>
-                    [% ELSE %]
-                        <input type="checkbox" name="batchremove" value="[% rule.id | html %]"/>
-                    [% END %]
-                </td>
+        var module_filter_options = {
+          source: {
+            '*': '*',
+            batchmod: _("Batch record modification"),
+            intranet: _("Staff interface MARC editor"),
+            batchimport: _("Staged MARC import"),
+            z3950: _("Z39.50"),
+            /* bulkmarcimport: _("bulkmarcimport.pl"), */
+            import_lexile: _("import_lexile.pl")
+          },
+          categorycode: {
+            '*': '*',
+            [% FOREACH categorycode IN categorycodes %]
+              [% categorycode.categorycode | html %]: "[% categorycode.description | html %]",
             [% END %]
-            </tr>
-        [% END %]
-    </tbody>
-</table>
-</form>
-
-<form action="[% script_name | uri %]" method="post">
-<input type="hidden" name="op" value="redo-matching" />
-</form>
-
-</div>
-<!-- /.col-sm-10.col-sm-push-2 -->
-
-<div class="col-sm-2 col-sm-pull-10">
-    <aside>
-        [% INCLUDE 'admin-menu.inc' %]
-    </aside>
-</div>
-
-</div>
-<!-- /.row>
-</div>
-<!-- /main container-fluid -->
+          }
+        };
+
+        //Kind of hack: Replace filter value with label when one exist
+        $('.rule-module').each(function() {
+          var $this = $(this);
+          var module = $this.text();
+          if (module in module_filter_options) {
+            let $filter = $this.siblings('.rule-filter');
+            if ($filter.text() in module_filter_options[module]) {
+              $filter.text(module_filter_options[module][$filter.text()]);
+            }
+          }
+        });
+
+        var $filter_container = $('#filter-container');
+
+        /* Listen to module changes and set filter input accordingly */
+        $('select[name="module"]').change(function() {
+          var $this = $(this);
+          var module_name = $this.val();
+
+          /* Remove current element if any */
+          $filter_container.empty();
+
+          var filter_elem = null;
+          if (module_name in module_filter_options) {
+            // Create select element
+            filter_elem = document.createElement('select');
+            for (var filter_value in module_filter_options[module_name]) {
+              var option = document.createElement('option');
+              option.value = filter_value;
+              option.text = module_filter_options[module_name][filter_value];
+              filter_elem.appendChild(option);
+            }
+          }
+          else {
+            // Create text input element
+            filter_elem = document.createElement('input');
+            filter_elem.type = 'text';
+            filter_elem.setAttribute('size', 5);
+          }
+          filter_elem.name = 'filter';
+          filter_elem.id = 'filter';
+          $filter_container.append(filter_elem);
+        }).change(); // Trigger change
+
+        // Hack: set value if editing rule
+        if ($filter_container.data('filter')) {
+          $('#filter').val($filter_container.data('filter'));
+        }
 
+    });
+    </script>
+[% END %]
 [% INCLUDE 'intranet-bottom.inc' %]