PluginProbe
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 3.1.5
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v3.1.5
4.7.2 4.7.1 4.7.0 4.6.6 4.6.5 4.6.4 4.6.3 4.6.2 4.6.1 4.6.0 4.5.1 4.5.0 4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 All 281 releases
surecart / app / src / Models / ProductCollection.php
ProductCollection.php
270 lines 5.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace SureCart\Models;
4
5 use SureCart\Models\Traits\HasDates;
6 use SureCart\Models\Traits\HasImageSizes;
7 use SureCart\Support\Contracts\PageModel;
8
9 /**
10 * Holds Product Collection data.
11 */
12 class ProductCollection extends Model implements PageModel {
13 use HasImageSizes;
14 use HasDates;
15
16 /**
17 * Rest API endpoint
18 *
19 * @var string
20 */
21 protected $endpoint = 'product_collections';
22
23 /**
24 * Object name
25 *
26 * @var string
27 */
28 protected $object_name = 'product_collection';
29
30 /**
31 * Is this cachable.
32 *
33 * @var boolean
34 */
35 protected $cachable = true;
36
37 /**
38 * Clear cache when products are updated.
39 *
40 * @var string
41 */
42 protected $cache_key = 'product_collections';
43
44 /**
45 * Create a new model
46 *
47 * @param array $attributes Attributes to create.
48 *
49 * @return $this|false
50 */
51 protected function create( $attributes = [] ) {
52 $created = parent::create( $attributes );
53
54 if ( is_wp_error( $created ) ) {
55 return $created;
56 }
57
58 // sync with the post.
59 $this->sync();
60
61 return $this;
62 }
63
64 /**
65 * Update a model
66 *
67 * @param array $attributes Attributes to update.
68 *
69 * @return $this|false
70 */
71 protected function update( $attributes = array() ) {
72 // update the model.
73 $updated = parent::update( $attributes );
74 if ( is_wp_error( $updated ) ) {
75 return $updated;
76 }
77
78 // sync with the post.
79 $this->sync();
80
81 // return.
82 return $this;
83 }
84
85 /**
86 * Update a model
87 *
88 * @param string $id The id of the model to delete.
89 * @return $this|false
90 */
91 protected function delete( $id = '' ) {
92 // delete the model.
93 $deleted = parent::delete( $id );
94
95 // check for errors.
96 if ( is_wp_error( $deleted ) ) {
97 return $deleted;
98 }
99
100 // delete the post.
101 $this->deleteSynced( $id );
102
103 // return.
104 return $this;
105 }
106
107 /**
108 * Delete the synced post.
109 *
110 * @param string $id The id of the model to delete.
111 * @return \SureCart\Models\Product
112 */
113 protected function deleteSynced( $id = '' ) {
114 $id = ! empty( $id ) ? $id : $this->id;
115 \SureCart::sync()
116 ->collection()
117 ->delete( $id );
118
119 return $this;
120 }
121
122 /**
123 * Sync the collection
124 */
125 public function sync() {
126 \SureCart::sync()
127 ->collection()
128 ->sync( $this );
129
130 return $this;
131 }
132
133 /**
134 * Get the attached term.
135 *
136 * @return int|false
137 */
138 public function getTermAttribute() {
139 if ( empty( $this->id ) ) {
140 return false;
141 }
142 return \SureCart::sync()->collection()->findByModelId( $this->id );
143 }
144
145 /**
146 * Get the product template
147 *
148 * @return \WP_Template
149 */
150 public function getTemplateAttribute() {
151 return get_block_template( $this->getTemplateIdAttribute() );
152 }
153
154 /**
155 * Get the product template part template.
156 *
157 * @return \WP_Template
158 */
159 public function getTemplatePartAttribute() {
160 return get_block_template( $this->getTemplatePartIdAttribute(), 'wp_template_part' );
161 }
162
163 /**
164 * Get the product template id.
165 *
166 * @return string|false
167 */
168 public function getTemplatePartIdAttribute(): string {
169 if ( ! empty( $this->metadata->wp_template_part_id ) ) {
170 return $this->metadata->wp_template_part_id;
171 }
172 return 'surecart/surecart//product-collection-part';
173 }
174
175 /**
176 * Get the product template id.
177 *
178 * @return string
179 */
180 public function getTemplateIdAttribute(): string {
181 if ( ! empty( $this->metadata->wp_template_id ) ) {
182 // we have a php file, switch to default.
183 if ( wp_is_block_theme() && false !== strpos( $this->metadata->wp_template_id, '.php' ) ) {
184 return 'surecart/surecart//product-collection';
185 }
186
187 // this is acceptable.
188 return $this->metadata->wp_template_id;
189 }
190 return 'surecart/surecart//product-collection';
191 }
192
193 /**
194 * Get the product permalink.
195 *
196 * @return string
197 */
198 public function getPermalinkAttribute(): string {
199 if ( empty( $this->attributes['id'] ) ) {
200 return false;
201 }
202
203 $term = $this->term;
204
205 if ( isset( $term->term_id ) ) {
206 return get_term_link( $term );
207 }
208
209 return '';
210 }
211
212 /**
213 * Get the page title for SEO.
214 *
215 * @return string
216 */
217 public function getPageTitleAttribute(): string {
218 return $this->attributes['name'] ?? '';
219 }
220
221 /**
222 * Get the page description for SEO.
223 *
224 * @return string
225 */
226 public function getMetaDescriptionAttribute(): string {
227 return $this->attributes['description'] ?? '';
228 }
229
230 /**
231 * Get the image url for a specific size.
232 *
233 * @param integer $size The size.
234 *
235 * @return string
236 */
237 public function getImageUrl( $size = 0, $additional_options = '' ) {
238 if ( empty( $this->attributes['image']->url ) ) {
239 return '';
240 }
241
242 return $size ? $this->imageUrl( $this->attributes['image']->url, $size, false, $additional_options ) : $this->attributes['image']->url;
243 }
244
245 /**
246 * Get the srcset for the product media.
247 *
248 * @param array $sizes The sizes.
249 *
250 * @return string
251 */
252 public function getSrcSet( $sizes = [] ) {
253 if ( empty( $this->attributes['image']->url ) ) {
254 return '';
255 }
256 return $this->imageSrcSet( $this->attributes['image']->url, $sizes );
257 }
258
259 /**
260 * Get Template Content.
261 *
262 * @return string
263 */
264 public function getTemplateContent(): string {
265 return wp_is_block_theme() ?
266 $this->template->content ?? '' :
267 $this->template_part->content ?? '';
268 }
269 }
270