# Osztályok: RCP_Customer, RCP_Membership és RCP_Member

> Az ügyfél, a tagság és az elavult tag osztály metódusai: lekérdezés, állapotkezelés, lemondás, megújítás és átváltás.

Ez a fejezet azt a három osztályt foglalja össze, amelyekkel egy felhasználó tagságának adatait olvashatod és módosíthatod PHP-ból. Az egyedi kód megvalósítása fejlesztői feladat, ezért egyedi kódhoz érdemes fejlesztő segítségét kérni.

Az objektumokat soha ne példányosítsd kézzel, mindig a hozzájuk tartozó lekérő függvénnyel kérd el őket.

## RCP_Customer: az ügyfél

Az ügyfél olyan felhasználó, akinek van vagy volt tagsága az oldalon.

### Az ügyfél lekérése

| Függvény | Mikor használd |
| --- | --- |
| `rcp_get_customer( $id )` | Ha ismered az ügyfél azonosítóját. |
| `rcp_get_customer_by_user_id( $user_id )` | Ha a WordPress-felhasználó azonosítóját ismered. |
| `rcp_get_customers()` | Több ügyfél lekérdezéséhez, `RCP_Customer` objektumokat ad. |

Ha nincs ilyen ügyfél, a függvények hamisat adnak vissza.

```php
$customer = rcp_get_customer( 123 );
$customer = rcp_get_customer_by_user_id( 44 );
```

### Lekérdező metódusok

| Metódus | Mit ad vissza |
| --- | --- |
| `get_id()` | Az ügyfél azonosítóját. |
| `get_user_id()` | A hozzá tartozó felhasználói fiók azonosítóját. |
| `get_ips()` | Az ügyfél ismert IP-címeinek tömbjét. |
| `get_notes()` | Az ügyfélhez tartozó jegyzeteket szövegként. |
| `get_memberships( $args )` | Az ügyfél tagságait. A `$args` ugyanaz, mint az `rcp_get_memberships()` függvényé, így szűrhetsz. |
| `get_payments( $args )` | Az ügyfél által küldött fizetéseket. |
| `is_pending_verification()` | Igaz, ha az ügyfél e-mail-cím megerősítésére vár. |
| `has_trialed()` | Igaz, ha az ügyfél már használt ingyenes próbaidőszakot. |
| `has_active_membership()` | Igaz, ha legalább egy aktív tagsága van. |
| `has_paid_membership()` | Igaz, ha legalább egy aktív, fizetett tagsága van. |
| `can_access( $post_id )` | Igaz, ha az ügyfél láthatja a megadott bejegyzést. |
| `has_access_level( $szint )` | Igaz, ha az ügyfél hozzáférési szintje legalább a megadott (0 és 10 közötti egész). |
| `add_ip( $ip )` | Hozzáad egy IP-címet az ismertekhez. |
| `add_note( $jegyzet )` | Új jegyzetet fűz az ügyfélhez. |
| `verify_email()` | Az ügyfél e-mail-címét megerősítettnek jelöli. |

### Az ügyfél módosítása

Az `update()` metódus egy tömböt vár:

| Kulcs | Típus | Jelentése |
| --- | --- | --- |
| `user_id` | egész | A hozzá tartozó felhasználói fiók azonosítója. |
| `date_registered` | szöveg | A regisztráció dátuma MySQL-formátumban. |
| `email_verification` | szöveg | Az e-mail-megerősítés állapota: `none` (nem volt szükség rá), `pending` (szükséges, de még nem történt meg), `verified` (megtörtént). |
| `last_login` | szöveg | Az utolsó belépés dátuma MySQL-formátumban. |
| `ips` | tömb | Az ismert IP-címek. |
| `notes` | szöveg | Az ügyfél jegyzetei. |

```php
$customer = rcp_get_customer( 123 );
$customer->update( array(
    'last_login' => current_time( 'mysql' )
) );
```

A `notes` megadása felülírja a meglévő jegyzeteket. Ha hozzá akarsz fűzni egyet, használd az `add_note()` metódust.

## RCP_Membership: a tagság

Egy tagságrekordot ír le: a szintet, az állapotot, a dátumokat, az átjáró azonosítóit és az összegeket.

### A tagság lekérése

Az `rcp_get_membership( $id )` függvény a tagság azonosítója alapján adja vissza az objektumot, vagy hamisat, ha nincs ilyen. Az `rcp_get_memberships()` függvény és az `RCP_Customer::get_memberships()` is `RCP_Membership` objektumokat ad.

```php
$membership = rcp_get_membership( 123 );
```

### Azonosítás és kapcsolatok

| Metódus | Mit ad vissza |
| --- | --- |
| `get_id()` | A tagság azonosítóját. |
| `get_customer_id()` | Annak az ügyfélnek az azonosítóját, akihez a tagság tartozik. |
| `get_customer()` | Az ügyfél `RCP_Customer` objektumát. |
| `get_user_id()` | Az ügyfél WordPress-felhasználói azonosítóját. |
| `get_object_id()` | A kapcsolt objektum azonosítóját. Hagyományos tagságnál ez a tagsági szint azonosítója. |
| `get_object_type()` | Az objektum típusát, jellemzően `membership`. |
| `get_membership_level_name()` | A tagsági szint nevét, vagy hamisat, ha a szint nem tölthető be. |

### Összegek és pénznem

| Metódus | Mit ad vissza |
| --- | --- |
| `get_currency()` | A tagság pénznemének kódját. |
| `get_initial_amount( $formatted )` | A beiratkozáskor fizetett összeget. Ha `$formatted` igaz, a pénznem jelével együtt. |
| `get_recurring_amount( $formatted )` | A megújításkor fizetendő összeget, ugyanígy formázható. |
| `get_formatted_billing_cycle()` | Olvasható összefoglalót a számlázásról (kezdő és ismétlődő összeg, „Ingyenes” vagy egyszeri élethosszig tartó ár). |

### Állapot és dátumok

| Metódus | Mit ad vissza |
| --- | --- |
| `get_status()` | Az állapotot: `active`, `cancelled`, `expired` vagy `pending`. |
| `get_expiration_date( $formatted )` | A lejárat vagy a következő megújítás dátumát. Igaz `$formatted` esetén az oldal **Beállítások → Általános** menüpontban megadott dátumformátumával, hamis esetén MySQL-formátumban, élethosszig tartó tagságnál pedig a `none` szöveggel. |
| `get_expiration_time()` | A lejáratot Unix-időbélyegként, vagy hamisat, ha nincs lejárat. |
| `get_created_date( $formatted )` | A tagságrekord létrehozásának dátumát. |
| `get_activated_date()` | Azt a dátumot, amikor a fizetés megerősítést kapott, és a tagság először aktív lett. |
| `get_trial_end_date()` | A próbaidőszak végét, vagy üreset, ha nincs próbaidőszak. |
| `get_cancellation_date( $formatted )` | A lemondás dátumát. |
| `get_renewed_date( $formatted )` | Az utolsó megújítás dátumát. |
| `get_times_billed()` | Hányszor számláztak a tagságra (az első fizetéssel együtt). |
| `get_maximum_renewals()` | A részletfizetési terv legtöbb megújítását (0 = korlátlan). |

### Átjáró és előfizetési kulcs

| Metódus | Mit ad vissza |
| --- | --- |
| `get_gateway()` | A számlázáshoz használt fizetési átjáró azonosítóját. |
| `get_gateway_customer_id()` | Az átjáró ügyfél- vagy profilazonosítóját (például Stripe-nál `cus_…`). Nem minden átjáró használja. |
| `get_gateway_subscription_id()` | Az átjáró előfizetés-azonosítóját (például `sub_…`). |
| `get_subscription_key()` | A tagság egyedi előfizetési kulcsát. |

### Egyéb lekérdezések

| Metódus | Mit ad vissza |
| --- | --- |
| `get_upgraded_from()` | Ha a tagság átváltással jött létre, az előző tagság azonosítóját, különben 0-t. |
| `get_notes()` | A tagsághoz tartozó adminisztrátori jegyzeteket. |
| `get_signup_method()` | A létrehozás módját: `live` (regisztrációs űrlap), `manual` (admin) vagy `imported` (CSV-import). |
| `get_payments( $args )` | A tagság fizetéseit. |
| `get_card_details()` | Az átjáró által tárolt kártyaadatokat. A szerkezet átjáróként eltérő, Stripe esetén például `name`, `type`, `last4`, `exp_month`, `exp_year`. |
| `get_payment_plan_completed_date()` | A részletfizetési terv lezárásának idejét, vagy üreset. |

```php
$membership = rcp_get_membership( 1 );

echo $membership->get_initial_amount( false );
echo $membership->get_initial_amount( true );

echo $membership->get_expiration_date( true );
echo $membership->get_expiration_date( false );
```

### Állapot, dátumok, számlázás módosítása

Ezek a metódusok nem helyettesítik a regisztrációt vagy a fizetést, egyedi admin- vagy automatizálási kódhoz valók.

| Metódus | Mit csinál |
| --- | --- |
| `set_status( $uj )` | Átállítja az állapotot, és megmondja, sikerült-e. |
| `set_expiration_date( $datum )` | Beállítja a lejáratot vagy a következő megújítást (MySQL-formátum). |
| `calculate_expiration( $mai_naptol, $proba )` | Kiszámít egy új lejáratot (megújításhoz, próbaidőszakhoz, a szint időtartamából). |
| `set_renewed_date( $datum )` | Beállítja az utolsó megújítás dátumát, megadás nélkül a mostanit. |
| `set_object_id( $id )` | Beállítja a tagsági szint azonosítóját. |
| `is_trialing()` | Igaz, ha éppen próbaidőszak tart. |
| `is_active()` | Igaz, ha a tagság nincs letiltva, nem járt le, és az állapota `active` vagy `cancelled` (a lemondott tag az időszak végéig megtartja a hozzáférést). |
| `is_paid( $proba )` | Igaz, ha a tagság fizetett. A próbaidőszak alapból fizetettnek számít. |
| `is_expired()` | Igaz, ha a lejárat a múltban van. Szükség esetén `expired` állapotra állítja (a `pending` kivétel). |
| `is_recurring()` | Igaz, ha az automatikus megújítás be van kapcsolva. |
| `set_recurring( $igaz )` | Csak az automatikus megújítás jelzőjét állítja, az átjáróban nem hoz létre és nem töröl előfizetést. |

### Az automatikus megújítás kapcsolása

| Metódus | Mit csinál |
| --- | --- |
| `can_toggle_auto_renew()` | Igaz, ha a beállítások szerint a vásárló dönthet, az átjáró támogatja az előfizetés létrehozását, és a tagságnak van átjáró-ügyfélazonosítója és ismétlődő ára. |
| `toggle_auto_renew_off()` | Lemondja az ismétlődő számlázást az átjárónál, és törli az automatikus megújítást, valamint az előfizetés-azonosítót. Az állapotot alapból nem változtatja. Igaz értéket vagy `WP_Error`-t ad. |
| `toggle_auto_renew_on()` | Előfizetést hoz létre az átjáróban, és bekapcsolja az automatikus megújítást. Igaz értéket vagy `WP_Error`-t ad. |

### Átjáró-azonosítók beállítása

| Metódus | Mit csinál |
| --- | --- |
| `set_gateway_customer_id( $id )` | Beállítja az átjáró ügyfélazonosítóját. |
| `set_gateway_subscription_id( $id )` | Beállítja az átjáró előfizetés-azonosítóját. |
| `set_subscription_key( $kulcs )` | Beállítja az előfizetési kulcsot, üres érték esetén újat generál. |

### Átváltás története

| Metódus | Mit ad vissza |
| --- | --- |
| `was_upgrade()` | Igaz, ha a tagság egy másikból átváltással jött létre. |
| `was_upgraded()` | Ha a tagságot egy újra váltották, annak azonosítóját, különben hamisat. |

### Aktiválás, megújítás, átváltás

| Metódus | Mit csinál |
| --- | --- |
| `activate()` | Első aktiválás: beállítja az aktiválás dátumát, az aktív állapotot, a szint felhasználói szerepkörét, és elindítja az üdvözlő e-mail akcióit. Új tagságnál ezt használd a `set_status( 'active' )` helyett. |
| `can_renew()` | Igaz, ha a kézi megújítás engedélyezett. |
| `renew( $ismetlodo, $allapot, $lejarat )` | Meghosszabbítja a lejáratot, és frissíti az állapotot és az ismétlődést, miután a fizetés megtörtént. Üres `$lejarat` esetén magától számol. |
| `upgrade_possible()` | Igaz, ha a tagság átválthat másik szintre. |
| `has_upgrade_path()` | Igaz, ha az aktuálison kívül van másik aktív szint. |
| `get_upgrade_paths()` | A választható szintek `Membership_Level` objektumainak tömbje. |

### Részletfizetési tervek

| Metódus | Mit csinál |
| --- | --- |
| `has_payment_plan()` | Igaz, ha a legtöbb megújítás értéke nagyobb nullánál. |
| `at_maximum_renewals()` | Igaz, ha a terv elérte a megújítási korlátját. |
| `set_payment_plan_completed_date( $datum )` | Rögzíti a terv lezárásának dátumát. |
| `is_payment_plan_complete()` | Igaz, ha van rögzített lezárási dátum. |
| `complete_payment_plan()` | Lefuttatja az utolsó fizetés utáni műveleteket a szint beállításai szerint. |

### Letiltás, lemondás, lejáratás

| Metódus | Mit csinál |
| --- | --- |
| `is_disabled()` | Igaz, ha a tagságot az adminfelületen „törölték” (puha törlés). |
| `disable()` | Puha törlés: ha lehet, leállítja a számlázást, visszavonja a hozzáférést, elrejti a tagságot az ügyfél elől és eltávolítja a szint szerepkörét. |
| `enable()` | Újra engedélyezi a letiltott tagságot, és ha még aktív, visszaadja a szerepkört. |
| `cancel()` | `cancelled` állapotra állítja, lefuttatja a lemondás akcióit és e-mailjét. Az átjáró számlázását önmagában nem mondja le. |
| `can_cancel()` | Igaz, ha az ismétlődő előfizetés az oldalon lemondható. |
| `cancel_payment_profile( $allapot_is )` | Lemondja az ismétlődő számlázást az átjárónál. Ha a paraméter igaz, a `cancel()` is lefut. |
| `expire()` | Lejáratja a tagságot, és megvonja a korlátozott tartalomhoz való hozzáférést. |

### Jegyzetek, hozzáférés, időarányos jóváírás, számlázás

| Metódus | Mit csinál |
| --- | --- |
| `add_note( $jegyzet )` | Adminisztrátori jegyzetet fűz a tagsághoz. |
| `can_access( $post_id )` | Igaz, ha a tagság hozzáférést ad a bejegyzéshez. |
| `has_access_level( $szint )` | Igaz, ha a tagság szintje eléri a kért hozzáférési szintet. |
| `get_prorate_credit_amount()` | A fel nem használt idő jóváírását szintváltáskor. |
| `can_update_billing_card()` | Igaz, ha az átjáró támogatja a kártyafrissítést, és az automatikus megújítás él. |
| `increment_times_billed()` | Növeli a számlázások számát, és ha elérte a korlátot, lefuttathatja a `complete_payment_plan()` metódust. |

### Előfizetés kezelése az átjárónál

| Metódus | Mit csinál |
| --- | --- |
| `can_change_gateway_price()` | Igaz, ha az átjáró támogatja az ármódosítást, és a tagságnak aktív ismétlődő előfizetése van. |
| `change_gateway_price( $uj_ar )` | Módosítja az ismétlődő árat az átjárónál, siker esetén az `recurring_amount` mezőt is. |
| `can_create_gateway_subscription()` | Igaz, ha az átjáró a regisztráción kívül is létre tud hozni előfizetést, és még nincs. |
| `create_gateway_subscription( $azonnal )` | Előfizetést hoz létre az átjáróban. Az `$azonnal` dönti el, hogy azonnal terhel, vagy a lejáratig vár. |
| `can_change_next_bill_date()` | Igaz, ha az automatikus megújítás be van kapcsolva, van átjáró-előfizetés, és az átjáró támogatja a megújítási dátum módosítását. |
| `change_next_bill_date( $uj_datum )` | Módosítja a következő számlázás dátumát az átjárónál (MySQL-formátum). |

## RCP_Member: az elavult tagobjektum

Az `RCP_Member` a `WP_User` osztályt bővíti. Elavult, új kódban az `RCP_Membership` és az `RCP_Customer` osztályt használd. Itt a régi kódok miatt szerepel.

### Állapot

Egy tag állapota lehet:

| Állapot | Jelentése |
| --- | --- |
| `free` | Nem fizetett, olyan, mint egy átlagos WordPress-felhasználó. |
| `pending` | Aktívvá válik, általában a fizetésre vár. |
| `active` | Rendben lévő fiók. |
| `cancelled` | Lemondott, a hozzáférés a lejáratig megmarad. |
| `expired` | A lejárat dátuma elmúlt. |

A `get_status()` visszaadja, a `set_status( $uj )` beállítja az állapotot.

```php
$member = new RCP_Member( 1 );
$status = $member->get_status();
$member->set_status( 'active' );
```

### Lejárat

A lejárat `Y-n-d H:i:s` formátumban van tárolva.

| Metódus | Mit csinál |
| --- | --- |
| `get_expiration_date( $formatted )` | Olvasható dátumot ad, hamis paraméterrel formázatlant. |
| `get_expiration_time()` | Unix-időbélyeget ad. |
| `set_expiration_date( $uj )` | Új lejáratot állít be `Y-n-d H:i:s` formátumban. |

Élethosszig tartó tagsághoz add át a `none` értéket:

```php
$member = new RCP_Member( 1 );
$member->set_expiration_date( 'none' );
```

### Megújítás és lemondás

A `renew()` és a `cancel()` az állapot és a lejárat kézi beállítása nélkül aktivál, illetve letilt. Ismétlődő előfizetésnél a `renew( true )` hívást használd. Az ismétlődő számlázást az átjárónál a `cancel_payment_profile()` mondja le.

```php
$member = new RCP_Member( 1 );
$member->renew( true );
$member->cancel();
$member->cancel_payment_profile();
```

### Egyéb metódusok

| Metódus | Mit csinál |
| --- | --- |
| `get_joined_date( $szint_id )` | A csatlakozás dátumát adja MySQL-formátumban. Szintazonosító nélkül az aktuális szintét. |
| `get_payment_profile_id()` | A tag átjáró-profilazonosítóját adja. |
| `set_payment_profile_id( $id )` | Beállítja az átjáró-profilazonosítót a tagságrekordon. |
| `get_subscription_id()` | A tag tagsági szintjének azonosítóját adja, vagy hamisat. |
| `set_subscription_id( $id )` | Beállítja a tagsági szint azonosítóját. |
| `get_subscription_key()` | A tagság egyedi előfizetési kulcsát adja. |
| `get_subscription_name()` | A jelenlegi tagsági szint nevét adja. |
| `get_payments()` | Az ügyfélrekord összes fizetését adja, vagy `null`-t, ha nincs ügyfél. |
| `get_notes()` | Az ügyfélrekord adminisztrátori jegyzeteit adja, vagy hamisat. |
| `add_note( $jegyzet )` | Jegyzetet fűz az ügyfélrekordhoz. Siker esetén igaz. |
| `is_active()` | Igaz, ha a tag hozzáfér a tagi tartalomhoz. Az adminisztrátor mindig igazat kap, mindenki másnak aktív és fizetett tagság kell. Szűrője: `rcp_is_active`. |
| `is_recurring()` | Igaz, ha a tagság ismétlődő. |
| `set_recurring( $igaz )` | Beállítja, hogy a tagság ismétlődő-e. |
| `is_expired()` | Igaz, ha a tagság lejárt. |
| `is_trialing()` | Igaz, ha a tag próbaidőszakban van. |
| `has_trialed()` | Igaz, ha az ügyfél valaha használt próbaidőszakot. |
| `can_access( $post_id )` | Igaz, ha a tag láthatja a bejegyzést. Az adminisztrátor és a nem korlátozott bejegyzés mindig igaz. Szűrője: `rcp_member_can_access`. |
| `get_switch_to_url()` | Ha a User Switching bővítmény aktív, olyan címet ad, amellyel az admin átléphet a felhasználó fiókjába. Különben hamisat. |
| `get_prorate_credit_amount()` | Szintváltáskor a fel nem használt idő jóváírását adja, tagság híján 0-t. |
| `just_upgraded()` | Egy friss szintváltás Unix-időbélyegét adja, vagy hamisat, ha nincs ilyen vagy már kb. öt percnél régebbi. Szűrője: `rcp_member_just_upgraded`. |
