Skip to content

Release - #534

Merged
selul merged 33 commits into
masterfrom
development
Jul 29, 2026
Merged

Release#534
selul merged 33 commits into
masterfrom
development

Conversation

@selul

@selul selul commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Linked issues

This release will close the following issues once merged:

Public changelog

  • Strengthened the automated testing that runs behind the scenes, helping catch problems earlier and making future releases more reliable
  • Fixed an existing page selected as the maintenance page being left private and returning a 404 after maintenance mode was turned off, and its content being overwritten when a template was applied
  • Fixed the chat bot on small screens, where the avatar was hidden and the chat box did not fit the phone display
  • Fixed template imports staying stuck on "Importing" when the request failed — the error is now shown and the import can be retried without reloading the page
  • Fixed a parse error that broke the setup wizard on PHP 7.1 and 7.2
  • Updated dependencies

pirate-bot and others added 18 commits May 19, 2026 08:50
…de lifecycle

Selecting an existing published page as the maintenance page no longer
leaves it private (404 for visitors) after maintenance mode is disabled
or the plugin is deactivated.

The page's original status and template are now recorded in post meta
when the page is selected (or on first enable, for pages selected before
this fix) and restored when maintenance mode is disabled and on plugin
deactivation. Pages with no recorded state are left untouched instead of
being forced private.

Fixes #523

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…plate

Applying a gallery template while an existing site page was selected
overwrote that page's content and forced it private. Templates are now
written only to pages the plugin created (marked with _wpmm_generated);
when a user-owned page is selected, it is handed back in its original
state and the template lands on a newly created maintenance page.

Recording a page's original state is now first-write-wins and the record
is cleared on restore, so re-selecting a page the plugin already modified
can no longer poison the saved original state.

Also guards the Otter CSS_Handler call, which fataled on sites without
Otter Blocks.

Refs #523

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Skip the enable-mode page takeover when the selected page no longer
exists (previously wrote orphan post meta), and reject template imports
whose slug/category do not resolve to a bundled template instead of
creating an empty maintenance page. Template slug and category are
sanitized before being used in a filesystem path.

Refs #523

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Restoring the selected page's recorded state now leaves trashed pages
alone (trashing is always user intent; the plugin never trashes), and
enabling maintenance mode with a trashed page selected records nothing,
so untrashing the page later cannot snap it back to trash.

Refs #523

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Selecting an existing published page via the real AJAX handler, enabling
and disabling maintenance mode must leave the page public with its
original content and template. Verified to fail against the unfixed
code.

Refs #523

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The job installed the latest WordPress test suite (currently 7.0.1,
which requires PHP 7.4+) on PHP 7.2, so the suite aborted before running
any test. The phpunit:7.5.20 tool pin was unused: composer run-script
resolves vendor/bin/phpunit from the lockfile.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…mically

Addresses the Copilot review on #524:
- select_page() restores the previously selected page before switching
  away from it, so the old page never keeps the maintenance template
- restoring a trashed page keeps it in the trash but hands back the
  template and clears the record, so untrashing brings it back clean
- recording claims the record with add_post_meta( ..., true ) so a
  racing request cannot capture the plugin-modified state as original

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@pirate-bot

pirate-bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Plugin build for fe9e02d is ready 🛎️!

Alexia-Soare and others added 11 commits July 28, 2026 16:04
…ve-selected-page-state

# Conflicts:
#	.github/workflows/test-php.yml
wp_insert_post() without the wp_error flag returns an int, so the
instanceof WP_Error guard was dead code; the page-state helpers also
document their void return now.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Addresses the follow-up Copilot review on #524:
- the plugin marks the publish it applies to a private page, and restore
  only reverts the status while the page still carries that plugin-made
  publish; a draft/private/trash the user chose in the meantime wins
- the original state lives in a single first-write-wins meta value, so a
  racing request can neither poison the record nor observe half of it
- a maintenance template carried over from an old release is recorded as
  no template, so restore removes it instead of making it permanent

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The active-mode constructor used to publish the selected page on every
request it found it private, silently undoing a deliberate user change
and mislabeling that publish as the original takeover. Publishing is now
gated on the recorded original status being private and on the plugin
not having published already, so it happens exactly once per takeover.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…mplate

The import reused the creation post_arr, whose private status unpublished
a generated page maintenance mode had already made public — and since the
plugin's publish is one-shot now, nothing ever republished it, leaving
visitors on a 404 instead of the maintenance screen.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The Design form posts page_id too, so a plain (non-AJAX) save could
switch the selection without restoring the old page or recording the
new one. Both writers now share switch_selected_page(). The template
import also hands back a trashed selection now, instead of orphaning
its record and maintenance template.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Resetting design replaced the whole tab with defaults, dropping page_id
without restoring the page — the last selection writer outside the
take-over lifecycle.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…state

fix: preserve selected page state across the maintenance mode lifecycle
Improved bot avatar and chat layout on mobile
Reset template import status on request failure
Copilot AI and others added 3 commits July 29, 2026 12:10
Removed trailing comma for PHP 7.1 compatibility
The automated master -> development sync failed with a merge conflict after the themeisle-sdk bump landed on master (PR #533). Resolved by keeping development's composer.lock, taking only the themeisle-sdk entry from master (3.3.56 -> 3.3.58); development's dev-dependency set is unchanged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sync branch: merge master into development
@selul
selul merged commit e14e975 into master Jul 29, 2026
10 checks passed
@pirate-bot

Copy link
Copy Markdown
Contributor

🎉 This PR is included in version 2.6.23 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

@pirate-bot pirate-bot added the released Indicate that an issue has been resolved and released in a particular version of the product. label Jul 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

released Indicate that an issue has been resolved and released in a particular version of the product.

Projects

None yet

5 participants