Git Product home page Git Product 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. docker exec node /bin/sh -c 'yarn --cwd multiple-blocks build'
    1. Pokud zfailuje build na nenalezení "wp_scripts", je třeba provést yarn install
    2. docker exec node /bin/sh -c 'yarn --cwd multiple-blocks install'
    3. A poté opět build a pokračovat
  4. Aktualizovat composer composer dump-autoload
  5. Vytvořit produkční build make build -i
  6. Stáhnout repozitář z WP svn co https://plugins.svn.wordpress.org/fapi-member wp-svn
  7. Vyvořit složku s verzí ve složce wp-svn/tags/X.X.X
  8. Nahrát obsah z wp-build do vytvořené složky v přechozím bodě
  9. Smazat obsah ze složky wp-svn/trunk
  10. A nahrát obsah ze složky wp-build do složky wp-svn/trunk
  11. Vše dát do track stavu svn add --force * --auto-props --parents --depth infinity -q
  12. A vše commitnout svn ci -m '{Message s update zprávou}' --username fapi --password '{your_password}'

fapi-member's People

Contributors

fsarti24 avatar jandanielcz avatar marek-klein avatar novakmar avatar ppexxi avatar slischka avatar sp444c3 avatar tomesmoni avatar woxeas avatar

Watchers

 avatar  avatar

Forkers

ppexxi sp444c3

fapi-member's Issues

Seznam členů pro danou členskou sekci

FM aktuálně umí zobrazit na nástěnce kolik členů je v dané členské sekci, ale chybí zde možnost si nechat členy vypsat v nějaké tabulce.
Je tedy potřeba přidat možnost zobrazit seznam členů pro danou členskou sekci do nějaké tabulky, nejlépe se stránkováním po 100 členech.
Dále by bylo dobré rovnou přidat tlačítko pro export všech členů v členské sekci. Aby mohl tyto členy administrátor nahrát například do mailovacího nástroje a odeslat newsletter o přidaném návodu nebo něco podobného.

V tabulce bude stačit jméno, přijmení, email, (telefon pokud se dá někam do WP ukládat).

Seznam nejnutnějších úprav

Seznam k upravení:

  • snad na všech místech nelze poznat, zda je element klikatelný nebo ne, buť chybí úplně základní věc jako je změna šipky na pointer při najeti na tlačítka. Druhá základní věc je hover efekt, zesvětlení, dovybarvení tlačítka po najetí myší. Tedy projet všechyn klikatelné věci a pro hover efekt doplnit změnu kurzoru na pointer + vizuální znázormění (změna barvy pozadí).

  • dostupné promměnté se sekci emailů vždy zobrazovat

  • seřadit servistní stránky aby to dávalo trochu větší smysl:

  • přihlašovací

  • stránka po přihlášení

  • stránka když nemá uživatel přístup.

  • na FAPI logo přidat odkaz směřující na fapi.cz otevřený v nové záložce

  • pokud v záložce nastavím společnou stránku pro přihlášení a vrátím se zpátky na upravů stránek nějaké sekce/urovně, nikde neni informace o tom že se použije ta společná stránka, tedy tam kde není žádná stránka pro přihlašení uvedená, místo promtu "-- nevybrána --" se vypíše jako prompt název stránky ze společného nastavení např.: "-- Přihlašovací stránka členské sekce --"

  • po nainstalování pluginu, vytvořit výchozí přihlašovací stránku, stránka bude bez jakékoliv šablony, bude tam čistě přihlašovací formulář. Případně bych použil přimo přihlášení do WP, jako přihlašovací stránku. Jde o to aby se s tímto uživatel při nainstalování pluginu nemusel trátpit a ztrácet tím čas. Tohle může řešit v momentě kdy tam má několik lidí.

  • výchozí emailové šablony: (doplním)

  • #8

Postupné uvolňování obsahu

FM chybí jedna zasádní funkce a to je postupné uvolňování obsahu.

Co to znamená, členská sekce se skládá z 10-ti lekcí. A uživatel FM chce aby se koncovým zákazníkům tyto lekce zpřístupňovaly postupně.

Zde se nejčastěji používá zpřístupňování po X dnech.
Tedy lekci 1. získají ihned, 2. lekci dostanou až další den, 3. zase za další den atd. tedy každý den je členovi zpřistupňována další a další lekce.

Další způsob uvolňování by byl po kliknutí na tlačítko (splnění nějakého úkolu). Tedy na konec lekce si dám tlačítko Dokončit lekci. A členkovi se automaticky zpřístupní další lekce.

Něco podobného se implementovalo pro collabim?

Ruční založení člena + automatické odesální e-mailu

Aktuálně umí FM založit nového uživatele pouze přes webhook: https://github.com/fapi-cz/fapi-member/blob/master/src/FapiMemberPlugin.php#L462

Potřebujeme ale doplnit možnost, vytvoři nového člena přímo přes plugin FM.
Stačí aby se pro člena dala nastavení e-mailová adresa, jméno a přijmení.
Je potřeba přidat možnost do jaké členské sekce a úrovně chce administrátor daného člena přiřadit.
Po založení člena je potřeba odeslat e-mail s heslem nebo s nastavením hesla.
Filtr jaké e-maily se mají odeslat: https://github.com/fapi-cz/fapi-member/blob/master/src/FapiMemberPlugin.php#L865

Hromadný import členů

Možnost hromadně naimportovat členy do členské sekce / úrovně.

Vytvořit jednoduché rozhraní, kde si vyberu čenské sekce a urovně do kterých chci uživatele přidat.
A potom textarea input kam zadám e-mailové adresy členů.
Do textarey bude možnos zadat seznam e-mailu oddelené čárkou, středníkem nebo novým řádkem.

FAPI potom projede jednu e-mailovou adresu za druhou založí nebo prodlouží přístup do členské sekce, vybrané výše a automaticky odešle členoví e-mail o založení / prodloužení.

Integrace s DIVI - skrývání a odkrávání bloků stránky

FM má aktuálně pro Elementor a Wordpress (Gutenberg) funkcionalitu pomocí které může administrátor při tvorbě stránky řici, zda se daný blok stránky má zobrazit nebo ne.
Zda se má nebo nebá část stránky zobrazit se řeší podle toho zda je návštěvník přihlášený, zda je nebo není členem nějaké členské sekce nebo urovně. Tyto tři možnosti se u daného bloku stránky dají nastavit a na backendu se potom tyto bloky filtrují před vykreslením a koncový uživatel poté vidí pouze to co administrátor nastavil že vidět má podle kontextu.

Implementace pro WP: https://github.com/fapi-cz/fapi-member/tree/master/multiple-blocks/includes/block-editor/blocks/block-extender
Implementace pro Elementor:
https://github.com/fapi-cz/fapi-member/tree/master/src/Elementor/WidgetSettingsExtender
https://github.com/fapi-cz/fapi-member/blob/master/src/Elementor/Filters/ContentProtector.php

Takto stejně chceme přidat podporu i pro DIVI.

Nápověda k této funkci: https://napoveda.fapi.cz/article/143-fapi-member-skryti-casti-bloku-stranky

Možnost napojení na více učtu FAPI

Hodně naších zákazníků má jednu členskou sekci, kterou prodávají přes více účtů FAPI.
Je tedy ze strany zákazníků požadavek na to, aby mohli do FM nahrát více propojení s FAPI.
Už je tam udělaná příprava pro více účtu FAPI.
Do DB se již propojení ukládají jako pole účtů. Je potřeba tedy umožnit zadat více propojení.
K propojování FM s FAPI tedy přidat tlačítko "Přidat další účet FAPI", zobrazí se další 2 inputy pro uživatelské jméno a API token.
Takových účtu bude moci mít uživatel FM maximálně 5.

Přistupy se na pozadí uloží do pole a do databáze.

Bude potřeba ošetřit místa, kde se propojení s FAPI používá. Napříkald ověření zda zdaná faktura je zaplacená, zde bude potřeba kontrolovat fakturu pro každý účet FAPI tak dlouho dokud faktura nebude nalazená a poté bude kód pokračovat dále v ověření zda je faktura zapalcená atd.

Další místo kde bude potřeba toto ošetřit je element prodejního formuláře, resp. selectbox, kde si uživatel bude vybírat jaký prodejní formulář se ve stránce bude zobrazovat. Zde můžeme použít funkci selectboxu, kdy můžeme možnosti rozdělit pod jednotlivé účty.

Podpora více CPT

FM umí podporovat zamykání a odemykání pro CPT.
Ale máme zde natvrdo definované jaké CPT jsou povolené.
Bylo by dobré povolit tuto funcí pro všechny CPT.

Integrace s DIVI - komponenta prodejního formuláře

FM má aktuálně pro Elementor a Wordpress (Gutenberg) element. Pomocí kterého se dá jednoduše do stránky vložit prodejní formulář jako komponenta.
Komponenta má jedno jediné nastavení a to selectbox, v kterém se vybírá prodejní formulář FAPI. Tato komponenta si pamatuje pouze path tedy uuid prodejního formuláře a formulář se do stránky vykreslí na frontendu již automaticky.

Implementace pro WP: https://github.com/fapi-cz/fapi-member/tree/master/multiple-blocks/includes/block-editor/blocks/fapi-form-block
Implementace pro Elementor: https://github.com/fapi-cz/fapi-member/tree/master/src/Elementor/Widgets

Takto stejně chceme přidat podporu i pro DIVI

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.