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

BIUGU Core Engine

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

★ 0stars

Install

Download source zip No release zip yet

This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/diamondstrand/biugu-core-wp/archive/refs/heads/main.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

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.