WP Manifestindependent plugin directory
manifest / multisite / biugu-core-wp

BIUGU Core Engine

Hanterar databasstruktur, delta-synk och React-gränssnitt för BIUGU.

by Diamond Strand · github.com/diamondstrand/biugu-core-wp

0stars
5forks

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

Readme

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.local i 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) och src/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:

  1. Gå till taxonomins adminyta i wp-admin (samma ställe som åldersgrupper/kategorier hanteras).
  2. Skapa en ny term, t.ex. "Familjeliv Enköping".
  3. Fyll i det extra fältet site_path med satellitens faktiska subdirectory, t.ex. familjelivenkoping.
  4. 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-confetti på 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.php och readme.txt)
  • Versionshantering: Git

Komma igång

  1. Installera beroenden:
    npm install
  2. Starta utvecklingsläge (auto-build vid ändringar):
    npm run start
  3. 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.

Read the full README on GitHub →