PluginProbe ʕ •ᴥ•ʔ
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution / 1.8.0
ShopEngine Elementor WooCommerce Builder Addon – All in One WooCommerce Solution v1.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 5 years ago common.php 5 years ago cpt.php 5 years ago list-model.php 4 years ago widget-config.php 5 years ago widget.php 4 years ago
list-model.php
112 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(!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 public function get_active_settings( $key ): array {
94 return $this->active_list[ $key ]['settings'] ?? [];
95 }
96
97 private function __merge_values_only($local, $db_val) {
98
99 foreach($local as $key => $item) {
100
101 if(isset($item['value'])) {
102
103 $local[$key]['value'] = isset($db_val[$key]['value']) ? $db_val[$key]['value'] : $item['value'];
104 }
105 }
106
107 return $local;
108 }
109
110 abstract protected function raw_list();
111 }
112