circ.holds.usr_not_requestor considered harmful
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Evergreen |
New
|
Undecided
|
Unassigned |
Bug Description
Many moons ago, before all living memory, hold rules (in the scripted sense) were chosen based on the group of the user that would eventually get the item. One could customize these scripts so that the group of the requesting user, who might be a staff member, would be used instead.
Then came in-db circ. All else being equal, it starts with the requestor, which is required. The user can be added, optionally, and used instead. And, there is a global flag called circ.holds.
However, in-db circ is too subtle for that flag in all but the most trivial cases. In the end, it just makes understanding the rules harder and more complicated, because it is effectively a hidden variable.
I propose that we remove this flag entirely, and the code that looks at it. For upgrades, we can swap requestor and user groups on rules, which will have the effect of leaving configurations unchanged, but they will act the way they look at that point.
Additionally, we could make requestor group optional on hold matchpoints, which would make the system more flexible.
tags: | added: circ-holds |
I'm all for stripping it out and making requestor_grp nullable (Not much point in requiring it if a lot of installations only ever set it to "Users"). Not all installations afford any special preference to staff-placed holds over user-placed holds. In the past it was a source of confusion for quite some time because staff-placed holds would be able to transit before the item's age protection was up. (I seem to remember some old code specifically ignoring age protection when requestor != usr for script based holds.)