[comment]: # aside:2

[comment]: # ({f589b4e2-e31d2e06})
# Darbības

Darbības ir atbildīgas par moduļa “biznesa loģiku”. Darbība parasti sastāv no [kontroliera](#controller) un [darbības skata](views#action-view). 

Modulis var: 

- Izsaukt darbības, kas jau ir definētas Zabbix lietotāja saskarnē.
- Aizstāt noklusējuma darbības ar pielāgotām darbībām.
- Definēt pilnīgi jaunas darbības.

Lai aizstātu noklusējuma darbības uzvedību ar pielāgotu uzvedību, moduļa konfigurācijā definējiet darbību ar tādu pašu nosaukumu. 
Kad darbība tiek izsaukta, noklusējuma Zabbix darbības vietā tiks izpildīta moduļa darbība. 

Darbību faili jāglabā mapē *actions*. Darbības jānorāda [manifest.json](manifest).

[comment]: # ({/f589b4e2-e31d2e06})

[comment]: # ({aed2c24e-348a3343})
### Kontrolieris

Darbplūsma darbībām kontrolierī:

1. Pārbaudiet, vai visi HTTP pieprasījumā nodotie parametri ir derīgi:
- Izsauciet kontroliera *checkInput()* metodi;
- Izmantojiet validācijas noteikumus, kas definēti CNewValidator.php;
- Izsauciet *validateInput()* metodi.

2. Pārbaudiet lietotāja atļaujas.

3. Sagatavojiet datus atbilstoši nodotajiem parametriem: ja *checkInput()* atgriež true, Zabbix izsauc kontroliera *doAction()* metodi.

4. Sagatavojiet **$data** masīvu skatam. Izmantojiet *CControllerResponseData* un *setResponse()* metodi, lai saglabātu atbildi **$data** masīvā.

Piemērs:

````php
/**
 * Validate input parameters.
 *
 * @return bool
 */
protected function checkInput(): bool {
    $ret = $this->validateInput([
        'status' => 'in '.implode(',', [HOST_STATUS_MONITORED, HOST_STATUS_NOT_MONITORED])
    ]);

    if (!$ret) {
        $this->setResponse(new CControllerResponseFatal());
    }

    return $ret;
}

/**
 * Check user permissions.
 *
 * @return bool
 */
protected function checkPermissions() {
    return $this->getUserType() >= USER_TYPE_ZABBIX_ADMIN;
}

/**
 * Execute action and generate response object.
 */
protected function do Action(): void {
    $data = [ 
        'hosts_count' => API::Host()->get([
            'countOutput' => true,
            'filter' => [
                'status' => $this->getInput('status')
            ]
        ]) 
    ];
    
    $this->setResponse(new CControllerResponseData($data));
}
````

::: notetip
Pilnu pieejamo kontrolieru klašu sarakstu varat skatīt Zabbix [avota kodā](https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/ui/app/controllers?at=refs%2Fheads%2Frelease%2F7.4).
:::

[comment]: # ({/aed2c24e-348a3343})
