Bugzilla – Attachment 30300 Details for
Bug 9303
relative's checkouts in the opac
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
[SIGNED OFF] Bug 9303 [3] - relative's checkouts in the opac
SIGNED-OFF-Bug-9303-3---relatives-checkouts-in-the.patch (text/plain), 24.89 KB, created by
Nick Clemens (kidclamp)
on 2014-07-29 17:27:52 UTC
(
hide
)
Description:
[SIGNED OFF] Bug 9303 [3] - relative's checkouts in the opac
Filename:
MIME Type:
Creator:
Nick Clemens (kidclamp)
Created:
2014-07-29 17:27:52 UTC
Size:
24.89 KB
patch
obsolete
>From d7bc534bbaddb46962d69f027ea6df1c5fc58518 Mon Sep 17 00:00:00 2001 >From: Kyle M Hall <kyle@bywatersolutions.com> >Date: Mon, 21 Jul 2014 11:49:40 -0400 >Subject: [PATCH] [SIGNED OFF] Bug 9303 [3] - relative's checkouts in the opac > >Signed-off-by: Nick Clemens <nick@quecheelibrary.org> >--- > C4/Members.pm | 26 ---------- > C4/Reserves.pm | 1 + > Koha/Template/Plugin/Koha.pm | 15 ++++++ > .../prog/en/modules/admin/preferences/opac.pref | 7 +++ > .../prog/en/modules/admin/preferences/patrons.pref | 6 +++ > .../prog/en/modules/members/memberentrygen.tt | 16 ++++++ > .../prog/en/modules/members/moremember.tt | 10 ++++ > .../bootstrap/en/modules/opac-memberentry.tt | 43 ++++++++++++++++ > .../opac-tmpl/bootstrap/en/modules/opac-privacy.tt | 24 ++++++++- > .../opac-tmpl/bootstrap/en/modules/opac-user.tt | 54 ++++++++++++++++++-- > members/moremember.pl | 1 + > opac/opac-privacy.pl | 38 +++++++++----- > opac/opac-user.pl | 32 ++++++++---- > 13 files changed, 219 insertions(+), 54 deletions(-) > >diff --git a/C4/Members.pm b/C4/Members.pm >index 13244e0..ea73c4d 100644 >--- a/C4/Members.pm >+++ b/C4/Members.pm >@@ -110,7 +110,6 @@ BEGIN { > push @EXPORT, qw( > &ModMember > &changepassword >- &ModPrivacy > ); > > #Delete data >@@ -2180,31 +2179,6 @@ sub GetBorrowersNamesAndLatestIssue { > return $results; > } > >-=head2 ModPrivacy >- >-=over 4 >- >-my $success = ModPrivacy( $borrowernumber, $privacy ); >- >-Update the privacy of a patron. >- >-return : >-true on success, false on failure >- >-=back >- >-=cut >- >-sub ModPrivacy { >- my $borrowernumber = shift; >- my $privacy = shift; >- return unless defined $borrowernumber; >- return unless $borrowernumber =~ /^\d+$/; >- >- return ModMember( borrowernumber => $borrowernumber, >- privacy => $privacy ); >-} >- > =head2 AddMessage > > AddMessage( $borrowernumber, $message_type, $message, $branchcode ); >diff --git a/C4/Reserves.pm b/C4/Reserves.pm >index a98eed4..9b0f63a 100644 >--- a/C4/Reserves.pm >+++ b/C4/Reserves.pm >@@ -260,6 +260,7 @@ sub GetReserve { > my ($reserve_id) = @_; > > my $dbh = C4::Context->dbh; >+ > my $query = "SELECT * FROM reserves WHERE reserve_id = ?"; > my $sth = $dbh->prepare( $query ); > $sth->execute( $reserve_id ); >diff --git a/Koha/Template/Plugin/Koha.pm b/Koha/Template/Plugin/Koha.pm >index 2eff9f1..e5f3374 100644 >--- a/Koha/Template/Plugin/Koha.pm >+++ b/Koha/Template/Plugin/Koha.pm >@@ -22,6 +22,7 @@ use Modern::Perl; > use base qw( Template::Plugin ); > > use C4::Context; >+use Koha::Database; > > =pod > >@@ -44,4 +45,18 @@ sub Preference { > return C4::Context->preference( $pref ); > } > >+sub Find { >+ my ( $self, $rs, $id ) = @_; >+ >+ return unless ( $rs && $id ); >+ >+ my $resultset = Koha::Database->new()->schema()->resultset($rs); >+ >+ return unless $resultset; >+ >+ my $row = $resultset->find($id); >+ >+ return $row; >+} >+ > 1; >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref >index 9fe3312..ff31c39 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref >@@ -583,6 +583,13 @@ OPAC: > no: "Don't allow" > - patrons to choose their own privacy settings for their reading history. This requires opacreadinghistory and AnonymousPatron > - >+ - pref: AllowPatronToSetCheckoutsVisibilityForGuarantor >+ default: 0 >+ choices: >+ yes: Allow >+ no: "Don't allow" >+ - patrons to choose their own privacy settings for showing the patron's checkouts to the patron's guarantor". >+ - > - Use borrowernumber > - pref: AnonymousPatron > class: integer >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/patrons.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/patrons.pref >index 2469431..fef9a0f 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/patrons.pref >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/patrons.pref >@@ -134,6 +134,12 @@ Patrons: > no: "Don't" > - enable the ability to upload and attach arbitrary files to a borrower record. > - >+ - pref: AllowStaffToSetCheckoutsVisibilityForGuarantor >+ choices: >+ yes: Allow >+ no: "Don't allow" >+ - staff to set the ability for a patron's checkouts to be viewed by linked patrons in the OPAC. >+ - > - Card numbers for patrons must be > - pref: CardnumberLength > - "characters long. The length can be a single number to specify an exact length, a range separated by a comma (i.e., 'Min,Max'), or a maximum with no minimum (i.e., ',Max')." >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tt >index 858f7f3..493573d 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tt >@@ -1,5 +1,6 @@ > [% IF ( opduplicate ) %][% SET focusAction = "clearDupe" %][% END %] > [% USE KohaDates %] >+[% USE Koha %] > [% INCLUDE 'doc-head-open.inc' %] > <title>Koha › Patrons › > [% IF ( opadd ) %]Add[% ELSIF ( opduplicate ) %]Duplicate[% ELSE %] Modify[% END %] [% IF ( categoryname ) %] [% categoryname %] patron[% ELSE %][% IF ( I ) %] Organization patron[% END %][% IF ( A ) %] Adult patron[% END %][% IF ( C ) %] Child patron[% END %][% IF ( P ) %] Professional patron[% END %][% IF ( S ) %] Staff patron[% END %][% END %][% UNLESS ( opadd ) %] [% surname %], [% firstname %][% END %]</title> >@@ -1170,6 +1171,21 @@ > [% END %] > [% IF ( mandatorypassword ) %]<span class="required">Required</span>[% END %][% IF ( ERROR_password_mismatch ) %]<span class="required">Passwords do not match</span>[% END %] > </li> >+ [% IF guarantorid && Koha.Preference('AllowStaffToSetCheckoutsVisibilityForGuarantor') %] >+ <li> >+ <label for="privacy_guarantor_checkouts">Show checkouts to guarantor</label> >+ <select name="privacy_guarantor_checkouts" id="privacy_guarantor_checkouts"> >+ [% IF privacy_guarantor_checkouts %] >+ <option value="0">No</option> >+ <option value="1" selected>Yes</option> >+ [% ELSE %] >+ <option value="0" selected>No</option> >+ <option value="1">Yes</option> >+ [% END %] >+ </select> >+ <div class="hint">Allow guarantor of this patron to view this patron's checkouts from the OPAC</div> >+ </li> >+ [% END %] > </ol> > </fieldset> > [% END # hide fieldset %][% END %] >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt >index 74c89c9..9193995 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt >@@ -338,6 +338,16 @@ function validate1(date) { > [% IF ( privacy1 ) %]Default[% END %] > [% IF ( privacy2 ) %]Never[% END %] > </li>[% END %] >+ >+ <li> >+ <span class="label">Show checkouts to guarantor</span> >+ [% IF privacy_guarantor_checkouts %] >+ Yes >+ [% ELSE %] >+ No >+ [% END %] >+ </li> >+ > [% IF ( sort1 ) %]<li><span class="label">Sort field 1:</span>[% lib1 %]</li>[% END %] > [% IF ( sort2 ) %]<li><span class="label">Sort field 2:</span>[% lib2 %]</li>[% END %] > <li><span class="label">Username: </span>[% userid %]</li> >diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-memberentry.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-memberentry.tt >index 7f31c96..b3df832 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-memberentry.tt >+++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-memberentry.tt >@@ -54,6 +54,33 @@ > <div class="alert">You typed in the wrong characters in the box before submitting. Please try again.</div> > [% END %] > >+ [% IF borrower.guarantorid && !Koha.Preference('OPACPrivacy') && Koha.Preference('AllowPatronToSetCheckoutsVisibilityForGuarantor') %] >+ <fieldset class="rows" id="memberentry_privacy"> >+ <legend id="privacy_legend">Privacy</legend> >+ <ol> >+ <li> >+ <label>Allow your guarantor to view your current checkouts?</label> >+ <select id="privacy_guarantor_checkouts"> >+ <option value="0">No</option> >+ [% IF borrower.privacy_guarantor_checkouts %] >+ <option value="1" selected="selected">Yes</option> >+ [% ELSE %] >+ <option value="1">Yes</option> >+ [% END %] >+ </select> >+ <span class="hint"> >+ <a id="update_privacy_guarantor_checkouts" href="#" class="btn">Update</a> >+ <span id="update_privacy_guarantor_checkouts_message" class="alert" style="display:none"></span> >+ </span> >+ <span class="hint"> >+ [% SET g = Koha.Find('Borrower',borrower.guarantorid) %] >+ Your guarantor is <i>[% g.firstname %] [% g.surname %]</i> >+ </span> >+ </li> >+ </ol> >+ </fieldset> >+ [% END %] >+ > <form method="post" action="/cgi-bin/koha/opac-memberentry.pl" id="memberentry-form"> > > [% UNLESS hidden.defined('branchcode') %] >@@ -777,6 +804,22 @@ > [% ELSE %] > $( "#borrower_dateofbirth" ).datepicker({ yearRange: "c-120:c" }); > [% END %] >+ >+ [% IF borrower.guarantorid && !Koha.Preference('OPACPrivacy') && Koha.Preference('AllowPatronToSetCheckoutsVisibilityForGuarantor') %] >+ $('#update_privacy_guarantor_checkouts').click( function() { >+ $.post( "/cgi-bin/koha/svc/patron/show_checkouts_to_relatives", { privacy_guarantor_checkouts: $('#privacy_guarantor_checkouts').val() }) >+ .done(function( data ) { >+ var message; >+ if ( data.success ) { >+ message = _("Your setting has been updated!"); >+ } else { >+ message = _("Unable to update your setting!"); >+ } >+ >+ $('#update_privacy_guarantor_checkouts_message').fadeIn("slow").text( message ).delay( 5000 ).fadeOut("slow"); >+ }); >+ }); >+ [% END %] > }); > //]]> > </script> >diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-privacy.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-privacy.tt >index bc731cd..4a678e6 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-privacy.tt >+++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-privacy.tt >@@ -48,7 +48,7 @@ > <input type="hidden" name="op" value="update_privacy" /> > <fieldset> > <label for="privacy">Please choose your privacy rule:</label> >- <div class="input-append"> >+ <div> > <select name="privacy" id="privacy"> > [% IF ( privacy0 ) %] > <option value="0" selected="selected" class="privacy0">Forever</option> >@@ -66,8 +66,28 @@ > <option value="2" class="privacy2">Never</option> > [% END %] > </select> >- <button type="Submit" class="btn">Submit</button> > </div> >+ >+ [% SET b = Koha.Find('Borrower', borrower.borrowernumber) %] >+ [% IF b.guarantorid && Koha.Preference('AllowPatronToSetCheckoutsVisibilityForGuarantor') %] >+ <div> >+ <label for="privacy_guarantor_checkouts">Allow your guarantor to view your current checkouts?</label> >+ <select name="privacy_guarantor_checkouts"> >+ [% IF borrower.privacy_guarantor_checkouts %] >+ <option value="0">No</option> >+ <option value="1" selected>Yes</option> >+ [% ELSE %] >+ <option value="0" selected>No</option> >+ <option value="1">Yes</option> >+ [% END %] >+ </select> >+ <span class="hint"> >+ Your guarantor is <i>[% b.guarantor.firstname %] [% b.guarantor.surname %]</i> >+ </span> >+ </div> >+ [% END %] >+ >+ <button type="Submit" class="btn">Save</button> > </fieldset> > </form> > <h2>Immediate deletion</h2> >diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt >index ec3de30..ab82bb0 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt >+++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-user.tt >@@ -1,5 +1,6 @@ > [% USE Koha %] > [% USE KohaDates %] >+[% USE EncodeUTF8 %] > > [% INCLUDE 'doc-head-open.inc' %] > [% IF ( LibraryNameTitle ) %][% LibraryNameTitle %][% ELSE %]Koha online[% END %] catalog › Your library home >@@ -104,6 +105,7 @@ > <div id="opac-user-views" class="toptabs"> > <ul> > <li><a href="#opac-user-checkouts">Checked out ([% issues_count %])</a></li> >+ [% IF relatives %]<li><a href="#opac-user-relative-issues">Relatives' checkouts</a></li>[% END %] > [% IF ( overdues_count ) %]<li><a href="#opac-user-overdues">Overdue ([% overdues_count %])</a></li>[% END %] > [% IF ( OPACFinesTab ) %] > [% IF ( BORROWER_INF.amountoverfive ) %]<li><a href="#opac-user-fines">Fines ([% BORROWER_INF.amountoutstanding %])</a></li>[% END %] >@@ -132,7 +134,7 @@ > [% IF ( show_barcode ) %] > <th>Barcode</th> > [% END %] >- <th>Call No.</th> >+ <th>Call number</th> > [% IF ( OpacRenewalAllowed && !( borrower.is_expired && borrower.BlockExpiredPatronOpacActions ) ) %] > <th class="nosort">Renew</th> > [% END %] >@@ -361,6 +363,51 @@ > </div> <!-- /#opac-user-waiting --> > [% END # waiting_count && atdestination %] > >+ [% IF relatives %] >+ <div id="opac-user-relative-issues"> >+ <table id="opac-user-relative-issues-table" class="table table-bordered table-striped"> >+ <thead> >+ <tr> >+ <th class="anti-the">Title</th> >+ <th>Due</th> >+ <th>Barcode</th> >+ <th>Call number</th> >+ <th class="psort">Relative</th> >+ </tr> >+ </thead> >+ >+ <tbody> >+ [% FOREACH r IN relatives %] >+ [% FOREACH i IN r.issues %] >+ <tr> >+ <td> >+ <a href="/cgi-bin/koha/opac-detail.pl?biblionumber=[% i.item.biblio.biblionumber %]"> >+ [% i.item.biblio.title | $EncodeUTF8 %] >+ </a> >+ </td> >+ >+ <td> >+ [% i.date_due | $KohaDates %] >+ </td> >+ >+ <td> >+ [% i.item.barcode %] >+ </td> >+ >+ <td> >+ [% i.item.itemcallnumber | $EncodeUTF8 %] >+ </td> >+ >+ <td> >+ [% r.firstname | $EncodeUTF8 %] [% r.surname | $EncodeUTF8 %] >+ </td> >+ </tr> >+ [% END %] >+ [% END %] >+ </tbody> >+ </table> >+ </div> >+ [% END %] > > [% IF ( overdues_count ) %] > <div id="opac-user-overdues"> >@@ -373,7 +420,7 @@ > <th class="anti-the">Title</th> > [% UNLESS ( item_level_itypes ) %]<th>Item type</th> [% END %] > [% IF ( show_barcode ) %]<th>Barcode</th>[% END %] >- <th>Call no.</th> >+ <th>Call number</th> > <th class="title-string psort">Due</th> > [% IF ( OpacRenewalAllowed ) %] > <th class="nosort">Renew</th> >@@ -682,7 +729,8 @@ > $(".js-hide").hide(); > $(".modal-nojs").addClass("modal").addClass("hide").removeClass("modal-nojs"); > $(".suspend-until").prop("readonly",1); >- var dTables = $("#checkoutst,#holdst,#overduest"); >+ >+ var dTables = $("#checkoutst,#holdst,#overduest,#opac-user-relative-issues-table"); > dTables.each(function(){ > var thIndex = $(this).find("th.psort").index(); > $(this).dataTable($.extend(true, {}, dataTablesDefaults, { >diff --git a/members/moremember.pl b/members/moremember.pl >index b1df1dd..094f8f3 100755 >--- a/members/moremember.pl >+++ b/members/moremember.pl >@@ -362,6 +362,7 @@ $template->param( > is_child => ($category_type eq 'C'), > samebranch => $samebranch, > quickslip => $quickslip, >+ privacy_guarantor_checkouts => $data->{'privacy_guarantor_checkouts'}, > activeBorrowerRelationship => (C4::Context->preference('borrowerRelationship') ne ''), > AutoResumeSuspendedHolds => C4::Context->preference('AutoResumeSuspendedHolds'), > SuspendHoldsIntranet => C4::Context->preference('SuspendHoldsIntranet'), >diff --git a/opac/opac-privacy.pl b/opac/opac-privacy.pl >index 7b56e5d..08ebe67 100755 >--- a/opac/opac-privacy.pl >+++ b/opac/opac-privacy.pl >@@ -40,18 +40,25 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( > } > ); > >-my $op = $query->param("op"); >-my $privacy = $query->param("privacy"); >+my $op = $query->param("op"); >+my $privacy = $query->param("privacy"); >+my $privacy_guarantor_checkouts = $query->param("privacy_guarantor_checkouts"); > >-if ($op eq "update_privacy") >-{ >- ModPrivacy($borrowernumber,$privacy); >- $template->param('privacy_updated' => 1); >+if ( $op eq "update_privacy" ) { >+ ModMember( >+ borrowernumber => $borrowernumber, >+ privacy => $privacy, >+ privacy_guarantor_checkouts => $privacy_guarantor_checkouts, >+ ); >+ $template->param( 'privacy_updated' => 1 ); > } >-if ($op eq "delete_record") { >+elsif ( $op eq "delete_record" ) { >+ > # delete all reading records for items returned > # uses a hardcoded date ridiculously far in the future >- my ($rows,$err_history_not_deleted) = AnonymiseIssueHistory('2999-12-12',$borrowernumber); >+ my ( $rows, $err_history_not_deleted ) = >+ AnonymiseIssueHistory( '2999-12-12', $borrowernumber ); >+ > # confirm the user the deletion has been done > if ( !$err_history_not_deleted ) { > $template->param( 'deleted' => 1 ); >@@ -60,14 +67,17 @@ if ($op eq "delete_record") { > $template->param( 'err_history_not_deleted' => 1 ); > } > } >+ > # get borrower privacy .... >-my ( $borr ) = GetMemberDetails( $borrowernumber ); >+my $borrower = GetMemberDetails( $borrowernumber ); > >-$template->param( 'Ask_data' => '1', >- 'privacy'.$borr->{'privacy'} => 1, >- 'firstname' => $borr->{'firstname'}, >- 'surname' => $borr->{'surname'}, >- 'privacyview' => 1, >+$template->param( >+ 'Ask_data' => 1, >+ 'privacy' . $borrower->{'privacy'} => 1, >+ 'privacyview' => 1, >+ 'borrower' => $borrower, >+ 'surname' => $borrower->{surname}, >+ 'firstname' => $borrower->{firstname}, > ); > > output_html_with_http_headers $query, $cookie, $template->output; >diff --git a/opac/opac-user.pl b/opac/opac-user.pl >index 3284b3a..361c339 100755 >--- a/opac/opac-user.pl >+++ b/opac/opac-user.pl >@@ -35,6 +35,7 @@ use C4::Items; > use C4::Letters; > use C4::Branch; # GetBranches > use Koha::DateUtils; >+use Koha::Database; > > use constant ATTRIBUTE_SHOW_BARCODE => 'SHOW_BCODE'; > >@@ -373,18 +374,31 @@ if ( $borr->{'opacnote'} ) { > ); > } > >+if ( C4::Context->preference('AllowPatronToSetCheckoutsVisibilityForGuarantor') >+ || C4::Context->preference('AllowStaffToSetCheckoutsVisibilityForGuarantor') ) >+{ >+ my @relatives = >+ Koha::Database->new()->schema()->resultset("Borrower")->search( >+ { >+ privacy_guarantor_checkouts => 1, >+ 'me.guarantorid' => $borrowernumber >+ }, >+ { prefetch => [ { 'issues' => { 'item' => 'biblio' } } ] } >+ ); >+ $template->param( relatives => \@relatives ); >+} >+ > $template->param( >- bor_messages_loop => GetMessages( $borrowernumber, 'B', 'NONE' ), >+ borrower => $borr, >+ bor_messages_loop => GetMessages( $borrowernumber, 'B', 'NONE' ), > waiting_count => $wcount, >- patronupdate => $patronupdate, >+ patronupdate => $patronupdate, > OpacRenewalAllowed => C4::Context->preference("OpacRenewalAllowed"), >- userview => 1, >-); >- >-$template->param( >- SuspendHoldsOpac => C4::Context->preference('SuspendHoldsOpac'), >- AutoResumeSuspendedHolds => C4::Context->preference('AutoResumeSuspendedHolds'), >- OpacHoldNotes => C4::Context->preference('OpacHoldNotes'), >+ userview => 1, >+ SuspendHoldsOpac => C4::Context->preference('SuspendHoldsOpac'), >+ OpacHoldNotes => C4::Context->preference('OpacHoldNotes'), >+ AutoResumeSuspendedHolds => >+ C4::Context->preference('AutoResumeSuspendedHolds'), > ); > > output_html_with_http_headers $query, $cookie, $template->output; >-- >1.7.10.4
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 9303
:
22757
|
22770
|
22771
|
22772
|
22783
|
22789
|
22790
|
22809
|
22966
|
22967
|
22968
|
22974
|
22975
|
23086
|
23087
|
23088
|
23089
|
23090
|
23525
|
23526
|
23527
|
24009
|
24010
|
24011
|
24773
|
24774
|
24775
|
24776
|
25008
|
25584
|
25585
|
25586
|
27537
|
27538
|
27539
|
27540
|
27541
|
27542
|
27543
|
27698
|
27699
|
28153
|
28154
|
28155
|
28156
|
28157
|
28158
|
28159
|
28160
|
28161
|
28912
|
29171
|
29172
|
29215
|
29286
|
29287
|
29288
|
29289
|
29290
|
29299
|
29302
|
29303
|
29304
|
29932
|
29933
|
29934
|
29935
|
29936
|
29937
|
30287
|
30288
|
30289
|
30297
|
30298
|
30299
|
30300
|
32053
|
32054
|
32055
|
33049
|
34629
|
34630
|
34631
|
34632
|
34633
|
35519
|
35520
|
35521
|
35522
|
35523
|
35524
|
35525
|
35526
|
35527
|
35528
|
35529
|
35530
|
35531
|
35532
|
35678
|
35679
|
35680
|
35681
|
35682
|
35683
|
35684
|
35686
|
35687
|
35688
|
35689
|
35690
|
35691
|
35832
|
36287
|
36288
|
36289
|
37110
|
37111
|
37112
|
38264
|
38265
|
38266
|
38267
|
38328
|
38329
|
38330
|
38331
|
38446
|
38447
|
38448
|
38449
|
38450
|
38820
|
38821
|
38822
|
38823
|
38824
|
39042
|
39043
|
39044
|
39045
|
39046
|
39047
|
39048
|
39811
|
39817
|
39818
|
39819
|
39820
|
39821
|
39822
|
39823
|
44430
|
44431
|
44432
|
44433
|
44434
|
44435
|
44436
|
44511
|
44512
|
44513
|
44514
|
44515
|
44516
|
44517
|
46136
|
46137
|
46138
|
46139
|
46140
|
46141
|
46142