FormController   A
last analyzed

Complexity

Total Complexity 19

Size/Duplication

Total Lines 205
Duplicated Lines 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
eloc 104
c 3
b 0
f 0
dl 0
loc 205
rs 10
wmc 19

9 Methods

Rating   Name   Duplication   Size   Complexity  
A postForm() 0 22 4
A entry() 0 7 1
A index() 0 5 1
A delete() 0 6 1
A entries() 0 7 1
A create() 0 39 1
A __construct() 0 5 1
B save() 0 55 8
A edit() 0 6 1
1
<?php
2
3
namespace Chuckbe\Chuckcms\Controllers;
4
5
use Chuckbe\Chuckcms\Mail\FormActionMail;
6
use Chuckbe\Chuckcms\Models\Form;
7
use Chuckbe\Chuckcms\Models\FormEntry;
8
use Chuckbe\Chuckcms\Models\Template;
9
use ChuckSite;
0 ignored issues
show
Bug introduced by
The type ChuckSite was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
10
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
11
use Illuminate\Foundation\Bus\DispatchesJobs;
12
use Illuminate\Foundation\Validation\ValidatesRequests;
13
use Illuminate\Http\Request;
14
use Illuminate\Routing\Controller as BaseController;
15
use Mail;
16
17
class FormController extends BaseController
18
{
19
    use AuthorizesRequests;
20
    use DispatchesJobs;
21
    use ValidatesRequests;
22
23
    private $form;
24
    private $formEntry;
25
    private $template;
26
27
    /**
28
     * Create a new controller instance.
29
     *
30
     * @return void
31
     */
32
    public function __construct(Form $form, FormEntry $formEntry, Template $template)
33
    {
34
        $this->form = $form;
35
        $this->formEntry = $formEntry;
36
        $this->template = $template;
37
    }
38
39
    public function index()
40
    {
41
        $forms = $this->form->get();
42
43
        return view('chuckcms::backend.forms.index', compact('forms'));
44
    }
45
46
    public function create(Request $request)
47
    {
48
        $this->validate($request, [
49
            'slug'  => 'max:185|required|unique:forms',
50
            'title' => 'required|max:185',
51
        ]);
52
53
        $form = [];
54
        $form_slug = $request->get('slug');
55
        $fields_slug = 'text';
56
57
        $form['fields'][$form_slug.'_'.$fields_slug]['label'] = 'Text';
58
        $form['fields'][$form_slug.'_'.$fields_slug]['type'] = 'text';
59
        $form['fields'][$form_slug.'_'.$fields_slug]['class'] = 'form-control';
60
        $form['fields'][$form_slug.'_'.$fields_slug]['parentclass'] = null;
61
        $form['fields'][$form_slug.'_'.$fields_slug]['placeholder'] = 'Text';
62
        $form['fields'][$form_slug.'_'.$fields_slug]['validation'] = 'required';
63
        $form['fields'][$form_slug.'_'.$fields_slug]['value'] = null;
64
        $form['fields'][$form_slug.'_'.$fields_slug]['attributes']['id'] = 'text_input_id';
65
        $form['fields'][$form_slug.'_'.$fields_slug]['required'] = 'true';
66
67
        $form['actions']['store'] = true;
68
        $form['actions']['send'] = false;
69
70
        $form['actions']['redirect'] = ChuckSite::getSite('domain');
71
72
        $form['files'] = false;
73
74
        $form['button']['class'] = 'btn btn-primary';
75
        $form['button']['label'] = 'Send';
76
        $form['button']['id'] = 'send_form_btn';
77
78
        $form = Form::create(
0 ignored issues
show
Unused Code introduced by
The assignment to $form is dead and can be removed.
Loading history...
79
            ['title'   => $request->get('title'),
80
                'slug' => $form_slug,
81
                'form' => $form, ]
82
        );
83
84
        return redirect()->route('dashboard.forms.edit', ['slug' => $form_slug]);
85
    }
86
87
    public function edit($slug)
88
    {
89
        $form = $this->form->getBySlug($slug);
90
        $emailTemplates = $this->template->getEmailTemplates();
91
92
        return view('chuckcms::backend.forms.edit', compact('form', 'emailTemplates'));
93
    }
94
95
    public function save(Request $request)
96
    {
97
        $form = [];
98
        $form_slug = $request->get('form_slug');
99
        $fields_slug = $request->get('fields_slug');
100
        $countFS = count($fields_slug);
0 ignored issues
show
Bug introduced by
It seems like $fields_slug can also be of type null; however, parameter $value of count() does only seem to accept Countable|array, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

100
        $countFS = count(/** @scrutinizer ignore-type */ $fields_slug);
Loading history...
101
        for ($i = 0; $i < $countFS; $i++) {
102
            $form['fields'][$form_slug.'_'.$fields_slug[$i]]['label'] = $request->get('fields_label')[$i];
103
            $form['fields'][$form_slug.'_'.$fields_slug[$i]]['type'] = $request->get('fields_type')[$i];
104
            $form['fields'][$form_slug.'_'.$fields_slug[$i]]['class'] = $request->get('fields_class')[$i];
105
            $form['fields'][$form_slug.'_'.$fields_slug[$i]]['parentclass'] = $request->get('fields_parentclass')[$i];
106
            $form['fields'][$form_slug.'_'.$fields_slug[$i]]['placeholder'] = $request->get('fields_placeholder')[$i];
107
            $form['fields'][$form_slug.'_'.$fields_slug[$i]]['validation'] = $request->get('fields_validation')[$i];
108
            $form['fields'][$form_slug.'_'.$fields_slug[$i]]['value'] = $request->get('fields_value')[$i];
109
            $countFAN = count(explode(';', $request->get('fields_attributes_name')[$i]));
110
            for ($k = 0; $k < $countFAN; $k++) {
111
                $form['fields'][$form_slug.'_'.$fields_slug[$i]]['attributes'][explode(';', $request->get('fields_attributes_name')[$i])[$k]] = explode(';', $request->get('fields_attributes_value')[$i])[$k];
112
            }
113
            $form['fields'][$form_slug.'_'.$fields_slug[$i]]['required'] = $request->get('fields_required')[$i];
114
        }
115
116
        $form['actions']['store'] = $request->get('action_store') == 'true' ? true : false;
117
118
        if ($request->get('action_send') !== 'false' && $request->get('action_send') !== false) {
119
            $countActions = count($request->get('action_send_slug'));
120
            for ($g = 0; $g < $countActions; $g++) {
121
                $form['actions']['send'][$request->get('action_send_slug')[$g]]['to'] = $request->get('action_send_to')[$g];
122
                $form['actions']['send'][$request->get('action_send_slug')[$g]]['to_name'] = $request->get('action_send_to_name')[$g];
123
                $form['actions']['send'][$request->get('action_send_slug')[$g]]['from'] = $request->get('action_send_from')[$g];
124
                $form['actions']['send'][$request->get('action_send_slug')[$g]]['from_name'] = $request->get('action_send_from_name')[$g];
125
                $form['actions']['send'][$request->get('action_send_slug')[$g]]['subject'] = $request->get('action_send_subject')[$g];
126
                $form['actions']['send'][$request->get('action_send_slug')[$g]]['body'] = $request->get('action_send_body')[$g];
127
                $form['actions']['send'][$request->get('action_send_slug')[$g]]['files'] = $request->get('action_send_files')[$g];
128
                $form['actions']['send'][$request->get('action_send_slug')[$g]]['template'] = $request->get('action_send_template')[$g];
129
            }
130
        } else {
131
            $form['actions']['send'] = false;
132
        }
133
        $form['actions']['redirect'] = $request->get('action_redirect');
134
135
        $form['files'] = $request->get('files_allowed') == 'true' ? true : false;
136
137
        $form['button']['class'] = $request->get('button_class');
138
        $form['button']['label'] = $request->get('button_label');
139
        $form['button']['id'] = $request->get('button_id');
140
141
        // updateOrCreate the site
142
        Form::updateOrCreate(
143
            ['id' => $request->get('form_id')],
144
            ['title'   => $request->get('form_title'),
145
                'slug' => $request->get('form_slug'),
146
                'form' => $form, ]
147
        );
148
149
        return redirect()->route('dashboard.forms');
150
    }
151
152
    public function postForm(Request $request)
153
    {
154
        $slug = $request->get('_form_slug');
155
        $form = $this->form->getBySlug($slug);
156
        $rules = $form->getRules();
157
        $this->validate(request(), $rules);
158
        $store = $form->storeEntry($request);
159
        if ($store !== 'error') {
160
            //send emails
161
            if ($form->form['actions']['send'] !== false) {
162
                foreach ($form->form['actions']['send'] as $sendKey => $sendValue) {
163
                    $mailData = $form->getMailData($sendValue, $request, $store);
164
                    Mail::send(new FormActionMail($mailData));
165
                }
166
            }
167
168
            return redirect()->to($form->form['actions']['redirect']);
169
        } else {
170
            // error catching ... ?
171
        }
172
173
        return view('chuckcms::backend.forms.index', compact('forms'));
174
    }
175
176
    /**
177
     * Delete the form.
178
     *
179
     * @param \Illuminate\Http\Request $request
180
     *
181
     * @return string $status
182
     */
183
    public function delete(Request $request)
184
    {
185
        // AUTHORIZE ... COMES HERE
186
        $status = $this->form->deleteById($request->get('form_id'));
187
188
        return $status;
189
    }
190
191
    /**
192
     * Show the form entries.
193
     *
194
     * @param $slug
195
     *
196
     * @return \Illuminate\View\View
197
     */
198
    public function entries($slug)
199
    {
200
        // AUTHORIZE ... COMES HERE
201
        $form = $this->form->getBySlug($slug);
202
        $entries = $this->formEntry->getBySlug($slug);
203
204
        return view('chuckcms::backend.forms.entries', compact('form', 'entries'));
205
    }
206
207
    /**
208
     * Show the form entry.
209
     *
210
     * @param $slug
211
     * @param $id
212
     *
213
     * @return \Illuminate\View\View
214
     */
215
    public function entry($slug, $id)
216
    {
217
        // AUTHORIZE ... COMES HERE
218
        $form = $this->form->getBySlug($slug);
219
        $entry = $this->formEntry->getById($id);
220
221
        return view('chuckcms::backend.forms.entries.index', compact('form', 'entry'));
222
    }
223
}
224