# PHP API: kapcsolattartók, listák és címkék

> Kapcsolattartók keresése, létrehozása, módosítása és szűrése PHP-ból, valamint a listák és címkék elérése.

A FluentCRM PHP API-jával a saját bővítményed vagy sablonod kódjából is kezelheted a kapcsolattartókat, listákat és címkéket. Az API-t a `FluentCrmApi()` függvény adja.

## Kapcsolattartó API

```php
<?php

$contactApi = FluentCrmApi('contacts');
```

### Kapcsolattartó lekérése

A `getContact()` e-mail-címet vagy kapcsolattartó-azonosítót fogad. Fontos: ez az azonosító nem a WordPress-felhasználó azonosítója.

```php
<?php

// E-mail-cím vagy kapcsolattartó-azonosító alapján
$contact = $contactApi->getContact($emailOrContactId);

// Csak azonosító alapján
$contact = $contactApi->getContact($contactId);

// Csak e-mail-cím alapján
$contact = $contactApi->getContact($emailAddress);

// WordPress-felhasználó azonosítója alapján
$contact = $contactApi->getContactByUserRef($userId);

// A bejelentkezett felhasználó kapcsolattartója
$contact = $contactApi->getCurrentContact();
```

### Adatok elérése

```php
<?php

$firstName = $contact->first_name;
$lastName  = $contact->last_name;
$email     = $contact->email;

$tags  = $contact->tags()->get();  // a kapcsolattartó címkéi
$lists = $contact->lists()->get(); // a kapcsolattartó listái
```

### Adatok módosítása

```php
<?php

// Alapmezők
$contact->first_name = 'Új keresztnév';
$contact->last_name  = 'Vezetéknév';
$contact->save();

// Címkék hozzáadása és eltávolítása
$contact->attachTags([1, 2, 3]);
$contact->detachTags([1, 2, 3]);

// Listák hozzáadása és eltávolítása
$contact->attachLists([2, 3]);
$contact->detachLists([2, 3]);
```

### Létrehozás vagy frissítés egy hívással

A `createOrUpdate()` új kapcsolattartót hoz létre, vagy a meglévőt frissíti. Az `email` mező kötelező.

```php
<?php

$contactApi = FluentCrmApi('contacts');

$data = [
    'first_name' => 'János',
    'last_name'  => 'Minta',
    'email'      => 'janos@example.com', // kötelező
    'status'     => 'pending',
    'tags'       => [1, 2, 3], // címkeazonosítók
    'lists'      => [4],       // listaazonosítók
];

$contact = $contactApi->createOrUpdate($data);

// Függő (pending) állapotnál elküldheted a megerősítő levelet
if ($contact->status === 'pending') {
    $contact->sendDoubleOptinEmail();
}
```

### Kapcsolattartók szűrése

A szűréshez a `getInstance()` lekérdezést ad vissza. A végén a `get()` helyett használhatsz `paginate()`-et is.

```php
<?php

// Feliratkozott kapcsolattartók
$subscribed = $contactApi->getInstance()
    ->where('status', 'subscribed')
    ->get();

// Függő és leiratkozott kapcsolattartók
$contacts = $contactApi->getInstance()
    ->whereIn('status', ['unsubscribed', 'pending'])
    ->get();

// Címkeazonosítók alapján
$tagContacts = $contactApi->getInstance()->filterByTags([1, 2])->get();

// Listaazonosítók alapján
$listContacts = $contactApi->getInstance()->filterByLists([1, 2])->get();

// Keresés szövegre
$found = $contactApi->getInstance()->searchBy('keresett szöveg')->get();
```

## Listák és címkék

A FluentCRM-ben a lista és a címke is a kapcsolattartók csoportosítására szolgál.

```php
<?php

$listApi = FluentCrmApi('lists');

$allLists = $listApi->all();   // az összes lista
$list     = $listApi->find(1); // egy lista azonosító alapján

$listId    = $list->id;
$listTitle = $list->title;
$listSlug  = $list->slug;
```

A címkék ugyanígy érhetők el:

```php
<?php

$tagApi = FluentCrmApi('tags');

$allTags = $tagApi->all();   // az összes címke
$tag     = $tagApi->find(1); // egy címke azonosító alapján

$tagId    = $tag->id;
$tagTitle = $tag->title;
$tagSlug  = $tag->slug;
```

### Címkék ellenőrzése egy kapcsolattartón

A `hasAnyTagId()` megmondja, hogy a kapcsolattartónak van-e legalább egy címkéje a megadottak közül:

```php
<?php

$contactApi = FluentCrmApi('contacts');

// A bejelentkezett felhasználó kapcsolattartója
$contact = $contactApi->getCurrentContact();

$targetTagIds = [1, 2, 3];
$isInTags = ($contact && $contact->hasAnyTagId($targetTagIds));
```
