Passed
Push — master ( 9f4745...5dd119 )
by Karel
05:15 queued 10s
created

FormController::save()   B

Complexity

Conditions 5
Paths 6

Size

Total Lines 53
Code Lines 39

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 39
dl 0
loc 53
rs 8.9848
c 0
b 0
f 0
cc 5
nc 6
nop 1

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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
10
use Mail;
11
12
use Illuminate\Http\Request;
13
use Illuminate\Foundation\Bus\DispatchesJobs;
14
use Illuminate\Routing\Controller as BaseController;
15
use Illuminate\Foundation\Validation\ValidatesRequests;
16
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
17
18
class FormController extends BaseController
19
{
20
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
21
22
    private $form;
23
    private $formEntry;
24
    private $template;
25
    /**
26
     * Create a new controller instance.
27
     *
28
     * @return void
29
     */
30
    public function __construct(Form $form, FormEntry $formEntry, Template $template)
31
    {
32
        $this->form = $form;
33
        $this->formEntry = $formEntry;
34
        $this->template = $template;
35
    }
36
37
    public function index()
38
    {
39
        $forms = $this->form->get();
40
        
41
        return view('chuckcms::backend.forms.index', compact('forms'));
42
    }
43
44
    public function create()
45
    {
46
        $emailTemplates = $this->template->getEmailTemplates();
47
        return view('chuckcms::backend.forms.create', compact('emailTemplates'));
48
    }
49
50
    public function edit($slug)
51
    {
52
        $form = $this->form->getBySlug($slug);
53
        $emailTemplates = $this->template->getEmailTemplates();
54
        return view('chuckcms::backend.forms.edit', compact('form', 'emailTemplates'));
55
    }
56
57
    public function save(Request $request)
58
    {
59
        $form = [];
60
        $form_slug = $request->get('form_slug');
61
        $fields_slug = $request->get('fields_slug');
62
        $countFS = count($fields_slug);
63
        for ($i=0; $i < $countFS; $i++) { 
64
            $form['fields'][$form_slug . '_' . $fields_slug[$i]]['label'] = $request->get('fields_label')[$i];
65
            $form['fields'][$form_slug . '_' . $fields_slug[$i]]['type'] = $request->get('fields_type')[$i];
66
            $form['fields'][$form_slug . '_' . $fields_slug[$i]]['class'] = $request->get('fields_class')[$i];
67
            $form['fields'][$form_slug . '_' . $fields_slug[$i]]['parentclass'] = $request->get('fields_parentclass')[$i];
68
            $form['fields'][$form_slug . '_' . $fields_slug[$i]]['placeholder'] = $request->get('fields_placeholder')[$i];
69
            $form['fields'][$form_slug . '_' . $fields_slug[$i]]['validation'] = $request->get('fields_validation')[$i];
70
            $form['fields'][$form_slug . '_' . $fields_slug[$i]]['value'] = $request->get('fields_value')[$i];
71
            $countFAN = count(explode(';',$request->get('fields_attributes_name')[$i]));
72
            for ($k=0; $k < $countFAN; $k++) { 
73
                $form['fields'][$form_slug . '_' . $fields_slug[$i]]['attributes'][explode(';',$request->get('fields_attributes_name')[$i])[$k]] = explode(';',$request->get('fields_attributes_value')[$i])[$k];
74
            }
75
            $form['fields'][$form_slug . '_' . $fields_slug[$i]]['required'] = $request->get('fields_required')[$i];
76
        }
77
78
        $form['actions']['store'] = $request->get('action_store');
79
        if($request->get('action_send') == true) {
80
            $countActions = count($request->get('action_send_slug'));
81
            for ($g=0; $g < $countActions; $g++) { 
82
                $form['actions']['send'][$request->get('action_send_slug')[$g]]['to'] = $request->get('action_send_to')[$g];
83
                $form['actions']['send'][$request->get('action_send_slug')[$g]]['to_name'] = $request->get('action_send_to_name')[$g];
84
                $form['actions']['send'][$request->get('action_send_slug')[$g]]['from'] = $request->get('action_send_from')[$g];
85
                $form['actions']['send'][$request->get('action_send_slug')[$g]]['from_name'] = $request->get('action_send_from_name')[$g];
86
                $form['actions']['send'][$request->get('action_send_slug')[$g]]['subject'] = $request->get('action_send_subject')[$g];
87
                $form['actions']['send'][$request->get('action_send_slug')[$g]]['body'] = $request->get('action_send_body')[$g];
88
                $form['actions']['send'][$request->get('action_send_slug')[$g]]['files'] = $request->get('action_send_files')[$g];
89
                $form['actions']['send'][$request->get('action_send_slug')[$g]]['template'] = $request->get('action_send_template')[$g];
90
            }
91
92
        }
93
        $form['actions']['redirect'] = $request->get('action_redirect');
94
95
        $form['files'] = $request->get('files_allowed');
96
97
        $form['button']['class'] = $request->get('button_class');
98
        $form['button']['label'] = $request->get('button_label');
99
        $form['button']['id'] = $request->get('button_id');
100
101
        // updateOrCreate the site
102
        Form::updateOrCreate(
103
            ['id' => $request->get('form_id')],
104
            ['title' => $request->get('form_title'),
105
            'slug' => $request->get('form_slug'),
106
            'form' => $form]
107
        );
108
        
109
        return redirect()->route('dashboard.forms');
110
    }
111
112
    public function postForm(Request $request)
113
    {
114
        $slug = $request->get('_form_slug');
115
        $form = $this->form->getBySlug($slug);
116
        $rules = $form->getRules();
117
        $this->validate(request(), $rules);
118
        $store = $form->storeEntry($request);
119
        if ($store !== 'error') {
120
            //send emails 
121
            foreach ($form->form['actions']['send'] as $sendKey => $sendValue) {
122
                $mailData = $form->getMailData($sendValue, $request, $store);
123
                Mail::send(new FormActionMail($mailData));
124
            }
125
            return redirect()->to($form->form['actions']['redirect']);
126
        } else {
127
            // error catching ... ?
128
        }
129
        
130
        return view('chuckcms::backend.forms.index', compact('forms'));
131
    }
132
133
    /**
134
     * Delete the form.
135
     *
136
     * @param  \Illuminate\Http\Request $request
137
     * @return string $status
138
     */
139
    public function delete(Request $request)
140
    {
141
        // AUTHORIZE ... COMES HERE
142
        $status = $this->form->deleteById($request->get('form_id'));
143
        return $status;
144
    }
145
146
    /**
147
     * Show the form entries.
148
     *
149
     * @param  $slug
150
     * @return \Illuminate\View\View
151
     */
152
    public function entries($slug)
153
    {
154
        // AUTHORIZE ... COMES HERE
155
        $form = $this->form->getBySlug($slug);
156
        $entries = $this->formEntry->getBySlug($slug);
157
        return view('chuckcms::backend.forms.entries', compact('form', 'entries'));
158
    }
159
160
    /**
161
     * Show the form entry.
162
     *
163
     * @param  $slug
164
     * @param  $id
165
     * @return \Illuminate\View\View
166
     */
167
    public function entry($slug, $id)
168
    {
169
        // AUTHORIZE ... COMES HERE
170
        $form = $this->form->getBySlug($slug);
171
        $entry = $this->formEntry->getById($id);
172
        return view('chuckcms::backend.forms.entries.index', compact('form', 'entry'));
173
    }
174
}
175