summaryrefslogtreecommitdiffstats
path: root/modules/monitoring/application/forms/Command/CommandForm.php
blob: 34391cff969710232584e7d991c16b316133f52b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?php
/* Icinga Web 2 | (c) 2014 Icinga Development Team | GPLv2+ */

namespace Icinga\Module\Monitoring\Forms\Command;

use Icinga\Exception\ConfigurationError;
use Icinga\Web\Form;
use Icinga\Web\Request;
use Icinga\Module\Monitoring\Backend\MonitoringBackend;
use Icinga\Module\Monitoring\Command\Transport\CommandTransport;
use Icinga\Module\Monitoring\Command\Transport\CommandTransportInterface;

/**
 * Base class for command forms
 */
abstract class CommandForm extends Form
{
    /**
     * Monitoring backend
     *
     * @var MonitoringBackend
     */
    protected $backend;

    /**
     * Set the monitoring backend
     *
     * @param   MonitoringBackend $backend
     *
     * @return  $this
     */
    public function setBackend(MonitoringBackend $backend)
    {
        $this->backend = $backend;
        return $this;
    }

    /**
     * Get the monitoring backend
     *
     * @return MonitoringBackend
     */
    public function getBackend()
    {
        return $this->backend;
    }

    /**
     * Get the transport used to send commands
     *
     * @param   Request     $request
     *
     * @return  CommandTransportInterface
     *
     * @throws  ConfigurationError
     */
    public function getTransport(Request $request)
    {
        if (($transportName = $request->getParam('transport')) !== null) {
            $config = CommandTransport::getConfig();
            if ($config->hasSection($transportName)) {
                $transport = CommandTransport::createTransport($config->getSection($transportName));
            } else {
                throw new ConfigurationError(sprintf(
                    mt('monitoring', 'Command transport "%s" not found.'),
                    $transportName
                ));
            }
        } else {
            $transport = new CommandTransport();
        }

        return $transport;
    }

    /**
     * {@inheritdoc}
     */
    public function getRedirectUrl()
    {
        $redirectUrl = parent::getRedirectUrl();
        // TODO(el): Forms should provide event handling. This is quite hackish
        $formData = $this->getRequestData();
        if ($this->wasSent($formData)
            && (! $this->getSubmitLabel() || $this->isSubmitted())
            && $this->isValid($formData)
        ) {
            $this->getResponse()->setAutoRefreshInterval(1);
        }
        return $redirectUrl;
    }
}