# Űrlap: műveletek és egyéni fejlesztés

> Az Űrlap további műveletei: bejelentkezés, regisztráció, jelszókezelés, átirányítás, webhook, bejegyzés létrehozása, Mailchimp, SendGrid és egyéni műveletek.

Ez a fejezet az [Űrlap elem](https://hub.hellowp.io/hu/plugins/bricks-child/elemek-urlap/) e-mailen kívüli műveleteit és a fejlesztőknek szóló bővítési lehetőségeit írja le.

## Felhasználói bejelentkezés, regisztráció, elfelejtett jelszó, jelszó-visszaállítás

Ez a négy művelet egyedi hitelesítési űrlapokat tesz lehetővé kódolás nélkül. Kiválasztásukkor az űrlapmezőket hozzá kell rendelned a művelet beállításaihoz:

| Művelet | Szükséges mezők |
| --- | --- |
| Bejelentkezés | Bejelentkezési név, jelszó, és opcionálisan a „Jegyezz meg” jelölőnégyzet. |
| Regisztráció | E-mail, jelszó, felhasználónév, és opcionálisan a vezeték- és keresztnév. |
| Elfelejtett jelszó | E-mail vagy felhasználónév: erre küldi a visszaállítási utasítást. |
| Jelszó visszaállítása | A jelszó mező. |

A regisztráció során küldött alapértelmezett WordPress-e-maileket a `wp_new_user_notification_email` (a felhasználónak szóló) és a `wp_new_user_notification_email_admin` (a rendszergazdának szóló) szűrővel alakíthatod. Az elfelejtett jelszó e-mail szövegét a `retrieve_password_message` szűrővel módosíthatod.

### Jelszó megerősítése

Egy **Jelszó** mező ellenőrizheti, hogy az értéke megegyezik-e egy másik jelszómezőével ugyanabban az űrlapban. Regisztrációs és jelszó-visszaállító űrlapnál használd:

1. Vegyél fel két **Jelszó** mezőt „Jelszó” és „Jelszó megerősítése” címkével.
2. Másold ki a főmező azonosítóját a beállításai végéről.
3. A megerősítő mezőn kapcsold be a **Megerősítő jelszóként jelölés** lehetőséget.
4. A **Fő jelszómező azonosítója** mezőbe illeszd be a főmező azonosítóját, kapcsos zárójel és `form-field-` előtag nélkül.
5. Ha az alapértelmezett „A jelszavak nem egyeznek” üzenetet le szeretnéd cserélni, állítsd be a jelszóeltérés hibaüzenetét.
6. A hitelesítési művelet **Jelszó** beállítását rendeld a főmezőhöz.

Az ellenőrzés beküldéskor történik; eltérés esetén az űrlap műveletei nem futnak le. Ha a **Fő jelszómező azonosítója** üres, az összehasonlítás kimarad, ezért mindig a megfelelő azonosítót add meg. Az egyezés és a kötelező mező ellenőrzése külön dolog: két üres, nem kötelező mező egyezőnek számít. Ha a látogatónak kötelező jelszót megadnia, mindkét mezőn kapcsold be a **Kötelező** beállítást.

## Átirányítás

Az űrlap beküldése után átirányítja a látogatót egy másik oldalra: a webhely oldalára, az admin felületre vagy egyéni URL-re, tetszőleges késleltetéssel. Az átirányítás csak akkor fut le, ha az összes többi művelet sikeres volt. Az egyéni átirányítási URL támogatja az űrlap dinamikus mezőit (`{{mezo_azonosito}}`).

## Jelszóvédelem feloldása

Ez a művelet hozzáférést ad a Bricks jelszóvédelmi funkciójával védett tartalomhoz. A megfelelő mezőt rendelheted a „Jelszó” beállításhoz; ha nem rendelsz mezőt, az űrlap első jelszómezője számít.

## Webhook

A webhook művelet a beküldött adatokat egy vagy több külső URL-re küldi. Tipikus felhasználás:

- Érdeklődők küldése CRM-be (például Zoho, HubSpot, Salesforce).
- Zapier vagy Make forgatókönyvek indítása.
- Adatok tárolása Google Táblázatban vagy külső adatbázisban.
- Belső eszközök értesítése egyéni API-n vagy Slack-boton át.

A webhook egy HTTP-kérés, amely a beküldéskor elindul. Te szabályozod, mit küld, milyen formátumban, és hogy a hiba megállítsa-e az űrlapot.

### Végpontok

Több végpontot is felvehetsz, mindegyiknek ezek a beállításai vannak:

| Beállítás | Mit csinál |
| --- | --- |
| Név | A webhook neve, csak a saját tájékozódásodra. |
| Végpont URL | Az URL, ahová az adatok mennek. |
| Adatformátum | `JSON` vagy `Form data` (x-www-form-urlencoded). |
| Adat | Opcionális tartalomsablon dinamikus mezőkkel. Ha üres, minden űrlapmező elküldődik. |
| Fejlécek | Opcionális egyéni fejlécek JSON-ban. |

```json
{ "name": "{{43f295}}", "email": "{{a5c626}}" }
```

```json
{ "Authorization": "Bearer token" }
```

### További beállítások

| Beállítás | Mit csinál | Alapérték |
| --- | --- | --- |
| Legnagyobb adatméret (KB) | A kérés tartalmának maximális mérete. | 1024 (1 MB) |
| Sebességkorlátozás | Óránkénti kérések korlátozása. | Ki |
| Legtöbb kérés óránként | A korlát, ha a sebességkorlátozás be van kapcsolva. | 60 |
| Folytatás hiba esetén | Bekapcsolva az űrlap beküldése akkor is sikeres, ha a webhook hibázik. | Ki |
| Hibaüzenet | A webhook hibájakor megjelenő üzenet, ha a folytatás hiba esetén ki van kapcsolva. | Üres |

### Példa: Zapier

1. A Zapierben hozz létre egy új Zapet.
2. Eseményindítónak válaszd a „Webhooks by Zapier” szolgáltatást.
3. Válaszd a „Catch Hook” lehetőséget.
4. Másold ki a Zapier által adott webhook-URL-t.
5. A Bricksben az űrlapon vegyél fel egy Webhook műveletet.
6. Illeszd be a Zapier-URL-t a **Végpont URL** mezőbe.
7. Az adatformátum legyen `JSON` (ajánlott).
8. Opcionálisan add meg a tartalmat, vagy hagyd üresen az összes mező küldéséhez.
9. Mentsd el és próbáld ki az űrlapot.

## Bejegyzés létrehozása és frissítése

A „Bejegyzés létrehozása” és „Bejegyzés frissítése” műveletekkel a frontenden is lehet bejegyzéseket létrehozó és szerkesztő űrlapot építeni.

## Mailchimp és SendGrid

Az űrlap e-mail-címet adhat hozzá a Mailchimp vagy a SendGrid listáidhoz. Először add meg az API-kulcsot a **Bricks → Beállítások → API-kulcsok** résznél (Mailchimp API-kulcs, illetve SendGrid API-kulcs), majd az űrlapon válaszd a megfelelő műveletet. Ekkor új „Mailchimp”, illetve „SendGrid” beállítócsoport jelenik meg, ahol kiválasztod a listát és az űrlap azon e-mail mezőjét, amelyben a cím van.

| Művelet | Mit küld | Előfeltétel |
| --- | --- | --- |
| Mailchimp | E-mail-cím, keresztnév és vezetéknév egy Mailchimp-listához és csoporthoz. | Mailchimp-fiók és API-kulcs. |
| SendGrid | E-mail-cím, keresztnév és vezetéknév egy SendGrid-listához. | SendGrid-fiók és API-kulcs. |

## Egyéni művelet

Az **Egyéni** művelet lehetővé teszi, hogy a `bricks/form/custom_action` akcióba kapcsolódva saját kódot futtass. Győződj meg róla, hogy az **Egyéni** szerepel az űrlap „Műveletek” választójában.

A visszahívott függvény megkapja az `$form` objektumot, amellyel lekérheted:

| Metódus | Mit ad vissza |
| --- | --- |
| `$form->get_settings()` | Az űrlap beállításait (mezők és műveletek beállításai) asszociatív tömbben. |
| `$form->get_fields()` | A beküldött mezőértékeket, valamint a `postId` és a `formId` értékét. |
| `$form->get_uploaded_files()` | A feltöltött fájlok adatait (`file`, `url`, `type`) a mező azonosítója szerint csoportosítva. |

### 1. példa: alapfelépítés

```php
function my_form_custom_action( $form ) {
  // $fields = $form->get_fields();
  // $settings = $form->get_settings();
  // $files = $form->get_uploaded_files();

  // Itt végezd a saját logikádat...

  // Hiba esetén állítsd be az eredményt
  $form->set_result([
    'action'  => 'my_custom_action',
    'type'    => 'success', // vagy 'error' vagy 'info'
    'message' => esc_html__( 'Az egyéni művelet nem sikerült', 'bricks' ),
  ]);
}
add_action( 'bricks/form/custom_action', 'my_form_custom_action', 10, 1 );
```

### 2. példa: második e-mail küldése

A beépített e-mail művelet egy értesítést küld. Ezzel a kóddal egy másodikat is elküldhetsz:

```php
function my_form_custom_action_sending_email( $form ) {
  $fields   = $form->get_fields();
  $settings = $form->get_settings();

  $to      = 'cimzett@example.com'; // Cseréld ki
  $from    = 'felado@example.com';  // Cseréld ki
  $subject = 'Az e-mail tárgya';    // Cseréld ki

  if ( ! empty( $settings['emailContent'] ) ) {
    $message = $form->render_data( $settings['emailContent'] );
    $message = isset( $settings['htmlEmail'] ) ? nl2br( $message ) : $message;
  } else {
    $email   = new Bricks\Integrations\Form\Actions\Email( 'email' );
    $message = $email->get_default_message( $settings, $fields );
  }

  $headers[] = 'From: Név <' . $from . '>';
  $headers[] = 'Reply-to: ' . $from;
  if ( isset( $settings['htmlEmail'] ) ) {
    $headers[] = 'Content-Type: text/html; charset=UTF-8' . "\r\n";
  }

  wp_mail( $to, $subject, $message, $headers );
}
add_action( 'bricks/form/custom_action', 'my_form_custom_action_sending_email', 10, 1 );
```

### 3. példa: átirányítás egy rejtett mező URL-jére

Ha az átirányítás egy URL-paraméter értékétől függ, az **Egyéni átirányítási URL** mezőben nem használhatod az `{url_parameter:kulcs}` címkét, mert az űrlap AJAX-szal megy be, és az aktuális oldal URL-paramétere nem kerül a kérésbe.

- **1. módszer:** az **Átirányítás** művelet támogatja az űrlap dinamikus mezőit, ezért a rejtett mező azonosítóját közvetlenül beírhatod az átirányítási URL-be.
- **2. módszer:** bonyolultabb logikához használd az **Egyéni** műveletet. Tedd az URL-paramétert egy **Rejtett** mezőbe (az alapértéke `{url_parameter:my_key}`), majd:

```php
add_action( 'bricks/form/custom_action', 'redirect_to_my_key', 10, 1 );

function redirect_to_my_key( $form ) {
  $form_fields = $form->get_fields();
  $form_id     = $form_fields['formId'];

  // Csak a kívánt űrlapra fusson
  if ( $form_id !== 'cyrozb' ) return;

  // A rejtett mező azonosítója: oecdxz
  $my_key = isset( $form_fields['form-field-oecdxz'] ) ? $form_fields['form-field-oecdxz'] : '';

  if ( $my_key ) {
    $redirect_to = get_site_url() . '/?key=' . $my_key;

    $form->set_result([
      'action'          => 'my_custom_redirect',
      'type'            => 'redirect', // kötelezően 'redirect'
      'redirectTo'      => $redirect_to,
      'redirectTimeout' => 0 // késleltetés ezredmásodpercben
    ]);
  }
}
```

## Egyéni űrlapműveletek

Több egyéni űrlapművelet is hozzáadható, így a űrlap külső szolgáltatásokhoz (CRM, e-mail-marketing, értesítési rendszerek) vagy saját munkafolyamatokhoz kapcsolható. Három szűrő kell hozzá:

| Szűrő | Szerepe |
| --- | --- |
| `bricks/elements/{elem_neve}/controls` | Új műveletek és beállításaik hozzáadása az űrlapszerkesztőhöz. |
| `bricks/elements/{elem_neve}/control_groups` | A beállítások csoportosítása. |
| `bricks/form/action/{muvelet}` | A művelet logikája a beküldéskor. |

Példa egy egyéni Slack-értesítésre:

1. A művelet felvétele a műveletek választóba:

```php
add_filter( 'bricks/elements/form/controls', function( $controls ) {
  $controls['actions']['options']['slack-notification'] = esc_html__( 'Küldés Slackre', 'bricks' );

  $controls['slackFields'] = [
    'group'       => 'slack',
    'label'       => esc_html__( 'Belefoglalandó mezők', 'bricks' ),
    'type'        => 'select',
    'multiple'    => true,
    'options'     => [], // automatikusan az űrlap 'map_fields' => true mezőivel töltődik
    'map_fields'  => true,
    'description' => esc_html__( 'Válaszd ki, mely mezők kerüljenek a Slack-értesítésbe', 'bricks' ),
  ];

  return $controls;
});
```

2. Új beállítócsoport:

```php
add_filter( 'bricks/elements/form/control_groups', function( $control_groups ) {
  $control_groups['slack'] = [
    'title'    => esc_html__( 'Slack-értesítés', 'bricks' ),
    'required' => [ 'actions', '=', 'slack-notification' ],
  ];

  return $control_groups;
});
```

3. A művelet logikája beküldéskor:

```php
add_action( 'bricks/form/action/slack-notification', function ( $form ) {
  $settings = $form->get_settings();
  $fields   = $form->get_fields();

  // Itt jön a Slack-értesítés saját megvalósítása
});
```
