Bugzilla – Attachment 16169 Details for
Bug 906
ISBN Check
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 906 - ISBN Check
Bug-906---ISBN-Check.patch (text/plain), 8.52 KB, created by
Tomás Cohen Arazi (tcohen)
on 2013-03-15 19:22:05 UTC
(
hide
)
Description:
Bug 906 - ISBN Check
Filename:
MIME Type:
Creator:
Tomás Cohen Arazi (tcohen)
Created:
2013-03-15 19:22:05 UTC
Size:
8.52 KB
patch
obsolete
>From 361a64eb020cb7e0528b505930bfcf794186fb6d Mon Sep 17 00:00:00 2001 >From: Tomas Cohen Arazi <tomascohen@gmail.com> >Date: Fri, 15 Mar 2013 16:03:51 -0300 >Subject: [PATCH] Bug 906 - ISBN Check > >In the MARC editor, have the ISBN checked. This feature is syspref-driven [1]. >The patch adds the following javascript functions to cataloguing/addbiblio.tt: > > - _NormalizeISBN (for sanitizing the ISBN before algorithm checking) > - _CheckISBNChecksum10 (for validating the checksum digit) > - _CheckISBNChecksum13 (idem) > - IsISBNOk (extract the isbn from the corresponding field, call the proper checker functions, return the string message) > >The Check function was hooked to call IsISBNOk and build a proper message dialog. AreMandatoriesNotOk got its message string rearranged too. > >To test: >- Apply the patch, run updatedatabase.pl so the new syspref gets included on the DB. >- Try adding a record: no matter what you introduce on the corresponding ISBN field Koha will behave as usual. >- Go to the Sysprefs editor, under 'Cataloguing' set RequireValidISBN to 'Require'. >- Reload your marc editor >- Try different ISBN to see how it behaves: > -- test cases -- > * Empty ISBN should not stop you from saving your record. > * Valid ISBN idem [2]. > * Wrong ISBN should make Koha warn you and ask you to fix it [3]. > >[1] Added RequireValidISBN syspref. >[2] Valid ISBN10: 291409891X > ISBN13: 9784873113685 >[3] Try To+ >--- > cataloguing/addbiblio.pl | 3 +- > installer/data/mysql/sysprefs.sql | 1 + > installer/data/mysql/updatedatabase.pl | 10 ++ > .../en/modules/admin/preferences/cataloguing.pref | 6 ++ > .../prog/en/modules/cataloguing/addbiblio.tt | 104 +++++++++++++++++++- > 5 files changed, 119 insertions(+), 5 deletions(-) > >diff --git a/cataloguing/addbiblio.pl b/cataloguing/addbiblio.pl >index 3314f1a..bde5716 100755 >--- a/cataloguing/addbiblio.pl >+++ b/cataloguing/addbiblio.pl >@@ -987,7 +987,8 @@ $template->param( > popup => $mode, > frameworkcode => $frameworkcode, > itemtype => $frameworkcode, >- borrowernumber => $loggedinuser, >+ borrowernumber => $loggedinuser, >+ RequireValidISBN => C4::Context->preference("RequireValidISBN") > ); > > output_html_with_http_headers $input, $cookie, $template->output; >diff --git a/installer/data/mysql/sysprefs.sql b/installer/data/mysql/sysprefs.sql >index cad409c..83ebac3 100644 >--- a/installer/data/mysql/sysprefs.sql >+++ b/installer/data/mysql/sysprefs.sql >@@ -418,3 +418,4 @@ INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES(' > INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('Persona',0,'Use Mozilla Persona for login','','YesNo'); > INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('OpacItemLocation','callnum','Show the shelving location of items in the opac','callnum|ccode|location','Choice'); > INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('TrackClicks','0','Track links clicked',NULL,'Integer'); >+INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES('RequireValidISBN',0,'Require a valid ISBN',NULL,'YesNo'); >diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl >index 317680a..8f5bf6a 100755 >--- a/installer/data/mysql/updatedatabase.pl >+++ b/installer/data/mysql/updatedatabase.pl >@@ -6505,6 +6505,16 @@ if ( CheckVersion($DBversion) ) { > SetVersion($DBversion); > } > >+$DBversion = "3.11.00.XXX"; >+if ( CheckVersion($DBversion) ) { >+ $dbh->do(q{ >+ INSERT INTO systempreferences (variable,value,explanation,options,type) >+ VALUES('RequireValidISBN', '0', 'Require a valid ISBN',NULL,'YesNo') >+ }); >+ print "Upgrade to $DBversion done (Bug 906: ISBN Check)\n"; >+ SetVersion($DBversion); >+} >+ > =head1 FUNCTIONS > > =head2 TableExists($table) >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref >index 96f3603..6146e68 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/cataloguing.pref >@@ -109,6 +109,12 @@ Cataloging: > - pref: UNIMARCField100Language > class: short > - as default language in the UNIMARC field 100 when creating a new record or in the field plugin. >+ - >+ - pref: RequireValidISBN >+ choices: >+ yes: Require >+ no: Don't require >+ - a valid ISBN. > Display: > - > - 'Separate multiple displayed authors, series or subjects with ' >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt >index 7e439bf..0ace809 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt >@@ -135,6 +135,90 @@ function showMARCdocLinks() { > $.cookie("marcdocs_[% borrowernumber %]",'true', { path: "/", expires: 365 }); > } > >+/* >+ * Functions to check ISBN validity >+ */ >+ >+function _NormalizeISBN(isbn) { >+ // remove non-word characters >+ var normalized_isbn = isbn.replace(/\W|_/g,''); >+ // we want upper-case 'X' >+ return normalized_isbn.toUpperCase(); >+} >+ >+function _CheckISBNChecksum10(isbn) { >+ >+ var sum = 0; >+ var i,r; >+ >+ if ( isbn.match(/\d{10}|^\d{9}X$/) ) { >+ // its a 10 digit string, it might end with X >+ for ( i=0; i<9; i++ ) { >+ sum += (i+1) * parseInt(isbn[i],10); >+ } >+ r = sum % 11; >+ if ( r == 10 && isbn[9] == 'X' || >+ r == isbn[9] ) { >+ return isbn; >+ } >+ } >+ return null; >+} >+ >+function _CheckISBNChecksum13(isbn) { >+ >+ var sum = 0; >+ var i,r; >+ >+ if ( isbn.match(/^\d{13}$/) ) { >+ for (i=0;i<12;i++) { >+ if ( (i+1) % 2 == 0 ) { >+ // even >+ sum += 3 * parseInt(isbn[i],10); >+ } else { >+ // odd >+ sum += parseInt(isbn[i],10); >+ } >+ } >+ r = (10 - (sum % 10)) % 10; >+ if ( r == isbn[12] ) { >+ return isbn; >+ } >+ } >+ return null; >+} >+ >+function IsISBNOk() { >+ >+ var isbn; >+ var isbn_field; >+[% IF ( marcflavour == 'MARC21' || marcflavour == 'NORMARC' ) %] >+ isbn = $('input[id^="tag_020_subfield_a"]').val(); >+ isbn_field = "020"; >+[% ELSIF ( marcflavour == 'UNIMARC' ) %] >+ isbn = $('input[id^="tag_010_subfield_a"]').val(); >+ isbn_field = "010"; >+[% END %] >+ var normalized_isbn = _NormalizeISBN(isbn); >+ >+ if ( normalized_isbn.length == 13 ) { >+ if ( normalized_isbn == _CheckISBNChecksum13(normalized_isbn) ) { >+ return 0; >+ } >+ } else if ( normalized_isbn.length == 10 ) { >+ if ( normalized_isbn == _CheckISBNChecksum10(normalized_isbn) ) { >+ return 0; >+ } >+ } else if ( normalized_isbn.length == 0 ) { >+ // no ISBN, no check >+ return 0; >+ } >+ // Invalid ISBN >+ var StrAlert = "- "+_("The ISBN you entered seems invalid. If you entered it exactly ")+"\n"; >+ StrAlert += _("as it appears on the item, put it in ") + isbn_field + "$z."; >+ return StrAlert; >+} >+ > /** > * check if mandatory subfields are written > */ >@@ -158,8 +242,8 @@ function AreMandatoriesNotOk(){ > [% END %] > [% END %] > [% END %] >- var StrAlert = _("Can't save this record because the following field aren't filled:"); >- StrAlert += "\n\n"; >+ var StrAlert = "- "+_("The following fields aren't filled:"); >+ StrAlert += "\n"; > for(var i=0,len=mandatories.length; i<len ; i++){ > var tag=mandatories[i].substr(4,3); > var subfield=mandatories[i].substr(17,1); >@@ -249,11 +333,23 @@ function AreMandatoriesNotOk(){ > * > */ > function Check(){ >- var StrAlert = AreMandatoriesNotOk(); >- if( ! StrAlert ){ >+ var StrAlert = _("Can't save this record\n"); >+ var StrMandatoriesNotOk = AreMandatoriesNotOk(); >+[% IF ( RequireValidISBN ) %] >+ var StrISBNNotOk = IsISBNOk(); >+ if( ! StrMandatoriesNotOk && ! StrISBNNotOk ){ >+[% ELSE %] >+ if( ! StrMandatoriesNotOk ){ >+[% END %] > document.f.submit(); > return true; > } else { >+ if ( StrMandatoriesNotOk ) >+ StrAlert += StrMandatoriesNotOk; >+[% IF ( RequireValidISBN ) %] >+ if ( StrISBNNotOk ) >+ StrAlert += StrISBNNotOk; >+[% END %] > alert(StrAlert); > return false; > } >-- >1.7.10.4
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 906
:
16169
|
16170
|
16178