@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-05T12:08:41Z"^^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 """<h3>1.0.11 (current, unreleased)</h3>
<ul>
<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()&#8217;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>1.0.10 — 2026-07-13</h3>
<ul>
<li>lh-polls-resize (the postMessage iframe-resize listener) is now registered with an explicit strategy =&gt; &#8216;defer&#8217; (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>1.0.9 — 2026-06-15</h3>
<ul>
<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>1.0.8 — 2026-06-15</h3>
<ul>
<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>1.0.7 — 2026-06-15</h3>
<ul>
<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>1.0.6 — 2026-06-08</h3>
<ul>
<li>Removed blocks/lh-polls/admin.js and its manual &#8216;#wp-statuses-dropdown&#8217; injection workaround, now redundant with WP Statuses&#8217; native dropdown support.</li>
</ul>
<h3>1.0.5 — 2026-06-08</h3>
<ul>
<li>Bundled WP Statuses (imath, v2.1.9), guarded with class_exists(&#8216;WP_Statuses&#8217;). Added show_in_metabox_dropdown / show_in_inline_dropdown to the lh_poll_closed status registration.</li>
</ul>
<h3>1.0.4 — 2026-06-08</h3>
<ul>
<li>Removed auto-publish-on-parent-publish logic (too messy). Draft polls embedded via the block now show &#8216;(Draft)&#8217; with a warning in the editor, and &#8216;This poll is not yet published.&#8217; with an Edit poll link on the front end.</li>
</ul>
<h3>1.0.3 — 2026-06-08</h3>
<ul>
<li>Fixed poll-picker &#8216;or&#8217; label visibility. Added (then later removed in 1.0.4) auto-publish for embedded draft polls on parent-post publish.</li>
</ul>
<h3>1.0.2 — 2026-06-08</h3>
<ul>
<li>Moved the &#8216;Edit poll&#8217; link placement in the block inspector panel; clarified &#8216;Create new poll&#8217; button labelling.</li>
</ul>
<h3>1.0.1 — 2026-06-08</h3>
<ul>
<li>Added &#8216;Create new poll&#8217; and &#8216;Edit poll&#8217; actions to the Poll block&#8217;s inspector panel.</li>
</ul>
<h3>1.0.0 — 2026-06-08</h3>
<ul>
<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 """1.0.11 (current, unreleased)

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.
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()&#8217;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-13

lh-polls-resize (the postMessage iframe-resize listener) is now registered with an explicit strategy =&gt; &#8216;defer&#8217; (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-15

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).

1.0.8 — 2026-06-15

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.
lh-polls/get-poll MCP ability now returns required_voters and reminder_template_id alongside the existing fields.

1.0.7 — 2026-06-15

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.
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-08

Removed blocks/lh-polls/admin.js and its manual &#8216;#wp-statuses-dropdown&#8217; injection workaround, now redundant with WP Statuses&#8217; native dropdown support.

1.0.5 — 2026-06-08

Bundled WP Statuses (imath, v2.1.9), guarded with class_exists(&#8216;WP_Statuses&#8217;). Added show_in_metabox_dropdown / show_in_inline_dropdown to the lh_poll_closed status registration.

1.0.4 — 2026-06-08

Removed auto-publish-on-parent-publish logic (too messy). Draft polls embedded via the block now show &#8216;(Draft)&#8217; with a warning in the editor, and &#8216;This poll is not yet published.&#8217; with an Edit poll link on the front end.

1.0.3 — 2026-06-08

Fixed poll-picker &#8216;or&#8217; 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-08

Moved the &#8216;Edit poll&#8217; link placement in the block inspector panel; clarified &#8216;Create new poll&#8217; button labelling.

1.0.1 — 2026-06-08

Added &#8216;Create new poll&#8217; and &#8216;Edit poll&#8217; actions to the Poll block&#8217;s inspector panel.

1.0.0 — 2026-06-08

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).
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/lh_portfolio-type/doc-section/>, <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/lh_portfolio-type/doc-section/> rdfs:seeAlso <https://lhero.org/lh_portfolio-type/doc-section/?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> .
