View | Details | Raw Unified | Return to bug 24429
Collapse All | Expand All

(-)a/koha-tmpl/intranet-tmpl/lib/koha/cateditor/preferences.js (+1 lines)
Lines 33-38 define( function() { Link Here
33
                font: 'monospace',
33
                font: 'monospace',
34
                fontSize: '1em',
34
                fontSize: '1em',
35
                macros: {},
35
                macros: {},
36
                exportRecords: {},
36
                selected_search_targets: {},
37
                selected_search_targets: {},
37
            }, saved_prefs );
38
            }, saved_prefs );
38
        },
39
        },
(-)a/koha-tmpl/intranet-tmpl/prog/css/cateditor.css (-2 / +33 lines)
Lines 220-226 body { Link Here
220
220
221
/*> Search */
221
/*> Search */
222
222
223
#advanced-search-ui .modal-lg, #search-results-ui .modal-lg, #macro-ui .modal-lg {
223
#advanced-search-ui .modal-lg, #search-results-ui .modal-lg, #macro-ui .modal-lg, #exportReport-ui .modal-lg {
224
    width: 90%;
224
    width: 90%;
225
}
225
}
226
226
Lines 368-373 body { Link Here
368
    z-index: 9001;
368
    z-index: 9001;
369
}
369
}
370
370
371
/* Export Records Editor */
372
#export-save-message {
373
    color: #666;
374
    font-size: 13px;
375
    float: right;
376
    line-height: 26px;
377
}
378
379
#export-list > li {
380
    border: 2px solid #F0F0F0;
381
    border-radius: 6px;
382
    display: block;
383
    font-size: 115%;
384
}
385
386
#export-editor {
387
    display: flex;
388
    flex-direction: column;
389
    height: 100%;
390
}
391
392
#export-editor .CodeMirror {
393
    flex: 1;
394
    font-size: 13px;
395
}
396
397
/* Hotpatch from latest CodeMirror: Fix gutter positioning */
398
.CodeMirror-gutter-wrapper {
399
    position: absolute;
400
}
401
371
/*> Macros */
402
/*> Macros */
372
#macro-save-message {
403
#macro-save-message {
373
    color: #666;
404
    color: #666;
Lines 473-476 body { Link Here
473
504
474
.ui-keyboard-accept {
505
.ui-keyboard-accept {
475
    display: none;
506
    display: none;
476
}
507
}
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/cateditor-ui.inc (-1 / +148 lines)
Lines 79-84 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
79
79
80
    var editor;
80
    var editor;
81
    var macroEditor;
81
    var macroEditor;
82
    var exportRecordEditor;
82
83
83
    function makeAuthorisedValueWidgets( frameworkCode ) {
84
    function makeAuthorisedValueWidgets( frameworkCode ) {
84
        $.each( KohaBackend.GetAllTagsInfo( frameworkCode ), function( tag, tagInfo ) {
85
        $.each( KohaBackend.GetAllTagsInfo( frameworkCode ), function( tag, tagInfo ) {
Lines 639-644 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
639
            case 'macros':
640
            case 'macros':
640
                // Macros loaded on first show of modal
641
                // Macros loaded on first show of modal
641
                break;
642
                break;
643
            case 'exportRecords':
644
                // Export Records loaded on first show of modal
645
                break;
642
            case 'selected_search_targets':
646
            case 'selected_search_targets':
643
                $.each( z3950Servers, function( server_id, server ) {
647
                $.each( z3950Servers, function( server_id, server ) {
644
                    var saved_val = Preferences.user.selected_search_targets[server_id];
648
                    var saved_val = Preferences.user.selected_search_targets[server_id];
Lines 720-725 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
720
        Preferences.Save( [% logged_in_user.borrowernumber | html %] );
724
        Preferences.Save( [% logged_in_user.borrowernumber | html %] );
721
    }
725
    }
722
726
727
    function loadExportRecord( name ) {
728
        $( '#export-list li' ).removeClass( 'active' );
729
        exportRecordEditor.activeExportRecord = name;
730
731
        if ( !name ) {
732
            exportRecordEditor.setValue( '' );
733
            return;
734
        }
735
736
        $( '#export-list li[data-name="' + name + '"]' ).addClass( 'active' );
737
        var exportRecord = Preferences.user.exportRecords[name];
738
        exportRecord.contents = dedupeString(exportRecord.contents);
739
        exportRecordEditor.setValue( exportRecord.contents );
740
        exportRecordEditor.setOption( 'readOnly', false );
741
        if ( exportRecord.history ) exportRecordEditor.setHistory( exportRecord.history );
742
    }
743
744
    function dedupeString( strg ) {
745
746
        var pieces = strg.split("\n");
747
        var output = []; //Output array
748
749
        for (var i = 0; i < pieces.length; i++) {
750
               if (output.indexOf(pieces[i]) < 0) {
751
                         output.push(pieces[i]);
752
               }
753
        }
754
755
        return output.join("\n");
756
    }
757
758
    function storeExportRecord( name, exportRecord ) {
759
        if ( exportRecord ) {
760
            Preferences.user.exportRecords[name] = exportRecord;
761
        } else {
762
            delete Preferences.user.exportRecords[name];
763
        }
764
765
        Preferences.Save( [% logged_in_user.borrowernumber | html %] );
766
    }
767
768
    function showSavedExportRecords( exportRecords ) {
769
        var scrollTop = $('#export-list').scrollTop();
770
        $( '#export-list').empty();
771
        var export_list = $.map (Preferences.user.exportRecords, function (exportRecord, name) {
772
                return $.extend( { name: name}, exportRecord );
773
            } );
774
            export_list.sort ( function ( a, b ) {
775
                    return a.name.localeCompare(b.name);
776
                } );
777
        $.each ( export_list, function ( undef, exportRecord ) {
778
                var $li = $( '<li data-name="' + exportRecord.name + '"><a href"#">' + exportRecord.name + '</a><ol class="exportRecord-info"><ol></li>' );
779
                $li.click ( function() {
780
                        loadExportRecord(exportRecord.name);
781
                        return false;
782
                    } );
783
        if ( exportRecord.name == exportRecordEditor.activeExportRecord ) $li.addClass ( 'active' );
784
        var modified = exportRecord.modified && new Date(exportRecord.modified);
785
        $('#export-list').append($li);
786
      });
787
        var $new_li = $( '<li class="new-exportRecord"><a href="#">' + _("New Export File...") + '</a></li>' );
788
        $new_li.click( function() {
789
            var name = prompt(_("Please enter the name for the new export record:"));
790
            if (!name) return;
791
792
            if ( !Preferences.user.exportRecords[name] ) storeExportRecord( name, { contents: "" } );
793
            showSavedExportRecords();
794
            loadExportRecord( name );
795
        } );
796
        $('#export-list').append($new_li);
797
        $('#export-list').scrollTop(scrollTop);
798
    }
799
800
    function saveExportRecord() {
801
        var name = exportRecordEditor.activeExportRecord;
802
803
        if ( !name || exportRecordEditor.savedGeneration == exportRecordEditor.changeGeneration() ) return;
804
805
        exportRecordEditor.savedGeneration = exportRecordEditor.changeGeneration();
806
        storeExportRecord( name, { contents: exportRecordEditor.getValue(), modified: (new Date()).valueOf(), history: exportRecordEditor.getHistory() } );
807
    }
808
723
    function showSavedMacros( macros ) {
809
    function showSavedMacros( macros ) {
724
        var scrollTop = $('#macro-list').scrollTop();
810
        var scrollTop = $('#macro-list').scrollTop();
725
        $( '#macro-list' ).empty();
811
        $( '#macro-list' ).empty();
Lines 819-824 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
819
            }, 100);
905
            }, 100);
820
        }
906
        }
821
907
908
        $( '#exporter-ui' ).on( 'shown.bs.modal', function() {
909
            if ( exportRecordEditor ) return;
910
911
            exportRecordEditor = CodeMirror(
912
                $('#export-editor')[0],
913
                {
914
                    mode: 'null',
915
                    lineNumbers: true,
916
                    readOnly: true,
917
                }
918
            );
919
            var saveTimeout;
920
            exportRecordEditor.on( 'change', function( cm, change ) {
921
                $('#export-save-message').empty();
922
                if ( change.origin == 'setValue' ) return;
923
924
                if ( saveTimeout ) clearTimeout( saveTimeout );
925
                saveTimeout = setTimeout( function() {
926
                    saveExportRecord();
927
                    saveTimeout = null;
928
                }, 500 );
929
            } );
930
931
            showSavedExportRecords();
932
        } );
933
822
        $( '#macro-ui' ).on( 'shown.bs.modal', function() {
934
        $( '#macro-ui' ).on( 'shown.bs.modal', function() {
823
            if ( macroEditor ) return;
935
            if ( macroEditor ) return;
824
936
Lines 935-940 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
935
                saveRecord( backend + '/', editor, finishCb );
1047
                saveRecord( backend + '/', editor, finishCb );
936
            }
1048
            }
937
1049
1050
            //Add the record to the exportRecords list if there is one
1051
            if(Preferences.user.exportRecords) {
1052
                var export_list = $.map (Preferences.user.exportRecords, function (exportRecord, name) {
1053
                            return $.extend( { name: name}, exportRecord );
1054
                        });
1055
                $.each ( export_list, function ( undef, exportRecord ) {
1056
                        exportRecord.contents += "\n" + state.recordID;
1057
                        storeExportRecord( exportRecord.name, { contents: exportRecord.contents} );
1058
                    } );
1059
            }
938
            return false;
1060
            return false;
939
        } );
1061
        } );
940
1062
Lines 1027-1032 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
1027
            }
1149
            }
1028
        } );
1150
        } );
1029
1151
1152
        $('#open-exporter').click( function() {
1153
            $('#exporter-ui').modal('show');
1154
1155
            return false;
1156
        } );
1157
1158
        $('#generate-file').click (function() {
1159
                var bibs = exportRecordEditor.getValue();
1160
                bibs = bibs.replace(/\r?\n/g, ",") + ",";
1161
                $.post("/cgi-bin/koha/tools/export.pl", {"record_type":"bibs", "export_bibs":bibs, "filename":"test.mrc", "op":"export" }, function (data) {
1162
                        var blob = new Blob([data], { 'type': 'application/octet-stream;charset=utf-8'});
1163
                        saveAs(blob, exportRecordEditor.activeExportRecord + ".mrc" );
1164
                        });
1165
        });
1166
1167
        $('#delete-export-file').click( function() {
1168
            if ( !exportRecordEditor.activeExportRecord || !confirm( _("Are you sure you want to delete this Export File?") ) ) return;
1169
1170
            storeExportRecord( exportRecordEditor.activeExportRecord, undefined );
1171
            showSavedExportRecords();
1172
            loadExportRecord( undefined );
1173
1174
            return false;
1175
        } );
1176
1030
        $( '#show-advanced-search' ).click( function() {
1177
        $( '#show-advanced-search' ).click( function() {
1031
            showAdvancedSearch();
1178
            showAdvancedSearch();
1032
1179
Lines 1078-1084 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
1078
        bindGlobalKeys();
1225
        bindGlobalKeys();
1079
1226
1080
        // Setup UI
1227
        // Setup UI
1081
        $("#advanced-search-ui, #search-results-ui, #macro-ui").each( function() {
1228
        $("#advanced-search-ui, #search-results-ui, #macro-ui", "#exporter-ui").each( function() {
1082
            $(this).modal({ show: false });
1229
            $(this).modal({ show: false });
1083
        } );
1230
        } );
1084
1231
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/editor.tt (+27 lines)
Lines 41-46 Link Here
41
        </div>
41
        </div>
42
        <button class="btn btn-default" id="import-records" title="Import an MARC (ISO 2709) or MARCXML record"><i class="fa fa-download"></i> <span>Import record...</span></button>
42
        <button class="btn btn-default" id="import-records" title="Import an MARC (ISO 2709) or MARCXML record"><i class="fa fa-download"></i> <span>Import record...</span></button>
43
        <button class="btn btn-default" id="open-macros" title="Run and edit macros"><i class="fa fa-play"></i> <span>Macros...</span></button>
43
        <button class="btn btn-default" id="open-macros" title="Run and edit macros"><i class="fa fa-play"></i> <span>Macros...</span></button>
44
        <button class="btn btn-default" id="open-exporter" title="Generate export files"><i class="fa fa-cogs"></i> <span>Export...</span></button>
44
        <div class="btn-group">
45
        <div class="btn-group">
45
            <button class="btn btn-default dropdown-toggle" data-toggle="dropdown"><i class="fa fa-cog"></i> Settings <span class="caret"></span></button>
46
            <button class="btn btn-default dropdown-toggle" data-toggle="dropdown"><i class="fa fa-cog"></i> Settings <span class="caret"></span></button>
46
            <ul id="prefs-menu" class="dropdown-menu">
47
            <ul id="prefs-menu" class="dropdown-menu">
Lines 274-279 Link Here
274
</div>
275
</div>
275
</div>
276
</div>
276
277
278
279
<div id="exporter-ui" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="macro-title" aria-hidden="true">
280
<div class="modal-dialog modal-lg">
281
<div class="modal-content">
282
283
<div class="modal-header">
284
    <button type="button" class="closebtn" data-dismiss="modal" aria-hidden="true">×</button>
285
    <h3 id="exporter-title">Export Files</h3>
286
</div>
287
288
<div class="modal-body">
289
    <div class="row">
290
    <div class="col-md-3"><ul id="export-list"></ul></div>
291
    <div class="col-md-9" id="export-editor">
292
        <div id="exporter-toolbar" class="btn-toolbar">
293
            <button class="btn btn-default" id="generate-file" title="Generate export file"><i class="fa fa-play"></i> Generate Export File</button>
294
            <button class="btn btn-default" id="delete-export-file" title="Stop generating the export file and clear the results from current export file"><i class="fa fa-trash"></i> Clear Export Generation</button>
295
        </div>
296
    </div>
297
    </div>
298
</div>
299
</div>
300
</div>
301
</div>
302
303
277
<div id="keyboard-layout" class="modal fade" role="dialog">
304
<div id="keyboard-layout" class="modal fade" role="dialog">
278
    <div class="modal-dialog">
305
    <div class="modal-dialog">
279
        <div class="modal-content">
306
        <div class="modal-content">
(-)a/tools/export.pl (-1 / +7 lines)
Lines 51-56 if ( $query->param("biblionumbers") ) { Link Here
51
    @record_ids = $query->multi_param("biblionumbers");
51
    @record_ids = $query->multi_param("biblionumbers");
52
}
52
}
53
53
54
# export_bibs is sent from advanced editor only
55
if ( $query->param("export_bibs") ) {
56
    $record_type = 'bibs';
57
    my $b = $query->param("export_bibs");
58
    @record_ids = split(/,/, $b);
59
}
60
54
# Default value for output_format is 'iso2709'
61
# Default value for output_format is 'iso2709'
55
$output_format ||= 'iso2709';
62
$output_format ||= 'iso2709';
56
# Retrocompatibility for the format parameter
63
# Retrocompatibility for the format parameter
57
- 

Return to bug 24429