Code Duplication    Length = 70-72 lines in 2 locations

system/modules/Ecommerce/Ecommerce.php 2 locations

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