@@ -3081,7 +3081,10 @@ public function exportHolds() {
3081
3081
$ selectedUnavailableSortOption = ($ showPosition ? 'position ' : 'title ' );
3082
3082
}
3083
3083
3084
- $ allHolds = $ user ->getHolds (true , $ selectedUnavailableSortOption , $ selectedAvailableSortOption , $ source );
3084
+ $ selectedHolds = $ this ->setFilterSelectedHolds ();
3085
+ $ selectedUsers = $ this ->setFilterLinkedUsers ();
3086
+
3087
+ $ allHolds = $ this ->filterHolds ($ user ->getHolds (true , $ selectedUnavailableSortOption , $ selectedAvailableSortOption , $ source ), $ selectedUsers , $ selectedHolds );
3085
3088
3086
3089
$ showDateWhenSuspending = $ user ->showDateWhenSuspending ();
3087
3090
@@ -3550,6 +3553,63 @@ public function getCheckouts(): array {
3550
3553
return $ result ;
3551
3554
}
3552
3555
3556
+ public function filterHolds (array $ allHolds , array $ selectedUsers , $ selectedHolds ): array {
3557
+ if (!empty ($ selectedHolds ) && !is_array ($ selectedHolds )) {
3558
+ $ selectedHoldsArray = [];
3559
+ parse_str ($ selectedHolds , $ parsedHolds );
3560
+
3561
+ if (isset ($ parsedHolds ['selected ' ])) {
3562
+ foreach ($ parsedHolds ['selected ' ] as $ holdKey => $ value ) {
3563
+ if (preg_match ('/(\d+)\|(\d+)\|/ ' , $ holdKey , $ matches )) {
3564
+ $ selectedHoldsArray [] = [
3565
+ 'userId ' => (int )$ matches [1 ],
3566
+ 'recordId ' => (int )$ matches [2 ],
3567
+ ];
3568
+ }
3569
+ }
3570
+ }
3571
+ $ selectedHolds = $ selectedHoldsArray ;
3572
+ }
3573
+
3574
+ $ filteredHolds = [
3575
+ 'available ' => [],
3576
+ 'unavailable ' => [],
3577
+ ];
3578
+
3579
+ foreach (['available ' , 'unavailable ' ] as $ type ) {
3580
+ foreach ($ allHolds [$ type ] as $ key => $ hold ) {
3581
+ $ includeHold = true ;
3582
+
3583
+ if (!empty ($ selectedUsers ) && in_array ($ hold ->userId , $ selectedUsers )) {
3584
+ $ includeHold = false ;
3585
+ }
3586
+
3587
+ if (!empty ($ selectedHolds )) {
3588
+ $ matchFound = false ;
3589
+ foreach ($ selectedHolds as $ selectedHold ) {
3590
+
3591
+ $ holdRecordId = intval (trim ($ hold ->recordId ));
3592
+ $ selectedHoldRecordId = intval (trim ($ selectedHold ['recordId ' ]));
3593
+ $ holdUserId = intval (trim ($ hold ->userId ));
3594
+ $ selectedHoldUserId = intval (trim ($ selectedHold ['userId ' ]));
3595
+ if ($ holdRecordId == $ selectedHoldRecordId && $ holdUserId == $ selectedHoldUserId ){
3596
+ $ matchFound = true ;
3597
+ break ;
3598
+ }
3599
+ }
3600
+ if (!$ matchFound ) {
3601
+ $ includeHold = false ;
3602
+ }
3603
+ }
3604
+
3605
+ if ($ includeHold ) {
3606
+ $ filteredHolds [$ type ][$ key ] = $ hold ;
3607
+ }
3608
+ }
3609
+ }
3610
+ return $ filteredHolds ;
3611
+ }
3612
+
3553
3613
/** @noinspection PhpUnused */
3554
3614
public function getHolds (): array {
3555
3615
global $ interface ;
@@ -3602,6 +3662,12 @@ public function getHolds(): array {
3602
3662
$ showPlacedColumn = $ user ->showHoldPlacedDate ();
3603
3663
$ interface ->assign ('showPlacedColumn ' , $ showPlacedColumn );
3604
3664
3665
+ $ selectedUsers = $ this ->setFilterLinkedUsers ();
3666
+ $ interface ->assign ('selectedUsers ' , $ selectedUsers );
3667
+
3668
+ $ selectedHolds = $ this ->setFilterSelectedHolds ();
3669
+ $ interface ->assign ('selectedHolds ' , $ selectedHolds );
3670
+
3605
3671
$ location = new Location ();
3606
3672
$ pickupBranches = $ location ->getPickupBranches ($ user );
3607
3673
$ interface ->assign ('numPickupBranches ' , count ($ pickupBranches ));
@@ -3634,7 +3700,8 @@ public function getHolds(): array {
3634
3700
$ availableHoldSortOptions ['location ' ] = 'Pickup Location ' ;
3635
3701
}
3636
3702
3637
- if (count ($ user ->getLinkedUsers ()) > 0 ) {
3703
+ $ linkedUsers = $ user ->getLinkedUsers ();
3704
+ if (count ($ linkedUsers ) > 0 ) {
3638
3705
$ unavailableHoldSortOptions ['libraryAccount ' ] = 'Library Account ' ;
3639
3706
$ availableHoldSortOptions ['libraryAccount ' ] = 'Library Account ' ;
3640
3707
}
@@ -3643,6 +3710,7 @@ public function getHolds(): array {
3643
3710
'available ' => $ availableHoldSortOptions ,
3644
3711
'unavailable ' => $ unavailableHoldSortOptions ,
3645
3712
]);
3713
+ $ interface ->assign ('linkedUsers ' , $ linkedUsers );
3646
3714
3647
3715
if ($ selectedAvailableSortOption == null || !array_key_exists ($ selectedAvailableSortOption , $ availableHoldSortOptions )) {
3648
3716
$ selectedAvailableSortOption = 'expire ' ;
@@ -3664,7 +3732,7 @@ public function getHolds(): array {
3664
3732
global $ offlineMode ;
3665
3733
if (!$ offlineMode ) {
3666
3734
if ($ user ) {
3667
- $ allHolds = $ user ->getHolds (true , $ selectedUnavailableSortOption , $ selectedAvailableSortOption , $ source );
3735
+ $ allHolds = $ this -> filterHolds ( $ user ->getHolds (true , $ selectedUnavailableSortOption , $ selectedAvailableSortOption , $ source), $ selectedUsers , $ selectedHolds );
3668
3736
$ interface ->assign ('recordList ' , $ allHolds );
3669
3737
}
3670
3738
}
@@ -3953,6 +4021,44 @@ function setSort($requestParameter, $sortType) {
3953
4021
return $ sort ;
3954
4022
}
3955
4023
4024
+ function setFilterLinkedUsers (): array {
4025
+ global $ interface ;
4026
+ $ selectedUsers = [];
4027
+ if (isset ($ _REQUEST ['selectedUsers ' ])) {
4028
+ $ selectedUsers = explode (', ' , $ _REQUEST ['selectedUsers ' ]);
4029
+ if (isset ($ _SESSION )) {
4030
+ $ _SESSION ['selectedUsers ' ] = $ selectedUsers ;
4031
+ }
4032
+ } elseif (isset ($ _SESSION ['selectedUsers ' ])) {
4033
+ $ selectedUsers = $ _SESSION ['selectedUsers ' ];
4034
+ }
4035
+ $ interface ->assign ('selectedUsers ' , $ selectedUsers );
4036
+
4037
+ return $ selectedUsers ;
4038
+ }
4039
+
4040
+ function setFilterSelectedHolds () {
4041
+ global $ interface ;
4042
+ $ selectedHolds = [];
4043
+
4044
+ if (isset ($ _REQUEST ['selectedHolds ' ])) {
4045
+ $ selectedHolds = json_decode ($ _REQUEST ['selectedHolds ' ], true );
4046
+
4047
+ if (isset ($ _SESSION )) {
4048
+ if (empty ($ selectedHolds )) {
4049
+ unset($ _SESSION ['selectedHolds ' ]);
4050
+ } else {
4051
+ $ _SESSION ['selectedHolds ' ] = $ selectedHolds ;
4052
+ }
4053
+ }
4054
+ } elseif (isset ($ _SESSION ['selectedHolds ' ])) {
4055
+ $ selectedHolds = $ _SESSION ['selectedHolds ' ];
4056
+ }
4057
+ $ interface ->assign ('selectedHolds ' , $ selectedHolds );
4058
+
4059
+ return $ selectedHolds ;
4060
+ }
4061
+
3956
4062
/**
3957
4063
* @param string $selectedSortOption
3958
4064
* @param Checkout[] $allCheckedOut
0 commit comments