@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=147061>
  a sioc:Post ;
  dc:title "Architecture notes" ;
  dcterms:identifier 147061 ;
  dc:modified "2026-09-05T12:13:57Z"^^xsd:dateTime ;
  dc:created "2026-09-05T12:13:57Z"^^xsd:dateTime ;
  sioc:link <https://lhero.org/portfolio/lh-polls/architecture-notes/> ;
  sioc:has_creator <https://lhero.org/author/1/#account> ;
  sioc:has_container <https://lhero.org/#posts> ;
  content:encoded """<h2>Identity methods</h2>
<p>LH_Polls provides static identity/path methods: return_plugin_namespace() (lh_polls), return_plugin_text_domain() (lh-polls), return_plugin_name(), return_plugin_version(), return_plugin_file(), return_plugin_dir(), return_plugin_url(). No global constants defined.</p>
<h2>Multisite</h2>
<p>Tables are per-site via $wpdb-&gt;prefix. On network activation, tables are created for all existing sites (looping get_sites() + switch_to_blog()). New sites get tables via the wpmu_new_blog hook. lh_polls_db_version option is stored per-site.</p>
<h2>File structure</h2>
<pre>lh-polls/
  lh-polls.php - bootstrap, requires + plugins_loaded instantiation
  includes/
    class-lh-polls.php - identity methods
    class-lh-polls-db.php - DB queries, table creation, caching
    class-lh-polls-post-types.php - CPT registration, meta-box wiring, shared save guard, delete cleanup, publish validation
    class-lh-polls-settings-metabox.php - Poll Settings metabox (render+save) and its meta registration
    class-lh-polls-options-metabox.php - Options metabox (render+save) and publish-validation helper
    class-lh-polls-votes-metabox.php - Votes metabox (render+save), required-voters section, delete-vote handler
    class-lh-polls-admin-notices.php - validation + unresolved-email admin notices
    class-lh-polls-comments.php - comment/vote sync, comment filtering
    class-lh-polls-embed.php - oEmbed response, embed document, the_content, shared render_poll_markup()
    class-lh-polls-voting.php - vote form handler, validation, redirects, cache purge
    class-lh-polls-block.php - block registration, oEmbed wrapper
    class-lh-polls-abilities.php - MCP abilities
    class-lh-polls-reminders.php - required-voter reminder emails
  blocks/lh-polls/
    editor.js / editor.css - block editor poll picker
    resize.js - parent-page postMessage iframe-resize listener
    poll.css / poll.js - embed/standalone poll view styles + behaviour</pre>
<p>As of 1.0.11, metabox render/save logic previously in one class-lh-polls-post-types.php god class is split across four dedicated classes (Settings/Options/Votes metaboxes + Admin Notices) — see Changelog.</p>
"""^^rdf:XMLLiteral ;
  sioc:content """Identity methods
LH_Polls provides static identity/path methods: return_plugin_namespace() (lh_polls), return_plugin_text_domain() (lh-polls), return_plugin_name(), return_plugin_version(), return_plugin_file(), return_plugin_dir(), return_plugin_url(). No global constants defined.
Multisite
Tables are per-site via $wpdb-&gt;prefix. On network activation, tables are created for all existing sites (looping get_sites() + switch_to_blog()). New sites get tables via the wpmu_new_blog hook. lh_polls_db_version option is stored per-site.
File structure
lh-polls/
  lh-polls.php - bootstrap, requires + plugins_loaded instantiation
  includes/
    class-lh-polls.php - identity methods
    class-lh-polls-db.php - DB queries, table creation, caching
    class-lh-polls-post-types.php - CPT registration, meta-box wiring, shared save guard, delete cleanup, publish validation
    class-lh-polls-settings-metabox.php - Poll Settings metabox (render+save) and its meta registration
    class-lh-polls-options-metabox.php - Options metabox (render+save) and publish-validation helper
    class-lh-polls-votes-metabox.php - Votes metabox (render+save), required-voters section, delete-vote handler
    class-lh-polls-admin-notices.php - validation + unresolved-email admin notices
    class-lh-polls-comments.php - comment/vote sync, comment filtering
    class-lh-polls-embed.php - oEmbed response, embed document, the_content, shared render_poll_markup()
    class-lh-polls-voting.php - vote form handler, validation, redirects, cache purge
    class-lh-polls-block.php - block registration, oEmbed wrapper
    class-lh-polls-abilities.php - MCP abilities
    class-lh-polls-reminders.php - required-voter reminder emails
  blocks/lh-polls/
    editor.js / editor.css - block editor poll picker
    resize.js - parent-page postMessage iframe-resize listener
    poll.css / poll.js - embed/standalone poll view styles + behaviour
As of 1.0.11, metabox render/save logic previously in one class-lh-polls-post-types.php god class is split across four dedicated classes (Settings/Options/Votes metaboxes + Admin Notices) — see Changelog.
""" ;
  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> .
