5
5
use Illuminate \Database \DatabaseManager ;
6
6
use Illuminate \Support \Arr ;
7
7
use Illuminate \Support \Facades \Config ;
8
- use Oriceon \Settings \Utils \Utils ;
9
8
10
9
class DatabaseRepository
11
10
{
@@ -75,7 +74,7 @@ public function set($key, $value)
75
74
if (count ($ newKeyExp ) > 0 )
76
75
{
77
76
// we should compose a new array with keys from setter key
78
- $ newValue = Utils:: build_array ($ newKeyExp , $ value );
77
+ $ newValue = build_array ($ newKeyExp , $ value );
79
78
}
80
79
81
80
@@ -88,7 +87,7 @@ public function set($key, $value)
88
87
else
89
88
{
90
89
$ setting_value = json_decode ($ row ->setting_value , true );
91
- Utils:: set_nested_array_value ($ setting_value , $ keyExp , $ value );
90
+ set_nested_array_value ($ setting_value , $ keyExp , $ value );
92
91
93
92
$ this ->database ->table ($ this ->config ['db_table ' ])
94
93
->where ('setting_key ' , $ keyExp [0 ])
@@ -197,14 +196,14 @@ public function has($key)
197
196
198
197
array_shift ($ keyExp );
199
198
200
- return Utils:: multi_key_exists ($ keyExp , $ setting_value );
199
+ return multi_key_exists ($ keyExp , $ setting_value );
201
200
}
202
201
203
202
return false ;
204
203
}
205
204
206
205
/**
207
- * Remove a setting
206
+ * Remove a settings from database and cache file
208
207
*
209
208
* @param string $key
210
209
*
@@ -214,7 +213,7 @@ public function forget($key)
214
213
{
215
214
$ keyExp = explode ('. ' , $ key );
216
215
217
-
216
+ // get settings value by first key name
218
217
$ query = $ this ->database
219
218
->table ($ this ->config ['db_table ' ])
220
219
->where ('setting_key ' , $ keyExp [0 ]);
@@ -225,26 +224,38 @@ public function forget($key)
225
224
{
226
225
if (count ($ keyExp ) > 1 )
227
226
{
227
+ // if found more keys, then forget last key from array
228
228
$ setting_value = json_decode ($ row ->setting_value , true );
229
229
230
- Utils::array_unset ($ setting_value , $ keyExp );
230
+ unset($ keyExp [0 ]);
231
+ $ newKey = implode ('. ' , $ keyExp );
231
232
232
- $ query ->update ([
233
- 'setting_value ' => count ($ setting_value ) ? json_encode ($ setting_value ) : null
234
- ]);
233
+ Arr::forget ($ setting_value , $ newKey );
234
+
235
+
236
+ if (count ($ setting_value ) > 0 )
237
+ {
238
+ // if we still have settings, update settings row
239
+ $ query ->update (['setting_value ' => json_encode ($ setting_value )]);
240
+ }
241
+ else
242
+ {
243
+ // if settings value remain blank, delete settings row
244
+ $ query ->delete ();
245
+ }
235
246
}
236
247
else
237
248
{
249
+ // if found only one key, delete settings row
238
250
$ query ->delete ();
239
251
}
240
252
}
241
253
242
-
243
254
$ this ->cache ->forget ($ key );
244
255
}
245
256
246
257
/**
247
- * Clean unused settings
258
+ * Cleans settings that are no longer used in primary config file
248
259
*
249
260
* @param $params
250
261
*/
@@ -253,32 +264,40 @@ public function clean($params = [])
253
264
if ( ! empty ($ this ->config ['primary_config_file ' ]))
254
265
{
255
266
$ default_settings = Arr::dot (Config::get ($ this ->config ['primary_config_file ' ]));
256
- $ settings = Arr::dot ($ this ->getAll (false ));
267
+ $ saved_settings = Arr::dot ($ this ->getAll ($ cache = false ));
257
268
258
269
if (array_key_exists ('flush ' , $ params ) && $ params ['flush ' ] == true )
259
270
{
260
271
$ this ->flush ();
261
272
262
- $ settings = [];
263
-
264
- $ this ->_update ($ default_settings , $ settings );
273
+ $ saved_settings = [];
265
274
}
266
275
else
267
276
{
268
- // clean unused settings
269
- foreach ($ settings as $ key => $ value )
277
+ foreach ($ saved_settings as $ key => $ value )
270
278
{
271
279
if ( ! array_key_exists ($ key , $ default_settings ))
272
280
{
273
- if ( ! $ this -> key_represents_an_array ($ key , $ default_settings ))
281
+ if ( ! key_represents_an_array ($ key , $ default_settings ))
274
282
{
275
283
$ this ->forget ($ key );
276
284
}
277
285
}
278
286
}
287
+ }
279
288
280
289
281
- $ this ->_update ($ default_settings , $ settings );
290
+ // update with new settings
291
+ foreach ($ default_settings as $ key => $ value )
292
+ {
293
+ if ( ! preg_key_exists ($ key , $ saved_settings ))
294
+ {
295
+ // check if key does not represents an array and exists in saved settings
296
+ if ( ! key_represents_an_array ($ key , $ saved_settings ))
297
+ {
298
+ $ this ->set ($ key , $ value );
299
+ }
300
+ }
282
301
}
283
302
}
284
303
}
@@ -319,61 +338,12 @@ private function fetch($key)
319
338
if ( ! is_null ($ row ))
320
339
{
321
340
$ setting_value = json_decode ($ row ->setting_value , true );
322
- $ value = Utils:: set_nested_array_value ($ setting_value , $ keyExp );
341
+ $ value = set_nested_array_value ($ setting_value , $ keyExp );
323
342
324
343
return $ this ->cache ->set ($ key , $ value );
325
344
}
326
345
327
346
return null ;
328
347
}
329
348
330
- /**
331
- * @param $default_settings
332
- * @param $settings
333
- */
334
- private function _update ($ default_settings , $ settings )
335
- {
336
- // update with new settings
337
- foreach ($ default_settings as $ key => $ value )
338
- {
339
- if ( ! $ this ->preg_key_exists ($ key , $ settings ))
340
- {
341
- $ this ->set ($ key , $ value );
342
- }
343
- }
344
- }
345
-
346
-
347
- private function key_represents_an_array ($ key , $ default_settings )
348
- {
349
- $ split_key = preg_split ('/\.([0-9]+)\.?/i ' , $ key );
350
-
351
- // key represents an array or a multi array ?
352
- if (count ($ split_key ) > 0 )
353
- {
354
- // but that array still exists in default settings ?
355
- if ($ this ->preg_key_exists ($ split_key [0 ], $ default_settings ))
356
- {
357
- return true ;
358
- }
359
- }
360
-
361
- return false ;
362
- }
363
-
364
- private function preg_key_exists ($ default_settings_key , array $ settings )
365
- {
366
- $ found = false ;
367
-
368
- foreach ($ settings as $ key => $ value )
369
- {
370
- if (preg_match ('/ ' . $ default_settings_key . '/i ' , $ key ))
371
- {
372
- $ found = true ;
373
- }
374
- }
375
-
376
- return $ found ;
377
- }
378
-
379
- }
349
+ }
0 commit comments