Merge remote-tracking branch 'origin/new/bug_8268'
[koha.git] / authorities / authorities.pl
index 9eb205d..5b6afbd 100755 (executable)
 # 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, write to the Free Software Foundation, Inc., 59 Temple Place,
-# Suite 330, Boston, MA  02111-1307 USA
+# You should have received a copy of the GNU General Public License along
+# with Koha; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
 use strict;
+use warnings;
 use CGI;
 use C4::Auth;
 use C4::Output;
@@ -36,17 +37,22 @@ use vars qw( $is_a_modif );
 my $itemtype; # created here because it can be used in build_authorized_values_list sub
 our($authorised_values_sth,$is_a_modif,$usedTagsLib,$mandatory_z3950);
 
+=head1 FUNCTIONS
+
+=over
+
 =item build_authorized_values_list
 
+builds list, depending on authorised value...
+
 =cut
 
-sub build_authorized_values_list ($$$$$$$) {
+sub build_authorized_values_list {
     my ( $tag, $subfield, $value, $dbh, $authorised_values_sth,$index_tag,$index_subfield ) = @_;
 
     my @authorised_values;
     my %authorised_lib;
 
-    # builds list, depending on authorised value...
 
     #---- branch
     if ( $tagslib->{$tag}->{$subfield}->{'authorised_value'} eq "branches" ) {
@@ -110,7 +116,9 @@ sub build_authorized_values_list ($$$$$$$) {
 
 
 =item create_input
+
 builds the <input ...> entry for a subfield.
+
 =cut
 
 sub create_input {
@@ -129,8 +137,11 @@ sub create_input {
     }
 
     # if there is no value provided but a default value in parameters, get it
-    unless ($value) {
+    if ($value eq '') {
         $value = $tagslib->{$tag}->{$subfield}->{defaultvalue};
+        if (!defined $value) {
+            $value = q{};
+        }
 
         # get today date & replace YYYY, MM, DD if provided in the default value
         my ( $year, $month, $day ) = Today();
@@ -180,20 +191,20 @@ sub create_input {
     elsif ( $tagslib->{$tag}->{$subfield}->{authtypecode} ) {
         $subfield_data{marc_value} =
     "<input type=\"text\"
-                        id=\"".$subfield_data{id}."\"
-                        name=\"".$subfield_data{id}."\"
-    value=\"$value\"
-    class=\"input_marceditor\"
-    tabindex=\"1\"                     
-        readonly=\"readonly\" \/>
-    <a href=\"#\" class=\"buttonDot\"
+            id=\"".$subfield_data{id}."\"
+            name=\"".$subfield_data{id}."\"
+            value=\"$value\"
+            class=\"input_marceditor readonly\"
+            tabindex=\"1\"
+            readonly=\"readonly\" \/>
+        <a href=\"#\" class=\"buttonDot\"
         onclick=\"openAuth(this.parentNode.getElementsByTagName('input')[1].id,'".$tagslib->{$tag}->{$subfield}->{authtypecode}."'); return false;\" tabindex=\"1\" title=\"Tag Editor\">...</a>
     ";
     # it's a plugin field
     }
     elsif ( $tagslib->{$tag}->{$subfield}->{'value_builder'} ) {
 
-        # opening plugin. Just check wether we are on a developper computer on a production one
+        # opening plugin. Just check whether we are on a developer computer on a production one
         # (the cgidir differs)
         my $cgidir = C4::Context->intranetdir . "/cgi-bin/cataloguing/value_builder";
         unless (-r $cgidir and -d $cgidir) {
@@ -306,15 +317,15 @@ sub format_indicator {
 
 =item CreateKey
 
-    Create a random value to set it into the input name
+Create a random value to set it into the input name
 
 =cut
 
-sub CreateKey(){
+sub CreateKey {
     return int(rand(1000000));
 }
 
-sub build_tabs ($$$$$) {
+sub build_tabs {
     my ( $template, $record, $dbh, $encoding,$input ) = @_;
 
     # fill arrays
@@ -351,7 +362,7 @@ sub build_tabs ($$$$$) {
 
             # if MARC::Record is not empty =>use it as master loop, then add missing subfields that should be in the tab.
             # if MARC::Record is empty => use tab as master loop.
-            if ( $record ne -1 && ( $record->field($tag) || $tag eq '000' ) ) {
+            if ( $record != -1 && ( $record->field($tag) || $tag eq '000' ) ) {
                 my @fields;
                 if ( $tag ne '000' ) {
                                 @fields = $record->field($tag);
@@ -488,7 +499,7 @@ sub build_tabs ($$$$$) {
 }
 
 
-sub build_hidden_data () {
+sub build_hidden_data {
     # build hidden data =>
     # we store everything, even if we show only requested subfields.
 
@@ -515,6 +526,11 @@ sub build_hidden_data () {
     }
 }
 
+=back
+
+=cut
+
+
 # ======================== 
 #          MAIN 
 #=========================
@@ -529,7 +545,9 @@ my $linkid=$input->param('linkid');
 my $authtypecode = $input->param('authtypecode');
 
 my $dbh = C4::Context->dbh;
-$authtypecode = &GetAuthTypeCode($authid) if !$authtypecode;
+if(!$authtypecode) {
+  $authtypecode = $authid? &GetAuthTypeCode($authid): '';
+}
 
 my ($template, $loggedinuser, $cookie)
     = get_template_and_user({template_name => "authorities/authorities.tmpl",
@@ -552,7 +570,7 @@ if ($authid) {
     ($oldauthnumtagfield,$oldauthnumtagsubfield) = &GetAuthMARCFromKohaField("auth_header.authid",$authtypecode);
     ($oldauthtypetagfield,$oldauthtypetagsubfield) = &GetAuthMARCFromKohaField("auth_header.authtypecode",$authtypecode);
 }
-
+$op ||= q{};
 #------------------------------------------------------------------------------------------------------------------------------
 if ($op eq "add") {
 #------------------------------------------------------------------------------------------------------------------------------
@@ -563,8 +581,7 @@ if ($op eq "add") {
     # build indicator hash.
     my @ind_tag = $input->param('ind_tag');
     my @indicator = $input->param('indicator');
-    my @params = $input->param();
-    my $record = TransformHtmlToMarc(\@params,$input);
+    my $record = TransformHtmlToMarc($input);
     if  (C4::Context->preference("marcflavour") eq "UNIMARC"){
         unless ($record->field('100')){
         use POSIX qw(strftime);
@@ -577,7 +594,8 @@ if ($op eq "add") {
         }    
     }
 
-    my ($duplicateauthid,$duplicateauthvalue) = FindDuplicateAuthority($record,$authtypecode) if ($op eq "add") && (!$is_a_modif);
+    my ($duplicateauthid,$duplicateauthvalue);
+     ($duplicateauthid,$duplicateauthvalue) = FindDuplicateAuthority($record,$authtypecode) if ($op eq "add") && (!$is_a_modif);
     my $confirm_not_duplicate = $input->param('confirm_not_duplicate');
     # it is not a duplicate (determined either by Koha itself or by user checking it's not a duplicate)
     if (!$duplicateauthid or $confirm_not_duplicate) {
@@ -586,7 +604,11 @@ if ($op eq "add") {
         } else {
             ($authid) = AddAuthority($record,$authid,$authtypecode);
         }
-        print $input->redirect("detail.pl?authid=$authid");
+        if ($myindex) {
+            print $input->redirect("blinddetail-biblio-search.pl?authid=$authid&index=$myindex");
+        } else {
+            print $input->redirect("detail.pl?authid=$authid");
+        }
         exit;
     } else {
     # it may be a duplicate, warn the user and do nothing
@@ -594,7 +616,7 @@ if ($op eq "add") {
         build_hidden_data;
         $template->param(authid =>$authid,
                         duplicateauthid     => $duplicateauthid,
-                        duplicateauthvalue  => $duplicateauthvalue,
+                        duplicateauthvalue  => $duplicateauthvalue->{authorized}->[0],
                         );
     }
 } elsif ($op eq "delete") {
@@ -626,9 +648,8 @@ $template->param(authid                       => $authid,
 my $authtypes = getauthtypes;
 my @authtypesloop;
 foreach my $thisauthtype (keys %$authtypes) {
-    my $selected = 1 if $thisauthtype eq $authtypecode;
     my %row =(value => $thisauthtype,
-                selected => $selected,
+                selected => $thisauthtype eq $authtypecode,
                 authtypetext => $authtypes->{$thisauthtype}{'authtypetext'},
             );
     push @authtypesloop, \%row;