From 10973921c30c3c9ee7b41eebadbbc44fcd85bf6b Mon Sep 17 00:00:00 2001
From: Juan Romay Sieira <juan.sieira@xercode.es>
Date: Thu, 21 Jun 2012 12:03:36 +0200
Subject: [PATCH] Bug 6138 - Show local help and isbd punctuation automatically when we are cataloguing
Content-Type: text/plain; charset="utf-8"

---
 C4/Biblio.pm                                       |    8 ++-
 admin/marc_subfields_structure.pl                  |   16 +++++-
 cataloguing/addbiblio.pl                           |   11 ++++
 installer/data/mysql/kohastructure.sql             |    2 +
 installer/data/mysql/updatedatabase.pl             |    9 +++
 koha-tmpl/intranet-tmpl/prog/en/css/addbiblio.css  |    5 ++
 koha-tmpl/intranet-tmpl/prog/en/js/staff-global.js |   55 ++++++++++++++++++++
 .../en/modules/admin/marc_subfields_structure.tt   |    4 ++
 .../prog/en/modules/cataloguing/addbiblio.tt       |    8 +++
 9 files changed, 113 insertions(+), 5 deletions(-)

diff --git a/C4/Biblio.pm b/C4/Biblio.pm
index 1ab4fff..c31e6d1 100644
--- a/C4/Biblio.pm
+++ b/C4/Biblio.pm
@@ -1082,7 +1082,7 @@ sub GetMarcStructure {
     }
 
     $sth = $dbh->prepare(
-        "SELECT tagfield,tagsubfield,liblibrarian,libopac,tab,mandatory,repeatable,authorised_value,authtypecode,value_builder,kohafield,seealso,hidden,isurl,link,defaultvalue,maxlength
+        "SELECT tagfield,tagsubfield,liblibrarian,libopac,tab,mandatory,repeatable,authorised_value,authtypecode,value_builder,kohafield,seealso,hidden,isurl,link,defaultvalue,maxlength,punctuation,help
          FROM   marc_subfield_structure 
          WHERE  frameworkcode=? 
          ORDER BY tagfield,tagsubfield
@@ -1102,11 +1102,13 @@ sub GetMarcStructure {
     my $link;
     my $defaultvalue;
     my $maxlength;
+    my $punctuation;
+    my $help;
 
     while (
         (   $tag,          $subfield,      $liblibrarian, $libopac, $tab,    $mandatory, $repeatable, $authorised_value,
             $authtypecode, $value_builder, $kohafield,    $seealso, $hidden, $isurl,     $link,       $defaultvalue,
-            $maxlength
+            $maxlength,    $punctuation,   $help
         )
         = $sth->fetchrow
       ) {
@@ -1124,6 +1126,8 @@ sub GetMarcStructure {
         $res->{$tag}->{$subfield}->{'link'}           = $link;
         $res->{$tag}->{$subfield}->{defaultvalue}     = $defaultvalue;
         $res->{$tag}->{$subfield}->{maxlength}        = $maxlength;
+        $res->{$tag}->{$subfield}->{punctuation}      = $punctuation;
+        $res->{$tag}->{$subfield}->{help}             = $help;
     }
 
     $marc_structure_cache->{$forlibrarian}->{$frameworkcode} = $res;
diff --git a/admin/marc_subfields_structure.pl b/admin/marc_subfields_structure.pl
index bc6636a..44c162d 100755
--- a/admin/marc_subfields_structure.pl
+++ b/admin/marc_subfields_structure.pl
@@ -180,6 +180,8 @@ if ( $op eq 'add_form' ) {
         my %row_data;    # get a fresh hash for the row data
         $row_data{defaultvalue} = $data->{defaultvalue};
         $row_data{maxlength} = $data->{maxlength};
+        $row_data{punctuation} = $data->{'punctuation'};
+        $row_data{help}        = CGI::escapeHTML( $data->{'help'} );
         $row_data{tab} = CGI::scrolling_list(
             -name   => 'tab',
             -id     => "tab$i",
@@ -386,11 +388,11 @@ elsif ( $op eq 'add_validate' ) {
 #                                     values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"
 #     );
     my $sth_insert = $dbh->prepare(qq{
-        insert into marc_subfield_structure (tagfield,tagsubfield,liblibrarian,libopac,repeatable,mandatory,kohafield,tab,seealso,authorised_value,authtypecode,value_builder,hidden,isurl,frameworkcode, link,defaultvalue,maxlength)
-        values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
+        insert into marc_subfield_structure (tagfield,tagsubfield,liblibrarian,libopac,repeatable,mandatory,kohafield,tab,seealso,authorised_value,authtypecode,value_builder,hidden,isurl,frameworkcode, link,defaultvalue,maxlength,punctuation,help)
+        values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
     });
     my $sth_update = $dbh->prepare(qq{
-        update marc_subfield_structure set tagfield=?, tagsubfield=?, liblibrarian=?, libopac=?, repeatable=?, mandatory=?, kohafield=?, tab=?, seealso=?, authorised_value=?, authtypecode=?, value_builder=?, hidden=?, isurl=?, frameworkcode=?,  link=?, defaultvalue=?, maxlength=?
+        update marc_subfield_structure set tagfield=?, tagsubfield=?, liblibrarian=?, libopac=?, repeatable=?, mandatory=?, kohafield=?, tab=?, seealso=?, authorised_value=?, authtypecode=?, value_builder=?, hidden=?, isurl=?, frameworkcode=?,  link=?, defaultvalue=?, maxlength=?, punctuation=?, help=?
         where tagfield=? and tagsubfield=? and frameworkcode=?
     });
     my @tagsubfield       = $input->param('tagsubfield');
@@ -406,6 +408,8 @@ elsif ( $op eq 'add_validate' ) {
     my @link              = $input->param('link');
     my @defaultvalue      = $input->param('defaultvalue');
     my @maxlength         = $input->param('maxlength');
+    my @punctuation       = $input->param('punctuation');
+    my @help              = $input->param('help');
     
     for ( my $i = 0 ; $i <= $#tagsubfield ; $i++ ) {
         my $tagfield    = $input->param('tagfield');
@@ -427,6 +431,8 @@ elsif ( $op eq 'add_validate' ) {
         my $link   = $link[$i];
         my $defaultvalue = $defaultvalue[$i];
         my $maxlength = $maxlength[$i];
+        my $punctuation      = $punctuation[$i];
+        my $help             = $help[$i];
         
         if (defined($liblibrarian) && $liblibrarian ne "") {
             unless ( C4::Context->config('demo') eq 1 ) {
@@ -450,6 +456,8 @@ elsif ( $op eq 'add_validate' ) {
                         $link,
                         $defaultvalue,
                         $maxlength,
+                        $punctuation,
+                        $help,
                         (
                             $tagfield,
                             $tagsubfield,
@@ -476,6 +484,8 @@ elsif ( $op eq 'add_validate' ) {
                         $link,
                         $defaultvalue,
                         $maxlength,
+                        $punctuation,
+                        $help,
                     );
                 }
             }
diff --git a/cataloguing/addbiblio.pl b/cataloguing/addbiblio.pl
index 643fc53..e45ef3f 100755
--- a/cataloguing/addbiblio.pl
+++ b/cataloguing/addbiblio.pl
@@ -328,6 +328,8 @@ sub create_input {
         id             => "tag_".$tag."_subfield_".$id_subfield."_".$index_tag."_".$index_subfield,
         value          => $value,
         maxlength      => $tagslib->{$tag}->{$subfield}->{maxlength},
+        punctuation    => $tagslib->{$tag}->{$subfield}->{punctuation},
+        help           => $tagslib->{$tag}->{$subfield}->{help},
         random         => CreateKey(),
     );
 
@@ -489,11 +491,20 @@ sub create_input {
                         name=\"".$subfield_data{id}."\"
                         value=\"$value\"
                         tabindex=\"1\"
+                        punctuation=\"".$subfield_data{punctuation}."\"
                         size=\"67\"
                         maxlength=\"".$subfield_data{maxlength}."\"
                         class=\"input_marceditor\"
+                        onfocus=\"javascript:GetPunctuation(this);\"
+                        onblur=\"javascript:CheckPunctuation(this);\"
                 \/>
                 ";
+                if ($subfield_data{help}){
+                   $subfield_data{marc_value} .= "
+                   &nbsp;<a class=\"showhelp\" href=\"#help_" . $subfield_data{id} . "\">Show help</a>
+                   <div class=\"divsubfieldhelp\" id=\"help_" . $subfield_data{id} . "\" style=\"display:none; clear: both\">&nbsp;<i>" . $subfield_data{help} . "</i></div>
+                   ";
+               }
         }
     }
     $subfield_data{'index_subfield'} = $index_subfield;
diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql
index 54498c3..0d313e4 100644
--- a/installer/data/mysql/kohastructure.sql
+++ b/installer/data/mysql/kohastructure.sql
@@ -1213,6 +1213,8 @@ CREATE TABLE `marc_subfield_structure` (
   `link` varchar(80) default NULL,
   `defaultvalue` text default NULL,
   `maxlength` int(4) NOT NULL DEFAULT '9999',
+  `punctuation` varchar(5) default NULL,
+  `help` varchar(255) default NULL, 
   PRIMARY KEY  (`frameworkcode`,`tagfield`,`tagsubfield`),
   KEY `kohafield_2` (`kohafield`),
   KEY `tab` (`frameworkcode`,`tab`),
diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl
index d06a188..921691f 100755
--- a/installer/data/mysql/updatedatabase.pl
+++ b/installer/data/mysql/updatedatabase.pl
@@ -5392,6 +5392,15 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
     SetVersion ($DBversion);
 }
 
+$DBversion = "3.09.00.XXX";
+if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
+   $dbh->do("
+       ALTER TABLE `marc_subfield_structure` ADD `punctuation` VARCHAR( 5 ) NULL , ADD `help` VARCHAR( 255 ) NULL;
+       ");
+    print "Upgrade to $DBversion done (Punctuation and cataloguing help)\n";
+    SetVersion($DBversion);
+}
+
 =head1 FUNCTIONS
 
 =head2 TableExists($table)
diff --git a/koha-tmpl/intranet-tmpl/prog/en/css/addbiblio.css b/koha-tmpl/intranet-tmpl/prog/en/css/addbiblio.css
index d2489b3..a1c0860 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/css/addbiblio.css
+++ b/koha-tmpl/intranet-tmpl/prog/en/css/addbiblio.css
@@ -83,6 +83,11 @@ a.tagnum {
 	text-decoration : none;
 }
 
+.divsubfieldhelp {
+       background-color: #F0FFEF; 
+       border: #EFEFEF 1px solid;
+}
+
 .subfield {
 	color : #00698a;
 	float: left;
diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/staff-global.js b/koha-tmpl/intranet-tmpl/prog/en/js/staff-global.js
index 58fd190..b58a1d0 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/js/staff-global.js
+++ b/koha-tmpl/intranet-tmpl/prog/en/js/staff-global.js
@@ -109,3 +109,58 @@ function openWindow(link,name,width,height) {
     height = (typeof height == "undefined")?'400':height;
     var newin=window.open(link,name,'width='+width+',height='+height+',resizable=yes,toolbar=false,scrollbars=yes,top');
 }
+
+/*
+ * Place punctuation when cataloguing
+ */
+
+function trim(s) {
+  while (s.length>0 && (s[0]==' '||s[0]=='\n')) s=s.substring(1, s.length);
+  while (s.length>0 && (s[s.length-1]==' '||s[s.length-1]=='\n')) s=s.substring(0, s.length-1);
+  while (s.search (" ") != -1){
+       s = s.replace (" ","");
+       }
+  return s; 
+}
+
+/*
+ * Place the cursor in a determinate place into a textbox
+*/
+
+function placePositionTextbox(elem, myPos) {
+
+    if(elem != null) {
+        if(elem.createTextRange) {
+            var range = elem.createTextRange();
+            range.move('character', myPos);
+            range.select();
+        }
+        else {
+            if(elem.selectionStart) {
+                elem.focus();
+                elem.setSelectionRange(myPos, myPos);
+            }
+            else
+                elem.focus();
+        }
+    }
+}
+
+function GetPunctuation(field){
+       var val = field.value;
+       if (trim(val) == ""){
+               field.value = field.getAttribute('punctuation');
+               placePositionTextbox(field,field.value.length);
+       }
+}
+
+function CheckPunctuation(field){
+       var val = field.value;
+       if (val == field.getAttribute('punctuation')){
+               field.value = "";
+       }
+}
+
+/*
+ * END - Place punctuation when cataloguing
+ */
\ No newline at end of file
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/marc_subfields_structure.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/marc_subfields_structure.tt
index a0177db..03b4a47 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/marc_subfields_structure.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/marc_subfields_structure.tt
@@ -110,6 +110,10 @@ $(document).ready(function() {
 				<legend>Advanced constraints:</legend>
                 <ol><li><label for="defaultvalue[% loo.row %]">Default value:</label>
                     <input type="text" name="defaultvalue" id="defaultvalue[% loo.row %]" value="[% loo.defaultvalue %]" /></li>
+                    <li><label for="punctuation[% loo.row %]">Punctuation:</label>
+                        <input type="text" name="punctuation" id="punctuation[% loo.row %]" value="[% loo.punctuation %]" /></li>
+                    <li><label for="help[% loo.row %]">Help:</label><br/>
+                       <textarea type="text" name="help" id="help[% loo.row %]" cols="40">[% loo.help %]</textarea></li>
 				<li><label for="maxlength[% loo.row %]">Max length:</label><input type="text" id="maxlength[% loo.row %]" name="maxlength" value="[% loo.maxlength %]" size="4" /> (see online help)</li>
                 <li><label for="hidden[% loo.row %]">hidden</label><input type="text" id="hidden[% loo.row %]" name="hidden" value="[% loo.hidden %]" size="2" /> (see online help)</li>
                 <li><label for="isurl[% loo.row %]">Is a URL:</label>[% loo.isurl %] (if checked, it means that the subfield is a URL and can be clicked)</li>
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 f934fbe..aa9a408 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt
@@ -19,6 +19,14 @@
                 fields_in_use[field_id] = 1;
             }
         });
+	    $("a.showhelp").click(function(){
+	       $("#"+$(this).attr("href").replace("#","")).toggle();
+	           if($(this).html() == "Show help"){
+	               $(this).html("Hide help");
+	           } else {
+	               $(this).html("Show help");
+	           }
+	     });
         $('.subfield_line').each(function() {
             var field_id = this.getAttribute('id').substring(0, 12);
             if (field_id in fields_in_use) {
-- 
1.7.1