PluginProbe ʕ •ᴥ•ʔ
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution / 4.8.0
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution v4.8.0
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 4.3.1 4.4.0 4.5.0 4.5.1 4.6.0 4.6.1 4.6.2 4.6.3 4.6.4 4.6.5 4.6.6 4.6.7 4.6.8 4.6.9 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.7.5 4.7.6 4.7.7 4.7.8 4.7.9 4.8.0 4.8.1 4.8.2 4.8.3 4.8.4 4.8.5 4.8.6 4.8.7 4.8.8 4.8.9 trunk 0.1.2-beta 0.1.3-beta 0.1.4-beta 1.0.0 1.1.0 1.1.1 1.1.2 1.1.3 1.2.0 1.2.1 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.5.0 1.5.1 1.6.0 1.6.1 1.7.0 1.8.0 1.8.1 1.9.0
shopengine / base / list-model.php
shopengine / base Last commit date
api.php 3 years ago common.php 4 years ago cpt.php 4 years ago list-model.php 4 years ago widget-config.php 4 years ago widget.php 11 months ago
list-model.php
130 lines
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($item['package'] === 'pro-disabled') {
26 $item['settings'] = [];
27 $item['status'] = 'inactive';
28 $this->full_list[$name] = $item;
29 $this->unfiltered_list[$name] = $item;
30 $this->inactive_list[$name] = $item;
31 continue;
32 }
33
34 if(!isset($saved_list[$name]['status']) && isset($item['status'])) {
35 $item['status'] = $item['status'];
36 } else {
37 $item['status'] = (isset($saved_list[$name]['status']) && $saved_list[$name]['status'] == 'inactive' ? 'inactive' : 'active');
38 }
39
40 /**
41 * Scenario considered :
42 * +Scenario 1 : with old database saved values, we added new module with settings
43 * +Scenario 2 : no database settings yet saved, very fresh installation
44 * +Scenario 3 : For some reason in future we removed/renamed/added some fields and the client has already database saved values
45 *
46 */
47
48 if(!isset($item['path'])) {
49 $item['path'] = \ShopEngine::{rtrim($this->list_type, 's') . '_dir'}() . $name . '/';
50 }
51
52 if($this->generate_base_class == true) {
53 if(!isset($item['base_class'])) {
54 $item['base_class'] = '\Elementor\ShopEngine_' . \ShopEngine\Utils\Helper::make_classname($name);
55 }
56
57 if(!isset($item['config_class'])) {
58 $item['config_class'] = $item['base_class'] . '_Config';
59
60 if(file_exists($item['path'] . '/' . $item['slug'] . '-config.php')) {
61 require_once $item['path'] . '/' . $item['slug'] . '-config.php';
62 }
63 }
64 }
65
66 $item['categories'] = ['shopengine-general'];
67
68 if(!empty($item['config_class']) && class_exists($item['config_class']) && method_exists($item['config_class'], 'get_categories')) {
69 $item['categories'] = (new $item['config_class']())->get_categories();
70 }
71
72 $this->unfiltered_list[$name] = $item;
73
74 $db = isset($saved_list[$name]['settings']) ? $saved_list[$name]['settings'] : [];
75 $local = isset($item['settings']) ? $item['settings'] : [];
76
77 $item['settings'] = array_merge($local, $db);
78
79 $this->full_list[$name] = $item;
80
81 if($item['status'] == 'active') {
82 $this->active_list[$name] = $item;
83 } else {
84 $this->inactive_list[$name] = $item;
85 }
86 }
87 }
88
89 public function is_widget_active($key): bool {
90
91 return isset($this->active_list[$key]);
92 }
93
94 public function get_list($list = true, $filter_type = 'full') { // full|active|inactive
95 if($list !== true && isset($this->full_list[$list])) {
96 return $this->full_list[$list];
97 }
98
99 return $this->{$filter_type . '_list'};
100 }
101
102 public function get_settings($key): array {
103
104 return isset($this->full_list[$key]['settings']) ? $this->full_list[$key]['settings'] : [];
105 }
106
107 public function get_active_settings($key): array {
108 return $this->active_list[$key]['settings'] ?? [];
109 }
110
111 public function get_module($key): array {
112 return $this->full_list[$key] ?? [];
113 }
114
115 private function __merge_values_only($local, $db_val) {
116
117 foreach($local as $key => $item) {
118
119 if(isset($item['value'])) {
120
121 $local[$key]['value'] = isset($db_val[$key]['value']) ? $db_val[$key]['value'] : $item['value'];
122 }
123 }
124
125 return $local;
126 }
127
128 abstract protected function raw_list();
129 }
130