Code Duplication    Length = 76-78 lines in 2 locations

system/modules/Ecommerce/Ecommerce.php 2 locations

@@ 73-150 (lines=78) @@
70
     * @param \Ecommerce\Cart $cart
71
     * @return bool|\Ecommerce\UserAdds
72
     */
73
    public function parseFields($data, $cart) {
74
        $user = \Users\User::get($cart->user_id);
75
        $fields = \Ecommerce\UserAdds\Field::getList();
76
        if ($user) {
77
            $name = '';
78
            foreach ($fields as $field) {
79
                if ($field->save && !empty($data[$field->id])) {
80
                    $name .= htmlspecialchars($data[$field->id]) . ' ';
81
                }
82
            }
83
            $name = trim($name);
84
85
            $userAdds = Ecommerce\UserAdds::get([['user_id', $cart->user->id], ['name', $name]]);
86
            if (!$userAdds) {
87
                $userAdds = new Ecommerce\UserAdds();
88
                $userAdds->user_id = $cart->user->id;
89
                $userAdds->name = $name;
90
                $userAdds->save();
91
            }
92
            foreach ($fields as $field) {
93
                if (!$field->save) {
94
                    continue;
95
                }
96
                if (!empty($data[$field->id])) {
97
                    $value = htmlspecialchars($data[$field->id]);
98
                    if (!isset($userAdds->values[$field->id])) {
99
                        $userAddsValue = new Ecommerce\UserAdds\Value();
100
                        $userAddsValue->value = $value;
101
                        $userAddsValue->useradds_field_id = $field->id;
102
                        $userAddsValue->useradds_id = $userAdds->id;
103
                        $userAddsValue->save();
104
                    } else {
105
                        $userAddsValue = $userAdds->values[$field->id];
106
                        $userAddsValue->value = $value;
107
                        $userAddsValue->save();
108
                    }
109
                }
110
            }
111
        }
112
113
        foreach ($fields as $field) {
114
            if (!empty($data[$field->id])) {
115
                $value = htmlspecialchars($data[$field->id]);
116
                if (!isset($cart->infos[$field->id])) {
117
                    $info = new \Ecommerce\Cart\Info();
118
                    $info->name = $field->name;
119
                    $info->value = $value;
120
                    $info->useradds_field_id = $field->id;
121
                    $info->cart_id = $cart->id;
122
                    $info->save();
123
                } else {
124
                    $info = $cart->infos[$field->id];
125
                    $info->value = $value;
126
                    $info->save();
127
                }
128
            }
129
            if (isset($info) && $user && $field->userfield) {
130
                $relations = [];
131
                if (strpos($field->userfield, ':')) {
132
                    $path = explode(':', $field->userfield);
133
                    if (!$user->{$path[0]}->{$path[1]}) {
134
                        $user->{$path[0]}->{$path[1]} = $info->value;
135
                        $relations[$path[0]] = $path[0];
136
                    }
137
                } else {
138
                    if (!$user->{$field->userfield}) {
139
                        $user->{$field->userfield} = $info->value;
140
                    }
141
                }
142
143
                foreach ($relations as $rel) {
144
                    $user->$rel->save();
145
                }
146
                $user->save();
147
            }
148
        }
149
        return isset($userAdds) ? $userAdds : false;
150
    }
151
152
    /**
153
     * @param array $data
@@ 158-233 (lines=76) @@
155
     * @param \Ecommerce\Delivery\Field[] $fields
156
     * @return bool|\Ecommerce\Delivery\Save
157
     */
158
    public function parseDeliveryFields($data, $cart, $fields) {
159
        $user = \Users\User::get($cart->user_id);
160
        if ($user) {
161
            $name = '';
162
            foreach ($fields as $field) {
163
                if ($field->save && !empty($data[$field->id])) {
164
                    $name .= htmlspecialchars($data[$field->id]) . ' ';
165
                }
166
            }
167
            $name = trim($name);
168
169
            $save = Ecommerce\Delivery\Save::get([['user_id', $cart->user->id], ['name', $name]]);
170
            if (!$save) {
171
                $save = new Ecommerce\Delivery\Save();
172
                $save->user_id = $cart->user->id;
173
                $save->name = $name;
174
                $save->save();
175
            }
176
            foreach ($fields as $field) {
177
                if (!$field->save) {
178
                    continue;
179
                }
180
                if (!empty($data[$field->id])) {
181
                    $value = htmlspecialchars($data[$field->id]);
182
                    if (!isset($save->values[$field->id])) {
183
                        $saveValue = new Ecommerce\Delivery\Value();
184
                        $saveValue->value = $value;
185
                        $saveValue->delivery_field_id = $field->id;
186
                        $saveValue->delivery_save_id = $save->id;
187
                        $saveValue->save();
188
                    } else {
189
                        $saveValue = $save->values[$field->id];
190
                        $saveValue->value = $value;
191
                        $saveValue->save();
192
                    }
193
                }
194
            }
195
        }
196
        foreach ($fields as $field) {
197
            if (!empty($data[$field->id])) {
198
                $value = htmlspecialchars($data[$field->id]);
199
                if (!isset($cart->deliveryInfos[$field->id])) {
200
                    $info = new \Ecommerce\Cart\DeliveryInfo();
201
                    $info->name = $field->name;
202
                    $info->value = $value;
203
                    $info->delivery_field_id = $field->id;
204
                    $info->cart_id = $cart->id;
205
                    $info->save();
206
                } else {
207
                    $info = $cart->deliveryInfos[$field->id];
208
                    $info->value = $value;
209
                    $info->save();
210
                }
211
            }
212
213
            if (isset($info) && $user && $field->userfield) {
214
                $relations = [];
215
                if (strpos($field->userfield, ':')) {
216
                    $path = explode(':', $field->userfield);
217
                    if (!$user->{$path[0]}->{$path[1]}) {
218
                        $user->{$path[0]}->{$path[1]} = $info->value;
219
                        $relations[$path[0]] = $path[0];
220
                    }
221
                } else {
222
                    if (!$user->{$field->userfield}) {
223
                        $user->{$field->userfield} = $info->value;
224
                    }
225
                }
226
                foreach ($relations as $rel) {
227
                    $user->$rel->save();
228
                }
229
                $user->save();
230
            }
231
        }
232
        return isset($save) ? $save : false;
233
    }
234
235
    /**
236
     * @param bool $create