Completed
Push — master ( 6e5918...2d50a5 )
by Andreas
13:56
created

delete   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 137
Duplicated Lines 0 %

Test Coverage

Coverage 91.67%

Importance

Changes 0
Metric Value
eloc 63
dl 0
loc 137
ccs 44
cts 48
cp 0.9167
rs 10
c 0
b 0
f 0
wmc 12

3 Methods

Rating   Name   Duplication   Size   Complexity  
A get_button_config() 0 21 4
A configure() 0 23 3
A run() 0 22 5
1
<?php
2
/**
3
 * @package midcom.workflow
4
 * @author CONTENT CONTROL http://www.contentcontrol-berlin.de/
5
 * @copyright CONTENT CONTROL http://www.contentcontrol-berlin.de/
6
 * @license http://www.gnu.org/licenses/gpl.html GNU General Public License
7
 */
8
9
namespace midcom\workflow;
10
11
use Symfony\Component\OptionsResolver\OptionsResolver;
12
use midcom_helper_reflector;
13
use midcom_core_dbaobject;
14
use midcom_response_relocate;
15
use midcom_connection;
16
use midcom;
17
use Symfony\Component\HttpFoundation\Request;
18
use Symfony\Component\HttpFoundation\JsonResponse;
19
20
/**
21
 * Helper class for manipulating toolbars
22
 *
23
 * @package midcom.workflow
24
 */
25
class delete extends dialog
26
{
27
    const CONFIRMED = 'confirmed';
28
29
    const SUCCESS = 'success';
30
31
    const FAILURE = 'failure';
32
33
    /**
34
     * The method to call for deletion (delete or delete_tree)
35
     *
36
     * @var boolean
37
     */
38
    protected $recursive;
39
40
    /**
41
     * The URL to redirect to after successful deletion
42
     *
43
     * Defaults to topic start page
44
     *
45
     * @var string
46
     */
47
    protected $success_url;
48
49
    /**
50
     * Disable relocate after execute
51
     *
52
     * Returns the uimessage as JSON instead
53
     *
54
     * @var boolean
55
     */
56
    protected $relocate;
57
58
    /**
59
     *
60
     * @var \midcom_core_dbaobject
61
     */
62
    protected $object;
63
64
    /**
65
     * @var string
66
     */
67
    protected $label;
68
69
    /**
70
     * @var string
71
     */
72
    protected $dialog_text;
73
74
    private $form_identifier = 'confirm-delete';
75
76
    /**
77
     *
78
     * @var \midcom_services_i18n_l10n
79
     */
80
    private $l10n_midcom;
81
82
    /**
83
     * {@inheritdoc}
84
     */
85 311
    public function configure(OptionsResolver $resolver)
86
    {
87 311
        $this->l10n_midcom = midcom::get()->i18n->get_l10n('midcom');
88 311
        if (!empty($_POST[$this->form_identifier])) {
89 1
            $this->state = static::CONFIRMED;
90
        }
91
92
        $resolver
93 311
            ->setDefaults([
94 311
                'recursive' => false,
95
                'success_url' => '',
96
                'relocate' => true,
97
                'label' => null,
98
                'object' => null,
99
                'dialog_text' => null
100
            ])
101 311
            ->setRequired('object')
102 311
            ->setAllowedTypes('object', midcom_core_dbaobject::class)
103 311
            ->setNormalizer('label', function ($options, $value) {
104 311
                if ($value === null) {
105 311
                    return midcom_helper_reflector::get_object_title($options['object']);
106
                }
107 6
                return $value;
108 311
            });
109 311
    }
110
111
    /**
112
     *
113
     * @return array
114
     */
115 311
    public function get_button_config()
116
    {
117 311
        $dialog_text = $this->dialog_text ?: '<p>' . sprintf($this->l10n_midcom->get('delete %s'), $this->label) . '</p>';
118 311
        if ($this->recursive) {
119 311
            $dialog_text .= '<p class="warning">' . $this->l10n_midcom->get('all descendants will be deleted') . ':</p>';
120 311
            $dialog_text .= '<div id="delete-child-list"></div>';
121
        }
122
123
        return [
124 311
            MIDCOM_TOOLBAR_LABEL => $this->l10n_midcom->get('delete'),
125 311
            MIDCOM_TOOLBAR_GLYPHICON => 'trash',
126 311
            MIDCOM_TOOLBAR_ACCESSKEY => 'd',
127 311
            MIDCOM_TOOLBAR_OPTIONS => [
128 311
                'data-dialog' => 'delete',
129 311
                'data-form-id' => $this->form_identifier,
130 311
                'data-dialog-heading' => $this->l10n_midcom->get('confirm delete'),
131 311
                'data-dialog-text' => $dialog_text,
132 311
                'data-dialog-cancel-label' => $this->l10n_midcom->get('cancel'),
133 311
                'data-recursive' => $this->recursive ? 'true' : 'false',
134 311
                'data-guid' => $this->object->guid,
135 311
                'data-relocate' => $this->relocate
136
            ]
137
        ];
138
    }
139
140 17
    public function run(Request $request)
141
    {
142 17
        $this->object->require_do('midgard:delete');
143 17
        $url = $request->request->get('referrer', $this->success_url);
144 17
        if ($this->get_state() === static::CONFIRMED) {
145 1
            $method = $this->recursive ? 'delete_tree' : 'delete';
146 1
            $message = ['title' => $this->l10n_midcom->get('midcom'), 'type' => 'info'];
147 1
            if ($this->object->{$method}()) {
148 1
                $this->state = static::SUCCESS;
149 1
                $url = $this->success_url;
150 1
                $message['message'] = sprintf($this->l10n_midcom->get("%s deleted"), $this->label);
151
            } else {
152
                $this->state = static::FAILURE;
153
                $message['message'] = sprintf($this->l10n_midcom->get("failed to delete %s: %s"), $this->label, midcom_connection::get_error_string());
154
                $message['type'] = 'error';
155
            }
156 1
            if (!$this->relocate) {
157
                return new JsonResponse($message);
158
            }
159 1
            midcom::get()->uimessages->add($message['title'], $message['message'], $message['type']);
160
        }
161 17
        return new midcom_response_relocate($url);
162
    }
163
}
164