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 / +88 lines)
Lines 224-230 body { Link Here
224
224
225
/*> Search */
225
/*> Search */
226
226
227
#advanced-search-ui .modal-lg, #search-results-ui .modal-lg, #macro-ui .modal-lg {
227
#advanced-search-ui .modal-lg, #search-results-ui .modal-lg, #macro-ui .modal-lg, #export-ui .modal-lg {
228
    width: 90%;
228
    width: 90%;
229
}
229
}
230
230
Lines 372-377 body { Link Here
372
    z-index: 9001;
372
    z-index: 9001;
373
}
373
}
374
374
375
/*> Export Records UI */
376
#export-save-message {
377
    color: #666;
378
    font-size: 13px;
379
    float: right;
380
    line-height: 26px;
381
}
382
383
#export-list > li {
384
    border: 2px solid #F0F0F0;
385
    border-radius: 6px;
386
    display: block;
387
    font-size: 115%;
388
}
389
390
#export-list > li + li {
391
    margin-top: -2px;
392
}
393
394
#export-list .active {
395
    background: #EDF4F6;
396
    border-color: none;
397
}
398
399
#export-list a {
400
    display: block;
401
    padding: 6px;
402
}
403
404
#export-list a:focus {
405
    outline: none;
406
}
407
408
.export-info {
409
    background-color: #F4F4F4;
410
    display: none;
411
    margin: 0;
412
    padding: 10px;
413
    text-align: right;
414
}
415
416
.export-info li {
417
    color: #666;
418
    font-size: 75%;
419
    list-style-type: none;
420
}
421
422
.export-info .label {
423
    clear: left;
424
    font-weight: bold;
425
    float: left;
426
}
427
428
#export-list .active .export-info {
429
    display: block;
430
}
431
432
.btn-toolbar label, .btn-toolbar select {
433
    font-size: 13px;
434
    vertical-align: middle;
435
}
436
437
.btn-toolbar label {
438
    margin-left: 1em;
439
}
440
441
.btn-toolbar select {
442
    padding: 2px;
443
}
444
445
#export-editor {
446
    display: flex;
447
    flex-direction: column;
448
    height: 100%;
449
}
450
451
#export-editor .CodeMirror {
452
    flex: 1;
453
    font-size: 13px;
454
}
455
456
/* Hotpatch from latest CodeMirror: Fix gutter positioning */
457
.CodeMirror-gutter-wrapper {
458
    position: absolute;
459
}
460
375
/*> Macros */
461
/*> Macros */
376
#macro-save-message {
462
#macro-save-message {
377
    color: #666;
463
    color: #666;
Lines 477-480 body { Link Here
477
563
478
.ui-keyboard-accept {
564
.ui-keyboard-accept {
479
    display: none;
565
    display: none;
480
}
566
}
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/cateditor-ui.inc (-1 / +151 lines)
Lines 82-87 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
82
82
83
    var editor;
83
    var editor;
84
    var macroEditor;
84
    var macroEditor;
85
    var exportRecordEditor;
85
86
86
    function makeAuthorisedValueWidgets( frameworkCode ) {
87
    function makeAuthorisedValueWidgets( frameworkCode ) {
87
        $.each( KohaBackend.GetAllTagsInfo( frameworkCode ), function( tag, tagInfo ) {
88
        $.each( KohaBackend.GetAllTagsInfo( frameworkCode ), function( tag, tagInfo ) {
Lines 279-284 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
279
                    done( { error: data.error, newRecord: data.marcxml && data.marcxml[0], newId: data.biblionumber && [ 'catalog', data.biblionumber ] } );
280
                    done( { error: data.error, newRecord: data.marcxml && data.marcxml[0], newId: data.biblionumber && [ 'catalog', data.biblionumber ] } );
280
                }
281
                }
281
282
283
                //Add the record to the exportRecords list if there is one
284
                if(Preferences.user.exportRecords) {
285
                    var export_list = $.map (Preferences.user.exportRecords, function (exportRecord, name) {
286
                            return $.extend( { name: name}, exportRecord );
287
                        });
288
                    $.each (export_list, function ( undef, exportRecord ) {
289
                        exportRecord.contents += "\n" + state.recordID;
290
                        storeExportRecord( exportRecord.name, { contents: exportRecord.contents} );
291
                        } );
292
                }
293
282
                if ( id ) {
294
                if ( id ) {
283
                    KohaBackend.SaveRecord( id, record, finishCb );
295
                    KohaBackend.SaveRecord( id, record, finishCb );
284
                } else {
296
                } else {
Lines 643-648 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
643
            case 'macros':
655
            case 'macros':
644
                // Macros loaded on first show of modal
656
                // Macros loaded on first show of modal
645
                break;
657
                break;
658
            case 'exportRecords':
659
                //Export records loaded on first show of modal
660
                break;
646
            case 'selected_search_targets':
661
            case 'selected_search_targets':
647
                $.each( z3950Servers, function( index, server ) {
662
                $.each( z3950Servers, function( index, server ) {
648
                    var saved_val = Preferences.user.selected_search_targets[server.server_id];
663
                    var saved_val = Preferences.user.selected_search_targets[server.server_id];
Lines 696-701 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
696
        } );
711
        } );
697
    }
712
    }
698
713
714
    //> Export record functions
715
    function loadExportRecord( name ) {
716
        $( '#export-list li' ).removeClass ('active' );
717
        exportRecordEditor.activeExportRecord = name;
718
719
        if ( !name ) {
720
            exportRecordEditor.setValue ( '' );
721
            return;
722
        }
723
724
        $( '#export-list li[data-name="' + name + '"]' ).addClass( 'active' );
725
        var exportRecord = Preferences.user.exportRecords[name];
726
        exportRecord.contents = dedupeString( exportRecord.contents );
727
        exportRecordEditor.setValue( exportRecord.contents );
728
        exportRecordEditor.setOption( 'readOnly', false );
729
        if ( exportRecord.history ) exportRecordEditor.setHistory( exportRecord.history );
730
    }
731
732
    function dedupeString( strg ) {
733
        var pieces = strg.split("\n");
734
        var output = []; //Output array
735
        for (var i = 0; i < pieces.length; i++) {
736
            if (output.indexOf(pieces[i]) < 0 && pieces[i].length > 0) {
737
                output.push(pieces[i]);
738
            }
739
        }
740
741
        return output.join("\n");
742
    }
743
744
    function storeExportRecord( name, exportRecord ) {
745
        if ( exportRecord ) {
746
            Preferences.user.exportRecords[name] = exportRecord;
747
        } else {
748
            delete Preferences.user.exportRecords[name];
749
        }
750
751
        Preferences.Save( [% logged_in_user.borrowernumber | html %] );
752
    }
753
754
    function showSavedExportRecords ( exportRecords ) {
755
        var scrollTop = $('#export-list').scrollTop();
756
        $( '#export-list').empty();
757
        var export_list = $.map (Preferences.user.exportRecords, function (exportRecord, name) {
758
                return $.extend( { name: name }, exportRecord );
759
                } );
760
        export_list.sort (function ( a, b ) {
761
                return a.name.localeCompare(b.name);
762
                } );
763
        $.each ( export_list, function ( undef, exportRecord ) {
764
                var $li = $( '<li data-name="' + exportRecord.name + '"><a href"#">' + exportRecord.name + '</a><ol class="exportRecord-info"><ol></li>' );
765
                $li.click ( function() {
766
                        loadExportRecord(exportRecord.name);
767
                        return false;
768
                } );
769
                if ( exportRecord.name == exportRecordEditor.activeExportRecord ) $li.addClass ( 'active' );
770
                var modified = exportRecord.modified && new Date(exportRecord.modified);
771
                $('#export-list').append($li);
772
        } );
773
        var $new_li = $( '<li class="new-exportRecord"><a href="#">' + _("New Export File...") + '</a></li>' );
774
        $new_li.click( function () {
775
                var name = prompt(_("Please enter the name for the new export record:"));
776
                if (!name) return;
777
778
                if ( !Preferences.user.exportRecords[name] ) storeExportRecord( name, {contents: "" } );
779
                showSavedExportRecords();
780
                loadExportRecord( name );
781
        } );
782
        $('#export-list').append($new_li);
783
        $('#export-list').scrollTop(scrollTop);
784
    }
785
786
    function saveExportRecord() {
787
        var name = exportRecordEditor.activeExportRecord;
788
        if (!name || exportRecordEditor.savedGeneration == exportRecordEditor.changeGeneration() ) return;
789
        exportRecordEditor.savedGeneration = exportRecordEditor.changeGeneration();
790
        storeExportRecord( name, { contents: exportRecordEditor.getValue(), modified: (new Date()).valueOf(), history: exportRecordEditor.getHistory() } );
791
    }
792
793
794
    //> End Exporter Record Functions
795
699
    //> Macro functions
796
    //> Macro functions
700
    var canCreatePublic = "[% CAN_user_editcatalogue_create_shared_macros | html %]";
797
    var canCreatePublic = "[% CAN_user_editcatalogue_create_shared_macros | html %]";
701
    var canDeletePublic = "[% CAN_user_editcatalogue_delete_shared_macros | html %]";
798
    var canDeletePublic = "[% CAN_user_editcatalogue_delete_shared_macros | html %]";
Lines 1034-1039 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
1034
            showSavedMacros();
1131
            showSavedMacros();
1035
        } );
1132
        } );
1036
1133
1134
        $( '#exporter-ui').on( 'show.bs.modal', function() {
1135
            if ( exportRecordEditor ) return;
1136
1137
            exportRecordEditor = CodeMirror(
1138
                    $('#export-editor')[0],
1139
                    {
1140
                        mode: 'null',
1141
                        lineNumbers: true,
1142
                        readOnly: true,
1143
                    }
1144
            );
1145
1146
            var saveTimeout;
1147
            exportRecordEditor.on ( 'change', function ( cm, change ) {
1148
                    $('#export-save-message').empty();
1149
                    if ( change.origin == 'setValue' ) return;
1150
1151
                    if ( saveTimeout ) clearTimeout( saveTimeout );
1152
                    saveTimeout = setTimeout ( function() {
1153
                        saveExportRecord();
1154
                        saveTimeout = null;
1155
                    }, 500 );
1156
            } );
1157
1158
            showSavedExportRecords();
1159
        } );
1160
1037
        var saveableBackends = [];
1161
        var saveableBackends = [];
1038
        $.each( backends, function( id, backend ) {
1162
        $.each( backends, function( id, backend ) {
1039
            if ( backend.save ) saveableBackends.push( [ backend.saveLabel, id ] );
1163
            if ( backend.save ) saveableBackends.push( [ backend.saveLabel, id ] );
Lines 1106-1111 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
1106
                saveRecord( backend + '/', editor, finishCb );
1230
                saveRecord( backend + '/', editor, finishCb );
1107
            }
1231
            }
1108
1232
1233
1109
            return false;
1234
            return false;
1110
        } );
1235
        } );
1111
1236
Lines 1196-1201 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
1196
            }
1321
            }
1197
        } );
1322
        } );
1198
1323
1324
        $('#open-exporter').click( function () {
1325
            $('#exporter-ui').modal('show');
1326
1327
            return false;
1328
        } );
1329
1330
        $('#generate-file').click( function () {
1331
            var bibs = exportRecordEditor.getValue();
1332
            bibs = bibs.replace(/\r?\n/g, ",") + ",";
1333
            $.post("/cgi-bin/koha/tools/export.pl", {"record_type":"bibs", "export_bibs":bibs, "filename":"test.mrc", "op":"export" }, function (data) {
1334
                    var blob = new Blob([data], { 'type': 'application/octet-stream;charset=utf-8'});
1335
                    saveAs(blob, exportRecordEditor.activeExportRecord + ".mrc" );
1336
            } );
1337
        } );
1338
1339
        $('#delete-export-file').click( function() {
1340
            if ( !exportRecordEditor.activeExportRecord || !confirm( _("Are you sure you want to delete this Export File?") ) ) return;
1341
1342
            storeExportRecord( exportRecordEditor.activeExportRecord, undefined );
1343
            showSavedExportRecords();
1344
            loadExportRecord( undefined );
1345
1346
            return false;
1347
        } );
1348
1199
        $( '#show-advanced-search' ).click( function() {
1349
        $( '#show-advanced-search' ).click( function() {
1200
            showAdvancedSearch();
1350
            showAdvancedSearch();
1201
1351
Lines 1247-1253 require( [ 'koha-backend', 'search', 'macros', 'marc-editor', 'marc-record', 'pr Link Here
1247
        bindGlobalKeys();
1397
        bindGlobalKeys();
1248
1398
1249
        // Setup UI
1399
        // Setup UI
1250
        $("#advanced-search-ui, #search-results-ui, #macro-ui").each( function() {
1400
        $("#advanced-search-ui, #search-results-ui, #macro-ui", "#exporter-ui").each( function() {
1251
            $(this).modal({ show: false });
1401
            $(this).modal({ show: false });
1252
        } );
1402
        } );
1253
1403
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/editor.tt (+25 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 279-284 Link Here
279
</div>
280
</div>
280
</div>
281
</div>
281
282
283
<div id="exporter-ui" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="exporter-title" aria-hidden="true">
284
<div class="modal-dialog modal-lg">
285
<div class="modal-content">
286
287
<div class="modal-header">
288
    <button type="button" class="closebtn" data-dismiss="modal" aria-hidden="true">×</button>
289
    <h3 id="exporter-title">Export Files</h3>
290
</div>
291
292
<div class="modal-body">
293
    <div class="row">
294
    <div class="col-md-3"><ul id="export-list"></ul></div>
295
    <div class="col-md-9" id="export-editor">
296
    <div id="exporter-toolbar" class="btn-toolbar">
297
        <button class="btn btn-default" id="generate-file" title="Generate export file"><i class="fa fa-play"></i> Generate Export File</button>
298
        <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>
299
    </div>
300
    </div>
301
    </div>
302
    </div>
303
    </div>
304
    </div>
305
</div>
306
282
<div id="keyboard-layout" class="modal fade" role="dialog">
307
<div id="keyboard-layout" class="modal fade" role="dialog">
283
    <div class="modal-dialog">
308
    <div class="modal-dialog">
284
        <div class="modal-content">
309
        <div class="modal-content">
(-)a/tools/export.pl (-1 / +7 lines)
Lines 56-61 if ( $query->param("biblionumbers") ) { Link Here
56
    @record_ids = $query->multi_param("biblionumbers");
56
    @record_ids = $query->multi_param("biblionumbers");
57
}
57
}
58
58
59
#export_bibs is sent from advanced editor only
60
if ( $query->param("export_bibs") ) {
61
    $record_type = 'bibs';
62
    my $b = $query->param("export_bibs");
63
    @record_ids = split(/,/, $b);
64
}
65
59
# Default value for output_format is 'iso2709'
66
# Default value for output_format is 'iso2709'
60
$output_format ||= 'iso2709';
67
$output_format ||= 'iso2709';
61
# Retrocompatibility for the format parameter
68
# Retrocompatibility for the format parameter
62
- 

Return to bug 24429