Merge remote branch 'kc/new/bug_6065' into kcmaster
[koha_gimpoz] / cataloguing / addbiblio.pl
index 76e850b..038878f 100755 (executable)
@@ -2,6 +2,7 @@
 
 
 # Copyright 2000-2002 Katipo Communications
 
 
 # Copyright 2000-2002 Katipo Communications
+# Copyright 2004-2010 BibLibre
 #
 # This file is part of Koha.
 #
 #
 # This file is part of Koha.
 #
 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 #
 # 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 strict;
+#use warnings; FIXME - Bug 2505
 use CGI;
 use C4::Output;
 use C4::Auth;
 use CGI;
 use C4::Output;
 use C4::Auth;
@@ -44,7 +46,9 @@ if ( C4::Context->preference('marcflavour') eq 'UNIMARC' ) {
 
 our($tagslib,$authorised_values_sth,$is_a_modif,$usedTagsLib,$mandatory_z3950);
 
 
 our($tagslib,$authorised_values_sth,$is_a_modif,$usedTagsLib,$mandatory_z3950);
 
-=item MARCfindbreeding
+=head1 FUNCTIONS
+
+=head2 MARCfindbreeding
 
     $record = MARCfindbreeding($breedingid);
 
 
     $record = MARCfindbreeding($breedingid);
 
@@ -151,7 +155,7 @@ sub MARCfindbreeding {
     return -1;
 }
 
     return -1;
 }
 
-=item build_authorized_values_list
+=head2 build_authorized_values_list
 
 =cut
 
 
 =cut
 
@@ -168,7 +172,7 @@ sub build_authorized_values_list ($$$$$$$) {
         #Use GetBranches($onlymine)
         my $onlymine=C4::Context->preference('IndependantBranches') && 
                 C4::Context->userenv && 
         #Use GetBranches($onlymine)
         my $onlymine=C4::Context->preference('IndependantBranches') && 
                 C4::Context->userenv && 
-                C4::Context->userenv->{flags}!=1 && 
+                C4::Context->userenv->{flags} % 2 == 0 && 
                 C4::Context->userenv->{branch};
         my $branches = GetBranches($onlymine);
         my @branchloop;
                 C4::Context->userenv->{branch};
         my $branches = GetBranches($onlymine);
         my @branchloop;
@@ -185,7 +189,7 @@ sub build_authorized_values_list ($$$$$$$) {
             "select itemtype,description from itemtypes order by description");
         $sth->execute;
         push @authorised_values, ""
             "select itemtype,description from itemtypes order by description");
         $sth->execute;
         push @authorised_values, ""
-          unless ( $tagslib->{$tag}->{$subfield}->{mandatory} );
+          unless ( $tagslib->{$tag}->{$subfield}->{defaultvalue} and $tagslib->{$tag}->{$subfield}->{mandatory} );
           
         my $itemtype;
         
           
         my $itemtype;
         
@@ -242,7 +246,7 @@ sub build_authorized_values_list ($$$$$$$) {
     );
 }
 
     );
 }
 
-=item CreateKey
+=head2 CreateKey
 
     Create a random value to set it into the input name
 
 
     Create a random value to set it into the input name
 
@@ -252,11 +256,11 @@ sub CreateKey(){
     return int(rand(1000000));
 }
 
     return int(rand(1000000));
 }
 
-=item GetMandatoryFieldZ3950
+=head2 GetMandatoryFieldZ3950
 
     This function return an hashref which containts all mandatory field
     to search with z3950 server.
 
     This function return an hashref which containts all mandatory field
     to search with z3950 server.
-    
+
 =cut
 
 sub GetMandatoryFieldZ3950($){
 =cut
 
 sub GetMandatoryFieldZ3950($){
@@ -276,7 +280,7 @@ sub GetMandatoryFieldZ3950($){
     };
 }
 
     };
 }
 
-=item create_input
+=head2 create_input
 
  builds the <input ...> entry for a subfield.
 
 
  builds the <input ...> entry for a subfield.
 
@@ -298,7 +302,7 @@ sub create_input {
     }
 
     # if there is no value provided but a default value in parameters, get it
     }
 
     # if there is no value provided but a default value in parameters, get it
-    unless ($value) {
+    if ( $value eq '' ) {
         $value = $tagslib->{$tag}->{$subfield}->{defaultvalue};
 
         # get today date & replace YYYY, MM, DD if provided in the default value
         $value = $tagslib->{$tag}->{$subfield}->{defaultvalue};
 
         # get today date & replace YYYY, MM, DD if provided in the default value
@@ -363,7 +367,7 @@ sub create_input {
                     id=\"".$subfield_data{id}."\"
                     name=\"".$subfield_data{id}."\"
                     value=\"$value\"
                     id=\"".$subfield_data{id}."\"
                     name=\"".$subfield_data{id}."\"
                     value=\"$value\"
-                    class=\"input_marceditor\"
+                    class=\"input_marceditor readonly\"
                     tabindex=\"1\"
                     size=\"5\"
                     maxlength=\"$max_length\"
                     tabindex=\"1\"
                     size=\"5\"
                     maxlength=\"$max_length\"
@@ -379,7 +383,7 @@ sub create_input {
                     id=\"".$subfield_data{id}."\"
                     name=\"".$subfield_data{id}."\"
                     value=\"$value\"
                     id=\"".$subfield_data{id}."\"
                     name=\"".$subfield_data{id}."\"
                     value=\"$value\"
-                    class=\"input_marceditor\"
+                    class=\"input_marceditor readonly\"
                     tabindex=\"1\"
                     size=\"67\"
                     maxlength=\"$max_length\"
                     tabindex=\"1\"
                     size=\"67\"
                     maxlength=\"$max_length\"
@@ -393,7 +397,7 @@ sub create_input {
                     id=\"".$subfield_data{id}."\"
                     name=\"".$subfield_data{id}."\"
                     value=\"$value\"
                     id=\"".$subfield_data{id}."\"
                     name=\"".$subfield_data{id}."\"
                     value=\"$value\"
-                    class=\"input_marceditor\"
+                    class=\"input_marceditor readonly\"
                     tabindex=\"1\"
                     size=\"67\"
                     maxlength=\"$max_length\"
                     tabindex=\"1\"
                     size=\"67\"
                     maxlength=\"$max_length\"
@@ -513,7 +517,7 @@ sub create_input {
 }
 
 
 }
 
 
-=item format_indicator
+=head2 format_indicator
 
 Translate indicator value for output form - specifically, map
 indicator = ' ' to ''.  This is for the convenience of a cataloger
 
 Translate indicator value for output form - specifically, map
 indicator = ' ' to ''.  This is for the convenience of a cataloger
@@ -665,7 +669,7 @@ sub build_tabs ($$$$$) {
                             fixedfield    => $tag < 10?1:0,
                             random        => CreateKey,
                         );
                             fixedfield    => $tag < 10?1:0,
                             random        => CreateKey,
                         );
-                        if ($tag >= 010){ # no indicator for theses tag
+                        if ($tag >= 10){ # no indicator for 00x tags
                            $tag_data{indicator1} = format_indicator($field->indicator(1)),
                            $tag_data{indicator2} = format_indicator($field->indicator(2)),
                         }
                            $tag_data{indicator1} = format_indicator($field->indicator(1)),
                            $tag_data{indicator2} = format_indicator($field->indicator(2)),
                         }
@@ -754,7 +758,7 @@ AND (authtypecode IS NOT NULL AND authtypecode<>\"\")|);
   my ($countcreated,$countlinked);
   while (my $data=$query->fetchrow_hashref){
     foreach my $field ($record->field($data->{tagfield})){
   my ($countcreated,$countlinked);
   while (my $data=$query->fetchrow_hashref){
     foreach my $field ($record->field($data->{tagfield})){
-      next if ($field->subfield('3')||$field->subfield('9'));
+      next if ($field->subfield('3') || $field->subfield('9'));
       # No authorities id in the tag.
       # Search if there is any authorities to link to.
       my $query='at='.$data->{authtypecode}.' ';
       # No authorities id in the tag.
       # Search if there is any authorities to link to.
       my $query='at='.$data->{authtypecode}.' ';
@@ -828,8 +832,11 @@ my $z3950         = $input->param('z3950');
 my $op            = $input->param('op');
 my $mode          = $input->param('mode');
 my $frameworkcode = $input->param('frameworkcode');
 my $op            = $input->param('op');
 my $mode          = $input->param('mode');
 my $frameworkcode = $input->param('frameworkcode');
+my $redirect      = $input->param('redirect');
 my $dbh           = C4::Context->dbh;
 
 my $dbh           = C4::Context->dbh;
 
+my $userflags = ($frameworkcode eq 'FA') ? "fast_cataloging" : "edit_catalogue";
+
 $frameworkcode = &GetFrameworkCode($biblionumber)
   if ( $biblionumber and not($frameworkcode) );
 
 $frameworkcode = &GetFrameworkCode($biblionumber)
   if ( $biblionumber and not($frameworkcode) );
 
@@ -840,7 +847,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
         query           => $input,
         type            => "intranet",
         authnotrequired => 0,
         query           => $input,
         type            => "intranet",
         authnotrequired => 0,
-        flagsrequired   => { editcatalogue => 1 },
+        flagsrequired   => { editcatalogue => $userflags },
     }
 );
 
     }
 );
 
@@ -926,13 +933,27 @@ if ( $op eq "addbiblio" ) {
         else {
             ( $biblionumber, $oldbibitemnum ) = AddBiblio( $record, $frameworkcode );
         }
         else {
             ( $biblionumber, $oldbibitemnum ) = AddBiblio( $record, $frameworkcode );
         }
-
-        if ($mode ne "popup"){
+        if ($redirect eq "items" || ($mode ne "popup" && !$is_a_modif && $redirect ne "view")){
             print $input->redirect(
                 "/cgi-bin/koha/cataloguing/additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode"
             );
             exit;
             print $input->redirect(
                 "/cgi-bin/koha/cataloguing/additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode"
             );
             exit;
-        } else {
+        }
+               elsif($is_a_modif || $redirect eq "view"){
+            my $defaultview = C4::Context->preference('IntranetBiblioDefaultView');
+            my $views = { C4::Search::enabled_staff_search_views };
+            if ($defaultview eq 'isbd' && $views->{can_view_ISBD}) {
+                print $input->redirect("/cgi-bin/koha/catalogue/ISBDdetail.pl?biblionumber=$biblionumber");
+            } elsif  ($defaultview eq 'marc' && $views->{can_view_MARC}) {
+                print $input->redirect("/cgi-bin/koha/catalogue/MARCdetail.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode");
+            } elsif  ($defaultview eq 'labeled_marc' && $views->{can_view_labeledMARC}) {
+                print $input->redirect("/cgi-bin/koha/catalogue/labeledMARCdetail.pl?biblionumber=$biblionumber");
+            } else {
+                print $input->redirect("/cgi-bin/koha/catalogue/detail.pl?biblionumber=$biblionumber");
+            }
+            exit;
+
+               }else {
           $template->param(
             biblionumber => $biblionumber,
             done         =>1,
           $template->param(
             biblionumber => $biblionumber,
             done         =>1,
@@ -999,6 +1020,9 @@ elsif ( $op eq "delete" ) {
 }
 
 $template->param( title => $record->title() ) if ( $record ne "-1" );
 }
 
 $template->param( title => $record->title() ) if ( $record ne "-1" );
+if (C4::Context->preference("marcflavour") eq "MARC21"){
+    $template->param(MARC21 => 1);
+}
 $template->param(
     popup => $mode,
     frameworkcode => $frameworkcode,
 $template->param(
     popup => $mode,
     frameworkcode => $frameworkcode,