Code Duplication    Length = 76-78 lines in 2 locations

system/modules/Ecommerce/Ecommerce.php 2 locations

@@ 102-179 (lines=78) @@
99
     * @param \Ecommerce\Cart $cart
100
     * @return bool|\Ecommerce\UserAdds
101
     */
102
    public function parseFields($data, $cart) {
103
        $user = \Users\User::get($cart->user_id);
104
        $fields = \Ecommerce\UserAdds\Field::getList();
105
        if ($user) {
106
            $name = '';
107
            foreach ($fields as $field) {
108
                if ($field->save && isset($data[$field->id])) {
109
                    $name .= htmlspecialchars($data[$field->id]) . ' ';
110
                }
111
            }
112
            $name = trim($name);
113
114
            $userAdds = Ecommerce\UserAdds::get([['user_id', $cart->user->id], ['name', $name]]);
115
            if (!$userAdds) {
116
                $userAdds = new Ecommerce\UserAdds();
117
                $userAdds->user_id = $cart->user->id;
118
                $userAdds->name = $name;
119
                $userAdds->save();
120
            }
121
            foreach ($fields as $field) {
122
                if (!$field->save) {
123
                    continue;
124
                }
125
                if (isset($data[$field->id])) {
126
                    $value = htmlspecialchars($data[$field->id]);
127
                    if (!isset($userAdds->values[$field->id])) {
128
                        $userAddsValue = new Ecommerce\UserAdds\Value();
129
                        $userAddsValue->value = $value;
130
                        $userAddsValue->useradds_field_id = $field->id;
131
                        $userAddsValue->useradds_id = $userAdds->id;
132
                        $userAddsValue->save();
133
                    } else {
134
                        $userAddsValue = $userAdds->values[$field->id];
135
                        $userAddsValue->value = $value;
136
                        $userAddsValue->save();
137
                    }
138
                }
139
            }
140
        }
141
142
        foreach ($fields as $field) {
143
            if (isset($data[$field->id])) {
144
                $value = htmlspecialchars($data[$field->id]);
145
                if (!isset($cart->infos[$field->id])) {
146
                    $info = new \Ecommerce\Cart\Info();
147
                    $info->name = $field->name;
148
                    $info->value = $value;
149
                    $info->useradds_field_id = $field->id;
150
                    $info->cart_id = $cart->id;
151
                    $info->save();
152
                } else {
153
                    $info = $cart->infos[$field->id];
154
                    $info->value = $value;
155
                    $info->save();
156
                }
157
            }
158
            if (isset($info) && $user && $field->userfield) {
159
                $relations = [];
160
                if (strpos($field->userfield, ':')) {
161
                    $path = explode(':', $field->userfield);
162
                    if (!$user->{$path[0]}->{$path[1]}) {
163
                        $user->{$path[0]}->{$path[1]} = $info->value;
164
                        $relations[$path[0]] = $path[0];
165
                    }
166
                } else {
167
                    if (!$user->{$field->userfield}) {
168
                        $user->{$field->userfield} = $info->value;
169
                    }
170
                }
171
172
                foreach ($relations as $rel) {
173
                    $user->$rel->save();
174
                }
175
                $user->save();
176
            }
177
        }
178
        return isset($userAdds) ? $userAdds : false;
179
    }
180
181
    /**
182
     * @param array $data
@@ 187-262 (lines=76) @@
184
     * @param \Ecommerce\Delivery\Field[] $fields
185
     * @return bool|\Ecommerce\Delivery\Save
186
     */
187
    public function parseDeliveryFields($data, $cart, $fields) {
188
        $user = \Users\User::get($cart->user_id);
189
        if ($user) {
190
            $name = '';
191
            foreach ($fields as $field) {
192
                if ($field->save && isset($data[$field->id])) {
193
                    $name .= htmlspecialchars($data[$field->id]) . ' ';
194
                }
195
            }
196
            $name = trim($name);
197
198
            $save = Ecommerce\Delivery\Save::get([['user_id', $cart->user->id], ['name', $name]]);
199
            if (!$save) {
200
                $save = new Ecommerce\Delivery\Save();
201
                $save->user_id = $cart->user->id;
202
                $save->name = $name;
203
                $save->save();
204
            }
205
            foreach ($fields as $field) {
206
                if (!$field->save) {
207
                    continue;
208
                }
209
                if (isset($data[$field->id])) {
210
                    $value = htmlspecialchars($data[$field->id]);
211
                    if (!isset($save->values[$field->id])) {
212
                        $saveValue = new Ecommerce\Delivery\Value();
213
                        $saveValue->value = $value;
214
                        $saveValue->delivery_field_id = $field->id;
215
                        $saveValue->delivery_save_id = $save->id;
216
                        $saveValue->save();
217
                    } else {
218
                        $saveValue = $save->values[$field->id];
219
                        $saveValue->value = $value;
220
                        $saveValue->save();
221
                    }
222
                }
223
            }
224
        }
225
        foreach ($fields as $field) {
226
            if (isset($data[$field->id])) {
227
                $value = htmlspecialchars($data[$field->id]);
228
                if (!isset($cart->deliveryInfos[$field->id])) {
229
                    $info = new \Ecommerce\Cart\DeliveryInfo();
230
                    $info->name = $field->name;
231
                    $info->value = $value;
232
                    $info->delivery_field_id = $field->id;
233
                    $info->cart_id = $cart->id;
234
                    $info->save();
235
                } else {
236
                    $info = $cart->deliveryInfos[$field->id];
237
                    $info->value = $value;
238
                    $info->save();
239
                }
240
            }
241
242
            if (isset($info) && $user && $field->userfield) {
243
                $relations = [];
244
                if (strpos($field->userfield, ':')) {
245
                    $path = explode(':', $field->userfield);
246
                    if (!$user->{$path[0]}->{$path[1]}) {
247
                        $user->{$path[0]}->{$path[1]} = $info->value;
248
                        $relations[$path[0]] = $path[0];
249
                    }
250
                } else {
251
                    if (!$user->{$field->userfield}) {
252
                        $user->{$field->userfield} = $info->value;
253
                    }
254
                }
255
                foreach ($relations as $rel) {
256
                    $user->$rel->save();
257
                }
258
                $user->save();
259
            }
260
        }
261
        return isset($save) ? $save : false;
262
    }
263
264
    /**
265
     * @param bool $create