# Talep Görünüm Kancaları

https://dev.wisecp.com/tr/talep-gorunum-kancalari

Ekrandaki listeler, konuşma ve seçicilerin dokuz kancası.

## Genel Bakış

Ekranda görünen her şey bu kancalardan geçer: listeler, konuşma akışı, departman ve hizmet seçicileri, detay sayfasının verisi.

Biri diğerlerinden farklı çalışır: liste sorgusu size hazır satırları değil **sorgunun kendisini** verir, ve aynı listeleme için iki kez çağrılır.

## Referans

### Departman listesini değiştirme

filterticket.departments

`ClientTickets` bağla geçer

Müşteriye gösterilen departman listesi kurulduktan sonra çalışır. Bir departmanı gizlemek, oraya talep açılmasını da engeller.

Parametreler 2

$departmentsarraybağlaGörünen departmanlar.

$langstringAktif dil.

Dönüş 1

voidDönüş yoksayılır; verinin üzerine yazarsınız.

Dinleyici PHP

```php
Hook::add('filter:ticket.departments', 10, function (&$departments, $lang) {
    // Gizlemek, oraya talep acilmasini da engeller.
    $departments = array_values(array_filter($departments,
        fn ($d) => Acme::departmentOpen((int) ($d['id'] ?? 0))));
});
```

### Öncelik seçeneklerini değiştirme

filterticket.priorities

`ClientTickets` seçili bayrağı dâhil

Müşterinin seçebileceği öncelikler hazırlandıktan sonra çalışır.

Parametreler 1

$prioritiesarraybağlaSeçenekler; her biri değeri, etiketi ve seçili olup olmadığını taşır. Seçili olanı listeden çıkarırsanız formda hiçbir öncelik işaretli kalmaz.

Dönüş 1

voidDönüş yoksayılır; verinin üzerine yazarsınız.

Dinleyici PHP

```php
Hook::add('filter:ticket.priorities', 10, function (&$priorities) {
    // Secili olani cikarirsaniz formda hicbir sey isaretli kalmaz.
    $priorities = array_values(array_filter($priorities,
        fn ($p) => (int) ($p['value'] ?? 0) < 4));
});
```

### Hizmet seçicisini değiştirme

filterticket.related_services

`ClientTickets` gruplu yapı

Talep açarken gösterilen hizmet seçicisi hazırlandıktan sonra çalışır.

Parametreler 2

$serviceGroupsarraybağlaGruplanmış seçici verisi; her grubun etiketi ve öğeleri vardır. Yapıyı düzleştirmeyin: şablon grup katmanını bekler.

$uidintTalebi açacak **aktif hesap**. Giriş kimliği değildir: alt kullanıcı başka bir hesabın hizmetlerini listeliyor olabilir.

Dönüş 1

voidDönüş yoksayılır; verinin üzerine yazarsınız.

Dinleyici PHP

```php
Hook::add('filter:ticket.related_services', 10, function (&$serviceGroups, $uid) {
    // Yapiyi duzlestirmeyin: sablon grup katmanini bekler.
    $serviceGroups[] = ['label' => 'Acme', 'items' => Acme::servicesFor($uid)];
});
```

### Konuşma akışını değiştirme

filterticket.thread

`ClientTickets` en yeni ilk

Talebin yanıt akışı ekrana gitmeden önce çalışır.

Parametreler 2

$threadarraybağlaYanıt satırları, **en yeni ilk** sırayla. Her satır yazarını, tarihini ve personel olup olmadığını taşır.

$ctxarrayBağlam: talep kimliği, giriş kimliği ve misafir olup olmadığı. Misafirde giriş kimliği sıfırdır.

Dönüş 1

voidDönüş yoksayılır; verinin üzerine yazarsınız.

Dinleyici PHP

```php
Hook::add('filter:ticket.thread', 10, function (&$thread, $ctx) {
    // Siralamada en yeni ilk gelir.
    foreach ($thread as $i => $row)
        if ($row['is_staff'] ?? false) $thread[$i]['author'] = Acme::displayName($row);
});
```

### Detay sayfası verisini değiştirme

filterticket.detail_data

`AdminTickets` sayfanın tüm verisi

Talep detay sayfası hazırlandıktan sonra çalışır. Elinizdeki, şablona geçecek verinin **tamamıdır**.

Parametreler 2

$dataarraybağlaSayfanın tüm verisi. Var olan anahtarları ezmemeye dikkat edin: burada kaybolan bir değer sayfada boş bir alan bırakır.

$ticketarrayAktif talep.

Dönüş 1

voidDönüş yoksayılır; verinin üzerine yazarsınız.

Dinleyici PHP

```php
Hook::add('filter:ticket.detail_data', 10, function (&$data, $ticket) {
    // Var olan anahtarlari ezmeyin.
    $data['acme_risk'] = Acme::riskScore((int) ($ticket['user_id'] ?? 0));
});
```

### Liste sorgusunu daraltma

filterticket.list_query

`AdminTickets` sorgu kurucusu

Talep listesi sorgusu çalıştırılmadan önce çalışır. Elinizdeki hazır satırlar değil, **sorgunun kendisidir**.

Parametreler 3

$stmtobjectbağlaSorgu kurucusu; koşul zincirleyebilirsiniz.

$filtersarrayÇözümlenmiş filtreler: durumu, departmanı, müşterisi, ataması ve önceliği.

$rCountboolBu bir **sayım** sorgusu mu. ? Kanca aynı listeleme için **iki kez** çalışır: bir kez sayım, bir kez veri. Koşulu yalnız birine eklerseniz sayfa numaraları ile satırlar tutmaz.

Dönüş 1

voidDönüş yoksayılır; koşulu kurucuya zincirlersiniz.

Dinleyici PHP

```php
Hook::add('filter:ticket.list_query', 10, function (&$stmt, $filters, $rCount) {
    // Kanca IKI KEZ calisir: sayim ve veri. Kosulu ikisine de ekleyin.
    $stmt->where('t.did', '!=', Acme::INTERNAL_DEPT);
});
```

### Liste satırlarını değiştirme

filterticket.list_rows

`ClientTickets` sayfa başına

Müşterinin talep listesi ekrana gitmeden önce çalışır.

Parametreler 2

$rowsarraybağlaO sayfanın satırları: numarası, konusu, durumu, puanı ve departmanı. Yalnız **görüntülenen sayfa** gelir; listenin tamamı değil.

$uidintAktif hesap; satırlar bu hesaba göre kapsanmıştır.

Dönüş 1

voidDönüş yoksayılır; verinin üzerine yazarsınız.

Dinleyici PHP

```php
Hook::add('filter:ticket.list_rows', 10, function (&$rows, $uid) {
    // Yalniz goruntulenen sayfa gelir.
    foreach ($rows as $i => $r) $rows[$i]['subject'] = Acme::shorten($r['subject'] ?? '');
});
```

### Toplu işlem kapsamını daraltma

filterticket.bulk_action_ids

`AdminTickets` yalnız daraltma

Toplu bir işlem uygulanmadan önce çalışır. Bazı talepleri kapsam dışında bırakmanın yolu budur.

Parametreler 2

$idsarraybağlaİşlenecek talepler. Bu liste **daraltmak** içindir: eleman çıkarın. Eklemek, yöneticinin seçmediği bir talebi kapatır ya da siler.

$actionstringUygulanan işlem: kapatma, silme ve engelli varyantları.

Dönüş 1

voidDönüş yoksayılır; verinin üzerine yazarsınız.

Dinleyici PHP

```php
Hook::add('filter:ticket.bulk_action_ids', 10, function (&$ids, $action) {
    // DARALTMAK icindir: eklemeyin.
    $ids = array_values(array_filter($ids, fn ($id) => !Acme::underLegalHold((int) $id)));
});
```

### Erişim gruplarını değiştirme

filterticket.access_groups

`ClientTickets` bağla geçer

Talep açarken gösterilen erişim grupları hazırlandıktan sonra çalışır.

Parametreler 2

$groupsarraybağlaGörünen gruplar; kimliği, adı ve simgesi.

$langstringSayfanın aktif dili.

Dönüş 1

voidDönüş yoksayılır; verinin üzerine yazarsınız.

Dinleyici PHP

```php
Hook::add('filter:ticket.access_groups', 10, function (&$groups, $lang) {
    $groups = array_values(array_filter($groups,
        fn ($g) => Acme::groupVisible((int) ($g['id'] ?? 0))));
});
```

## Tuzaklar

> **Liste sorgusu aynı listeleme için iki kez çalışır**
> 
> Kanca bir kez **sayım**, bir kez **veri** sorgusu için çağrılır. Koşulunuzu yalnız birine eklerseniz sayfa numaraları gerçek satır sayısıyla tutmaz: kullanıcı boş sayfalar görür. Sayım bayrağına bakıp ayrım yapmayacaksanız koşulu ikisine de ekleyin.

> **Toplu işlem listesi daraltmak içindir**
> 
> Bu filtreden eleman **çıkarılır**. Eklemek, yöneticinin seçmediği bir talebi kapatır ya da siler; ekranda onay verdiği liste ile gerçekte işlenen liste ayrışır.

## İlgili Makaleler

- Destek Talebi Kancaları
- [Müşteri Hesabı Kancaları](https://dev.wisecp.com/tr/musteri-hesabi-kancalari)
- [Kancalar Nasıl Çalışır](https://dev.wisecp.com/tr/kancalar-nasil-calisir)
