PluginProbe
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution with eCommerce Templates & Woo Widgets / 1.4.0
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution with eCommerce Templates & Woo Widgets v1.4.0
4.9.5 4.9.4 4.9.3 4.9.2 4.9.1 4.9.0 2.0.0 2.1.0 2.2.0 2.2.1 2.2.2 2.3.0 2.4.0 2.5.0 2.5.1 3.0.0 3.1.0 3.1.1 4.0.0 4.0.1 4.1.0 4.1.1 4.2.0 4.2.1 4.3.0 All 85 releases
shopengine / base / list-model.php

list-model.php in ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution with eCommerce Templates & Woo Widgets 1.4.0, at base/list-model.php

108 lines 3.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace ShopEngine\Base;
4
5 defined('ABSPATH') || exit;
6
7 use ShopEngine\Core\Register\Model;
8
9 abstract class List_Model {
10
11 private $unfiltered_list = [];
12 private $full_list = [];
13 private $active_list = [];
14 private $inactive_list = [];
15 protected $list_type;
16 protected $generate_base_class = false;
17
18 public function __construct() {
19
20 $saved_list = Model::source('settings')->get_option($this->list_type, []);
21 $raw_list = apply_filters('shopengine/' . $this->list_type . '/list', $this->raw_list());
22
23 foreach($raw_list as $name => $item) {
24
25 if(!isset($saved_list[$name]['status']) && isset($item['status'])){
26 $item['status'] = $item['status'];
27 }else{
28 $item['status'] = (isset($saved_list[$name]['status']) && $saved_list[$name]['status'] == 'inactive' ? 'inactive' : 'active');
29 }
30
31 /**
32 * Scenario considered :
33 * +Scenario 1 : with old database saved values, we added new module with settings
34 * +Scenario 2 : no database settings yet saved, very fresh installation
35 * +Scenario 3 : For some reason in future we removed/renamed/added some fields and the client has already database saved values
36 *
37 */
38
39 if(!isset($item['path'])) {
40 $item['path'] = \ShopEngine::{rtrim($this->list_type, 's') . '_dir'}() . $name . '/';
41 }
42
43 if($this->generate_base_class == true) {
44 if(!isset($item['base_class'])) {
45 $item['base_class'] = '\Elementor\ShopEngine_' . \ShopEngine\Utils\Helper::make_classname($name);
46 }
47
48 if(!isset($item['config_class'])) {
49 $item['config_class'] = $item['base_class'] . '_Config';
50
51 if(file_exists($item['path'] . '/' . $item['slug'] . '-config.php')) {
52 require_once $item['path'] . '/' . $item['slug'] . '-config.php';
53 }
54 }
55 }
56
57 $item['categories'] = ['shopengine-general'];
58
59 if(!empty($item['config_class']) && class_exists($item['config_class']) && method_exists($item['config_class'], 'get_categories')) {
60 $item['categories'] = (new $item['config_class']())->get_categories();
61 }
62
63 $this->unfiltered_list[$name] = $item;
64
65 $db = isset($saved_list[$name]['settings']) ? $saved_list[$name]['settings'] : [];
66 $local = isset($item['settings']) ? $item['settings'] : [];
67
68 $item['settings'] = array_merge($local, $db);
69
70 $this->full_list[$name] = $item;
71
72 if($item['status'] == 'active') {
73 $this->active_list[$name] = $item;
74 } else {
75 $this->inactive_list[$name] = $item;
76 }
77 }
78 }
79
80 public function get_list($list = true, $filter_type = 'full') { // full|active|inactive
81 if($list !== true && isset($this->full_list[$list])) {
82 return $this->full_list[$list];
83 }
84
85 return $this->{$filter_type . '_list'};
86 }
87
88 public function get_settings($key): array {
89
90 return isset($this->full_list[$key]['settings']) ? $this->full_list[$key]['settings'] : [];
91 }
92
93 private function __merge_values_only($local, $db_val) {
94
95 foreach($local as $key => $item) {
96
97 if(isset($item['value'])) {
98
99 $local[$key]['value'] = isset($db_val[$key]['value']) ? $db_val[$key]['value'] : $item['value'];
100 }
101 }
102
103 return $local;
104 }
105
106 abstract protected function raw_list();
107 }
108