bp_core_get_directory_page_ids()
should skip bp_is_active()
check in save context.
In [9177], a bp_is_active()
check was added to bp_core_get_directory_page_ids()
such that the function would not return page mappings for inactive components.
This change caused problems for custom components, as the bp_is_active()
check didn't always pass for components that didn't manually set themselves in
the active_components array. [9553] and [9555] addressed this problem by only
filtering out packaged components. See #6244. But this fix was not truly
general, as it still resulted in the deletion of bp-pages entries related to
third-party deactivated components when saving the page mapping settings.
This changeset introduces a more general fix, by distinguishing between two
different use "contexts" of bp_core_get_directory_page_ids()
:
- Read-only - When pulling up page IDs for display or for URI parsing, deactivated components should be ignored.
- Save - When modifying the bp-pages array stored in the database, we should be working with raw page data, including deactivated components.
The new $status
parameter for bp_core_get_directory_page_ids()
addresses
this distinction (possible values 'all' and 'active'). We then pass 'all' as
required in BP - namely, when modifying the bp-pages setting. This change
supercedes the fixes from #6244.
Props dtc7240, boonebgorges.
Fixes #6280.