Merge branch 'labels_recon' into to-push
[koha-ffzg.git] / members / memberentry.pl
index bf20434..ade31e2 100755 (executable)
@@ -38,6 +38,7 @@ use C4::Input;
 use C4::Log;
 use C4::Letters;
 use C4::Branch; # GetBranches
+use C4::Form::MessagingPreferences;
 
 use vars qw($debug);
 
@@ -141,26 +142,37 @@ if ($op eq 'insert' || $op eq 'modify' || $op eq 'save') {
         }
     }
   # check permission to modify login info.
-    if (ref($borrower_data) && ($borrower_data->{'category_type'} eq 'S') && ! (C4::Auth::haspermission($dbh,$userenv->{'id'},{'staffaccess'=>1})) )  {
+    if (ref($borrower_data) && ($borrower_data->{'category_type'} eq 'S') && ! (C4::Auth::haspermission($userenv->{'id'},{'staffaccess'=>1})) )  {
         $NoUpdateLogin = 1;
     }
 }
 
 # remove keys from %newdata that ModMember() doesn't like
 {
-    my @keys_to_delete = qw(
-        BorrowerMandatoryField
-        category_type
-        check_member
-        destination
-        nodouble
-        op
-        save
-        select_roadtype
-        updtype
+    my @keys_to_delete = (
+        qr/^BorrowerMandatoryField$/,
+        qr/^category_type$/,
+        qr/^check_member$/,
+        qr/^destination$/,
+        qr/^nodouble$/,
+        qr/^op$/,
+        qr/^save$/,
+        qr/^select_roadtype$/,
+        qr/^updtype$/,
+        qr/^SMSnumber$/,
+        qr/^setting_extended_patron_attributes$/,
+        qr/^setting_messaging_prefs$/,
+        qr/^digest$/,
+        qr/^modify$/,
+        qr/^step$/,
+        qr/^\d+$/,
+        qr/^\d+-DAYS/,
+        qr/^patron_attr_/,
     );
-    for (@keys_to_delete) {
-        delete($newdata{$_});
+    for my $regexp (@keys_to_delete) {
+        for (keys %newdata) {
+            delete($newdata{$_}) if /$regexp/;
+        }
     }
 }
 
@@ -186,24 +198,31 @@ if (($op eq 'insert') and !$nodouble){
 }
 
   #recover all data from guarantor address phone ,fax... 
-if (defined($guarantorid) and ($category_type eq 'C' || $category_type eq 'P') and $guarantorid ne '' ){
-  my $guarantordata=GetMember($guarantorid);
-  $guarantorinfo=$guarantordata->{'surname'}." , ".$guarantordata->{'firstname'};
-  if (!defined($data{'contactname'}) or $data{'contactname'} eq '' or $data{'contactname'} ne $guarantordata->{'surname'}) {
-    $newdata{'contactfirstname'}= $guarantordata->{'firstname'};
-    $newdata{'contactname'}     = $guarantordata->{'surname'};
-    $newdata{'contacttitle'}    = $guarantordata->{'title'};
-         foreach (qw(streetnumber address streettype address2 zipcode city phone phonepro mobile fax email emailpro branchcode)) {
-               $newdata{$_} = $guarantordata->{$_};
-       }
-  }
+if ( defined($guarantorid) and
+     ( $category_type eq 'C' || $category_type eq 'P' ) and
+     $guarantorid ne ''  and
+     $guarantorid ne '0' ) {
+    if (my $guarantordata=GetMember($guarantorid)) {
+        $guarantorinfo=$guarantordata->{'surname'}." , ".$guarantordata->{'firstname'};
+        if ( !defined($data{'contactname'}) or $data{'contactname'} eq '' or
+             $data{'contactname'} ne $guarantordata->{'surname'} ) {
+            $newdata{'contactfirstname'}= $guarantordata->{'firstname'};
+            $newdata{'contactname'}     = $guarantordata->{'surname'};
+            $newdata{'contacttitle'}    = $guarantordata->{'title'};
+               foreach (qw(streetnumber address streettype address2
+                        zipcode country city phone phonepro mobile fax email emailpro branchcode)) {
+                       $newdata{$_} = $guarantordata->{$_};
+               }
+        }
+    }
 }
 
-###############test to take the right zipcode and city name ##############
-if (!defined($guarantorid) or $guarantorid eq '') {
+###############test to take the right zipcode, country and city name ##############
+if (!defined($guarantorid) or $guarantorid eq '' or $guarantorid eq '0') {
     # set only if parameter was passed from the form
     $newdata{'city'}    = $input->param('city')    if defined($input->param('city'));
     $newdata{'zipcode'} = $input->param('zipcode') if defined($input->param('zipcode'));
+    $newdata{'country'} = $input->param('country') if defined($input->param('country'));
 }
 
 #builds default userid
@@ -228,7 +247,7 @@ if ($op eq 'save' || $op eq 'insert'){
     }
   }
   if (C4::Context->preference("IndependantBranches")) {
-    if ($userenv && $userenv->{flags} != 1){
+    if ($userenv && $userenv->{flags} % 2 != 1){
       $debug and print STDERR "  $newdata{'branchcode'} : ".$userenv->{flags}.":".$userenv->{branch};
       unless (!$newdata{'branchcode'} || $userenv->{branch} eq $newdata{'branchcode'}){
         push @errors, "ERROR_branch";
@@ -261,6 +280,10 @@ if ($op eq 'modify' || $op eq 'insert' || $op eq 'save' ){
     }
 }
 
+if ( ( defined $input->param('SMSnumber') ) && ( $input->param('SMSnumber') ne $newdata{'mobile'} ) ) {
+    $newdata{smsalertnumber} = $input->param('SMSnumber');
+}
+
 ###  Error checks should happen before this line.
 $nok = $nok || scalar(@errors);
 if ((!$nok) and $nodouble and ($op eq 'insert' or $op eq 'save')){
@@ -304,6 +327,9 @@ if ((!$nok) and $nodouble and ($op eq 'insert' or $op eq 'save')){
         if (C4::Context->preference('ExtendedPatronAttributes') and $input->param('setting_extended_patron_attributes')) {
             C4::Members::Attributes::SetBorrowerAttributes($borrowernumber, $extended_patron_attributes);
         }
+        if (C4::Context->preference('EnhancedMessagingPreferences') and $input->param('setting_messaging_prefs')) {
+            C4::Form::MessagingPreferences::handle_form_action($input, { borrowernumber => $borrowernumber }, $template);
+        }
        } elsif ($op eq 'save'){ 
                if ($NoUpdateLogin) {
                        delete $newdata{'password'};
@@ -313,6 +339,9 @@ if ((!$nok) and $nodouble and ($op eq 'insert' or $op eq 'save')){
         if (C4::Context->preference('ExtendedPatronAttributes') and $input->param('setting_extended_patron_attributes')) {
             C4::Members::Attributes::SetBorrowerAttributes($borrowernumber, $extended_patron_attributes);
         }
+        if (C4::Context->preference('EnhancedMessagingPreferences') and $input->param('setting_messaging_prefs')) {
+            C4::Form::MessagingPreferences::handle_form_action($input, { borrowernumber => $borrowernumber }, $template);
+        }
        }
        print scalar ($destination eq "circ") ? 
                $input->redirect("/cgi-bin/koha/circ/circulation.pl?borrowernumber=$borrowernumber") :
@@ -331,12 +360,12 @@ if ($nok or !$nodouble){
     %data=%newdata; 
     $template->param( updtype => ($op eq 'add' ?'I':'M'));     # used to check for $op eq "insert"... but we just changed $op!
     unless ($step){  
-        $template->param( step_1 => 1,step_2 => 1,step_3 => 1, step_4 => 1);
+        $template->param( step_1 => 1,step_2 => 1,step_3 => 1, step_4 => 1, step_5 => 1);
     }  
 } 
 if (C4::Context->preference("IndependantBranches")) {
     my $userenv = C4::Context->userenv;
-    if ($userenv->{flags} != 1 && $data{branchcode}){
+    if ($userenv->{flags} % 2 != 1 && $data{branchcode}){
         unless ($userenv->{branch} eq $data{'branchcode'}){
             print $input->redirect("/cgi-bin/koha/members/members-home.pl");
             exit;
@@ -346,11 +375,11 @@ if (C4::Context->preference("IndependantBranches")) {
 if ($op eq 'add'){
     my $arg2 = $newdata{'dateenrolled'} || C4::Dates->today('iso');
     $data{'dateexpiry'} = GetExpiryDate($newdata{'categorycode'},$arg2);
-    $template->param( updtype => 'I', step_1=>1, step_2=>1, step_3=>1, step_4=>1);
+    $template->param( updtype => 'I', step_1=>1, step_2=>1, step_3=>1, step_4=>1, step_5 => 1);
 }
 if ($op eq "modify")  {
     $template->param( updtype => 'M',modify => 1 );
-    $template->param( step_1=>1, step_2=>1, step_3=>1, step_4=>1) unless $step;
+    $template->param( step_1=>1, step_2=>1, step_3=>1, step_4=>1, step_5 => 1) unless $step;
 }
 # my $cardnumber=$data{'cardnumber'};
 $data{'cardnumber'}=fixup_cardnumber($data{'cardnumber'}) if $op eq 'add';
@@ -480,7 +509,7 @@ my %select_branches;
 
 my $onlymine=(C4::Context->preference('IndependantBranches') && 
               C4::Context->userenv && 
-              C4::Context->userenv->{flags} !=1  && 
+              C4::Context->userenv->{flags} % 2 !=1  && 
               C4::Context->userenv->{branch}?1:0);
               
 my $branches=GetBranches($onlymine);
@@ -567,6 +596,16 @@ if (C4::Context->preference('ExtendedPatronAttributes')) {
     patron_attributes_form($template, $borrowernumber);
 }
 
+if (C4::Context->preference('EnhancedMessagingPreferences')) {
+    if ($op eq 'add') {
+        C4::Form::MessagingPreferences::set_form_values({ categorycode => $categorycode }, $template);
+    } else {
+        C4::Form::MessagingPreferences::set_form_values({ borrowernumber => $borrowernumber }, $template);
+    }
+    $template->param(SMSSendDriver => C4::Context->preference("SMSSendDriver"));
+    $template->param(SMSnumber     => defined $data{'smsalertnumber'} ? $data{'smsalertnumber'} : $data{'mobile'});
+}
+
 $template->param( "showguarantor"  => ($category_type=~/A|I|S|X/) ? 0 : 1); # associate with step to know where you are
 $debug and warn "memberentry step: $step";
 $template->param(%data);