RecordController::getTableDetails()   B
last analyzed

Complexity

Conditions 7
Paths 6

Size

Total Lines 68
Code Lines 48

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 56

Importance

Changes 5
Bugs 0 Features 0
Metric Value
cc 7
eloc 48
c 5
b 0
f 0
nc 6
nop 1
dl 0
loc 68
ccs 0
cts 56
cp 0
crap 56
rs 8.2012

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 CodexShaper\DBM\Http\Controllers;
4
5
use CodexShaper\DBM\Database\Schema\Table;
6
use CodexShaper\DBM\Facades\Driver;
7
use CodexShaper\DBM\Facades\Manager as DBM;
8
use CodexShaper\DBM\Traits\RecordRelationship;
9
use CodexShaper\DBM\Traits\RecordTrait;
10
use Illuminate\Http\Request;
11
use Illuminate\Support\Facades\Config;
12
13
class RecordController extends Controller
14
{
15
    use RecordTrait, RecordRelationship;
16
17
    /**
18
     * Get all permissions.
19
     *
20
     * @return \Illuminate\View\View|\Illuminate\Contracts\View\Factory
21
     */
22
    public function index()
23
    {
24
        return view('dbm::app');
25
    }
26
27
    /**
28
     * Create Record.
29
     *
30
     * @return \Illuminate\Http\JsonResponse
31
     */
32
    public function store(Request $request)
33
    {
34
        if ($request->ajax()) {
35
            if (($response = DBM::authorize('record.create')) !== true) {
0 ignored issues
show
introduced by
The condition $response = CodexShaper\...ecord.create') !== true is always true.
Loading history...
36
                return $response;
37
            }
38
39
            $tableName = $request->table;
40
            $columns = json_decode($request->columns);
41
            $fields = json_decode($request->fields);
42
43
            $errors = $this->validation($fields, $columns);
44
45
            if (count($errors) > 0) {
46
                return $this->generateError($errors);
47
            }
48
49
            $object = DBM::Object()->where('name', $tableName)->first();
50
51
            if (is_string($object->model) && ! class_exists($object->model)) {
52
                return $this->generateError(['Model not found. Please create model first']);
53
            }
54
55
            try {
56
                $table = $this->processStoreData($request, $object);
57
58
                if ($table->save()) {
59
                    $this->storeRelationshipData($fields, $columns, $object, $table);
60
61
                    return response()->json(['success' => true]);
62
                }
63
            } catch (\Exception $e) {
64
                return $this->generateError([$e->getMessage()]);
65
            }
66
        }
67
68
        return response()->json(['success' => false]);
69
    }
70
71
    /**
72
     * Process data to store.
73
     *
74
     * @param \Illuminate\Http\Request $request
75
     * @param \CodexShaper\DBM\Models\DBM_Object|\CodexShaper\DBM\Models\DBM_MongoObject $object
76
     *
77
     * @return object
78
     */
79
    public function processStoreData($request, $object)
80
    {
81
        $originalColumns = Table::getColumnsName($request->table);
82
        $columns = json_decode($request->columns);
83
        $fields = json_decode($request->fields);
84
        $table = DBM::model($object->model, $request->table);
85
86
        foreach ($columns as $column => $value) {
87
            if (in_array($column, $originalColumns)) {
88
                if ($request->hasFile($column)) {
89
                    $value = $this->saveFiles($request, $column, $request->table);
90
                }
91
92
                if (! Driver::isMongoDB()) {
93
                    if ($functionName = $this->hasFunction($fields, $column)) {
94
                        $value = $this->executeFunction($functionName, $value);
95
                    }
96
                }
97
98
                $table->{$column} = $this->prepareStoreField($value, $request->table, $column);
99
            }
100
        }
101
102
        return $table;
103
    }
104
105
    /**
106
     * Update Record.
107
     *
108
     * @return \Illuminate\Http\JsonResponse
109
     */
110
    public function update(Request $request)
111
    {
112
        if ($request->ajax()) {
113
            if (($response = DBM::authorize('record.update')) !== true) {
0 ignored issues
show
introduced by
The condition $response = CodexShaper\...ecord.update') !== true is always true.
Loading history...
114
                return $response;
115
            }
116
117
            $tableName = $request->table;
118
            $columns = json_decode($request->columns);
119
            $fields = json_decode($request->fields);
120
121
            $errors = $this->validation($fields, $columns, 'update');
122
123
            if (count($errors) > 0) {
124
                return $this->generateError($errors);
125
            }
126
127
            $object = DBM::Object()->where('name', $tableName)->first();
128
129
            if (is_string($object->model) && ! class_exists($object->model)) {
130
                return $this->generateError(['Model not found. Please create model first']);
131
            }
132
133
            try {
134
                $table = $this->processUpdateData($request, $object);
135
                if ($table->update()) {
136
                    $this->updateRelationshipData($fields, $columns, $object, $table);
137
138
                    return response()->json(['success' => true]);
139
                }
140
141
                return response()->json(['success' => true]);
142
            } catch (\Exception $e) {
143
                return $this->generateError([$e->getMessage()]);
144
            }
145
        }
146
147
        return response()->json(['success' => false]);
148
    }
149
150
    /**
151
     * Process Data to update.
152
     *
153
     * @param \Illuminate\Http\Request $request
154
     * @param \CodexShaper\DBM\Models\DBM_Object|\CodexShaper\DBM\Models\DBM_MongoObject $object
155
     *
156
     * @return object
157
     */
158
    public function processUpdateData($request, $object)
159
    {
160
        $originalColumns = Table::getColumnsName($request->table);
161
        $columns = json_decode($request->columns);
162
        $fields = json_decode($request->fields);
163
        $key = $object->details['findColumn'];
164
165
        $table = DBM::model($object->model, $request->table)->where($key, $columns->{$key})->first();
166
167
        foreach ($columns as $column => $value) {
168
            if (in_array($column, $originalColumns)) {
169
                if ($request->hasFile($column)) {
170
                    $value = $this->saveFiles($request, $column, $request->table);
171
                }
172
173
                if ($value !== null && $value !== '') {
174
                    if (! Driver::isMongoDB()) {
175
                        if ($functionName = $this->hasFunction($fields, $column)) {
176
                            $value = $this->executeFunction($functionName, $value);
177
                        }
178
                    }
179
180
                    $table->{$column} = $this->prepareStoreField($value, $request->table, $column);
181
                }
182
            }
183
        }
184
185
        return $table;
186
    }
187
188
    /**
189
     * Delete Record.
190
     *
191
     * @return \Illuminate\Http\JsonResponse
192
     */
193
    public function delete(Request $request)
194
    {
195
        if ($request->ajax()) {
196
            if (($response = DBM::authorize('record.delete')) !== true) {
0 ignored issues
show
introduced by
The condition $response = CodexShaper\...ecord.delete') !== true is always true.
Loading history...
197
                return $response;
198
            }
199
200
            $tableName = $request->table;
201
            // $originalColumns = Table::getColumnsName($tableName);
202
            $columns = json_decode($request->columns);
203
            $fields = $request->fields;
204
            $object = DBM::Object()->where('name', $tableName)->first();
205
            $model = $object->model;
206
            $details = $object->details;
207
            $key = $details['findColumn'];
208
209
            if (is_string($model) && ! class_exists($model)) {
210
                return $this->generateError(['Model not found. Please create model first']);
211
            }
212
213
            try {
214
                $table = DBM::model($model, $tableName)->where($key, $columns->{$key})->first();
215
                if ($table) {
216
                    // Remove Relationship data
217
                    foreach ($fields as $field) {
218
                        $field = json_decode($field);
219
                        $this->removeRelationshipData($field, $object, $table);
220
                    }
221
                    // Check Table deleted successfully
222
                    if ($table->delete()) {
223
                        return response()->json(['success' => true]);
224
                    }
225
                }
226
            } catch (\Exception $e) {
227
                return $this->generateError([$e->getMessage()]);
228
            }
229
        }
230
231
        return response()->json(['success' => false]);
232
    }
233
234
    /**
235
     * Get Table Details.
236
     *
237
     * @return \Illuminate\Http\JsonResponse
238
     */
239
    public function getTableDetails(Request $request)
240
    {
241
        if ($request->ajax()) {
242
            if (($response = DBM::authorize('record.browse')) !== true) {
0 ignored issues
show
introduced by
The condition $response = CodexShaper\...ecord.browse') !== true is always true.
Loading history...
243
                return $response;
244
            }
245
246
            $tableName = $request->table;
247
            $object = DBM::Object()->where('name', $tableName)->first();
248
249
            if (! $object) {
250
                return response()->json([
251
                    'success' => false,
252
                    'errors' => ['There is no Object details'],
253
                ], 400);
254
            }
255
256
            $createFields = $object->createFields();
257
            $browseFields = $object->readFields();
258
            $editFields = $object->editFields();
259
            $deleteFields = $object->deleteFields();
260
            $fields = $object->allFields();
261
            $foreignTableData = [];
262
263
            $createFields = $this->prepareRecordFields($createFields);
264
            $editFields = $this->prepareRecordFields($editFields);
265
266
            $model = $object->model;
267
268
            if (! class_exists($model)) {
269
                return $this->generateError(['Model not found. Please create model first']);
270
            }
271
272
            $perPage = (int) $request->perPage;
273
            $query = $request->q;
274
            $searchColumn = $object->details['searchColumn'];
275
            $records = DBM::model($model, $tableName)->paginate($perPage);
276
277
            if (! empty($query) && ! empty($searchColumn)) {
278
                $records = DBM::model($model, $tableName)
279
                    ->where($searchColumn, 'LIKE', '%'.$query.'%')
280
                    ->paginate($perPage);
281
            }
282
283
            $records = $this->prepareRelationshipData($records, $browseFields, $object);
284
            $recordsDetail = $this->prepareRecordDetails($records, $fields, $object, $request->findValue);
285
286
            $objectDetails = $object->details;
287
            $objectDetails['perPage'] = $perPage;
288
289
            return response()->json([
290
                'success' => true,
291
                'object' => $object,
292
                'objectDetails' => $objectDetails,
293
                'createFields' => $createFields,
294
                'browseFields' => $browseFields,
295
                'editFields' => $editFields,
296
                'deleteFields' => $deleteFields,
297
                'records' => $recordsDetail['records'],
298
                'record' => $recordsDetail['record'],
299
                'foreignTableData' => $foreignTableData,
300
                'userPermissions' => DBM::userPermissions(),
301
                'pagination' => $records,
302
                'isRecordModal' => Config::get('dbm.crud.record.is_modal'),
303
            ]);
304
        }
305
306
        return response()->json(['success' => false]);
307
    }
308
}
309