Jonathan Druart
bde685fa92
The patron's information displayed in the member module (includes/circ-menu.inc and includes/member-display-address-style-*.inc) are not always displayed the same way. Sometimes the streetnumber is missing, sometimes it's the streettype. Sometimes the streettype is after the address, sometimes before... Test plan: Go on a patron detail page, and open all the tabs on the left (Check out, Fines, Notices, etc.) Without this patch, the patron's info displayed will differ from one page to another. With this patch, they will be displayed the same everywhere. Followed test plan, works as expected. (Tested both patches together.) Signed-off-by: Marc Véron <veron@veron.ch> Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com> Signed-off-by: Brendan Gallagher brendan@bywatersolutions.com
202 lines
6.6 KiB
Perl
Executable file
202 lines
6.6 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 qw ( -utf8 );
|
|
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.tt",
|
|
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 FROM userflags ORDER BY bit");
|
|
$sth->execute;
|
|
my @loop;
|
|
while (my ($bit, $flag) = $sth->fetchrow) {
|
|
my $checked='';
|
|
if ($accessflags->{$flag}) {
|
|
$checked= 1;
|
|
}
|
|
|
|
my %row = ( bit => $bit,
|
|
flag => $flag,
|
|
checked => $checked,
|
|
);
|
|
|
|
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,
|
|
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,
|
|
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,
|
|
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->{'borrowernumber'});
|
|
$template->param( picture => 1 ) if $picture;
|
|
|
|
if (C4::Context->preference('ExtendedPatronAttributes')) {
|
|
my $attributes = GetBorrowerAttributes($bor->{'borrowernumber'});
|
|
$template->param(
|
|
ExtendedPatronAttributes => 1,
|
|
extendedattributes => $attributes
|
|
);
|
|
}
|
|
|
|
$template->param(
|
|
borrowernumber => $bor->{'borrowernumber'},
|
|
cardnumber => $bor->{'cardnumber'},
|
|
surname => $bor->{'surname'},
|
|
firstname => $bor->{'firstname'},
|
|
othernames => $bor->{'othernames'},
|
|
categorycode => $bor->{'categorycode'},
|
|
category_type => $bor->{'category_type'},
|
|
categoryname => $bor->{'description'},
|
|
address => $bor->{address},
|
|
address2 => $bor->{'address2'},
|
|
streettype => $bor->{streettype},
|
|
city => $bor->{'city'},
|
|
state => $bor->{'state'},
|
|
zipcode => $bor->{'zipcode'},
|
|
country => $bor->{'country'},
|
|
phone => $bor->{'phone'},
|
|
phonepro => $bor->{'phonepro'},
|
|
mobile => $bor->{'mobile'},
|
|
email => $bor->{'email'},
|
|
emailpro => $bor->{'emailpro'},
|
|
branchcode => $bor->{'branchcode'},
|
|
branchname => GetBranchName($bor->{'branchcode'}),
|
|
loop => \@loop,
|
|
is_child => ($bor->{'category_type'} eq 'C'),
|
|
activeBorrowerRelationship => (C4::Context->preference('borrowerRelationship') ne ''),
|
|
RoutingSerials => C4::Context->preference('RoutingSerials'),
|
|
);
|
|
|
|
output_html_with_http_headers $input, $cookie, $template->output;
|
|
|
|
}
|