@prefix sioc: <http://rdfs.org/sioc/ns#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix content: <http://purl.org/rss/1.0/modules/content/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

<https://lhero.org/?post_type=lh-portfolio&#038;p=147051>
  a sioc:Post ;
  dc:title "Changelog" ;
  dcterms:identifier 147051 ;
  dc:modified "2026-09-15T23:22:42Z"^^xsd:dateTime ;
  dc:created "2026-09-05T02:53:44Z"^^xsd:dateTime ;
  sioc:link <https://lhero.org/portfolio/lh-polls/changelog/> ;
  sioc:has_creator <https://lhero.org/author/1/#account> ;
  sioc:has_container <https://lhero.org/#posts> ;
  content:encoded "<ul class=\"lh_portfolio-meta\"><li><strong>Part of:</strong> <a href=\"https://lhero.org/portfolio/lh-polls/\">LH Polls</a></li></ul><h3 class=\"wp-block-heading\">1.0.12 (current, unreleased)</h3><ul class=\"wp-block-list\"><li>Added open/close messaging: informational _lh_polls_opens_at / _lh_polls_closes_at fields in Poll Settings. When a poll is closed, the front-end notice now explains when voting opens/closes rather than a bare &quot;closed&quot; message. Purely informational — never auto-triggers opening or closing, which remains the manual &quot;Closed&quot; checkbox.</li></ul><h3 class=\"wp-block-heading\">1.0.11 — 2026-09-05</h3><ul class=\"wp-block-list\"><li>Split the LH_Polls_Post_Types god class: metabox render/save logic extracted into dedicated LH_Polls_Settings_Metabox, LH_Polls_Options_Metabox, LH_Polls_Votes_Metabox, and LH_Polls_Admin_Notices classes. Post_Types is now trimmed to CPT/meta-box registration, the shared should_save_poll_meta() save guard, delete cleanup, and publish validation. Pure relocation, no behavioural change.</li><li>Fixed PCP-flagged PreparedSQL.NotPrepared / DirectDB.UnescapedDBParameter warnings in class-lh-polls-db.php and class-lh-polls-embed.php by using $wpdb-&gt;prepare()&#039;s %i identifier placeholder for table names (WP 6.2+) instead of string-concatenating self::options_table()/votes_table() into the query. Genuine fix, not a suppression.</li><li>Documentation migrated from readme.md into this portfolio entry per the lh-portfolio convention: Database schema and Admin interfaces sections expanded; new Architecture notes, MCP abilities, and PCP notes (accepted false positives) doc-sections added. readme.md trimmed to the minimal spec (description, install, links). readme.txt added (plugin is now public).</li><li>Portfolio root entry created and set to public (publish) — ecosystem-useful polling plugin, no LocalHero-specific data structures.</li></ul><h3 class=\"wp-block-heading\">1.0.10 — 2026-07-13</h3><ul class=\"wp-block-list\"><li>lh-polls-resize (the postMessage iframe-resize listener) is now registered with an explicit strategy =&gt; &#039;defer&#039; (WP 6.3+ script strategy API) instead of a bare in_footer bool, matching the non-blocking loading pattern used by the rest of the LH plugin suite. The script is only enqueued on pages with a published poll block, so this is a small consistency/perf fix, not a scoping change.</li></ul><h3 class=\"wp-block-heading\">1.0.9 — 2026-06-15</h3><ul class=\"wp-block-list\"><li>Removed three redundant core metaboxes from the lh_poll edit screen via remove_meta_box() in add_meta_boxes(): slugdiv (permalink/slug — not user-facing for polls), commentstatusdiv and commentsdiv (comments UI — polls use wp_comments internally for vote storage as lh_vote type, but the standard comments interface is inappropriate and confusing here).</li></ul><h3 class=\"wp-block-heading\">1.0.8 — 2026-06-15</h3><ul class=\"wp-block-list\"><li>Registered all four lh_poll post meta keys via register_post_meta() for type-hardening and REST schema visibility: _lh_polls_allow_multiple (boolean), _lh_polls_voting_closed (boolean), _lh_polls_reminder_template_id (integer), _lh_polls_required_voters (array of integers, with explicit show_in_rest schema). All four have auth_callback checking edit_post on the post ID.</li><li>lh-polls/get-poll MCP ability now returns required_voters and reminder_template_id alongside the existing fields.</li></ul><h3 class=\"wp-block-heading\">1.0.7 — 2026-06-15</h3><ul class=\"wp-block-list\"><li>Reverted to fully classic poll management after repeated Gutenberg-panel issues (editor not loading, broken useEntityProp meta access, panel placement problems). lh_poll is back to classic metaboxes for everything.</li><li>Replaced the lh_poll_closed custom post status (and its bundled WP Statuses dependency) with _lh_polls_voting_closed post meta and a Closed checkbox. Voting-open/closed is now independent of post_status.</li><li>Removed includes/wp-statuses/ entirely — no longer needed without a custom post status.</li></ul><h3 class=\"wp-block-heading\">1.0.6 — 2026-06-08</h3><ul class=\"wp-block-list\"><li>Removed blocks/lh-polls/admin.js and its manual &#039;#wp-statuses-dropdown&#039; injection workaround, now redundant with WP Statuses&#039; native dropdown support.</li></ul><h3 class=\"wp-block-heading\">1.0.5 — 2026-06-08</h3><ul class=\"wp-block-list\"><li>Bundled WP Statuses (imath, v2.1.9), guarded with class_exists(&#039;WP_Statuses&#039;). Added show_in_metabox_dropdown / show_in_inline_dropdown to the lh_poll_closed status registration.</li></ul><h3 class=\"wp-block-heading\">1.0.4 — 2026-06-08</h3><ul class=\"wp-block-list\"><li>Removed auto-publish-on-parent-publish logic (too messy). Draft polls embedded via the block now show &#039;(Draft)&#039; with a warning in the editor, and &#039;This poll is not yet published.&#039; with an Edit poll link on the front end.</li></ul><h3 class=\"wp-block-heading\">1.0.3 — 2026-06-08</h3><ul class=\"wp-block-list\"><li>Fixed poll-picker &#039;or&#039; label visibility. Added (then later removed in 1.0.4) auto-publish for embedded draft polls on parent-post publish.</li></ul><h3 class=\"wp-block-heading\">1.0.2 — 2026-06-08</h3><ul class=\"wp-block-list\"><li>Moved the &#039;Edit poll&#039; link placement in the block inspector panel; clarified &#039;Create new poll&#039; button labelling.</li></ul><h3 class=\"wp-block-heading\">1.0.1 — 2026-06-08</h3><ul class=\"wp-block-list\"><li>Added &#039;Create new poll&#039; and &#039;Edit poll&#039; actions to the Poll block&#039;s inspector panel.</li></ul><h3 class=\"wp-block-heading\">1.0.0 — 2026-06-08</h3><ul class=\"wp-block-list\"><li>Initial release. lh_poll public CPT with permalinks under /poll/{slug}/. Options in {prefix}lh_poll_options, votes in {prefix}lh_poll_votes with UNIQUE KEY (option_id, user_id).</li><li>Every vote backed by a wp_comments row of type lh_vote. Single/multiple-choice voting, change-vote support for single-choice polls.</li><li>Embedding via oEmbed iframe, zero theme dependency for the embed view; standalone singular view via the_content filter.</li><li>Full transient caching of read queries, flushed on write via LH_Polls_DB::flush_poll_cache().</li><li>Required voters list with email resolution, reminder emails via bp-email templates with token replacement.</li><li>MCP abilities: lh-polls/list-polls, lh-polls/get-poll, lh-polls/get-votes.</li><li>Multisite support: per-site tables, network activation loop, wpmu_new_blog hook.</li></ul>"^^rdf:XMLLiteral ;
  sioc:content "Part of: LH Polls1.0.12 (current, unreleased)Added open/close messaging: informational _lh_polls_opens_at / _lh_polls_closes_at fields in Poll Settings. When a poll is closed, the front-end notice now explains when voting opens/closes rather than a bare &quot;closed&quot; message. Purely informational — never auto-triggers opening or closing, which remains the manual &quot;Closed&quot; checkbox.1.0.11 — 2026-09-05Split the LH_Polls_Post_Types god class: metabox render/save logic extracted into dedicated LH_Polls_Settings_Metabox, LH_Polls_Options_Metabox, LH_Polls_Votes_Metabox, and LH_Polls_Admin_Notices classes. Post_Types is now trimmed to CPT/meta-box registration, the shared should_save_poll_meta() save guard, delete cleanup, and publish validation. Pure relocation, no behavioural change.Fixed PCP-flagged PreparedSQL.NotPrepared / DirectDB.UnescapedDBParameter warnings in class-lh-polls-db.php and class-lh-polls-embed.php by using $wpdb-&gt;prepare()&#039;s %i identifier placeholder for table names (WP 6.2+) instead of string-concatenating self::options_table()/votes_table() into the query. Genuine fix, not a suppression.Documentation migrated from readme.md into this portfolio entry per the lh-portfolio convention: Database schema and Admin interfaces sections expanded; new Architecture notes, MCP abilities, and PCP notes (accepted false positives) doc-sections added. readme.md trimmed to the minimal spec (description, install, links). readme.txt added (plugin is now public).Portfolio root entry created and set to public (publish) — ecosystem-useful polling plugin, no LocalHero-specific data structures.1.0.10 — 2026-07-13lh-polls-resize (the postMessage iframe-resize listener) is now registered with an explicit strategy =&gt; &#039;defer&#039; (WP 6.3+ script strategy API) instead of a bare in_footer bool, matching the non-blocking loading pattern used by the rest of the LH plugin suite. The script is only enqueued on pages with a published poll block, so this is a small consistency/perf fix, not a scoping change.1.0.9 — 2026-06-15Removed three redundant core metaboxes from the lh_poll edit screen via remove_meta_box() in add_meta_boxes(): slugdiv (permalink/slug — not user-facing for polls), commentstatusdiv and commentsdiv (comments UI — polls use wp_comments internally for vote storage as lh_vote type, but the standard comments interface is inappropriate and confusing here).1.0.8 — 2026-06-15Registered all four lh_poll post meta keys via register_post_meta() for type-hardening and REST schema visibility: _lh_polls_allow_multiple (boolean), _lh_polls_voting_closed (boolean), _lh_polls_reminder_template_id (integer), _lh_polls_required_voters (array of integers, with explicit show_in_rest schema). All four have auth_callback checking edit_post on the post ID.lh-polls/get-poll MCP ability now returns required_voters and reminder_template_id alongside the existing fields.1.0.7 — 2026-06-15Reverted to fully classic poll management after repeated Gutenberg-panel issues (editor not loading, broken useEntityProp meta access, panel placement problems). lh_poll is back to classic metaboxes for everything.Replaced the lh_poll_closed custom post status (and its bundled WP Statuses dependency) with _lh_polls_voting_closed post meta and a Closed checkbox. Voting-open/closed is now independent of post_status.Removed includes/wp-statuses/ entirely — no longer needed without a custom post status.1.0.6 — 2026-06-08Removed blocks/lh-polls/admin.js and its manual &#039;#wp-statuses-dropdown&#039; injection workaround, now redundant with WP Statuses&#039; native dropdown support.1.0.5 — 2026-06-08Bundled WP Statuses (imath, v2.1.9), guarded with class_exists(&#039;WP_Statuses&#039;). Added show_in_metabox_dropdown / show_in_inline_dropdown to the lh_poll_closed status registration.1.0.4 — 2026-06-08Removed auto-publish-on-parent-publish logic (too messy). Draft polls embedded via the block now show &#039;(Draft)&#039; with a warning in the editor, and &#039;This poll is not yet published.&#039; with an Edit poll link on the front end.1.0.3 — 2026-06-08Fixed poll-picker &#039;or&#039; label visibility. Added (then later removed in 1.0.4) auto-publish for embedded draft polls on parent-post publish.1.0.2 — 2026-06-08Moved the &#039;Edit poll&#039; link placement in the block inspector panel; clarified &#039;Create new poll&#039; button labelling.1.0.1 — 2026-06-08Added &#039;Create new poll&#039; and &#039;Edit poll&#039; actions to the Poll block&#039;s inspector panel.1.0.0 — 2026-06-08Initial release. lh_poll public CPT with permalinks under /poll/{slug}/. Options in {prefix}lh_poll_options, votes in {prefix}lh_poll_votes with UNIQUE KEY (option_id, user_id).Every vote backed by a wp_comments row of type lh_vote. Single/multiple-choice voting, change-vote support for single-choice polls.Embedding via oEmbed iframe, zero theme dependency for the embed view; standalone singular view via the_content filter.Full transient caching of read queries, flushed on write via LH_Polls_DB::flush_poll_cache().Required voters list with email resolution, reminder emails via bp-email templates with token replacement.MCP abilities: lh-polls/list-polls, lh-polls/get-poll, lh-polls/get-votes.Multisite support: per-site tables, network activation loop, wpmu_new_blog hook." ;
  sioc:topic <https://lhero.org/?taxonomy=author&term=cap-1> .

<https://lhero.org/author/1/#account> rdfs:seeAlso <https://lhero.org/author/1/?feed=lhrdf&format=turtle> .
<https://lhero.org/?taxonomy=author&term=cap-1> rdfs:seeAlso <https://lhero.org/?taxonomy=author&term=cap-1&feed=lhrdf&format=turtle> .
