BIUGU Core Engine
Hanterar databasstruktur, delta-synk och React-gränssnitt för BIUGU.
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/diamondstrand/biugu-core-wp/archive/refs/heads/main.zipReadme
Biugu Core
Biugu Core är motorn i en WordPress Multisite-hubb för eventsidor: pluginet äger all Pods-baserad datastruktur (event, platser, arrangörer, artiklar, recensioner, året-runt-aktiviteter) och redigeringsgränssnittet i wp-admin, byggt med React för en sömlös upplevelse direkt i adminpanelen. Data levereras vidare till flera Divi 5-drivna satellitsiter, som bara sköter presentationen.
Arkitektur: hubb & satelliter
- Hubben (
biugi-hub.locali utvecklingsmiljön) är huvudsiten i ett WordPress Multisite-nätverk. Den äger all Pods-registrering, admin-redigeringsgränssnittet, REST-API:t och synk-logiken. - Satelliterna (t.ex.
/barniuppsala/,/gratisuppsala/) är separata siter i samma nätverk. De kör bara Divi 5 för presentation och registrerar aldrig egen Pods-data. - Mekanismen: all hubb-specifik kod (Pods-registrering, admin-meny, event-metabox, REST-API, delta-synk) instansieras i
includes/app.php,App::__construct(), bakom en enda guard:if ( is_multisite() && ! is_main_site() ) { return; }Kod som istället hör hemma på satelliterna har motsatt guard - den stoppar sig själv om den körs på hubben, eftersom hubben är Divi-fri per arkitekturen. Två exempel på det mönstret:
includes/modules/modules-loader.php(Divi 5-moduler) ochsrc/client/class-ui-helpers-enqueue.php(UI-hjälpmodulen, se nedan).
Datastruktur (Pods Framework)
Pluginet kräver att Pods är aktivt - includes/database/class-pods-init.php läser in hela databasstrukturen från includes/sync/pods-schema.json via Pods API:t (pods_api()->import_package()). Schemat är den enda källan till sanning för post types, taxonomier och fält; ändra det, tryck sedan på "Synka Pods-schema" i BIUGU-inställningssidan (en automatisk synk triggas också om event-CPT:n saknas helt).
Post types: event, place, organizer, article, review, year_round, event_occurrence
Taxonomier: event_category, event_tag, age_group, area, target_site
Storage-modell
| Pod | Storage | Varför |
|---|---|---|
event, place, organizer, article, review, year_round |
meta |
Divi 5:s Dynamic Content-väljare läser bara wp_postmeta - table-storage skulle göra fälten osynliga där. |
event_occurrence |
table (avsiktligt oförändrad) |
Hög skriv-/sökfrekvens (genereras i serier av tiotals-hundratals rader per event). Renderas aldrig via Divi Dynamic Content, bara via wp_localize_script() i admin och (framtida) REST till satelliterna. |
target_site-taxonomin
Styr vilken/vilka satelliter ett event, en artikel, en recension eller en året-runt-aktivitet visas på. Designad för att kräva noll kod för att lägga till en ny satellit i framtiden:
- Gå till taxonomins adminyta i wp-admin (samma ställe som åldersgrupper/kategorier hanteras).
- Skapa en ny term, t.ex. "Familjeliv Enköping".
- Fyll i det extra fältet
site_pathmed satellitens faktiska subdirectory, t.ex.familjelivenkoping. - Klart - ingen kod behöver ändras eller deployas.
Ett event/artikel/recension kan visas på flera siter samtidigt (multi-select). Hanteras i redigeringsgränssnittet av TaxonomyManager.jsx, hämtas/sparas via class-event-meta-box.php och class-delta-sync.php. place och organizer kopplas inte till target_site - de är referensdata som nås via event/tillfällen som redan bär taggningen.
UI-hjälpmodul (assets/js/)
En fristående, generell uppsättning UI-hjälpfunktioner - arkitektoniskt separat från event-/pods-logiken, exponerad globalt som window.biuUIHelpers:
assets/js/
├── biu-slugify.js # slugify(str)
├── biu-format-bytes.js # formatBytes(bytes, decimals?)
├── biu-clipboard.js # copyToClipboard(text)
├── biu-confetti.js # triggerConfetti(options?) + egna DOM-lyssnare
└── biu-ui-helpers.js # entry-punkt, samlar alla fyra under window.biuUIHelpers
Enqueuas bara på satelliternas frontend (src/client/class-ui-helpers-enqueue.php, hook wp_enqueue_scripts) - aldrig i wp-admin eller på hubben.
Confetti kan triggas utan kod på två sätt:
- Divi-klass: lägg CSS-klassen
biu-trigger-confettipå valfri knapp/modul i Divis vanliga klass-fält. - Formulär-agnostiskt event:
document.dispatchEvent(new CustomEvent('biu:trigger-confetti'))- vilket formulärverktyg som helst kan avfyra detta från sin success-hook, oavsett vilket som väljs.
Båda vägarna stödjer samma tre konfigurerbara parametrar - colors, particleCount, spread - antingen via data-biu-confetti-*-attribut på det klickade elementet (satta i Divis "Custom Attributes"-fält, ingen kod) eller via detail på det dispatchade eventet (detail vinner vid krock). Fullständig parameterlista och defaultvärden står dokumenterade högst upp i assets/js/biu-confetti.js.
Mappstruktur
biugu-core/
├── assets/
│ ├── js/ # Fristående UI-hjälpmoduler (window.biuUIHelpers), en fil per funktion
│ └── styles/ # CSS, importeras direkt i respektive React-komponent
├── build/ # Kompilerad kod (genereras av wp-scripts, committas aldrig)
├── includes/
│ ├── api/ # REST-endpoints (/biugu/v1/*)
│ ├── database/ # Pods_Init - läser in pods-schema.json
│ ├── modules/ # Divi 5-moduler (satellit-only, egen guard)
│ ├── sync/ # Delta_Sync + pods-schema.json
│ └── app.php # App - hubb-guarden (is_main_site()), se ovan
├── src/
│ ├── admin/ # wp-admin: inställningssida + event-metabox (React + PHP)
│ ├── client/ # Satellit-frontend: UI-hjälpmodulens enqueue-klass
│ └── components/ # Delade React-komponenter
└── biugu-core.php # Pluginets rotfil
Teknisk stack
- Nätverk: WordPress Multisite (subdirectory-läge) - hubb + Divi 5-satelliter
- Data: Pods Framework (extern hård dependency, se ovan)
- Frontend: React (
@wordpress/element), inget jQuery - Stil: Vanlig CSS, importerad per komponent (ingen CSS-modul-scoping)
- Byggverktyg:
@wordpress/scripts(Webpack), fyra separata entries:admin,client,biugu-search-filter-vb,biu-ui-helpers - Backend: PHP, WordPress REST API
- Krav: WordPress 7.0+, PHP 8.2+ (medvetet val - flera säkerhetssårbarheter är patchade i WP 7.0, se
biugu-core.phpochreadme.txt) - Versionshantering: Git
Komma igång
- Installera beroenden:
npm install - Starta utvecklingsläge (auto-build vid ändringar):
npm run start - Bygg för produktion:
npm run build
Fullständig guide för lokal utvecklingsmiljö, kodstandarder och hur du skickar en PR finns i CONTRIBUTING.md.
Bidra till projektet
Vill du hjälpa till att bygga Biugu Core? Vad kul!
- Se CONTRIBUTING.md för kodstandarder, lokal setup och PR-process.
- Se aktuella uppgifter på vår Issues-sida.
- Vi använder Projects för att planera kommande releaser.
- Är du nybörjare? Filtrera gärna efter etiketten
good first issue.