--- /dev/null
+package Koha::CodeList::Unimarc::MediumOfPerformance;
+
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# Koha is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
+
+use Modern::Perl;
+use utf8;
+
+use Koha::I18N;
+
+sub voices {
+ return {
+ 'val' => N__('alto'),
+ 'vbr' => N__('baritone'),
+ 'vbs' => N__('bass'),
+ 'vca' => N__('child alto'),
+ 'vcs' => N__('child soprano'),
+ 'vct' => N__('countertenor'),
+ 'vcv' => N__('child voice'),
+ 'vma' => N__('man\'s voice'),
+ 'vms' => N__('mezzo-soprano'),
+ 'vrc' => N__('reciting child\'s voice'),
+ 'vre' => N__('reciting voice'),
+ 'vrm' => N__('reciting man\'s voice'),
+ 'vrw' => N__('reciting woman\'s voice'),
+ 'vso' => N__('soprano'),
+ 'vte' => N__('tenor'),
+ 'vun' => N__('voice - unspecified'),
+ 'vwo' => N__('woman\'s voice'),
+ 'vzz' => N__('voice - other'),
+ };
+}
+
+sub woodwinds {
+ return {
+ 'wba' => N__('bassoon'),
+ 'wbh' => N__('basset-horn'),
+ 'wbp' => N__('bagpipe'),
+ 'wcl' => N__('clarinet'),
+ 'wcr' => N__('cromorne'),
+ 'wdb' => N__('double bassoon'),
+ 'wdi' => N__('didjeridu'),
+ 'wdu' => N__('dulcian'),
+ 'wdv' => N__('dvojnice'),
+ 'weh' => N__('english horn'),
+ 'wfg' => N__('flageolet'),
+ 'wfi' => N__('fife'),
+ 'wfl' => N__('flute'),
+ 'wga' => N__('tabor pipe'),
+ 'wge' => N__('gemshorn'),
+ 'whp' => N__('hornpipe'),
+ 'wmo' => N__('mouth organ'),
+ 'wmu' => N__('musette'),
+ 'wna' => N__('ney'),
+ 'woa' => N__('oboe d\'amore'),
+ 'wob' => N__('oboe'),
+ 'woh' => N__('oboe da caccia'),
+ 'wpi' => N__('piccolo'),
+ 'wpo' => N__('pommer'),
+ 'wpp' => N__('panpipes'),
+ 'wra' => N__('racket'),
+ 'wre' => N__('recorder'),
+ 'wro' => N__('rothophone'),
+ 'wsa' => N__('saxophone'),
+ 'wsh' => N__('shakuhachi'),
+ 'wsn' => N__('zurna'),
+ 'wsr' => N__('sarrusophone'),
+ 'wsu' => N__('sordun'),
+ 'wun' => N__('woodwind - unspecified'),
+ 'wvu' => N__('vox humana'),
+ 'wzz' => N__('woodwind - other'),
+ };
+}
+
+sub brass {
+ return {
+ 'bah' => N__('alphorn'),
+ 'bbd' => N__('bombardon'),
+ 'bbh' => N__('bersag horn'),
+ 'bbu' => N__('bugle'),
+ 'bca' => N__('carnyx'),
+ 'bch' => N__('cow horn'),
+ 'bcl' => N__('clarion'),
+ 'bco' => N__('cornet'),
+ 'bct' => N__('cornett'),
+ 'bdx' => N__('duplex'),
+ 'beu' => N__('euphonium'),
+ 'bhh' => N__('hunting horn'),
+ 'bho' => N__('horn'),
+ 'bht' => N__('herald\'s trumpet'),
+ 'bkb' => N__('keyed bugle'),
+ 'bol' => N__('oliphant'),
+ 'bop' => N__('ophicleide'),
+ 'bph' => N__('post horn'),
+ 'brh' => N__('russian horn'),
+ 'bse' => N__('serpent'),
+ 'bsh' => N__('shofar'),
+ 'bsr' => N__('sarrusophone'),
+ 'btb' => N__('trombone'),
+ 'btr' => N__('trumpet'),
+ 'btu' => N__('tuba'),
+ 'bun' => N__('brass - unspecified'),
+ 'bvb' => N__('valved bugle'),
+ 'bwt' => N__('wagner tuba'),
+ 'bzz' => N__('brass - other'),
+ };
+}
+
+sub strings_bowed {
+ return {
+ 'sar' => N__('arpeggione'),
+ 'sba' => N__('baryton'),
+ 'sbt' => N__('bassett'),
+ 'sbu' => N__('bumbass'),
+ 'scr' => N__('crwth'),
+ 'sdb' => N__('double bass'),
+ 'sdf' => N__('five-string double bass'),
+ 'sfi' => N__('fiddle, viol (family)'),
+ 'sli' => N__('lira da braccio'),
+ 'sln' => N__('lirone'),
+ 'sny' => N__('keyed fiddle'),
+ 'sob' => N__('octobass'),
+ 'spo' => N__('kit'),
+ 'sps' => N__('psalmodicon'),
+ 'sre' => N__('rebec'),
+ 'stm' => N__('trumpet marine'),
+ 'sun' => N__('strings, bowed - unspecified'),
+ 'sva' => N__('viola'),
+ 'svc' => N__('cello'),
+ 'sve' => N__('violone'),
+ 'svg' => N__('viol'),
+ 'svl' => N__('violin'),
+ 'szz' => N__('strings, bowed - other'),
+ };
+}
+
+sub strings_plucked {
+ return {
+ 'tal' => N__('archlute'),
+ 'tat' => N__('harp-psaltery'),
+ 'tbb' => N__('barbitos'),
+ 'tbi' => N__('biwa'),
+ 'tbj' => N__('banjo'),
+ 'tbl' => N__('balalaika'),
+ 'tbo' => N__('bouzouki'),
+ 'tci' => N__('cittern'),
+ 'tct' => N__('citole'),
+ 'tcz' => N__('cobza'),
+ 'tgu' => N__('guitar'),
+ 'tha' => N__('harp'),
+ 'thg' => N__('hawaiian guitar'),
+ 'tih' => N__('Irish harp'),
+ 'tkh' => N__('kithara'),
+ 'tko' => N__('kora'),
+ 'tkt' => N__('koto'),
+ 'tlf' => N__('lute (family)'),
+ 'tlg' => N__('lyre-guitar'),
+ 'tlu' => N__('lute'),
+ 'tma' => N__('mandolin'),
+ 'tmd' => N__('mandore'),
+ 'tpi' => N__('pipa'),
+ 'tps' => N__('psaltery'),
+ 'tpx' => N__('phorminx'),
+ 'tqa' => N__('qānūn'),
+ 'tsh' => N__('shamisen'),
+ 'tsi' => N__('sitār'),
+ 'tth' => N__('theorbo'),
+ 'ttn' => N__('tanbur'),
+ 'tud' => N__('oud'),
+ 'tuk' => N__('ukulele'),
+ 'tun' => N__('strings, plucked - unspecified'),
+ 'tzi' => N__('zither'),
+ 'tzz' => N__('strings, plucked - other'),
+ };
+}
+
+sub keyboard {
+ return {
+ 'kac' => N__('accordion'),
+ 'kce' => N__('celesta'),
+ 'kcl' => N__('clavichord'),
+ 'kco' => N__('claviorgan'),
+ 'kcy' => N__('clavicytherium'),
+ 'kfp' => N__('fortepiano'),
+ 'kgl' => N__('glockenspiel'),
+ 'khm' => N__('harmonium'),
+ 'khp' => N__('harpsichord'),
+ 'kmp' => N__('melopiano'),
+ 'kor' => N__('organ'),
+ 'kpf' => N__('piano'),
+ 'kps' => N__('plucked string keyboard'),
+ 'kre' => N__('regals'),
+ 'ksi' => N__('sirenion'),
+ 'ksp' => N__('sostenente piano'),
+ 'kst' => N__('spinet'),
+ 'kun' => N__('keyboard - unspecified'),
+ 'kvg' => N__('virginal'),
+ 'kzz' => N__('keyboard - other'),
+ };
+}
+
+sub percussion {
+ return {
+ 'pab' => N__('aeolian bells'),
+ 'pad' => N__('arabian drum'),
+ 'pag' => N__('agogo'),
+ 'pan' => N__('anvil'),
+ 'pbb' => N__('boobams'),
+ 'pbd' => N__('bass drum'),
+ 'pbl' => N__('bells'),
+ 'pbo' => N__('bongos'),
+ 'pbp' => N__('metal bells plate'),
+ 'pca' => N__('castanets'),
+ 'pcb' => N__('cabaca'),
+ 'pcc' => N__('chinese cymbals'),
+ 'pcg' => N__('conga'),
+ 'pch' => N__('chains'),
+ 'pci' => N__('dulcimer'),
+ 'pcr' => N__('crash cymbal'),
+ 'pct' => N__('crotales'),
+ 'pcv' => N__('claves'),
+ 'pcw' => N__('cowbell'),
+ 'pcy' => N__('cymbal'),
+ 'pdr' => N__('drum'),
+ 'pds' => N__('drums'),
+ 'pfc' => N__('finger cymbals'),
+ 'pfd' => N__('friction drum'),
+ 'pfl' => N__('flexatone'),
+ 'pgn' => N__('gun'),
+ 'pgo' => N__('gong'),
+ 'pgu' => N__('güiro'),
+ 'pha' => N__('hammer'),
+ 'phb' => N__('handbell'),
+ 'phh' => N__('hi-hat'),
+ 'pje' => N__('jembe'),
+ 'pji' => N__('jingles'),
+ 'pli' => N__('lithophone'),
+ 'plj' => N__('lujon'),
+ 'pmb' => N__('marimba'),
+ 'pmd' => N__('military drum'),
+ 'pme' => N__('metallophone'),
+ 'pnv' => N__('nail violin'),
+ 'pra' => N__('ratchet'),
+ 'prs' => N__('rain stick'),
+ 'prt' => N__('roto-toms'),
+ 'psc' => N__('sizzle cymbals'),
+ 'pse' => N__('sound-effect instrument'),
+ 'psl' => N__('slit-drum'),
+ 'psm' => N__('sistrum'),
+ 'psn' => N__('siren'),
+ 'psp' => N__('sandpaper'),
+ 'pss' => N__('sound sculpture'),
+ 'pst' => N__('steel drum'),
+ 'psw' => N__('switch whip'),
+ 'ptb' => N__('tabor'),
+ 'ptc' => N__('turkish crescent'),
+ 'pte' => N__('temple block'),
+ 'ptg' => N__('tuned gong'),
+ 'pti' => N__('timpani'),
+ 'ptl' => N__('triangle'),
+ 'ptm' => N__('thunder machine'),
+ 'pto' => N__('tarol'),
+ 'ptr' => N__('tambourine'),
+ 'ptt' => N__('tom-tom'),
+ 'pun' => N__('percussion - unspecified'),
+ 'pvi' => N__('vibraphone'),
+ 'pvs' => N__('vibra-slap'),
+ 'pwh' => N__('whip'),
+ 'pwm' => N__('wind machine'),
+ 'pwo' => N__('woodblocks'),
+ 'pxr' => N__('xylorimba'),
+ 'pxy' => N__('xylophone'),
+ 'pzz' => N__('percussion - other'),
+ };
+}
+
+sub electronic {
+ return {
+ 'eco' => N__('computer'),
+ 'ecs' => N__('computerized musical station'),
+ 'ect' => N__('computerized tape'),
+ 'eds' => N__('digital space device'),
+ 'eea' => N__('electro-acoustic device'),
+ 'eli' => N__('live electronic'),
+ 'ely' => N__('lyricon'),
+ 'eme' => N__('meta-instrument'),
+ 'emu' => N__('multimedial device'),
+ 'eos' => N__('oscillator'),
+ 'esp' => N__('space device'),
+ 'esy' => N__('synthesizer'),
+ 'eta' => N__('tape'),
+ 'eth' => N__('theremin'),
+ 'eun' => N__('electronic - non specified'),
+ 'ezz' => N__('electronic - other'),
+ };
+}
+
+sub misc {
+ return {
+ 'mah' => N__('aeolian harp'),
+ 'mbo' => N__('barrel organ'),
+ 'mbr' => N__('bullroarer'),
+ 'mbs' => N__('bass'),
+ 'mbw' => N__('musical bow'),
+ 'mbx' => N__('musical box'),
+ 'mck' => N__('chekker'),
+ 'mcl' => N__('musical clock'),
+ 'mco' => N__('continuo'),
+ 'mgh' => N__('glassharmonika'),
+ 'mgt' => N__('glass trumpet'),
+ 'mha' => N__('harmonica'),
+ 'mhg' => N__('hurdy-gurdy'),
+ 'mjh' => N__('jew\'s harp'),
+ 'mla' => N__('lamellaphone'),
+ 'mmc' => N__('monochord'),
+ 'mme' => N__('melodica'),
+ 'mmi' => N__('mirliton'),
+ 'mml' => N__('melodic instrument'),
+ 'mms' => N__('musical saw'),
+ 'moc' => N__('ocarina'),
+ 'mpo' => N__('polyphonic instrument'),
+ 'mpp' => N__('player piano'),
+ 'mra' => N__('rabāb'),
+ 'mss' => N__('sound sculpture'),
+ 'msw' => N__('swanee whistle'),
+ 'mtf' => N__('tuning-fork'),
+ 'mui' => N__('instrument - non specified'),
+ 'mun' => N__('instrument or voice - non specified'),
+ 'mwd' => N__('wind instrument'),
+ 'mwh' => N__('whistle'),
+ 'mzz' => N__('other'),
+ };
+}
+
+sub choruses {
+ return {
+ 'cch' => N__('children\'s choir'),
+ 'cme' => N__('men\'s choir'),
+ 'cmi' => N__('mixed choir'),
+ 'cre' => N__('reciting choir'),
+ 'cun' => N__('choir - unspecified'),
+ 'cve' => N__('vocal ensemble'),
+ 'cwo' => N__('women\'s choir'),
+ 'czz' => N__('choir - other'),
+ };
+}
+
+sub orchestras {
+ return {
+ 'oba' => N__('band'),
+ 'obi' => N__('big band'),
+ 'obr' => N__('brass band'),
+ 'och' => N__('chamber orchestra'),
+ 'oco' => N__('combo'),
+ 'odo' => N__('dance orchestra'),
+ 'ofu' => N__('full orchestra'),
+ 'oga' => N__('gamelan'),
+ 'oie' => N__('instrumental ensemble'),
+ 'oiv' => N__('vocal and instrumental ensemble'),
+ 'oja' => N__('jazz band'),
+ 'ope' => N__('percussion orchestra'),
+ 'orb' => N__('ragtime band'),
+ 'osb' => N__('steel band'),
+ 'ost' => N__('string orchestra'),
+ 'oun' => N__('orchestra - unspecified'),
+ 'owi' => N__('wind orchestra'),
+ 'ozz' => N__('orchestra - other'),
+ };
+}
+
+sub conductors {
+ return {
+ 'qce' => N__('live electronic conductor'),
+ 'qch' => N__('choir conductor, chorus master'),
+ 'qco' => N__('conductor'),
+ 'qlc' => N__('light conductor'),
+ 'qzz' => N__('conductor - other'),
+ };
+}
+
+sub other_performers {
+ return {
+ 'zab' => N__('acrobat'),
+ 'zac' => N__('child actor'),
+ 'zas' => N__('silent actor'),
+ 'zat' => N__('actor'),
+ 'zaw' => N__('actress'),
+ 'zda' => N__('dancer'),
+ 'zel' => N__('light engineer'),
+ 'zes' => N__('sound engineer'),
+ 'zju' => N__('juggler'),
+ 'zmi' => N__('mime'),
+ 'zwp' => N__('walk-on part'),
+ 'zzz' => N__('performer - other'),
+ };
+}
+
+sub tessitura {
+ return {
+ 'a' => N__p('tessitura', 'sopranino'),
+ 'b' => N__p('tessitura', 'soprano'),
+ 'c' => N__p('tessitura', 'alto'),
+ 'd' => N__p('tessitura', 'tenor'),
+ 'e' => N__p('tessitura', 'baritone'),
+ 'f' => N__p('tessitura', 'bass'),
+ 'g' => N__p('tessitura', 'contrabass'),
+ 'h' => N__p('tessitura', 'sub-contrabass'),
+ 'i' => N__p('tessitura', 'sopracute'),
+ 'j' => N__p('tessitura', 'high'),
+ 'k' => N__p('tessitura', 'medium'),
+ 'l' => N__p('tessitura', 'low'),
+ 'm' => N__p('tessitura', 'prepared'),
+ };
+}
+
+sub number_of_hands_or_keys {
+ return {
+ '1' => N__p('music', 'one hand'),
+ '2' => N__p('music', 'two players on one instrument'),
+ '3' => N__p('music', 'three hands'),
+ '4' => N__p('music', 'four hands'),
+ '6' => N__p('music', 'six hands'),
+ '8' => N__p('music', 'eight hands'),
+ 'a' => N__p('music', 'A'),
+ 'b' => N__p('music', 'B flat'),
+ 'c' => N__p('music', 'C'),
+ 'd' => N__p('music', 'D'),
+ 'e' => N__p('music', 'E'),
+ 'f' => N__p('music', 'F'),
+ 'g' => N__p('music', 'G'),
+ 'h' => N__p('music', 'B'),
+ 'i' => N__p('music', 'E flat'),
+ 'j' => N__p('music', 'A flat'),
+ 'k' => N__p('music', 'D flat'),
+ 'l' => N__p('music', 'F sharp'),
+ 'n' => N__p('music', 'Instrument played in non standard way'),
+ 's' => N__p('music', 'non standard string number'),
+ };
+}
+
+sub other {
+ return {
+ 'r' => N__('electric'),
+ 's' => N__('electronic'),
+ 't' => N__('midi'),
+ 'v' => N__('amplified'),
+ 'w' => N__('recorded'),
+ 'q' => N__('antiquity'),
+ 'y' => N__('ethnic, traditional'),
+ };
+}
+
+sub other2 {
+ return {
+ 'b' => N__('ad libitum'),
+ 'c' => N__('may take place of the preceding code / alternative'),
+ 'd' => N__('used by the same player as the preceding code'),
+ };
+}
+
+1;
}
sub N__ {
- return @_;
+ return $_[0];
}
sub N__n {
- return @_;
+ return $_[0];
}
sub N__p {
- return @_;
+ return $_[1];
}
sub N__np {
- return @_;
+ return $_[1];
}
sub _base_directory {
--- /dev/null
+#!/usr/bin/perl
+
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# Koha is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
+
+use Modern::Perl;
+
+use Scalar::Util;
+
+use C4::Auth qw( get_template_and_user );
+use C4::Output qw( output_html_with_http_headers );
+
+use Koha::I18N;
+use Koha::CodeList::Unimarc::MediumOfPerformance;
+
+my $builder = sub {
+ my $params = shift;
+ my $id = $params->{id};
+
+ return qq|
+<script>
+function Click$id (event) {
+ event.preventDefault();
+ const value = document.getElementById(event.data.id).value;
+ const url = new URL('/cgi-bin/koha/cataloguing/plugin_launcher.pl', location);
+ url.searchParams.set('plugin_name', 'unimarc_field_146b.pl');
+ url.searchParams.set('id', event.data.id);
+ url.searchParams.set('value', value);
+ window.open(url.toString(), 'tag_editor', 'width=700,height=700,toolbar=false,scrollbars=yes');
+}
+</script>|;
+};
+
+my $launcher = sub {
+ my $params = shift;
+ my $cgi = $params->{cgi};
+ my ( $template, $loggedinuser, $cookie ) = get_template_and_user({
+ template_name => "cataloguing/value_builder/unimarc_field_146b.tt",
+ query => $cgi,
+ type => 'intranet',
+ flagsrequired => { editcatalogue => '*' },
+ });
+
+ my @category_optgroups = (
+ { label => __('Voices'), values => Koha::CodeList::Unimarc::MediumOfPerformance->voices() },
+ { label => __('Woodwinds'), values => Koha::CodeList::Unimarc::MediumOfPerformance->woodwinds() },
+ { label => __('Brass instruments'), values => Koha::CodeList::Unimarc::MediumOfPerformance->brass() },
+ { label => __('Strings, bowed'), values => Koha::CodeList::Unimarc::MediumOfPerformance->strings_bowed() },
+ { label => __('Strings, plucked'), values => Koha::CodeList::Unimarc::MediumOfPerformance->strings_plucked() },
+ { label => __('Keyboard'), values => Koha::CodeList::Unimarc::MediumOfPerformance->keyboard() },
+ { label => __('Percussion'), values => Koha::CodeList::Unimarc::MediumOfPerformance->percussion() },
+ { label => __('Electric / electronic instruments and devices'), values => Koha::CodeList::Unimarc::MediumOfPerformance->electronic() },
+ { label => __('Miscellaneous, other, unspecified instruments'), values => Koha::CodeList::Unimarc::MediumOfPerformance->misc() },
+ { label => __('Other performers'), values => Koha::CodeList::Unimarc::MediumOfPerformance->other_performers() },
+ );
+
+ foreach my $optgroup (@category_optgroups) {
+ my $values = delete $optgroup->{values};
+ $optgroup->{options} = [
+ map {
+ { value => $_, label => __( $values->{$_} ) }
+ } sort keys %$values
+ ];
+ }
+
+ my $tessitura_hash = Koha::CodeList::Unimarc::MediumOfPerformance->tessitura();
+ my @tessitura_options = map {
+ { value => $_, label => __p('tessitura', $tessitura_hash->{$_}) }
+ } sort keys %$tessitura_hash;
+
+ my $number_of_hands_or_keys_hash = Koha::CodeList::Unimarc::MediumOfPerformance->number_of_hands_or_keys();
+ my @number_of_hands_or_keys_options = map {
+ { value => $_, label => __p('music', $number_of_hands_or_keys_hash->{$_}) }
+ } sort keys %$number_of_hands_or_keys_hash;
+
+ my $other_hash = Koha::CodeList::Unimarc::MediumOfPerformance->other();
+ my @other_options = map {
+ { value => $_, label => __($other_hash->{$_}) }
+ } sort keys %$other_hash;
+
+ my $other2_hash = Koha::CodeList::Unimarc::MediumOfPerformance->other2();
+ my @other2_options = map {
+ { value => $_, label => __($other2_hash->{$_}) }
+ } sort keys %$other2_hash;
+
+ my $value = $cgi->param('value');
+ my $number = substr($value, 0, 2);
+ unless (Scalar::Util::looks_like_number($number)) {
+ $number = '';
+ }
+ my $category = substr($value, 2, 3);
+ my $tessitura = substr($value, 5, 1);
+ my $number_of_hands_or_keys = substr($value, 6, 1);
+ my $other = substr($value, 7, 1);
+ my $other2 = substr($value, 8, 1);
+
+ $template->param(
+ id => scalar $cgi->param('id'),
+ number => $number,
+ category => $category,
+ tessitura => $tessitura,
+ number_of_hands_or_keys => $number_of_hands_or_keys,
+ other => $other,
+ other2 => $other2,
+ category_optgroups => \@category_optgroups,
+ tessitura_options => \@tessitura_options,
+ number_of_hands_or_keys_options => \@number_of_hands_or_keys_options,
+ other_options => \@other_options,
+ other2_options => \@other2_options,
+ );
+ output_html_with_http_headers $cgi, $cookie, $template->output;
+};
+
+return { builder => $builder, launcher => $launcher };
--- /dev/null
+#!/usr/bin/perl
+
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# Koha is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
+
+use Modern::Perl;
+
+use Scalar::Util;
+
+use C4::Auth qw( get_template_and_user );
+use C4::Output qw( output_html_with_http_headers );
+
+use Koha::I18N;
+use Koha::CodeList::Unimarc::MediumOfPerformance;
+
+my $builder = sub {
+ my $params = shift;
+ my $id = $params->{id};
+
+ return qq|
+<script>
+function Click$id (event) {
+ event.preventDefault();
+ const value = document.getElementById(event.data.id).value;
+ const url = new URL('/cgi-bin/koha/cataloguing/plugin_launcher.pl', location);
+ url.searchParams.set('plugin_name', 'unimarc_field_146c.pl');
+ url.searchParams.set('id', event.data.id);
+ url.searchParams.set('value', value);
+ window.open(url.toString(), 'tag_editor', 'width=700,height=700,toolbar=false,scrollbars=yes');
+}
+</script>|;
+};
+
+my $launcher = sub {
+ my $params = shift;
+ my $cgi = $params->{cgi};
+ my ( $template, $loggedinuser, $cookie ) = get_template_and_user({
+ template_name => "cataloguing/value_builder/unimarc_field_146c.tt",
+ query => $cgi,
+ type => 'intranet',
+ flagsrequired => { editcatalogue => '*' },
+ });
+
+ my @category_optgroups = (
+ { label => __('Voices'), values => Koha::CodeList::Unimarc::MediumOfPerformance->voices() },
+ { label => __('Woodwinds'), values => Koha::CodeList::Unimarc::MediumOfPerformance->woodwinds() },
+ { label => __('Brass instruments'), values => Koha::CodeList::Unimarc::MediumOfPerformance->brass() },
+ { label => __('Strings, bowed'), values => Koha::CodeList::Unimarc::MediumOfPerformance->strings_bowed() },
+ { label => __('Strings, plucked'), values => Koha::CodeList::Unimarc::MediumOfPerformance->strings_plucked() },
+ { label => __('Keyboard'), values => Koha::CodeList::Unimarc::MediumOfPerformance->keyboard() },
+ { label => __('Percussion'), values => Koha::CodeList::Unimarc::MediumOfPerformance->percussion() },
+ { label => __('Electric / electronic instruments and devices'), values => Koha::CodeList::Unimarc::MediumOfPerformance->electronic() },
+ { label => __('Miscellaneous, other, unspecified instruments'), values => Koha::CodeList::Unimarc::MediumOfPerformance->misc() },
+ { label => __('Conductors'), values => Koha::CodeList::Unimarc::MediumOfPerformance->conductors() },
+ { label => __('Other performers'), values => Koha::CodeList::Unimarc::MediumOfPerformance->other_performers() },
+ );
+
+ foreach my $optgroup (@category_optgroups) {
+ my $values = delete $optgroup->{values};
+ $optgroup->{options} = [
+ map {
+ { value => $_, label => __( $values->{$_} ) }
+ } sort keys %$values
+ ];
+ }
+
+ my $tessitura_hash = Koha::CodeList::Unimarc::MediumOfPerformance->tessitura();
+ my @tessitura_options = map {
+ { value => $_, label => __p('tessitura', $tessitura_hash->{$_}) }
+ } sort keys %$tessitura_hash;
+
+ my $number_of_hands_or_keys_hash = Koha::CodeList::Unimarc::MediumOfPerformance->number_of_hands_or_keys();
+ my @number_of_hands_or_keys_options = map {
+ { value => $_, label => __p('music', $number_of_hands_or_keys_hash->{$_}) }
+ } sort keys %$number_of_hands_or_keys_hash;
+
+ my $other_hash = Koha::CodeList::Unimarc::MediumOfPerformance->other();
+ my @other_options = map {
+ { value => $_, label => __($other_hash->{$_}) }
+ } sort keys %$other_hash;
+
+ my $other2_hash = Koha::CodeList::Unimarc::MediumOfPerformance->other2();
+ my @other2_options = map {
+ { value => $_, label => __($other2_hash->{$_}) }
+ } sort keys %$other2_hash;
+
+ my $value = $cgi->param('value');
+ my $number = substr($value, 0, 2);
+ unless (Scalar::Util::looks_like_number($number)) {
+ $number = '';
+ }
+ my $category = substr($value, 2, 3);
+ my $tessitura = substr($value, 5, 1);
+ my $number_of_hands_or_keys = substr($value, 6, 1);
+ my $other = substr($value, 7, 1);
+ my $other2 = substr($value, 8, 1);
+
+ $template->param(
+ id => scalar $cgi->param('id'),
+ number => $number,
+ category => $category,
+ tessitura => $tessitura,
+ number_of_hands_or_keys => $number_of_hands_or_keys,
+ other => $other,
+ other2 => $other2,
+ category_optgroups => \@category_optgroups,
+ tessitura_options => \@tessitura_options,
+ number_of_hands_or_keys_options => \@number_of_hands_or_keys_options,
+ other_options => \@other_options,
+ other2_options => \@other2_options,
+ );
+ output_html_with_http_headers $cgi, $cookie, $template->output;
+};
+
+return { builder => $builder, launcher => $launcher };
--- /dev/null
+#!/usr/bin/perl
+
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# Koha is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
+
+use Modern::Perl;
+
+use Scalar::Util;
+
+use C4::Auth qw( get_template_and_user );
+use C4::Output qw( output_html_with_http_headers );
+
+use Koha::I18N;
+use Koha::CodeList::Unimarc::MediumOfPerformance;
+
+my $builder = sub {
+ my $params = shift;
+ my $id = $params->{id};
+
+ return qq|
+<script>
+function Click$id (event) {
+ event.preventDefault();
+ const value = document.getElementById(event.data.id).value;
+ const url = new URL('/cgi-bin/koha/cataloguing/plugin_launcher.pl', location);
+ url.searchParams.set('plugin_name', 'unimarc_field_146d.pl');
+ url.searchParams.set('id', event.data.id);
+ url.searchParams.set('value', value);
+ window.open(url.toString(), 'tag_editor', 'width=700,height=700,toolbar=false,scrollbars=yes');
+}
+</script>|;
+};
+
+my $launcher = sub {
+ my $params = shift;
+ my $cgi = $params->{cgi};
+ my ( $template, $loggedinuser, $cookie ) = get_template_and_user({
+ template_name => "cataloguing/value_builder/unimarc_field_146d.tt",
+ query => $cgi,
+ type => 'intranet',
+ flagsrequired => { editcatalogue => '*' },
+ });
+
+ my @category_optgroups = (
+ { label => __('Choruses'), values => Koha::CodeList::Unimarc::MediumOfPerformance->choruses() },
+ { label => __('Orchestras, ensembles'), values => Koha::CodeList::Unimarc::MediumOfPerformance->orchestras() },
+ );
+
+ foreach my $optgroup (@category_optgroups) {
+ my $values = delete $optgroup->{values};
+ $optgroup->{options} = [
+ map {
+ { value => $_, label => __( $values->{$_} ) }
+ } sort keys %$values
+ ];
+ }
+
+ my $other_hash = Koha::CodeList::Unimarc::MediumOfPerformance->other();
+ my @other_options = map {
+ { value => $_, label => __($other_hash->{$_}) }
+ } sort keys %$other_hash;
+
+ my $other2_hash = Koha::CodeList::Unimarc::MediumOfPerformance->other2();
+ my @other2_options = map {
+ { value => $_, label => __($other2_hash->{$_}) }
+ } sort keys %$other2_hash;
+
+ my $value = $cgi->param('value');
+ my $number = substr($value, 0, 2);
+ unless (Scalar::Util::looks_like_number($number)) {
+ $number = '';
+ }
+ my $category = substr($value, 2, 3);
+ my $number_of_real_parts = substr($value, 5, 2);
+ unless (Scalar::Util::looks_like_number($number_of_real_parts)) {
+ $number_of_real_parts = '';
+ }
+ my $other = substr($value, 7, 1);
+ my $other2 = substr($value, 8, 1);
+
+ $template->param(
+ id => scalar $cgi->param('id'),
+ number => $number,
+ category => $category,
+ number_of_real_parts => $number_of_real_parts,
+ other => $other,
+ other2 => $other2,
+ category_optgroups => \@category_optgroups,
+ other_options => \@other_options,
+ other2_options => \@other2_options,
+ );
+ output_html_with_http_headers $cgi, $cookie, $template->output;
+};
+
+return { builder => $builder, launcher => $launcher };
--- /dev/null
+#!/usr/bin/perl
+
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# Koha is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
+
+use Modern::Perl;
+
+use Scalar::Util;
+
+use C4::Auth qw( get_template_and_user );
+use C4::Output qw( output_html_with_http_headers );
+
+use Koha::I18N;
+use Koha::CodeList::Unimarc::MediumOfPerformance;
+
+my $builder = sub {
+ my $params = shift;
+ my $id = $params->{id};
+
+ return qq|
+<script>
+function Click$id (event) {
+ event.preventDefault();
+ const value = document.getElementById(event.data.id).value;
+ const url = new URL('/cgi-bin/koha/cataloguing/plugin_launcher.pl', location);
+ url.searchParams.set('plugin_name', 'unimarc_field_146e.pl');
+ url.searchParams.set('id', event.data.id);
+ url.searchParams.set('value', value);
+ window.open(url.toString(), 'tag_editor', 'width=700,height=700,toolbar=false,scrollbars=yes');
+}
+</script>|;
+};
+
+my $launcher = sub {
+ my $params = shift;
+ my $cgi = $params->{cgi};
+ my ( $template, $loggedinuser, $cookie ) = get_template_and_user({
+ template_name => "cataloguing/value_builder/unimarc_field_146e.tt",
+ query => $cgi,
+ type => 'intranet',
+ flagsrequired => { editcatalogue => '*' },
+ });
+
+ my @category_optgroups = (
+ { label => __('Voices'), values => Koha::CodeList::Unimarc::MediumOfPerformance->voices() },
+ { label => __('Woodwinds'), values => Koha::CodeList::Unimarc::MediumOfPerformance->woodwinds() },
+ { label => __('Brass instruments'), values => Koha::CodeList::Unimarc::MediumOfPerformance->brass() },
+ { label => __('Strings, bowed'), values => Koha::CodeList::Unimarc::MediumOfPerformance->strings_bowed() },
+ { label => __('Strings, plucked'), values => Koha::CodeList::Unimarc::MediumOfPerformance->strings_plucked() },
+ { label => __('Keyboard'), values => Koha::CodeList::Unimarc::MediumOfPerformance->keyboard() },
+ { label => __('Percussion'), values => Koha::CodeList::Unimarc::MediumOfPerformance->percussion() },
+ { label => __('Electric / electronic instruments and devices'), values => Koha::CodeList::Unimarc::MediumOfPerformance->electronic() },
+ { label => __('Miscellaneous, other, unspecified instruments'), values => Koha::CodeList::Unimarc::MediumOfPerformance->misc() },
+ { label => __('Conductors'), values => Koha::CodeList::Unimarc::MediumOfPerformance->conductors() },
+ { label => __('Other performers'), values => Koha::CodeList::Unimarc::MediumOfPerformance->other_performers() },
+ );
+
+ foreach my $optgroup (@category_optgroups) {
+ my $values = delete $optgroup->{values};
+ $optgroup->{options} = [
+ map {
+ { value => $_, label => __( $values->{$_} ) }
+ } sort keys %$values
+ ];
+ }
+
+ my $tessitura_hash = Koha::CodeList::Unimarc::MediumOfPerformance->tessitura();
+ my @tessitura_options = map {
+ { value => $_, label => __p('tessitura', $tessitura_hash->{$_}) }
+ } sort keys %$tessitura_hash;
+
+ my $number_of_hands_or_keys_hash = Koha::CodeList::Unimarc::MediumOfPerformance->number_of_hands_or_keys();
+ my @number_of_hands_or_keys_options = map {
+ { value => $_, label => __p('music', $number_of_hands_or_keys_hash->{$_}) }
+ } sort keys %$number_of_hands_or_keys_hash;
+
+ my $other_hash = Koha::CodeList::Unimarc::MediumOfPerformance->other();
+ my @other_options = map {
+ { value => $_, label => __($other_hash->{$_}) }
+ } sort keys %$other_hash;
+
+ my $other2_hash = Koha::CodeList::Unimarc::MediumOfPerformance->other2();
+ my @other2_options = map {
+ { value => $_, label => __($other2_hash->{$_}) }
+ } sort keys %$other2_hash;
+
+ my $value = $cgi->param('value');
+ my $number = substr($value, 0, 2);
+ unless (Scalar::Util::looks_like_number($number)) {
+ $number = '';
+ }
+ my $category = substr($value, 2, 3);
+ my $tessitura = substr($value, 5, 1);
+ my $number_of_hands_or_keys = substr($value, 6, 1);
+ my $other = substr($value, 7, 1);
+ my $other2 = substr($value, 8, 1);
+
+ $template->param(
+ id => scalar $cgi->param('id'),
+ number => $number,
+ category => $category,
+ tessitura => $tessitura,
+ number_of_hands_or_keys => $number_of_hands_or_keys,
+ other => $other,
+ other2 => $other2,
+ category_optgroups => \@category_optgroups,
+ tessitura_options => \@tessitura_options,
+ number_of_hands_or_keys_options => \@number_of_hands_or_keys_options,
+ other_options => \@other_options,
+ other2_options => \@other2_options,
+ );
+ output_html_with_http_headers $cgi, $cookie, $template->output;
+};
+
+return { builder => $builder, launcher => $launcher };
--- /dev/null
+#!/usr/bin/perl
+
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# Koha is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
+
+use Modern::Perl;
+
+use Scalar::Util;
+
+use C4::Auth qw( get_template_and_user );
+use C4::Output qw( output_html_with_http_headers );
+
+use Koha::I18N;
+use Koha::CodeList::Unimarc::MediumOfPerformance;
+
+my $builder = sub {
+ my $params = shift;
+ my $id = $params->{id};
+
+ return qq|
+<script>
+function Click$id (event) {
+ event.preventDefault();
+ const value = document.getElementById(event.data.id).value;
+ const url = new URL('/cgi-bin/koha/cataloguing/plugin_launcher.pl', location);
+ url.searchParams.set('plugin_name', 'unimarc_field_146f.pl');
+ url.searchParams.set('id', event.data.id);
+ url.searchParams.set('value', value);
+ window.open(url.toString(), 'tag_editor', 'width=700,height=700,toolbar=false,scrollbars=yes');
+}
+</script>|;
+};
+
+my $launcher = sub {
+ my $params = shift;
+ my $cgi = $params->{cgi};
+ my ( $template, $loggedinuser, $cookie ) = get_template_and_user({
+ template_name => "cataloguing/value_builder/unimarc_field_146f.tt",
+ query => $cgi,
+ type => 'intranet',
+ flagsrequired => { editcatalogue => '*' },
+ });
+
+ my @category_optgroups = (
+ { label => __('Woodwinds'), values => Koha::CodeList::Unimarc::MediumOfPerformance->woodwinds() },
+ { label => __('Brass instruments'), values => Koha::CodeList::Unimarc::MediumOfPerformance->brass() },
+ { label => __('Strings, bowed'), values => Koha::CodeList::Unimarc::MediumOfPerformance->strings_bowed() },
+ { label => __('Strings, plucked'), values => Koha::CodeList::Unimarc::MediumOfPerformance->strings_plucked() },
+ { label => __('Keyboard'), values => Koha::CodeList::Unimarc::MediumOfPerformance->keyboard() },
+ { label => __('Percussion'), values => Koha::CodeList::Unimarc::MediumOfPerformance->percussion() },
+ { label => __('Electric / electronic instruments and devices'), values => Koha::CodeList::Unimarc::MediumOfPerformance->electronic() },
+ { label => __('Miscellaneous, other, unspecified instruments'), values => Koha::CodeList::Unimarc::MediumOfPerformance->misc() },
+ );
+
+ foreach my $optgroup (@category_optgroups) {
+ my $values = delete $optgroup->{values};
+ $optgroup->{options} = [
+ map {
+ { value => $_, label => __( $values->{$_} ) }
+ } sort keys %$values
+ ];
+ }
+
+ my $tessitura_hash = Koha::CodeList::Unimarc::MediumOfPerformance->tessitura();
+ my @tessitura_options = map {
+ { value => $_, label => __p('tessitura', $tessitura_hash->{$_}) }
+ } sort keys %$tessitura_hash;
+
+ my $number_of_hands_or_keys_hash = Koha::CodeList::Unimarc::MediumOfPerformance->number_of_hands_or_keys();
+ my @number_of_hands_or_keys_options = map {
+ { value => $_, label => __p('music', $number_of_hands_or_keys_hash->{$_}) }
+ } sort keys %$number_of_hands_or_keys_hash;
+
+ my $other_hash = Koha::CodeList::Unimarc::MediumOfPerformance->other();
+ my @other_options = map {
+ { value => $_, label => __($other_hash->{$_}) }
+ } sort keys %$other_hash;
+
+ my $other2_hash = Koha::CodeList::Unimarc::MediumOfPerformance->other2();
+ my @other2_options = map {
+ { value => $_, label => __($other2_hash->{$_}) }
+ } sort keys %$other2_hash;
+
+ my $value = $cgi->param('value');
+ my $number = substr($value, 0, 2);
+ unless (Scalar::Util::looks_like_number($number)) {
+ $number = '';
+ }
+ my $category = substr($value, 2, 3);
+ my $tessitura = substr($value, 5, 1);
+ my $number_of_hands_or_keys = substr($value, 6, 1);
+ my $other = substr($value, 7, 1);
+ my $other2 = substr($value, 8, 1);
+
+ $template->param(
+ id => scalar $cgi->param('id'),
+ number => $number,
+ category => $category,
+ tessitura => $tessitura,
+ number_of_hands_or_keys => $number_of_hands_or_keys,
+ other => $other,
+ other2 => $other2,
+ category_optgroups => \@category_optgroups,
+ tessitura_options => \@tessitura_options,
+ number_of_hands_or_keys_options => \@number_of_hands_or_keys_options,
+ other_options => \@other_options,
+ other2_options => \@other2_options,
+ );
+ output_html_with_http_headers $cgi, $cookie, $template->output;
+};
+
+return { builder => $builder, launcher => $launcher };
--- /dev/null
+[% INCLUDE 'doc-head-open.inc' %]
+<title>Framework plugin unimarc_field_146b › Cataloguing › Koha</title>
+[% INCLUDE 'doc-head-close.inc' %]
+</head>
+
+<body id="unimarc_field_146b" class="cat">
+ <div class="container-fluid">
+ <h1>Framework plugin for UNIMARC 146$b</h1>
+
+ <form class="form-horizontal" id="form">
+ <input type="hidden" id="id" name="id" value="[% id | html %]">
+
+ <div class="form-group">
+ <label for="number" class="col-sm-3 control-label">Number of instruments or voices</label>
+ <div class="col-sm-9">
+ <input inputmode="numeric" pattern="^[0-9]{0,2}$" title="a number between 0 and 99 (inclusive)" id="number" name="number" value="[% number | html %]">
+ <p class="help-block">A number between 0 and 99 (inclusive)</p>
+ </div>
+ </div>
+ <div class="form-group">
+ <label for="category" class="col-sm-3 control-label">Category of instrument or voice</label>
+ <div class="col-sm-9">
+ <select class="form-control" id="category">
+ <option value=""></option>
+ [% FOREACH optgroup IN category_optgroups %]
+ <optgroup label="[% optgroup.label | html %]">
+ [% FOREACH option IN optgroup.options %]
+ [% IF option.value == category %]
+ <option value="[% option.value | html %]" selected>[% option.value | html %] – [% option.label | html %] ([% optgroup.label | html %])</option>
+ [% ELSE %]
+ <option value="[% option.value | html %]">[% option.value | html %] – [% option.label | html %] ([% optgroup.label | html %])</option>
+ [% END %]
+ [% END %]
+ </optgroup>
+ [% END %]
+ </select>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label for="tessitura" class="col-sm-3 control-label">Tessitura</label>
+ <div class="col-sm-9">
+ <select class="form-control" id="tessitura">
+ <option value=""></option>
+ [% FOREACH option IN tessitura_options %]
+ [% IF option.value == tessitura %]
+ <option value="[% option.value | html %]" selected>[% option.value | html %] – [% option.label | html %]</option>
+ [% ELSE %]
+ <option value="[% option.value | html %]">[% option.value | html %] – [% option.label | html %]</option>
+ [% END %]
+ [% END %]
+ </select>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label for="number_of_hands_or_keys" class="col-sm-3 control-label">Number of hands / players; keys of pitched instruments</label>
+ <div class="col-sm-9">
+ <select class="form-control" id="number_of_hands_or_keys">
+ <option value=""></option>
+ [% FOREACH option IN number_of_hands_or_keys_options %]
+ [% IF option.value == number_of_hands_or_keys %]
+ <option value="[% option.value | html %]" selected>[% option.value | html %] – [% option.label | html %]</option>
+ [% ELSE %]
+ <option value="[% option.value | html %]">[% option.value | html %] – [% option.label | html %]</option>
+ [% END %]
+ [% END %]
+ </select>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label for="other" class="col-sm-3 control-label">Other (position 7)</label>
+ <div class="col-sm-9">
+ <select class="form-control" id="other">
+ <option value=""></option>
+ [% FOREACH option IN other_options %]
+ [% IF option.value == other %]
+ <option value="[% option.value | html %]" selected>[% option.value | html %] – [% option.label | html %]</option>
+ [% ELSE %]
+ <option value="[% option.value | html %]">[% option.value | html %] – [% option.label | html %]</option>
+ [% END %]
+ [% END %]
+ </select>
+ </div>
+ </div>
+ <div class="form-group">
+ <label for="other2" class="col-sm-3 control-label">Other (position 8)</label>
+ <div class="col-sm-9">
+ <select class="form-control" id="other2">
+ <option value=""></option>
+ [% FOREACH option IN other2_options %]
+ [% IF option.value == other2 %]
+ <option value="[% option.value | html %]" selected>[% option.value | html %] – [% option.label | html %]</option>
+ [% ELSE %]
+ <option value="[% option.value | html %]">[% option.value | html %] – [% option.label | html %]</option>
+ [% END %]
+ [% END %]
+ </select>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <div class="col-sm-offset-3 col-sm-9">
+ <button type="submit">OK</button>
+ <a href="#" class="cancel close">Cancel</a>
+ </div>
+ </div>
+ </form>
+ </div>
+
+ [% INCLUDE 'select2.inc' %]
+ <script>
+ $(document).ready(function () {
+ $('#category').select2();
+ });
+ </script>
+
+ <script>
+ document.getElementById('form').addEventListener('submit', function (ev) {
+ ev.preventDefault();
+ const id = document.getElementById('id').value;
+ const number = document.getElementById('number').value;
+ const category = document.getElementById('category').value;
+ const tessitura = document.getElementById('tessitura').value;
+ const number_of_hands_or_keys = document.getElementById('number_of_hands_or_keys').value;
+ const other = document.getElementById('other').value;
+ const other2 = document.getElementById('other2').value;
+ const value =
+ (number ? number.toString().padStart(2, '0') : 'uu') +
+ category.padStart(3, ' ') +
+ tessitura.padStart(1, ' ') +
+ number_of_hands_or_keys.padStart(1, ' ') +
+ other.padStart(1, ' ') +
+ other2.padStart(1, ' ');
+ opener.document.getElementById(id).value = value;
+ window.close();
+ });
+ </script>
+
+[% INCLUDE 'popup-bottom.inc' %]
--- /dev/null
+[% INCLUDE 'doc-head-open.inc' %]
+<title>Framework plugin unimarc_field_146c › Cataloguing › Koha</title>
+[% INCLUDE 'doc-head-close.inc' %]
+</head>
+
+<body id="unimarc_field_146c" class="cat">
+ <div class="container-fluid">
+ <h1>Framework plugin for UNIMARC 146$c</h1>
+
+ <form class="form-horizontal" id="form">
+ <input type="hidden" id="id" name="id" value="[% id | html %]">
+
+ <div class="form-group">
+ <label for="number" class="col-sm-3 control-label">Number of instruments or voices</label>
+ <div class="col-sm-9">
+ <input inputmode="numeric" pattern="^[0-9]{0,2}$" title="a number between 0 and 99 (inclusive)" id="number" name="number" value="[% number | html %]">
+ <p class="help-block">A number between 0 and 99 (inclusive)</p>
+ </div>
+ </div>
+ <div class="form-group">
+ <label for="category" class="col-sm-3 control-label">Category of instrument or voice</label>
+ <div class="col-sm-9">
+ <select class="form-control" id="category">
+ <option value=""></option>
+ [% FOREACH optgroup IN category_optgroups %]
+ <optgroup label="[% optgroup.label | html %]">
+ [% FOREACH option IN optgroup.options %]
+ [% IF option.value == category %]
+ <option value="[% option.value | html %]" selected>[% option.value | html %] – [% option.label | html %] ([% optgroup.label | html %])</option>
+ [% ELSE %]
+ <option value="[% option.value | html %]">[% option.value | html %] – [% option.label | html %] ([% optgroup.label | html %])</option>
+ [% END %]
+ [% END %]
+ </optgroup>
+ [% END %]
+ </select>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label for="tessitura" class="col-sm-3 control-label">Tessitura</label>
+ <div class="col-sm-9">
+ <select class="form-control" id="tessitura">
+ <option value=""></option>
+ [% FOREACH option IN tessitura_options %]
+ [% IF option.value == tessitura %]
+ <option value="[% option.value | html %]" selected>[% option.value | html %] – [% option.label | html %]</option>
+ [% ELSE %]
+ <option value="[% option.value | html %]">[% option.value | html %] – [% option.label | html %]</option>
+ [% END %]
+ [% END %]
+ </select>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label for="number_of_hands_or_keys" class="col-sm-3 control-label">Number of hands / players; keys of pitched instruments</label>
+ <div class="col-sm-9">
+ <select class="form-control" id="number_of_hands_or_keys">
+ <option value=""></option>
+ [% FOREACH option IN number_of_hands_or_keys_options %]
+ [% IF option.value == number_of_hands_or_keys %]
+ <option value="[% option.value | html %]" selected>[% option.value | html %] – [% option.label | html %]</option>
+ [% ELSE %]
+ <option value="[% option.value | html %]">[% option.value | html %] – [% option.label | html %]</option>
+ [% END %]
+ [% END %]
+ </select>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label for="other" class="col-sm-3 control-label">Other (position 7)</label>
+ <div class="col-sm-9">
+ <select class="form-control" id="other">
+ <option value=""></option>
+ [% FOREACH option IN other_options %]
+ [% IF option.value == other %]
+ <option value="[% option.value | html %]" selected>[% option.value | html %] – [% option.label | html %]</option>
+ [% ELSE %]
+ <option value="[% option.value | html %]">[% option.value | html %] – [% option.label | html %]</option>
+ [% END %]
+ [% END %]
+ </select>
+ </div>
+ </div>
+ <div class="form-group">
+ <label for="other2" class="col-sm-3 control-label">Other (position 8)</label>
+ <div class="col-sm-9">
+ <select class="form-control" id="other2">
+ <option value=""></option>
+ [% FOREACH option IN other2_options %]
+ [% IF option.value == other2 %]
+ <option value="[% option.value | html %]" selected>[% option.value | html %] – [% option.label | html %]</option>
+ [% ELSE %]
+ <option value="[% option.value | html %]">[% option.value | html %] – [% option.label | html %]</option>
+ [% END %]
+ [% END %]
+ </select>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <div class="col-sm-offset-3 col-sm-9">
+ <button type="submit">OK</button>
+ <a href="#" class="cancel close">Cancel</a>
+ </div>
+ </div>
+ </form>
+ </div>
+
+ [% INCLUDE 'select2.inc' %]
+ <script>
+ $(document).ready(function () {
+ $('#category').select2();
+ });
+ </script>
+
+ <script>
+ document.getElementById('form').addEventListener('submit', function (ev) {
+ ev.preventDefault();
+ const id = document.getElementById('id').value;
+ const number = document.getElementById('number').value;
+ const category = document.getElementById('category').value;
+ const tessitura = document.getElementById('tessitura').value;
+ const number_of_hands_or_keys = document.getElementById('number_of_hands_or_keys').value;
+ const other = document.getElementById('other').value;
+ const other2 = document.getElementById('other2').value;
+ const value =
+ (number ? number.toString().padStart(2, '0') : 'uu') +
+ category.padStart(3, ' ') +
+ tessitura.padStart(1, ' ') +
+ number_of_hands_or_keys.padStart(1, ' ') +
+ other.padStart(1, ' ') +
+ other2.padStart(1, ' ');
+ opener.document.getElementById(id).value = value;
+ window.close();
+ });
+ </script>
+
+[% INCLUDE 'popup-bottom.inc' %]
--- /dev/null
+[% INCLUDE 'doc-head-open.inc' %]
+<title>Framework plugin unimarc_field_146d › Cataloguing › Koha</title>
+[% INCLUDE 'doc-head-close.inc' %]
+</head>
+
+<body id="unimarc_field_146d" class="cat">
+ <div class="container-fluid">
+ <h1>Framework plugin for UNIMARC 146$d</h1>
+
+ <form class="form-horizontal" id="form">
+ <input type="hidden" id="id" name="id" value="[% id | html %]">
+
+ <div class="form-group">
+ <label for="number" class="col-sm-3 control-label">Number of ensembles</label>
+ <div class="col-sm-9">
+ <input inputmode="numeric" pattern="^[0-9]{0,2}$" title="a number between 0 and 99 (inclusive)" id="number" name="number" value="[% number | html %]">
+ <p class="help-block">A number between 0 and 99 (inclusive)</p>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label for="category" class="col-sm-3 control-label">Category of ensemble</label>
+ <div class="col-sm-9">
+ <select class="form-control" id="category">
+ <option value=""></option>
+ [% FOREACH optgroup IN category_optgroups %]
+ <optgroup label="[% optgroup.label | html %]">
+ [% FOREACH option IN optgroup.options %]
+ [% IF option.value == category %]
+ <option value="[% option.value | html %]" selected>[% option.value | html %] – [% option.label | html %] ([% optgroup.label | html %])</option>
+ [% ELSE %]
+ <option value="[% option.value | html %]">[% option.value | html %] – [% option.label | html %] ([% optgroup.label | html %])</option>
+ [% END %]
+ [% END %]
+ </optgroup>
+ [% END %]
+ </select>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label for="number_of_real_parts" class="col-sm-3 control-label">Number of real parts</label>
+ <div class="col-sm-9">
+ <input inputmode="numeric" pattern="^[0-9]{0,2}$" title="a number between 0 and 99 (inclusive)" id="number_of_real_parts" value="[% number_of_real_parts | html %]">
+ <p class="help-block">A number between 0 and 99 (inclusive)</p>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label for="other" class="col-sm-3 control-label">Other (position 7)</label>
+ <div class="col-sm-9">
+ <select class="form-control" id="other">
+ <option value=""></option>
+ [% FOREACH option IN other_options %]
+ [% IF option.value == other %]
+ <option value="[% option.value | html %]" selected>[% option.value | html %] – [% option.label | html %]</option>
+ [% ELSE %]
+ <option value="[% option.value | html %]">[% option.value | html %] – [% option.label | html %]</option>
+ [% END %]
+ [% END %]
+ </select>
+ </div>
+ </div>
+ <div class="form-group">
+ <label for="other2" class="col-sm-3 control-label">Other (position 8)</label>
+ <div class="col-sm-9">
+ <select class="form-control" id="other2">
+ <option value=""></option>
+ [% FOREACH option IN other2_options %]
+ [% IF option.value == other2 %]
+ <option value="[% option.value | html %]" selected>[% option.value | html %] – [% option.label | html %]</option>
+ [% ELSE %]
+ <option value="[% option.value | html %]">[% option.value | html %] – [% option.label | html %]</option>
+ [% END %]
+ [% END %]
+ </select>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <div class="col-sm-offset-3 col-sm-9">
+ <button type="submit">OK</button>
+ <a href="#" class="cancel close">Cancel</a>
+ </div>
+ </div>
+ </form>
+ </div>
+
+ [% INCLUDE 'select2.inc' %]
+ <script>
+ $(document).ready(function () {
+ $('#category').select2();
+ });
+ </script>
+
+ <script>
+ document.getElementById('form').addEventListener('submit', function (ev) {
+ ev.preventDefault();
+ const id = document.getElementById('id').value;
+ const number = document.getElementById('number').value;
+ const category = document.getElementById('category').value;
+ const number_of_real_parts = document.getElementById('number_of_real_parts').value;
+ const other = document.getElementById('other').value;
+ const other2 = document.getElementById('other2').value;
+ const value =
+ (number ? number.toString().padStart(2, '0') : 'uu') +
+ category.padStart(3, ' ') +
+ (number_of_real_parts ? number_of_real_parts.toString().padStart(2, '0') : '##') +
+ other.padStart(1, ' ') +
+ other2.padStart(1, ' ');
+ opener.document.getElementById(id).value = value;
+ window.close();
+ });
+ </script>
+
+[% INCLUDE 'popup-bottom.inc' %]
--- /dev/null
+[% INCLUDE 'doc-head-open.inc' %]
+<title>Framework plugin unimarc_field_146e › Cataloguing › Koha</title>
+[% INCLUDE 'doc-head-close.inc' %]
+</head>
+
+<body id="unimarc_field_146e" class="cat">
+ <div class="container-fluid">
+ <h1>Framework plugin for UNIMARC 146$e</h1>
+
+ <form class="form-horizontal" id="form">
+ <input type="hidden" id="id" name="id" value="[% id | html %]">
+
+ <div class="form-group">
+ <label for="number" class="col-sm-3 control-label">Number of instruments or voices</label>
+ <div class="col-sm-9">
+ <input inputmode="numeric" pattern="^[0-9]{0,2}$" title="a number between 0 and 99 (inclusive)" id="number" name="number" value="[% number | html %]">
+ <p class="help-block">A number between 0 and 99 (inclusive)</p>
+ </div>
+ </div>
+ <div class="form-group">
+ <label for="category" class="col-sm-3 control-label">Category of instrument or voice</label>
+ <div class="col-sm-9">
+ <select class="form-control" id="category">
+ <option value=""></option>
+ [% FOREACH optgroup IN category_optgroups %]
+ <optgroup label="[% optgroup.label | html %]">
+ [% FOREACH option IN optgroup.options %]
+ [% IF option.value == category %]
+ <option value="[% option.value | html %]" selected>[% option.value | html %] – [% option.label | html %] ([% optgroup.label | html %])</option>
+ [% ELSE %]
+ <option value="[% option.value | html %]">[% option.value | html %] – [% option.label | html %] ([% optgroup.label | html %])</option>
+ [% END %]
+ [% END %]
+ </optgroup>
+ [% END %]
+ </select>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label for="tessitura" class="col-sm-3 control-label">Tessitura</label>
+ <div class="col-sm-9">
+ <select class="form-control" id="tessitura">
+ <option value=""></option>
+ [% FOREACH option IN tessitura_options %]
+ [% IF option.value == tessitura %]
+ <option value="[% option.value | html %]" selected>[% option.value | html %] – [% option.label | html %]</option>
+ [% ELSE %]
+ <option value="[% option.value | html %]">[% option.value | html %] – [% option.label | html %]</option>
+ [% END %]
+ [% END %]
+ </select>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label for="number_of_hands_or_keys" class="col-sm-3 control-label">Number of hands / players; keys of pitched instruments</label>
+ <div class="col-sm-9">
+ <select class="form-control" id="number_of_hands_or_keys">
+ <option value=""></option>
+ [% FOREACH option IN number_of_hands_or_keys_options %]
+ [% IF option.value == number_of_hands_or_keys %]
+ <option value="[% option.value | html %]" selected>[% option.value | html %] – [% option.label | html %]</option>
+ [% ELSE %]
+ <option value="[% option.value | html %]">[% option.value | html %] – [% option.label | html %]</option>
+ [% END %]
+ [% END %]
+ </select>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label for="other" class="col-sm-3 control-label">Other (position 7)</label>
+ <div class="col-sm-9">
+ <select class="form-control" id="other">
+ <option value=""></option>
+ [% FOREACH option IN other_options %]
+ [% IF option.value == other %]
+ <option value="[% option.value | html %]" selected>[% option.value | html %] – [% option.label | html %]</option>
+ [% ELSE %]
+ <option value="[% option.value | html %]">[% option.value | html %] – [% option.label | html %]</option>
+ [% END %]
+ [% END %]
+ </select>
+ </div>
+ </div>
+ <div class="form-group">
+ <label for="other2" class="col-sm-3 control-label">Other (position 8)</label>
+ <div class="col-sm-9">
+ <select class="form-control" id="other2">
+ <option value=""></option>
+ [% FOREACH option IN other2_options %]
+ [% IF option.value == other2 %]
+ <option value="[% option.value | html %]" selected>[% option.value | html %] – [% option.label | html %]</option>
+ [% ELSE %]
+ <option value="[% option.value | html %]">[% option.value | html %] – [% option.label | html %]</option>
+ [% END %]
+ [% END %]
+ </select>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <div class="col-sm-offset-3 col-sm-9">
+ <button type="submit">OK</button>
+ <a href="#" class="cancel close">Cancel</a>
+ </div>
+ </div>
+ </form>
+ </div>
+
+ [% INCLUDE 'select2.inc' %]
+ <script>
+ $(document).ready(function () {
+ $('#category').select2();
+ });
+ </script>
+
+ <script>
+ document.getElementById('form').addEventListener('submit', function (ev) {
+ ev.preventDefault();
+ const id = document.getElementById('id').value;
+ const number = document.getElementById('number').value;
+ const category = document.getElementById('category').value;
+ const tessitura = document.getElementById('tessitura').value;
+ const number_of_hands_or_keys = document.getElementById('number_of_hands_or_keys').value;
+ const other = document.getElementById('other').value;
+ const other2 = document.getElementById('other2').value;
+ const value =
+ (number ? number.toString().padStart(2, '0') : 'uu') +
+ category.padStart(3, ' ') +
+ tessitura.padStart(1, ' ') +
+ number_of_hands_or_keys.padStart(1, ' ') +
+ other.padStart(1, ' ') +
+ other2.padStart(1, ' ');
+ opener.document.getElementById(id).value = value;
+ window.close();
+ });
+ </script>
+
+[% INCLUDE 'popup-bottom.inc' %]
--- /dev/null
+[% INCLUDE 'doc-head-open.inc' %]
+<title>Framework plugin unimarc_field_146e › Cataloguing › Koha</title>
+[% INCLUDE 'doc-head-close.inc' %]
+</head>
+
+<body id="unimarc_field_146f" class="cat">
+ <div class="container-fluid">
+ <h1>Framework plugin for UNIMARC 146$f</h1>
+
+ <form class="form-horizontal" id="form">
+ <input type="hidden" id="id" name="id" value="[% id | html %]">
+
+ <div class="form-group">
+ <label for="number" class="col-sm-3 control-label">Number of instruments</label>
+ <div class="col-sm-9">
+ <input inputmode="numeric" pattern="^[0-9]{0,2}$" title="a number between 0 and 99 (inclusive)" id="number" name="number" value="[% number | html %]">
+ <p class="help-block">A number between 0 and 99 (inclusive)</p>
+ </div>
+ </div>
+ <div class="form-group">
+ <label for="category" class="col-sm-3 control-label">Category of instrument</label>
+ <div class="col-sm-9">
+ <select class="form-control" id="category">
+ <option value=""></option>
+ [% FOREACH optgroup IN category_optgroups %]
+ <optgroup label="[% optgroup.label | html %]">
+ [% FOREACH option IN optgroup.options %]
+ [% IF option.value == category %]
+ <option value="[% option.value | html %]" selected>[% option.value | html %] – [% option.label | html %] ([% optgroup.label | html %])</option>
+ [% ELSE %]
+ <option value="[% option.value | html %]">[% option.value | html %] – [% option.label | html %] ([% optgroup.label | html %])</option>
+ [% END %]
+ [% END %]
+ </optgroup>
+ [% END %]
+ </select>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label for="tessitura" class="col-sm-3 control-label">Tessitura</label>
+ <div class="col-sm-9">
+ <select class="form-control" id="tessitura">
+ <option value=""></option>
+ [% FOREACH option IN tessitura_options %]
+ [% IF option.value == tessitura %]
+ <option value="[% option.value | html %]" selected>[% option.value | html %] – [% option.label | html %]</option>
+ [% ELSE %]
+ <option value="[% option.value | html %]">[% option.value | html %] – [% option.label | html %]</option>
+ [% END %]
+ [% END %]
+ </select>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label for="number_of_hands_or_keys" class="col-sm-3 control-label">Number of hands / players; keys of pitched instruments</label>
+ <div class="col-sm-9">
+ <select class="form-control" id="number_of_hands_or_keys">
+ <option value=""></option>
+ [% FOREACH option IN number_of_hands_or_keys_options %]
+ [% IF option.value == number_of_hands_or_keys %]
+ <option value="[% option.value | html %]" selected>[% option.value | html %] – [% option.label | html %]</option>
+ [% ELSE %]
+ <option value="[% option.value | html %]">[% option.value | html %] – [% option.label | html %]</option>
+ [% END %]
+ [% END %]
+ </select>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <label for="other" class="col-sm-3 control-label">Other (position 7)</label>
+ <div class="col-sm-9">
+ <select class="form-control" id="other">
+ <option value=""></option>
+ [% FOREACH option IN other_options %]
+ [% IF option.value == other %]
+ <option value="[% option.value | html %]" selected>[% option.value | html %] – [% option.label | html %]</option>
+ [% ELSE %]
+ <option value="[% option.value | html %]">[% option.value | html %] – [% option.label | html %]</option>
+ [% END %]
+ [% END %]
+ </select>
+ </div>
+ </div>
+ <div class="form-group">
+ <label for="other2" class="col-sm-3 control-label">Other (position 8)</label>
+ <div class="col-sm-9">
+ <select class="form-control" id="other2">
+ <option value=""></option>
+ [% FOREACH option IN other2_options %]
+ [% IF option.value == other2 %]
+ <option value="[% option.value | html %]" selected>[% option.value | html %] – [% option.label | html %]</option>
+ [% ELSE %]
+ <option value="[% option.value | html %]">[% option.value | html %] – [% option.label | html %]</option>
+ [% END %]
+ [% END %]
+ </select>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <div class="col-sm-offset-3 col-sm-9">
+ <button type="submit">OK</button>
+ <a href="#" class="cancel close">Cancel</a>
+ </div>
+ </div>
+ </form>
+ </div>
+
+ [% INCLUDE 'select2.inc' %]
+ <script>
+ $(document).ready(function () {
+ $('#category').select2();
+ });
+ </script>
+
+ <script>
+ document.getElementById('form').addEventListener('submit', function (ev) {
+ ev.preventDefault();
+ const id = document.getElementById('id').value;
+ const number = document.getElementById('number').value;
+ const category = document.getElementById('category').value;
+ const tessitura = document.getElementById('tessitura').value;
+ const number_of_hands_or_keys = document.getElementById('number_of_hands_or_keys').value;
+ const other = document.getElementById('other').value;
+ const other2 = document.getElementById('other2').value;
+ const value =
+ (number ? number.toString().padStart(2, '0') : 'uu') +
+ category.padStart(3, ' ') +
+ tessitura.padStart(1, ' ') +
+ number_of_hands_or_keys.padStart(1, ' ') +
+ other.padStart(1, ' ') +
+ other2.padStart(1, ' ');
+ opener.document.getElementById(id).value = value;
+ window.close();
+ });
+ </script>
+
+[% INCLUDE 'popup-bottom.inc' %]