Completed
Push — master ( 317c15...b8f118 )
by CodexShaper
05:07
created

RelationController::getRelation()   B

Complexity

Conditions 6
Paths 8

Size

Total Lines 35
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 42

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 6
eloc 20
c 1
b 0
f 0
nc 8
nop 1
dl 0
loc 35
ccs 0
cts 26
cp 0
crap 42
rs 8.9777
1
<?php
2
3
namespace CodexShaper\DBM\Http\Controllers;
4
5
use CodexShaper\DBM\Database\Drivers\MongoDB\Type;
6
use CodexShaper\DBM\Database\Schema\Table;
7
use CodexShaper\DBM\Facades\Driver;
8
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...
9
use Illuminate\Http\Request;
10
use Illuminate\Support\Str;
11
12
class RelationController extends Controller
13
{
14
    /*
15
     * RelationShip
16
     */
17
    public function getRelation(Request $request)
18
    {
19
        if ($request->ajax()) {
20
21
            if (($response = DBM::authorize('relationship.update')) !== true) {
22
                return $response;
23
            }
24
25
            $tableName = $request->table;
26
            $field     = json_decode($request->field);
27
28
            $object = DBM::Object()->where('name', $tableName)->first();
29
            $fields = $object->fields;
30
31
            $prefix = (Driver::isMongoDB()) ? "_" : "";
32
33
            foreach ($fields as $fld) {
34
                if ($fld->id == $field->{$prefix . "id"}) {
35
36
                    $relationship = $fld->settings;
37
                    $localTable   = $relationship['localTable'];
38
                    $foreignTable = $relationship['foreignTable'];
39
                    $pivotTable   = $relationship['pivotTable'];
40
41
                    $field->localFields   = Table::getTable($localTable);
42
                    $field->foreignFields = Table::getTable($foreignTable);
43
                    $field->pivotFields   = Table::getTable($pivotTable);
44
                    $field->relationship  = $relationship;
45
                }
46
            }
47
48
            return response()->json(['success' => true, 'field' => $field]);
49
        }
50
51
        return response()->json(['success' => false]);
52
    }
53
54
    public function addRelation(Request $request)
55
    {
56
        if ($request->ajax()) {
57
58
            if (($response = DBM::authorize('relationship.create')) !== true) {
59
                return $response;
60
            }
61
62
            $relationship = $request->relationship;
63
64
            // return response()->json(['success' => true, 'relationship' => $relationship['displayLevel']]);
65
66
            if (!class_exists($relationship['localModel'])) {
67
68
                $error = $relationship['localModel'] . " Model not found. Please create the " . $relationship['localModel'] . " model first";
69
                return $this->generateError([$error]);
70
            }
71
72
            if (!class_exists($relationship['foreignModel'])) {
73
74
                $error = $relationship['foreignModel'] . " Model not found. Please create the " . $relationship['foreignModel'] . " model first";
75
                return $this->generateError([$error]);
76
            }
77
78
            $fieldName = strtolower(Str::singular($relationship['localTable']) . '_' . $relationship['type'] . '_' . Str::singular($relationship['foreignTable']) . '_relationship');
79
            $settings  = [
80
                'relationType'    => $relationship['type'],
81
                'localModel'      => $relationship['localModel'],
82
                'localTable'      => $relationship['localTable'],
83
                'localKey'        => $relationship['localKey'],
84
                'foreignModel'    => $relationship['foreignModel'],
85
                'foreignTable'    => $relationship['foreignTable'],
86
                'foreignKey'      => $relationship['foreignKey'],
87
                'displayLabel'    => $relationship['displayLabel'],
88
                'pivotTable'      => $relationship['pivotTable'],
89
                'parentPivotKey'  => $relationship['parentPivotKey'],
90
                'relatedPivotKey' => $relationship['relatedPivotKey'],
91
            ];
92
93
            $object = DBM::Object()->where('name', $relationship['localTable'])->first();
94
            $order  = DBM::Field()->where('dbm_object_id', $object->id)->max('order');
95
96
            $field                = DBM::Field();
97
            $field->dbm_object_id = $object->id;
98
            $field->name          = $fieldName;
99
            $field->type          = 'relationship';
100
            $field->display_name  = ucfirst($relationship['foreignTable']);
101
            $field->order         = $order + 1;
102
            $field->settings      = $settings;
103
            if ($field->save()) {
104
                return response()->json(['success' => true]);
105
            }
106
        }
107
108
        return response()->json(['success' => false]);
109
    }
110
111
    public function updateRelation(Request $request)
112
    {
113
        if ($request->ajax()) {
114
115
            if (($response = DBM::authorize('relationship.update')) !== true) {
116
                return $response;
117
            }
118
119
            $relationship = $request->relationship;
120
            $field        = $request->field;
121
122
            // return response()->json(['relationship' => $relationship, 'field' => $field]);
123
124
            $settings = [
125
                'relationType'    => $relationship['type'],
126
                'localModel'      => $relationship['localModel'],
127
                'localTable'      => $relationship['localTable'],
128
                'localKey'        => $relationship['localKey'],
129
                'foreignModel'    => $relationship['foreignModel'],
130
                'foreignTable'    => $relationship['foreignTable'],
131
                'foreignKey'      => $relationship['foreignKey'],
132
                'displayLabel'    => $relationship['displayLabel'],
133
                'pivotTable'      => $relationship['pivotTable'],
134
                'parentPivotKey'  => $relationship['parentPivotKey'],
135
                'relatedPivotKey' => $relationship['relatedPivotKey'],
136
            ];
137
138
            $field           = DBM::Field()::find($field['id']);
139
            $field->settings = $settings;
140
            if ($field->update()) {
141
                return response()->json(['success' => true]);
142
            }
143
        }
144
145
        return response()->json(['success' => false]);
146
    }
147
148
    public function deleteRelation(Request $request)
149
    {
150
        if ($request->ajax()) {
151
152
            if (($response = DBM::authorize('relationship.delete')) !== true) {
153
                return $response;
154
            }
155
156
            $tableName = $request->table;
0 ignored issues
show
Unused Code introduced by
The assignment to $tableName is dead and can be removed.
Loading history...
157
            $data      = json_decode($request->field);
158
159
            $field = DBM::Field()::find($data->id);
160
161
            if ($field->delete()) {
162
                return response()->json(['success' => true]);
163
            }
164
        }
165
166
        return response()->json(['success' => false]);
167
    }
168
169
    protected function generateError($errors)
170
    {
171
        return response()->json([
172
            'success' => false,
173
            'errors'  => $errors,
174
        ], 400);
175
    }
176
}
177