PluginProbe
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler / 1.6.4
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler v1.6.4
1.6.4 1.6.3 1.6.2 1.6.1 1.6.0 1.5.4 1.5.5 1.5.3 1.5.2 1.5.1 1.5.0 1.4.2 1.4.1 1.4.0 1.3.28 1.3.27 1.3.26 1.3.25 1.3.23 1.3.22 1.3.21 1.3.20 1.3.19 trunk 1.2.0 All 47 releases
fluent-cart / app / Models / Meta.php

Meta.php in FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler 1.6.4, at app/Models/Meta.php

158 lines 4.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace FluentCart\App\Models;
4
5 use FluentCart\App\Services\PlanUpgradeService;
6 use FluentCart\Framework\Database\Orm\Builder;
7
8 /**
9 * Meta Model - DB Model for Meta table
10 *
11 * Database Model
12 *
13 * @package FluentCart\App\Models
14 *
15 * @version 1.0.0
16 */
17 class Meta extends Model
18 {
19 protected $table = 'fct_meta';
20
21 protected $primaryKey = 'id';
22
23 protected $guarded = ['id'];
24
25 protected $fillable = [
26 'object_type',
27 'object_id',
28 'meta_key',
29 'meta_value',
30 ];
31
32 public function setMetaValueAttribute($meta_value)
33 {
34
35 if (is_array($meta_value) || is_object($meta_value)) {
36 $meta_value = json_encode($meta_value, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
37 }
38 //phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_value
39 $this->attributes['meta_value'] = $meta_value;
40
41 }
42
43 public function getMetaValueAttribute($value)
44 {
45 if (is_string($value)) {
46 $decoded = json_decode($value, true);
47 return $decoded !== null ? $decoded : $value;
48 }
49 return $value;
50 }
51
52 public function scopeProductCategoryTaxOverrides(Builder $query)
53 {
54 return $query
55 ->where('object_type', 'tax_override')
56 ->where('meta_key', 'product_category_override');
57 }
58
59 public function scopeForTaxOverrideCountry(Builder $query, $countryCode)
60 {
61 return $query->whereRaw(
62 "JSON_UNQUOTE(JSON_EXTRACT(meta_value, '$.country')) = ?",
63 [$countryCode]
64 );
65 }
66
67 public function scopeForTaxOverrideCountries(Builder $query, array $countryCodes)
68 {
69 $countryCodes = array_values(array_filter($countryCodes));
70
71 if (!$countryCodes) {
72 return $query->whereRaw('1 = 0');
73 }
74
75 $placeholders = implode(', ', array_fill(0, count($countryCodes), '?'));
76
77 return $query->whereRaw(
78 "JSON_UNQUOTE(JSON_EXTRACT(meta_value, '$.country')) IN ({$placeholders})",
79 $countryCodes
80 );
81 }
82
83 public function scopeForTaxOverrideState(Builder $query, $stateCode)
84 {
85 return $query->whereRaw(
86 "COALESCE(JSON_UNQUOTE(JSON_EXTRACT(meta_value, '$.state')), '') = ?",
87 [$stateCode]
88 );
89 }
90
91 public function scopeForTaxOverrideCategoryId(Builder $query, $categoryId)
92 {
93 return $query->whereRaw(
94 "CAST(COALESCE(JSON_UNQUOTE(JSON_EXTRACT(meta_value, '$.category_id')), '0') AS UNSIGNED) = ?",
95 [$categoryId]
96 );
97 }
98
99 public function scopeForTaxOverrideCity(Builder $query, $city)
100 {
101 return $query->whereRaw(
102 "COALESCE(JSON_UNQUOTE(JSON_EXTRACT(meta_value, '$.city')), '') = ?",
103 [$city]
104 );
105 }
106
107 public function scopeForTaxOverridePostcode(Builder $query, $postcode)
108 {
109 return $query->whereRaw(
110 "COALESCE(JSON_UNQUOTE(JSON_EXTRACT(meta_value, '$.postcode')), '') = ?",
111 [$postcode]
112 );
113 }
114
115 public function scopeForTaxOverrideClassId(Builder $query, $classId)
116 {
117 return $query->whereRaw(
118 "CAST(COALESCE(JSON_UNQUOTE(JSON_EXTRACT(meta_value, '$.class_id')), '0') AS UNSIGNED) = ?",
119 [(int) $classId]
120 );
121 }
122
123 public function scopeLegacyTaxOverrideObjectId(Builder $query)
124 {
125 return $query->where(function ($query) {
126 $query->whereNull('object_id')
127 ->orWhere('object_id', 0);
128 });
129 }
130
131
132
133 public function scopeUserTheme(Builder $query)
134 {
135 return $query
136 ->where('object_type', User::class)
137 ->where('object_id', get_current_user_id())
138 ->where('meta_key', 'theme');
139 }
140
141 public function scopeUpgradeablePath($query, $productId)
142 {
143 return $this->whereHas('upgradeableVariants', function ($query) use ($productId) {
144 if (!empty($productId)) {
145 return $query->where('post_id', $productId);
146 }
147 })
148 ->where('object_type', PlanUpgradeService::$metaType)
149 ->where('meta_key', PlanUpgradeService::$metaKey);
150 }
151
152 public function upgradeableVariants()
153 {
154 return $this->hasMany(ProductVariation::class, 'id', 'object_id');
155 }
156
157 }
158