Giter Site home page Giter Site logo

fapi-member's Introduction

Start up:

  1. run make -C .docker-fapi-member dc-up-front (pro macbook si doplnit do docker-compose.yml k db: platform: linux/x86_64)

  2. open browser and go to page http://localhost:8080

  3. install wordpress

  4. enable FAPI Member plugin in plugin section

  5. develop plugin

Poznámky

Vývoj

Plugin kód není moc pěkný, ale snažil jsem se maximálně využit Wordpressu a nestavět vedle WP nějaké další (cizí) struktury a způsoby (autoloading, šablony...), které by ale pro větší projekt určitě byly potřeba.

Obzvláště nehezké jsou věci kolem reakce na callback a posílání mailů. Uvažoval jsem nad možností to přepsat, ale zase jsem se neodvážil dělat abstrakce a předjímat něco, protože myslím, že maily (pravidla, počet...) se určitě budou měnit a ten systém s postupným plněním $props je nejpružnější, co mě napadl.

Taky je použita stará verze PHP - protože WP zatím podporuje PHP 5.6.20

Datové struktury

Plugin nedělá zásah do DB.

Členství

Členství je uloženo jako meta k uživateli pod klíčem v FapiMembershipLoader::MEMBERSHIP_META_KEY. Struktura je následující:

[
  {
    "level":  12, 
    "registered": "2020-01-01T20:00:01", 
    "until": "2020-01-01T20:00:01",
    "isUnlimited": true
  },
  {
      "level":  10, 
      "registered": "2020-02-01T20:00:01", 
      "until": "2020-04-01T20:00:01",
      "isUnlimited": false
  }    
]

Historie členství

Historie členství je uložena jako user meta po klíčem v FapiMembershipLoader::MEMBERSHIP_HISTORY_META_KEY. Ukládá se pole serializovaných FapiMembership objektů.

Úrovně

Úrovně jsou uloženy jako neveřejná taxonomie s názvem v FapiLevels::TAXONOMY.

Nastavení úrovně

Úroveň má své stránky, nastavení emailů a ostatních stránek uloženo v term meta: fapi_pages, fapi_email_*, fapi_page_*

Globální nastavení

Plugin si ukládá data i do options: fapiMemberApiChecked, fapiSettings, fapiMemberApiKey, fapiMemberApiEmail

API a callback

Většinou publikované routy fungují jen s url rewritingem, tyhle ošklivé níže by měly být univerzálnější.

URL pro definované sekce a úrovně

[site]/?rest_route=/fapi/v1/sections

Callback url

[site]/?rest_route=/fapi/v1/callback&level[]=1&level[]=2&days=31

V těle požadavku očekávám url encoded string jako:

id=187034262&time=1614239639&security=9edbc14e1905b61af468217f60d2406d160c4fdf

kde id použiju na načtení objednávky, time a security pro validaci

Chybové kódy

Callback vrací při chybě status code 400 a chybový text, jsou "ošetřeny" následující stavy:

  • Nepodařilo se načíst invoice/voucher z API
  • Voucher status není applied
  • Nelze najít email zákazníka v API response
  • V get parametrech callbacku chybý proměnná level
  • Některá sekce/úroveň z callbacku neexistuje ve WordPressu
  • Invoice / voucher security hash nesedí
  • a další

Odinstalace pluginu

Plugin při deaktivaci nedělá nic. Při smazání pluginu před administraci WP se:

  • odebere taxonomie
  • odeberou options
  • odeberou user_meta všech uživatelů

Transpilace JS a CSS

Css je zapsáno v scss (https://sass-lang.com/documentation/cli/dart-sass), pro kompilaci do css:

npm run css

Javascript je transpilován webpackem, pro kompilaci po úpravách:

npx webpack

Testovací akce

Pokud ve wp_options nastavíte klíč fapiIsDevelopment na hodnotu 1, pak se v menu pluginu objeví červená možnost Testovací akce, která umožní spustit obsah souboru templates/test.php, to je možné využít při vývoji na testování např. zakládání uživatelů, posílání mailů atd.

Build a nasazení na WP

POUZE POKUD VÍŠ CO DĚLÁŠ

  1. Je potřeba udělat build jak js tak css souborů
  2. Změnit verzi balíčku
    1. změnit verzi v fapi-member.php' - všude kde je uvedena verze
    2. změnit verzi v readme.txt - všude kde je uvedena verze
  3. Připravit deploy make prepare-deploy version=x.x.x
  4. Otevřít slořku wp-svn cd wp-svn
  5. Dát do stavu track svn add --force * --auto-props --parents --depth infinity -q
  6. A vše commitnout svn ci -m '{Message s update zprávou}' --username fapi --password '{your_password}'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.