# Űrlapmezők kódszerkezete

> Az automatizálás-szerkesztő beállításmezőinek PHP-tömbös leírása: közös tulajdonságok és példák minden mezőtípusra.

Az automatizálás-szerkesztő beállítófelületeit a FluentCRM PHP-tömbökből rajzolja ki. Nem kell HTML-t vagy JavaScriptet írnod: a mezőket tömbként írod le, a felületet a FluentCRM készíti el. Az egyedi indítóesemény, művelet, feltétel és cél fejezetei ugyanezt a szerkezetet használják.

## Közös tulajdonságok

Szinte minden mezőleírás ismeri ezeket a kulcsokat:

| Kulcs | Mit csinál |
|---|---|
| `label` | A mező látható felirata. |
| `inline_help` | Rövid súgószöveg a beviteli mező alatt. |
| `placeholder` | Helyőrző szöveg szöveges és választó mezőkben. |
| `help` | Hosszabb leírás vagy buboréksúgó. |
| `wrapper_class` | CSS-osztály az elrendezéshez (oszlopok, térközök). |
| `readonly` | `true` esetén a mező megjelenik, de nem szerkeszthető. |
| `dependency` | Szabály arra, mikor látszódjon a mező egy másik mező értéke alapján. |

Minden mezőnek van `type` kulcsa (például `input-text`, `multi-select`, `radio`): ez dönti el, melyik felületi komponens jelenik meg.

## Mezőtípusok

Option selectors (`option_selectors`), egyszeres és többszörös választó (`multi-select`), rádiógomb (`radio`), számmező (`input-number`), szövegmező (`input-text`), szövegmező-felugró (`input-text-popper`), igen/nem jelölő (`yes_no_check`), csoportos választó (`grouped-select`), többszörös szövegbevitel (`multi_text_options`), e-mail-kampány szerkesztő (`email_campaign_composer`), újratöltő választó (`reload_field_selection`), mezőleképező (`form-group-mapper`), több legördülős leképező (`form-many-drop-down-mapper`), HTML (`html`), URL-választó (`url_selector`), név-érték párok (`input_value_pair_properties`), szöveges név-érték párok (`text-value-multi-properties`), HTML-szerkesztő (`html_editor`), REST-választó (`rest_selector`), feltételblokk-csoportok (`condition_block_groups`), egyedi feladó beállítása (`custom_sender_config`), választógombok (`radio_buttons`), jelölőnégyzetek (`checkboxes`) és időválasztó (`time_selector`).

## Példák

### Option selectors

```php
'subscription_status' => [
    'type'        => 'option_selectors',
    'option_key'  => 'editable_statuses',
    'is_multiple' => false,
    'label'       => 'Feliratkozási állapot',
    'placeholder' => 'Válassz állapotot'
]
```

| Kulcs | Mit csinál |
|---|---|
| `creatable` | Létrehozhat-e a felhasználó új címkét vagy listát a választóból. |
| `size` | (Nem kötelező) A mező megjelenési mérete. |
| `option_key` | Megmondja, melyik adathalmazt töltse be a FluentCRM (lásd lent). |
| `is_multiple` | Választható-e több érték. |

Az `option_key` leggyakoribb értékei:

| option_key | Mit ad vissza |
|---|---|
| `tags` | Az összes címke. |
| `lists` | Az összes lista. |
| `editable_statuses` | Az összes szerkeszthető kapcsolattartó-állapot. |
| `woo_products` | Az összes WooCommerce-termék. |
| `email_sequences` | Az összes e-mail-sorozat. |
| `campaigns` | Az összes e-mail-kampány. |
| `product_selector_tutorlms` | Az összes TutorLMS-kurzus. |
| `edd_coupons` | Az összes Easy Digital Downloads-kupon. |
| `product_selector_learndash` | Az összes LearnDash-kurzus. |
| `product_selector_learndash_groups` | Az összes LearnDash-csoport. |
| `product_selector_lifterlms` | Az összes LifterLMS-kurzus. |
| `product_selector_lifterlms_groups` | Az összes LifterLMS-tagság. |
| `product_selector_pmpro` | Az összes Paid Memberships Pro-tagság. |
| `product_selector_rcp` | Az összes Restrict Content Pro-tagság. |
| `product_selector_wishlist` | Az összes Wishlist Member-tagság. |
| `woo_coupons` | Az összes WooCommerce-kupon. |
| `woo_order_statuses` | Az összes WooCommerce-rendelésállapot. |
| `woo_categories` | Az összes WooCommerce-termékkategória. |
| `product_selector_woo` | Az összes WooCommerce-termék. |
| `product_selector_woo_order` | Az összes WooCommerce-termék (rendelésválasztókhoz). |
| `edd_products` | Az összes Easy Digital Downloads-termék. |
| `product_selector_edd` | Az összes Easy Digital Downloads-termék. |

### Egyszeres vagy többszörös választó

Az egyszeres és a többszörös választó szerkezete azonos. Az `options` tömb elemeinek két kulcsa van: `id` (egyedi azonosító) és `title` (a felületen látható felirat).

```php
'product_ids' => [
    'type'        => 'multi-select',
    'label'       => 'Célzott termékek',
    'help'        => 'Válaszd ki, mely termékekre fusson a cél',
    'options'     => [
        [
            'id'    => '2',
            'title' => 'Első termék'
        ]
    ],
    'inline_help' => 'Hagyd üresen, ha bármelyik termék megvásárlása számítson',
],
```

### Rádiógomb

Az `options` ugyanolyan szerkezetű, mint a választóknál: az `id` az eltárolt érték, a `title` a gomb mellett látható felirat.

```php
'purchase_type' => [
    'type'        => 'radio',
    'label'       => 'Vásárlás típusa',
    'help'        => 'Válaszd ki a vásárlás típusát',
    'options'     => [
        [
            'id'    => 'all',
            'title' => 'Bármilyen vásárlás'
        ]
    ],
    'inline_help' => 'Milyen vásárlásra fusson a cél'
],
```

### Számmező

```php
'wait_time_amount' => [
    'label'         => 'Várakozási idő',
    'type'          => 'input-number',
    'wrapper_class' => 'fc_2col_inline pad-r-20'
],
```

### Szövegmező

```php
'send_email_custom' => [
    'wrapper_class' => 'fc_half_field',
    'type'          => 'input-text',
    'label'         => 'Címzettek (ha egyedi)',
    'placeholder'   => 'Egyedi e-mail-címek',
    'inline_help'   => 'Több cím esetén vesszővel válaszd el őket'
]
```

### Szövegmező-felugró

A `field_type` értéke `text` vagy `textarea` lehet. A mezőben okoskódok is használhatók.

```php
'note' => [
    'type'       => 'input-text-popper',
    'field_type' => 'textarea',
    'label'      => 'Rendelési megjegyzés',
    'help'       => 'Írd be a megjegyzést, amelyet a rendeléshez adsz. Okoskódokat is használhatsz'
]
```

### Igen/nem jelölő

```php
'run_multiple' => [
    'type'        => 'yes_no_check',
    'label'       => '',
    'check_label' => 'Az automatizálás többször is induljon újra ugyanannak a kapcsolattartónak (csak akkor kapcsold be, ha ezt szeretnéd)',
    'inline_help' => 'Bekapcsolva újraindul az automatizálás, ha a kapcsolattartó már benne van. Egyébként kihagyja.',
]
```

### Csoportos választó

A legfelső szintű elemeknek `title` (a csoport neve), `slug` (egyedi azonosító) és `options` (a gyerekelemek) kulcsa van. A gyerekelemeknek `id` és `title` kulcsa.

```php
'lesson_ids' => [
    'type'        => 'grouped-select',
    'label'       => 'Célzott leckék',
    'help'        => 'Válaszd ki, mely leckékre fusson az automatizálás',
    'options'     => [
        [
            'title'   => 'Első kurzus',
            'slug'    => 'first_course',
            'options' => [
                [
                    'id'    => '1',
                    'title' => 'Első lecke'
                ]
            ]
        ]
    ],
    'is_multiple' => true,
    'inline_help' => 'Hagyd üresen, ha bármelyik leckére fusson',
],
```

### Többszörös szövegbevitel

```php
'target_lesson' => [
    'type'        => 'multi_text_options',
    'label'       => 'Célzott leckék',
    'help'        => 'Add meg a célzott leckéket',
    'input_type'  => 'text',
    'placeholder' => 'Célzott leckék',
    'inline_help' => 'Hagyd üresen, ha minden leckére fusson'
]
```

### E-mail-kampány szerkesztő

```php
'campaign' => [
    'label' => '',
    'type'  => 'email_campaign_composer'
],
```

### Újratöltő választó

Az `options` elemei `id` és `title` kulccsal rendelkeznek. Akkor hasznos, ha egy másik mező (például a lecke) a kiválasztott értéktől (például a kurzustól) függ.

```php
'course_id' => [
    'type'        => 'reload_field_selection',
    'label'       => 'Célzott kurzus',
    'help'        => 'Válassz kurzust a leckék betöltéséhez',
    'options'     => [
        [
            'id'    => '1',
            'title' => 'Első kurzus'
        ]
    ],
    'inline_help' => 'Kötelező kurzust választani'
],
```

### Mezőleképező

A `value_options` az űrlap mezőinek listája (`id` és `title`), a `fields` pedig a leképezendő kapcsolattartó-mezőké.

```php
'primary_fields' => [
    'label'         => 'Elsődleges adatok leképezése',
    'type'          => 'form-group-mapper',
    'value_options' => [
        [
            'id'    => '',
            'title' => ''
        ]
    ],
    'local_label'   => 'Kapcsolattartó mező (CRM)',
    'remote_label'  => 'Űrlapmező',
    'fields'        => [
        'first_name' => [
            'type'  => 'value_options',
            'label' => 'Keresztnév'
        ],
        'last_name' => [
            'type'  => 'value_options',
            'label' => 'Vezetéknév'
        ],
        'email' => [
            'type'  => 'value_options',
            'label' => 'E-mail'
        ]
    ]
]
```

### Több legördülős leképező

```php
'other_fields' => [
    'label'              => 'További adatok leképezése',
    'type'               => 'form-many-drop-down-mapper',
    'value_options'      => [
        [
            'id'    => '',
            'title' => ''
        ]
    ],
    'local_label'        => 'Válaszd ki a kapcsolattartó tulajdonságát',
    'remote_label'       => 'Válaszd ki az űrlapmezőt',
    'local_placeholder'  => 'Kapcsolattartó tulajdonsága',
    'remote_placeholder' => 'Űrlapmező',
    'fields'             => [
        'prefix' => [
            'type'  => 'value_options',
            'label' => 'Megszólítás'
        ],
        'address_line_1' => [
            'type'  => 'value_options',
            'label' => 'Cím 1. sor'
        ],
        'address_line_2' => [
            'type'  => 'value_options',
            'label' => 'Cím 2. sor'
        ],
    ]
]
```

### HTML

Az `info` kulcs kötelező.

```php
'subscription_status_info' => [
    'type' => 'html',
    'info' => 'Az új feliratkozók automatikusan megerősítő levelet kapnak',
]
```

### URL-választó

```php
'redirect_to' => [
    'type'        => 'url_selector',
    'label'       => 'Átirányítás ide',
    'placeholder' => 'A cél URL-je',
    'help'        => 'A kapcsolattartók erre a linkre kerülnek.',
    'inline_help' => 'Add meg az URL-t, ahová a kapcsolattartó átkerül'
],
```

### Név-érték párok

A `property_options` további mezőtípusokat tartalmaz. Felső szintű elemeinek kulcsai: `label` (a tulajdonságválasztó felirata), `type` (az érték kiválasztásához használt mezőtípus) és `options`. A belső `options` elemei: `id`, `slug` (nem kötelező, géppel olvasható kulcs) és `title`.

```php
'contact_properties' => [
    'type'               => 'input_value_pair_properties',
    'support_operations' => 'yes',
    'label'              => 'Állítsd be a frissítendő kapcsolattartó-tulajdonságokat',
    'data_key_label'     => 'Kapcsolattartó tulajdonsága',
    'data_value_label'   => 'Tulajdonság értéke',
    'property_options'   => [
        'contact_type' => [
            'label'   => 'Kapcsolattartó típusa',
            'type'    => 'select',
            'options' => [
                [
                    'id'    => 'lead',
                    'slug'  => 'lead',
                    'title' => 'Érdeklődő'
                ]
            ]
        ],
    ]
]
```

### Szöveges név-érték párok

```php
'meta_properties' => [
    'label'                  => 'Felhasználói meta leképezése',
    'type'                   => 'text-value-multi-properties',
    'data_key_label'         => 'Meta kulcs',
    'data_value_label'       => 'Meta érték',
    'data_value_placeholder' => 'Meta érték',
    'data_key_placeholder'   => 'Meta kulcs',
    'help'                   => 'Itt képezheted le a felhasználói meta tulajdonságokat. Teljesen nem kötelező',
    'value_input_type'       => 'text-popper'
],
```

### HTML-szerkesztő

```php
'description' => [
    'type'  => 'html_editor',
    'label' => 'Leírás'
]
```

### REST-választó

Az `option_key` kötelező (az értékei megegyeznek az option selectors értékeivel).

```php
'course_id' => [
    'type'        => 'rest_selector',
    'option_key'  => 'product_selector_learndash',
    'is_multiple' => false,
    'clearable'   => true,
    'label'       => 'Beiratkozási kurzus',
    'placeholder' => 'Válassz kurzust',
]
```

### Feltételblokk-csoportok

A `labels` tömb kötelező. A `groups` adja meg az elérhető feltételcsoportokat és azok elemeit.

```php
'conditions' => [
    'type'        => 'condition_block_groups',
    'label'       => 'Add meg az egyezési feltételeket',
    'inline_help' => 'Add meg, mely kapcsolattartó-tulajdonságoknak kell egyezniük. A feltételek alapján az igen vagy a nem ág fut le',
    'labels'      => [
        'match_type_all_label' => 'Igaz, ha minden feltétel teljesül',
        'match_type_any_label' => 'Igaz, ha bármelyik feltétel teljesül',
        'data_key_label'       => 'Kapcsolattartó adata',
        'condition_label'      => 'Feltétel',
        'data_value_label'     => 'Egyező érték'
    ],
    'groups'      => [
        'subscriber' => [
            'label'    => 'Kapcsolattartó',
            'value'    => 'subscriber',
            'children' => [
                [
                    'label' => 'Keresztnév',
                    'value' => 'first_name',
                    'type'  => 'nullable_text'
                ],
            ]
        ]
    ],
    'add_label'   => 'Feltétel hozzáadása a kapcsolattartó tulajdonságainak ellenőrzéséhez',
]
```

### Egyedi feladó beállítása

A `check_label` a blokk címe.

```php
'mailer_settings' => [
    'type'        => 'custom_sender_config',
    'check_label' => 'Egyedi feladónév és e-mail-cím megadása',
]
```

### Választógombok

Az `options` elemei `id` és `title` kulccsal rendelkeznek.

```php
'wait_type' => [
    'type'    => 'radio_buttons',
    'label'   => 'Várakozás típusa',
    'options' => [
        [
            'id'    => 'unit_wait',
            'title' => 'Meghatározott ideig'
        ],
        [
            'id'    => 'timestamp_wait',
            'title' => 'Meghatározott dátumig és időpontig'
        ],
        [
            'id'    => 'to_day',
            'title' => 'A hét egy napjáig'
        ]
    ]
],
```

### Jelölőnégyzetek

Az `options` a hét napjait tartalmazza (`id` és `title`). A példa mező a `wait_type` mezőtől függ: csak akkor látszik, ha a `wait_type` értéke `to_day`.

```php
'to_day' => [
    'type'          => 'checkboxes',
    'label'         => 'Várakozás a hét következő napjáig',
    'wrapper_class' => 'fc_2col_inline pad-r-20',
    'options'       => [
        [
            'id'    => 'Mon',
            'title' => 'Hétfő'
        ]
    ],
],
```

### Időválasztó

A `picker_options` három kulcsot tartalmaz: `start`, `step` és `end`. Ez a példa is a `wait_type` mezőtől függ, és csak `to_day` értéknél látszik.

```php
'to_day_time' => [
    'label'          => 'Napszak',
    'type'           => 'time_selector',
    'placeholder'    => 'Válassz időpontot',
    'wrapper_class'  => 'fc_2col_inline',
    'picker_options' => [
        'start' => '00:00',
        'step'  => '00:10',
        'end'   => '23:59'
    ]
]
```
