061f2e9251
Show patron attributes in the sidebar on circ and patron pages [Edit from Owen Leonard: This patch takes changes originally in Bug 5436 and isolates just the parts relating to display of patron attributes. Because function for pulling patron attributes was merged with the function for displaying address information in SetMemberInfosInTemplate() (also found in Bug 5749), I moved the call to GetBorrowerAttributes into the individual scripts. That keeps the functionality relating specifically to patron attributes separate from the proposed changes to displaying addresses. Because I think it's important to keep the display consistent, I added display of patron attributes to all pages which include the patron information sidebar.] Rebased for compatability with bug 3489 and database documentation by Ian Walls, 9-21-11 Signed-off-by: Paul Poulain <paul.poulain@biblibre.com> Signed-off-by: Ian Walls <ian.walls@bywatersolutions.com> Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz>
192 lines
6.2 KiB
Perl
Executable file
192 lines
6.2 KiB
Perl
Executable file
#!/usr/bin/perl
|
|
|
|
# script to edit a member's flags
|
|
# Written by Steve Tonnesen
|
|
# July 26, 2002 (my birthday!)
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use CGI;
|
|
use C4::Output;
|
|
use C4::Auth qw(:DEFAULT :EditPermissions);
|
|
use C4::Context;
|
|
use C4::Members;
|
|
use C4::Branch;
|
|
use C4::Members::Attributes qw(GetBorrowerAttributes);
|
|
#use C4::Acquisitions;
|
|
|
|
use C4::Output;
|
|
|
|
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 => $flagsrequired,
|
|
debug => 1,
|
|
});
|
|
|
|
|
|
my %member2;
|
|
$member2{'borrowernumber'}=$member;
|
|
|
|
if ($input->param('newflags')) {
|
|
my $dbh=C4::Context->dbh();
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
# 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 $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= 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;
|
|
my $attributes = GetBorrowerAttributes($bor->{'borrowernumber'});
|
|
|
|
$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'),
|
|
extendedattributes => $attributes,
|
|
);
|
|
|
|
output_html_with_http_headers $input, $cookie, $template->output;
|
|
|
|
}
|