Passed
Push — master ( 15349c...6dd06d )
by Struan
06:50
created

EditTermView   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 69
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 48
c 1
b 0
f 0
dl 0
loc 69
rs 10
wmc 11

2 Methods

Rating   Name   Duplication   Size   Complexity  
B display() 0 43 6
A update_glossary_entry() 0 21 5
1
<?php
2
3
# For adding glossary terms
4
5
namespace MySociety\TheyWorkForYou\GlossaryView;
6
7
class EditTermView extends BaseView {
8
    public $glossary;
9
10
    public function display(): array {
11
        global $THEUSER;
12
        if (!$this->has_edit_access()) {
13
            return ['error' => _("You don't have permission to manage the glossary")];
14
        }
15
16
        $data = [];
17
        $id = filter_user_input(get_http_var('id'), 'strict');
18
19
        $this->glossary = new \GLOSSARY(['glossary_id' => $id]);
20
        if (!$this->glossary->current_term) {
21
            $data["error"] = "No such term";
22
            $data['no_term'] = 1;
23
            return $data;
24
        }
25
        $data['glossary_id'] = $id;
26
        $data['glossary'] = $this->glossary;
27
        $data['title'] = $this->glossary->current_term['title'];
28
        $data['template_name'] = 'editterm_start';
29
        $term = $this->glossary->current_term;
30
        $data['definition_raw'] = $term['body'];
31
32
33
        if (get_http_var('submitterm') != '') {
34
            $data['definition_raw'] = get_http_var('definition');
35
            $data = $this->update_glossary_entry($data);
36
            if ($data['success']) {
37
                $URL = new \MySociety\TheyWorkForYou\Url('glossary');
38
                $URL->insert(['gl' => $id]);
39
                $data['entry_url'] = $URL->generate();
40
                $data['template_name'] = 'editterm_success';
41
            }
42
        } elseif (get_http_var('previewterm') != '') {
43
            $data['contributing_user'] = $term['firstname'] . " " . $term['lastname'];
44
            $data['definition_raw'] = get_http_var('definition');
45
            $data['definition'] = $this->format_body($data['definition_raw']);
46
            $data['template_name'] = 'editterm_preview';
47
        }
48
49
        $URL = new \MySociety\TheyWorkForYou\Url('glossary_editterm');
50
        $data['form_url'] = $URL->generate();
51
52
        return $data;
53
    }
54
55
    protected function update_glossary_entry(array $data): array {
56
        $success = false;
57
        if (!isset($data['error'])) {
58
            $entry = [
59
                'glossary_id' => $data['glossary_id'],
60
                'body'  => $data['definition_raw'],
61
            ];
62
            $success = $this->glossary->update($entry);
63
        }
64
65
        if (is_int($success)) {
66
            $data['success'] = 1;
67
        } elseif (is_array($success)) {
68
            $data = array_merge($data, $success);
69
        } else {
70
            if (!isset($data['error'])) {
71
                $data['error'] = "Sorry, there was an error and we were unable to add your Glossary item.";
72
            }
73
        }
74
75
        return $data;
76
    }
77
78
}
79