@@ -, +, @@ manage from others libraries - Switch on the IndependantBranches syspref - Add the permission 'superserials' for a patron and test you can navigate and see all serials - Remove this permission and test you cannot manage/view subscriptions from others libraries --- C4/Auth.pm | 4 +- C4/Serials.pm | 107 ++++++++------------ .../data/mysql/de-DE/mandatory/userpermissions.sql | 1 + .../data/mysql/en/mandatory/userpermissions.sql | 1 + .../data/mysql/es-ES/mandatory/userpermissions.sql | 1 + .../mysql/fr-FR/1-Obligatoire/userpermissions.sql | 1 + .../data/mysql/it-IT/necessari/userpermissions.sql | 1 + .../mysql/nb-NO/1-Obligatorisk/userpermissions.sql | 1 + .../data/mysql/pl-PL/mandatory/userpermissions.sql | 1 + installer/data/mysql/updatedatabase.pl | 7 ++ .../prog/en/includes/serials-toolbar.inc | 6 +- .../prog/en/modules/serials/serials-home.tt | 44 ++++---- serials/serials-collection.pl | 4 +- serials/serials-edit.pl | 1 + serials/serials-home.pl | 1 + serials/subscription-add.pl | 3 +- serials/subscription-detail.pl | 33 ++----- serials/subscription-renew.pl | 1 + 18 files changed, 98 insertions(+), 120 deletions(-) --- a/C4/Auth.pm +++ a/C4/Auth.pm @@ -1526,7 +1526,6 @@ sub getuserflags { $userflags->{$flag} = 0; } } - # get subpermissions and merge with top-level permissions my $user_subperms = get_user_subpermissions($userid); foreach my $module (keys %$user_subperms) { @@ -1622,7 +1621,8 @@ sub haspermission { my ($userid, $flagsrequired) = @_; my $sth = C4::Context->dbh->prepare("SELECT flags FROM borrowers WHERE userid=?"); $sth->execute($userid); - my $flags = getuserflags($sth->fetchrow(), $userid); + my $row = $sth->fetchrow(); + my $flags = getuserflags($row, $userid); if ( $userid eq C4::Context->config('user') ) { # Super User Account from /etc/koha.conf $flags->{'superlibrarian'} = 1; --- a/C4/Serials.pm +++ a/C4/Serials.pm @@ -20,6 +20,7 @@ package C4::Serials; use strict; use warnings; +use C4::Context; use C4::Dates qw(format_date format_date_in_iso); use Date::Calc qw(:all); use POSIX qw(strftime); @@ -204,15 +205,7 @@ sub GetSerialInformation { my ($serialid) = @_; my $dbh = C4::Context->dbh; my $query = qq| - SELECT serial.*, serial.notes as sernotes, serial.status as serstatus,subscription.*,subscription.subscriptionid as subsid |; - if ( C4::Context->preference('IndependantBranches') - && C4::Context->userenv - && C4::Context->userenv->{'flags'} != 1 - && C4::Context->userenv->{'branch'} ) { - $query .= " - , ((subscription.branchcode <>\"" . C4::Context->userenv->{'branch'} . "\") and subscription.branchcode <>\"\" and subscription.branchcode IS NOT NULL) as cannotedit "; - } - $query .= qq| + SELECT serial.*, serial.notes as sernotes, serial.status as serstatus,subscription.*,subscription.subscriptionid as subsid FROM serial LEFT JOIN subscription ON subscription.subscriptionid=serial.subscriptionid WHERE serialid = ? |; @@ -251,6 +244,7 @@ sub GetSerialInformation { $data->{ "status" . $data->{'serstatus'} } = 1; $data->{'subscriptionexpired'} = HasSubscriptionExpired( $data->{'subscriptionid'} ) && $data->{'status'} == 1; $data->{'abouttoexpire'} = abouttoexpire( $data->{'subscriptionid'} ); + $data->{cannotedit} = not can_edit_subscription( $data ); return $data; } @@ -309,15 +303,7 @@ sub GetSubscription { subscriptionhistory.*, aqbooksellers.name AS aqbooksellername, biblio.title AS bibliotitle, - subscription.biblionumber as bibnum); - if ( C4::Context->preference('IndependantBranches') - && C4::Context->userenv - && C4::Context->userenv->{'flags'} != 1 - && C4::Context->userenv->{'branch'} ) { - $query .= " - , ((subscription.branchcode <>\"" . C4::Context->userenv->{'branch'} . "\") and subscription.branchcode <>\"\" and subscription.branchcode IS NOT NULL) as cannotedit "; - } - $query .= qq( + subscription.biblionumber as bibnum FROM subscription LEFT JOIN subscriptionhistory ON subscription.subscriptionid=subscriptionhistory.subscriptionid LEFT JOIN aqbooksellers ON subscription.aqbooksellerid=aqbooksellers.id @@ -325,16 +311,12 @@ sub GetSubscription { WHERE subscription.subscriptionid = ? ); - # if (C4::Context->preference('IndependantBranches') && - # C4::Context->userenv && - # C4::Context->userenv->{'flags'} != 1){ - # # $debug and warn "flags: ".C4::Context->userenv->{'flags'}; - # $query.=" AND subscription.branchcode IN ('".C4::Context->userenv->{'branch'}."',\"\")"; - # } $debug and warn "query : $query\nsubsid :$subscriptionid"; my $sth = $dbh->prepare($query); $sth->execute($subscriptionid); - return $sth->fetchrow_hashref; + my $subscription = $sth->fetchrow_hashref; + $subscription->{cannotedit} = not can_edit_subscription( $subscription ); + return $subscription; } =head2 GetFullSubscription @@ -358,15 +340,7 @@ sub GetFullSubscription { aqbooksellers.name as aqbooksellername, biblio.title as bibliotitle, subscription.branchcode AS branchcode, - subscription.subscriptionid AS subscriptionid |; - if ( C4::Context->preference('IndependantBranches') - && C4::Context->userenv - && C4::Context->userenv->{'flags'} != 1 - && C4::Context->userenv->{'branch'} ) { - $query .= " - , ((subscription.branchcode <>\"" . C4::Context->userenv->{'branch'} . "\") and subscription.branchcode <>\"\" and subscription.branchcode IS NOT NULL) as cannotedit "; - } - $query .= qq| + subscription.subscriptionid AS subscriptionid FROM serial LEFT JOIN subscription ON (serial.subscriptionid=subscription.subscriptionid ) @@ -380,7 +354,11 @@ sub GetFullSubscription { $debug and warn "GetFullSubscription query: $query"; my $sth = $dbh->prepare($query); $sth->execute($subscriptionid); - return $sth->fetchall_arrayref( {} ); + my $subscriptions = $sth->fetchall_arrayref( {} ); + for my $subscription ( @$subscriptions ) { + $subscription->{cannotedit} = not can_edit_subscription( $subscription ); + } + return $subscriptions; } =head2 PrepareSerialsData @@ -478,13 +456,6 @@ sub GetSubscriptionsFromBiblionumber { $subs->{ "periodicity" . $subs->{periodicity} } = 1; $subs->{ "numberpattern" . $subs->{numberpattern} } = 1; $subs->{ "status" . $subs->{'status'} } = 1; - $subs->{'cannotedit'} = - ( C4::Context->preference('IndependantBranches') - && C4::Context->userenv - && C4::Context->userenv->{flags} % 2 != 1 - && C4::Context->userenv->{branch} - && $subs->{branchcode} - && ( C4::Context->userenv->{branch} ne $subs->{branchcode} ) ); if ( $subs->{enddate} eq '0000-00-00' ) { $subs->{enddate} = ''; @@ -493,6 +464,7 @@ sub GetSubscriptionsFromBiblionumber { } $subs->{'abouttoexpire'} = abouttoexpire( $subs->{'subscriptionid'} ); $subs->{'subscriptionexpired'} = HasSubscriptionExpired( $subs->{'subscriptionid'} ); + $subs->{cannotedit} = not can_edit_subscription( $subs ); push @res, $subs; } return \@res; @@ -518,16 +490,7 @@ sub GetFullSubscriptionsFromBiblionumber { year(IF(serial.publisheddate="00-00-0000",serial.planneddate,serial.publisheddate)) as year, biblio.title as bibliotitle, subscription.branchcode AS branchcode, - subscription.subscriptionid AS subscriptionid|; - if ( C4::Context->preference('IndependantBranches') - && C4::Context->userenv - && C4::Context->userenv->{'flags'} != 1 - && C4::Context->userenv->{'branch'} ) { - $query .= " - , ((subscription.branchcode <>\"" . C4::Context->userenv->{'branch'} . "\") and subscription.branchcode <>\"\" and subscription.branchcode IS NOT NULL) as cannotedit "; - } - - $query .= qq| + subscription.subscriptionid AS subscriptionid FROM serial LEFT JOIN subscription ON (serial.subscriptionid=subscription.subscriptionid) @@ -540,7 +503,11 @@ sub GetFullSubscriptionsFromBiblionumber { |; my $sth = $dbh->prepare($query); $sth->execute($biblionumber); - return $sth->fetchall_arrayref( {} ); + my $subscriptions = $sth->fetchall_arrayref( {} ); + for my $subscription ( @$subscriptions ) { + $subscription->{cannotedit} = not can_edit_subscription( $subscription ); + } + return $subscriptions; } =head2 GetSubscriptions @@ -615,19 +582,11 @@ sub GetSubscriptions { $debug and warn "GetSubscriptions query: $sql params : ", join( " ", @bind_params ); $sth = $dbh->prepare($sql); $sth->execute(@bind_params); - my @results; - - while ( my $line = $sth->fetchrow_hashref ) { - $line->{'cannotedit'} = - ( C4::Context->preference('IndependantBranches') - && C4::Context->userenv - && C4::Context->userenv->{flags} % 2 != 1 - && C4::Context->userenv->{branch} - && $line->{branchcode} - && ( C4::Context->userenv->{branch} ne $line->{branchcode} ) ); - push @results, $line; + my $subscriptions = $sth->fetchall_arrayref( {} ); + for my $subscription ( @$subscriptions ) { + $subscription->{cannotedit} = not can_edit_subscription( $subscription ); } - return @results; + return @$subscriptions; } =head2 GetSerials @@ -2361,6 +2320,24 @@ sub is_barcode_in_use { return @{$occurences}; } +sub can_edit_subscription { + my ( $subscription, $userid ) = @_; + my $flags = C4::Context->userenv->{flags}; + $userid ||= C4::Context->userenv->{'id'}; + if( C4::Context->preference('IndependantBranches') + and ( + $flags % 2 == 1 + or C4::Auth::haspermission( $userid, {serials => 'superserials'}), + or not defined $subscription->{branchcode} + or $subscription->{branchcode} eq '' + or $subscription->{branchcode} eq C4::Context->userenv->{'branch'} + ) + ) { + return 1; + } + return 0; +} + 1; __END__ --- a/installer/data/mysql/de-DE/mandatory/userpermissions.sql +++ a/installer/data/mysql/de-DE/mandatory/userpermissions.sql @@ -48,6 +48,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES (15, 'receive_serials', 'Zugang von Heften'), (15, 'renew_subscription', 'Abonnements verlängern'), (15, 'routing', 'Umlauflisten verwalten'), + (15, 'superserials', 'Manage subscriptions from any branch'), (16, 'execute_reports', 'SQL-Reports ausführen'), (16, 'create_reports', 'SQL-Reports erstellen') ; --- a/installer/data/mysql/en/mandatory/userpermissions.sql +++ a/installer/data/mysql/en/mandatory/userpermissions.sql @@ -48,6 +48,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES (15, 'receive_serials', 'Serials receiving'), (15, 'renew_subscription', 'Renew a subscription'), (15, 'routing', 'Routing'), + (15, 'superserials', 'Manage subscriptions from any branch'), (16, 'execute_reports', 'Execute SQL reports'), (16, 'create_reports', 'Create SQL Reports') ; --- a/installer/data/mysql/es-ES/mandatory/userpermissions.sql +++ a/installer/data/mysql/es-ES/mandatory/userpermissions.sql @@ -48,6 +48,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES (15, 'receive_serials', 'Serials receiving'), (15, 'renew_subscription', 'Renew a subscription'), (15, 'routing', 'Routing'), + (15, 'superserials', 'Manage subscriptions from any branch'), (16, 'execute_reports', 'Execute SQL reports'), (16, 'create_reports', 'Create SQL Reports') ; --- a/installer/data/mysql/fr-FR/1-Obligatoire/userpermissions.sql +++ a/installer/data/mysql/fr-FR/1-Obligatoire/userpermissions.sql @@ -48,6 +48,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES (15, 'receive_serials', 'Bulletiner les périodiques'), (15, 'renew_subscription', 'Renouveler les abonnements'), (15, 'routing', 'Mettre en circulation'), + (15, 'superserials', 'Manage subscriptions from any branch'), (16, 'execute_reports', 'Lancer les rapports SQL'), (16, 'create_reports', 'Créer les rapports SQL Reports') --- a/installer/data/mysql/it-IT/necessari/userpermissions.sql +++ a/installer/data/mysql/it-IT/necessari/userpermissions.sql @@ -50,6 +50,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES (15, 'receive_serials', 'Ricevi fascicoli'), (15, 'renew_subscription', 'Rinnova un abbonamento'), (15, 'routing', 'Crea/Manipola liste di distribuzione dei fascicoli ( routing list)'), + (15, 'superserials', 'Manage subscriptions from any branch'), (16, 'execute_reports', 'Esegui reports SQL'), (16, 'create_reports', 'Crea reports SQL') ; --- a/installer/data/mysql/nb-NO/1-Obligatorisk/userpermissions.sql +++ a/installer/data/mysql/nb-NO/1-Obligatorisk/userpermissions.sql @@ -69,6 +69,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES (15, 'receive_serials', 'Heftemottak'), (15, 'renew_subscription', 'Fornye abonnementer'), (15, 'routing', 'Sirkulasjon'), + (15, 'superserials', 'Manage subscriptions from any branch'), (16, 'execute_reports', 'Kjøre SQL-rapporter'), (16, 'create_reports', 'Opprette SQL-rapporter') ; --- a/installer/data/mysql/pl-PL/mandatory/userpermissions.sql +++ a/installer/data/mysql/pl-PL/mandatory/userpermissions.sql @@ -49,6 +49,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES (15, 'receive_serials', 'Serials receiving'), (15, 'renew_subscription', 'Renew a subscription'), (15, 'routing', 'Routing'), + (15, 'superserials', 'Manage subscriptions from any branch'), (16, 'execute_reports', 'Execute SQL reports'), (16, 'create_reports', 'Create SQL Reports') ; --- a/installer/data/mysql/updatedatabase.pl +++ a/installer/data/mysql/updatedatabase.pl @@ -5536,6 +5536,13 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { SetVersion($DBversion); } +$DBversion = "3.09.00.XXX"; +if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) { + $dbh->do("INSERT INTO permissions (module_bit, code, description) VALUES(15, 'superserials', 'Manage subscriptions from any branch')"); + print "Upgrade to $DBversion done (Add superserials permission)\n"; + SetVersion($DBversion); +} + =head1 FUNCTIONS =head2 TableExists($table) --- a/koha-tmpl/intranet-tmpl/prog/en/includes/serials-toolbar.inc +++ a/koha-tmpl/intranet-tmpl/prog/en/includes/serials-toolbar.inc @@ -18,13 +18,13 @@ [% IF ( subscriptionid ) %] var editmenu = [ [% IF ( CAN_user_serials_edit_subscription ) %] - { text: _("Edit subscription"), [% IF ( cannotedit ) %]disabled: true, [% END %] url: "/cgi-bin/koha/serials/subscription-add.pl?op=modify&subscriptionid=[% subscriptionid %]" }, + { text: _("Edit subscription"), [% IF ( cannotedit ) %]id:'disabled', [% END %] url: "/cgi-bin/koha/serials/subscription-add.pl?op=modify&subscriptionid=[% subscriptionid %]" }, [% END %] [% IF ( CAN_user_serials_create_subscription ) %] - { text: _("Edit as new (duplicate)"), [% IF ( cannotedit ) %]disabled: true, [% END %] url: "/cgi-bin/koha/serials/subscription-add.pl?op=dup&subscriptionid=[% subscriptionid %]" }, + { text: _("Edit as new (duplicate)"), [% IF ( cannotedit ) %]id:'disabled', [% END %] url: "/cgi-bin/koha/serials/subscription-add.pl?op=dup&subscriptionid=[% subscriptionid %]" }, [% END %] [% IF ( CAN_user_serials_delete_subscription ) %] - { text: _("Delete subscription"), [% IF ( cannotedit ) %]disabled: true, [% END %] onclick: {fn: confirm_deletion }} + { text: _("Delete subscription"), [% IF ( cannotedit ) %]id:'disabled', [% END %] onclick: {fn: confirm_deletion }} [% END %] ]; [% END %] --- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-home.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/serials-home.tt @@ -74,11 +74,11 @@ Serials updated : [% END %] [% END %] - [% IF ( done_searched ) %] +[% IF ( done_searched ) %]
ISSN | Title | @@ -88,12 +88,12 @@ Serials updated : [% IF ( routing && CAN_user_serials_routing ) %]Routing list | - [% END %] + [% END %]||
---|---|---|---|---|
@@ -103,9 +103,10 @@ Serials updated : | ||||
[% IF ( subscription.issn ) %][% subscription.issn %] @@ -122,32 +123,29 @@ Serials updated : | [% IF ( routing && CAN_user_serials_routing ) %]- [% IF ( subscription.cannotedit ) %] - + [% IF ( subscription.routingedit ) %] + Edit [% ELSE %] - [% IF ( subscription.routingedit ) %] - Edit - [% ELSE %] - New - [% END %] + New [% END %] | [% END %]Issue history | - [% IF ( subscription.cannotedit ) %] - - [% ELSE %] - [% IF ( CAN_user_serials_receive_serials ) %]Serial receive[% END %] - [% END %] + [% IF ( CAN_user_serials_receive_serials ) %] + Serial receive + [% END %] |
Sorry, there is no result for your search.
+ [% END %] +[% END %] --- a/serials/serials-collection.pl +++ a/serials/serials-collection.pl @@ -36,8 +36,7 @@ my $query = new CGI; my $op = $query->param('op') || q{}; my $dbh = C4::Context->dbh; -my ($template, $loggedinuser, $cookie); -($template, $loggedinuser, $cookie) +my ($template, $loggedinuser, $cookie) = get_template_and_user({template_name => "serials/serials-collection.tmpl", query => $query, type => "intranet", @@ -99,6 +98,7 @@ if (@subscriptionid){ my @subscriptioninformation=(); foreach my $subscriptionid (@subscriptionid){ my $subs= GetSubscription($subscriptionid); + $subs->{opacnote} =~ s/\n/\