Completed
Push — master ( d41805...f76100 )
by CodexShaper
05:15
created

RecordController::getTableDetails()   B

Complexity

Conditions 7
Paths 6

Size

Total Lines 68
Code Lines 47

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 56

Importance

Changes 4
Bugs 0 Features 0
Metric Value
cc 7
eloc 47
nc 6
nop 1
dl 0
loc 68
ccs 0
cts 55
cp 0
crap 56
rs 8.223
c 4
b 0
f 0

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