summaryrefslogtreecommitdiffstats
path: root/application/forms/Config/UserGroup/UserGroupForm.php
blob: b944e97285b0372a19e870cac02f8c6363c89b63 (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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
<?php
/* Icinga Web 2 | (c) 2015 Icinga Development Team | GPLv2+ */

namespace Icinga\Forms\Config\UserGroup;

use Icinga\Application\Hook\ConfigFormEventsHook;
use Icinga\Data\Filter\Filter;
use Icinga\Forms\RepositoryForm;
use Icinga\Web\Notification;

class UserGroupForm extends RepositoryForm
{
    /**
     * Create and add elements to this form to insert or update a group
     *
     * @param   array   $formData   The data sent by the user
     */
    protected function createInsertElements(array $formData)
    {
        $this->addElement(
            'text',
            'group_name',
            array(
                'required'  => true,
                'label'     => $this->translate('Group Name')
            )
        );

        if ($this->shouldInsert()) {
            $this->setTitle($this->translate('Add a new group'));
            $this->setSubmitLabel($this->translate('Add'));
        } else { // $this->shouldUpdate()
            $this->setTitle(sprintf($this->translate('Edit group %s'), $this->getIdentifier()));
            $this->setSubmitLabel($this->translate('Save'));
        }
    }

    /**
     * Update a group
     *
     * @return  bool
     */
    protected function onUpdateSuccess()
    {
        if (parent::onUpdateSuccess()) {
            if (($newName = $this->getValue('group_name')) !== $this->getIdentifier()) {
                $this->getRedirectUrl()->setParam('group', $newName);
            }

            return true;
        }

        return false;
    }

    /**
     * Create and add elements to this form to delete a group
     *
     * @param   array   $formData   The data sent by the user
     */
    protected function createDeleteElements(array $formData)
    {
        $this->setTitle(sprintf($this->translate('Remove group %s?'), $this->getIdentifier()));
        $this->addDescription($this->translate(
            'Note that all users that are currently a member of this group will'
            . ' have their membership cleared automatically.'
        ));
        $this->setSubmitLabel($this->translate('Yes'));
        $this->setAttrib('class', 'icinga-form icinga-controls');
    }

    /**
     * Create and return a filter to use when updating or deleting a group
     *
     * @return  Filter
     */
    protected function createFilter()
    {
        return Filter::where('group_name', $this->getIdentifier());
    }

    /**
     * Return a notification message to use when inserting a group
     *
     * @param   bool    $success    true or false, whether the operation was successful
     *
     * @return  string
     */
    protected function getInsertMessage($success)
    {
        if ($success) {
            return $this->translate('Group added successfully');
        } else {
            return $this->translate('Failed to add group');
        }
    }

    /**
     * Return a notification message to use when updating a group
     *
     * @param   bool    $success    true or false, whether the operation was successful
     *
     * @return  string
     */
    protected function getUpdateMessage($success)
    {
        if ($success) {
            return sprintf($this->translate('Group "%s" has been edited'), $this->getIdentifier());
        } else {
            return sprintf($this->translate('Failed to edit group "%s"'), $this->getIdentifier());
        }
    }

    /**
     * Return a notification message to use when deleting a group
     *
     * @param   bool    $success    true or false, whether the operation was successful
     *
     * @return  string
     */
    protected function getDeleteMessage($success)
    {
        if ($success) {
            return sprintf($this->translate('Group "%s" has been removed'), $this->getIdentifier());
        } else {
            return sprintf($this->translate('Failed to remove group "%s"'), $this->getIdentifier());
        }
    }

    public function isValid($formData)
    {
        $valid = parent::isValid($formData);

        if ($valid && ConfigFormEventsHook::runIsValid($this) === false) {
            foreach (ConfigFormEventsHook::getLastErrors() as $msg) {
                $this->error($msg);
            }

            $valid = false;
        }

        return $valid;
    }

    public function onSuccess()
    {
        if (parent::onSuccess() === false) {
            return false;
        }

        if (ConfigFormEventsHook::runOnSuccess($this) === false) {
            Notification::error($this->translate(
                'Configuration successfully stored. Though, one or more module hooks failed to run.'
                . ' See logs for details'
            ));
        }
    }
}