X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;ds=sidebyside;f=members%2Fmember-flags.pl;h=ca8c9d086083ad7ac4965ab29925257e376117f4;hb=906aff23cad65bffe15b3901657a845757b47d08;hp=d5d74d34a60d5c18a4660e35347131018c4586ef;hpb=8c526aef1464931e8e5bea7b5de2c2ead122d688;p=koha_gimpoz diff --git a/members/member-flags.pl b/members/member-flags.pl index d5d74d34a6..ca8c9d0860 100755 --- a/members/member-flags.pl +++ b/members/member-flags.pl @@ -5,81 +5,194 @@ # July 26, 2002 (my birthday!) use strict; +use warnings; -use C4::Search; use CGI; use C4::Output; -use C4::Auth; +use C4::Auth qw(:DEFAULT :EditPermissions); use C4::Context; -use C4::Circulation::Circ2; +use C4::Members; +use C4::Branch; +use C4::Members::Attributes qw(GetBorrowerAttributes); #use C4::Acquisitions; -use HTML::Template; -use C4::Interface::CGI::Output; -my $input = new CGI; +use C4::Output; -my $flagsrequired; -$flagsrequired->{borrowers}=1; -$flagsrequired->{permissions}=1; +my $input = new CGI; +my $flagsrequired = { permissions => 1 }; +my $member=$input->param('member'); +my $bor = GetMemberDetails( $member,''); +if( $bor->{'category_type'} eq 'S' ) { + $flagsrequired->{'staffaccess'} = 1; +} my ($template, $loggedinuser, $cookie) = get_template_and_user({template_name => "members/member-flags.tmpl", query => $input, type => "intranet", authnotrequired => 0, - flagsrequired => {borrowers => 1}, + flagsrequired => $flagsrequired, debug => 1, }); - - -my $member=$input->param('member'); -my %env; -$env{'nottodayissues'}=1; my %member2; $member2{'borrowernumber'}=$member; -my $issues=currentissues(\%env,\%member2); -my $i=0; -foreach (sort keys %$issues) { - $i++; -} if ($input->param('newflags')) { my $dbh=C4::Context->dbh(); - my $flags=0; - foreach ($input->param) { - if (/flag-(\d+)/) { - my $flag=$1; - $flags=$flags+2**$flag; - } + + my @perms = $input->param('flag'); + my %all_module_perms = (); + my %sub_perms = (); + foreach my $perm (@perms) { + if ($perm !~ /:/) { + $all_module_perms{$perm} = 1; + } else { + my ($module, $sub_perm) = split /:/, $perm, 2; + push @{ $sub_perms{$module} }, $sub_perm; + } } - my $sth=$dbh->prepare("update borrowers set flags=? where borrowernumber=?"); - $sth->execute($flags, $member); - print $input->redirect("/cgi-bin/koha/members/moremember.pl?bornum=$member"); -} else { - my ($bor,$flags,$accessflags)=getpatroninformation(\%env, $member,''); + # construct flags + my $module_flags = 0; + my $sth=$dbh->prepare("SELECT bit,flag FROM userflags ORDER BY bit"); + $sth->execute(); + while (my ($bit, $flag) = $sth->fetchrow_array) { + if (exists $all_module_perms{$flag}) { + $module_flags += 2**$bit; + } + } + + $sth = $dbh->prepare("UPDATE borrowers SET flags=? WHERE borrowernumber=?"); + $sth->execute($module_flags, $member); + + # deal with subpermissions + $sth = $dbh->prepare("DELETE FROM user_permissions WHERE borrowernumber = ?"); + $sth->execute($member); + $sth = $dbh->prepare("INSERT INTO user_permissions (borrowernumber, module_bit, code) + SELECT ?, bit, ? + FROM userflags + WHERE flag = ?"); + foreach my $module (keys %sub_perms) { + next if exists $all_module_perms{$module}; + foreach my $sub_perm (@{ $sub_perms{$module} }) { + $sth->execute($member, $sub_perm, $module); + } + } + + print $input->redirect("/cgi-bin/koha/members/moremember.pl?borrowernumber=$member"); +} else { +# my ($bor,$flags,$accessflags)=GetMemberDetails($member,''); + my $flags = $bor->{'flags'}; + my $accessflags = $bor->{'authflags'}; my $dbh=C4::Context->dbh(); - my $sth=$dbh->prepare("select bit,flag,flagdesc from userflags order by bit"); + my $all_perms = get_all_subpermissions(); + my $user_perms = get_user_subpermissions($bor->{'userid'}); + my $sth=$dbh->prepare("SELECT bit,flag,flagdesc FROM userflags ORDER BY bit"); $sth->execute; my @loop; while (my ($bit, $flag, $flagdesc) = $sth->fetchrow) { - my $checked=''; - if ($accessflags->{$flag}) { - $checked='checked'; - } - my %row = ( bit => $bit, - flag => $flag, - checked => $checked, - flagdesc => $flagdesc ); - push @loop, \%row; + my $checked=''; + if ($accessflags->{$flag}) { + $checked= 1; + } + + my %row = ( bit => $bit, + flag => $flag, + checked => $checked, + flagdesc => $flagdesc ); + + my @sub_perm_loop = (); + my $expand_parent = 0; + if ($checked) { + if (exists $all_perms->{$flag}) { + $expand_parent = 1; + foreach my $sub_perm (sort keys %{ $all_perms->{$flag} }) { + push @sub_perm_loop, { + id => "${flag}_$sub_perm", + perm => "$flag:$sub_perm", + code => $sub_perm, + description => $all_perms->{$flag}->{$sub_perm}, + checked => 1 + }; + } + } + } else { + if (exists $user_perms->{$flag}) { + $expand_parent = 1; + # put selected ones first + foreach my $sub_perm (sort keys %{ $user_perms->{$flag} }) { + push @sub_perm_loop, { + id => "${flag}_$sub_perm", + perm => "$flag:$sub_perm", + code => $sub_perm, + description => $all_perms->{$flag}->{$sub_perm}, + checked => 1 + }; + } + } + # then ones not selected + if (exists $all_perms->{$flag}) { + foreach my $sub_perm (sort keys %{ $all_perms->{$flag} }) { + push @sub_perm_loop, { + id => "${flag}_$sub_perm", + perm => "$flag:$sub_perm", + code => $sub_perm, + description => $all_perms->{$flag}->{$sub_perm}, + checked => 0 + } unless exists $user_perms->{$flag} and exists $user_perms->{$flag}->{$sub_perm}; + } + } + } + $row{expand} = $expand_parent; + if ($#sub_perm_loop > -1) { + $row{sub_perm_loop} = \@sub_perm_loop; + } + push @loop, \%row; + } + + if ( $bor->{'category_type'} eq 'C') { + my ( $catcodes, $labels ) = GetborCatFromCatType( 'A', 'WHERE category_type = ?' ); + my $cnt = scalar(@$catcodes); + $template->param( 'CATCODE_MULTI' => 1) if $cnt > 1; + $template->param( 'catcode' => $catcodes->[0]) if $cnt == 1; } + +$template->param( adultborrower => 1 ) if ( $bor->{'category_type'} eq 'A' ); + my ($picture, $dberror) = GetPatronImage($bor->{'cardnumber'}); + $template->param( picture => 1 ) if $picture; + +if (C4::Context->preference('ExtendedPatronAttributes')) { + my $attributes = GetBorrowerAttributes($bor->{'borrowernumber'}); + $template->param( + ExtendedPatronAttributes => 1, + extendedattributes => $attributes + ); +} - $template->param(member => $member, - surname => $bor->{'surname'}, - firstname => $bor->{'firstname'}, - loop => \@loop); +$template->param( + borrowernumber => $bor->{'borrowernumber'}, + cardnumber => $bor->{'cardnumber'}, + surname => $bor->{'surname'}, + firstname => $bor->{'firstname'}, + categorycode => $bor->{'categorycode'}, + category_type => $bor->{'category_type'}, + categoryname => $bor->{'description'}, + address => $bor->{'address'}, + address2 => $bor->{'address2'}, + city => $bor->{'city'}, + state => $bor->{'state'}, + zipcode => $bor->{'zipcode'}, + country => $bor->{'country'}, + phone => $bor->{'phone'}, + email => $bor->{'email'}, + branchcode => $bor->{'branchcode'}, + branchname => GetBranchName($bor->{'branchcode'}), + loop => \@loop, + is_child => ($bor->{'category_type'} eq 'C'), + activeBorrowerRelationship => (C4::Context->preference('borrowerRelationship') ne ''), + ); output_html_with_http_headers $input, $cookie, $template->output;