Skip to content

[6.x] Fix scheduled and expired status queries when both date behaviors are private - #15577

Open
wakqasahmed wants to merge 1 commit into
statamic:6.xfrom
wakqasahmed:fix/issue-13342-scheduled-expired-both-private
Open

wakqasahmed wants to merge 1 commit into
statamic:6.xfrom
wakqasahmed:fix/issue-13342-scheduled-expired-both-private

Conversation

@wakqasahmed

Copy link
Copy Markdown
Contributor

Fixes #13342.

If a dated collection has both its future and past date behavior set to private, filtering the entry listing by Scheduled or Expired always came back empty, even though Entry::status() correctly reports those entries as scheduled/expired. That's the setup in the issue.

The cause is in QueriesEntryStatus::addCollectionStatusLogicToQuery. The future-private block added where('date', 'invalid') for expired, and the past-private block added it for scheduled. Those branches already return early when only one side is private, so the extra clauses only ever applied when both sides were private. There they ANDed with the real date constraint and wiped out the results. I removed them. With both private, scheduled is now date > now and expired is date < now. Published is still empty, which matches status(). Collections with only one private side behave exactly as before.

I added a both-private collection (a future and a past entry, plus drafts) to the it_filters_by_status provider in EntryQueryBuilderTest. The new scheduled and expired cases fail on 6.x without the change and pass with it.

I left Filters/Status::options() alone to keep this narrow.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Unable to filter on Scheduled entries in the collection listing in certain conditions

1 participant