PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 3.0.3
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v3.0.3
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 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / Models / ProductCollection.php
surecart / app / src / Models Last commit date
Blocks 1 year ago Concerns 1 year ago Traits 1 year ago AbandonedCheckout.php 2 years ago AbandonedCheckoutProtocol.php 3 years ago Account.php 3 years ago AccountPortalSession.php 3 years ago Activation.php 2 years ago Affiliation.php 2 years ago AffiliationProduct.php 1 year ago AffiliationProtocol.php 2 years ago AffiliationRequest.php 2 years ago ApiToken.php 3 years ago BalanceTransaction.php 3 years ago Brand.php 3 years ago BulkAction.php 2 years ago Bump.php 1 year ago BuyLink.php 2 years ago CancellationAct.php 3 years ago CancellationReason.php 3 years ago Charge.php 1 year ago Checkout.php 1 year ago Click.php 2 years ago Collection.php 2 years ago CommissionStructure.php 2 years ago Component.php 3 years ago Coupon.php 1 year ago Customer.php 2 years ago CustomerLink.php 3 years ago CustomerNotificationProtocol.php 3 years ago DatabaseModel.php 1 year ago Discount.php 1 year ago Download.php 3 years ago Event.php 3 years ago Export.php 2 years ago Form.php 3 years ago Fulfillment.php 3 years ago FulfillmentItem.php 1 year ago GalleryItem.php 1 year ago GalleryItemAttachment.php 1 year ago GalleryItemMedia.php 1 year ago GalleryItemProductMedia.php 1 year ago IncomingWebhook.php 1 year ago Integration.php 2 years ago Invoice.php 1 year ago License.php 2 years ago LineItem.php 1 year ago ManualPaymentMethod.php 1 year ago Media.php 1 year ago Model.php 1 year ago ModelInterface.php 3 years ago Order.php 2 years ago OrderProtocol.php 3 years ago PaymentInstrument.php 1 year ago PaymentIntent.php 3 years ago PaymentMethod.php 1 year ago Payout.php 2 years ago PayoutGroup.php 2 years ago Period.php 3 years ago PortalProtocol.php 3 years ago PortalSession.php 3 years ago Price.php 1 year ago Processor.php 1 year ago Product.php 1 year ago ProductCollection.php 1 year ago ProductGroup.php 2 years ago ProductMedia.php 1 year ago Promotion.php 1 year ago ProvisionalAccount.php 2 years ago Purchase.php 2 years ago Referral.php 2 years ago ReferralItem.php 2 years ago Refund.php 3 years ago RegisteredWebhook.php 2 years ago ReturnItem.php 2 years ago ReturnReason.php 2 years ago ReturnRequest.php 2 years ago ShippingMethod.php 3 years ago ShippingProfile.php 3 years ago ShippingProtocol.php 3 years ago ShippingRate.php 3 years ago ShippingZone.php 3 years ago Statistic.php 3 years ago Subscription.php 1 year ago SubscriptionProtocol.php 3 years ago TaxOverride.php 2 years ago TaxProtocol.php 3 years ago TaxRegistration.php 3 years ago TaxZone.php 3 years ago Upload.php 3 years ago Upsell.php 1 year ago UpsellFunnel.php 2 years ago User.php 2 years ago Variant.php 1 year ago VariantOption.php 2 years ago VariantOptionValue.php 1 year ago VariantValue.php 2 years ago VerificationCode.php 3 years ago Webhook.php 1 year ago WebhookRegistration.php 2 years ago
ProductCollection.php
267 lines
1 <?php
2
3 namespace SureCart\Models;
4
5 use SureCart\Support\Contracts\PageModel;
6
7 /**
8 * Holds Product Collection data.
9 */
10 class ProductCollection extends Model implements PageModel {
11 use Traits\HasImageSizes;
12
13 /**
14 * Rest API endpoint
15 *
16 * @var string
17 */
18 protected $endpoint = 'product_collections';
19
20 /**
21 * Object name
22 *
23 * @var string
24 */
25 protected $object_name = 'product_collection';
26
27 /**
28 * Is this cachable.
29 *
30 * @var boolean
31 */
32 protected $cachable = true;
33
34 /**
35 * Clear cache when products are updated.
36 *
37 * @var string
38 */
39 protected $cache_key = 'product_collections';
40
41 /**
42 * Create a new model
43 *
44 * @param array $attributes Attributes to create.
45 *
46 * @return $this|false
47 */
48 protected function create( $attributes = [] ) {
49 $created = parent::create( $attributes );
50
51 if ( is_wp_error( $created ) ) {
52 return $created;
53 }
54
55 // sync with the post.
56 $this->sync();
57
58 return $this;
59 }
60
61 /**
62 * Update a model
63 *
64 * @param array $attributes Attributes to update.
65 *
66 * @return $this|false
67 */
68 protected function update( $attributes = array() ) {
69 // update the model.
70 $updated = parent::update( $attributes );
71 if ( is_wp_error( $updated ) ) {
72 return $updated;
73 }
74
75 // sync with the post.
76 $this->sync();
77
78 // return.
79 return $this;
80 }
81
82 /**
83 * Update a model
84 *
85 * @param string $id The id of the model to delete.
86 * @return $this|false
87 */
88 protected function delete( $id = '' ) {
89 // delete the model.
90 $deleted = parent::delete( $id );
91
92 // check for errors.
93 if ( is_wp_error( $deleted ) ) {
94 return $deleted;
95 }
96
97 // delete the post.
98 $this->deleteSynced( $id );
99
100 // return.
101 return $this;
102 }
103
104 /**
105 * Delete the synced post.
106 *
107 * @param string $id The id of the model to delete.
108 * @return \SureCart\Models\Product
109 */
110 protected function deleteSynced( $id = '' ) {
111 $id = ! empty( $id ) ? $id : $this->id;
112 \SureCart::sync()
113 ->collection()
114 ->delete( $id );
115
116 return $this;
117 }
118
119 /**
120 * Sync the collection
121 */
122 public function sync() {
123 \SureCart::sync()
124 ->collection()
125 ->sync( $this );
126
127 return $this;
128 }
129
130 /**
131 * Get the attached term.
132 *
133 * @return int|false
134 */
135 public function getTermAttribute() {
136 if ( empty( $this->id ) ) {
137 return false;
138 }
139 return \SureCart::sync()->collection()->findByModelId( $this->id );
140 }
141
142 /**
143 * Get the product template
144 *
145 * @return \WP_Template
146 */
147 public function getTemplateAttribute() {
148 return get_block_template( $this->getTemplateIdAttribute() );
149 }
150
151 /**
152 * Get the product template part template.
153 *
154 * @return \WP_Template
155 */
156 public function getTemplatePartAttribute() {
157 return get_block_template( $this->getTemplatePartIdAttribute(), 'wp_template_part' );
158 }
159
160 /**
161 * Get the product template id.
162 *
163 * @return string|false
164 */
165 public function getTemplatePartIdAttribute(): string {
166 if ( ! empty( $this->metadata->wp_template_part_id ) ) {
167 return $this->metadata->wp_template_part_id;
168 }
169 return 'surecart/surecart//product-collection-part';
170 }
171
172 /**
173 * Get the product template id.
174 *
175 * @return string
176 */
177 public function getTemplateIdAttribute(): string {
178 if ( ! empty( $this->metadata->wp_template_id ) ) {
179 // we have a php file, switch to default.
180 if ( wp_is_block_theme() && false !== strpos( $this->metadata->wp_template_id, '.php' ) ) {
181 return 'surecart/surecart//product-collection';
182 }
183
184 // this is acceptable.
185 return $this->metadata->wp_template_id;
186 }
187 return 'surecart/surecart//product-collection';
188 }
189
190 /**
191 * Get the product permalink.
192 *
193 * @return string
194 */
195 public function getPermalinkAttribute(): string {
196 if ( empty( $this->attributes['id'] ) ) {
197 return false;
198 }
199
200 $term = $this->term;
201
202 if ( isset( $term->term_id ) ) {
203 return get_term_link( $term );
204 }
205
206 return '';
207 }
208
209 /**
210 * Get the page title for SEO.
211 *
212 * @return string
213 */
214 public function getPageTitleAttribute(): string {
215 return $this->attributes['name'] ?? '';
216 }
217
218 /**
219 * Get the page description for SEO.
220 *
221 * @return string
222 */
223 public function getMetaDescriptionAttribute(): string {
224 return $this->attributes['description'] ?? '';
225 }
226
227 /**
228 * Get the image url for a specific size.
229 *
230 * @param integer $size The size.
231 *
232 * @return string
233 */
234 public function getImageUrl( $size = 0, $additional_options = '' ) {
235 if ( empty( $this->attributes['image']->url ) ) {
236 return '';
237 }
238
239 return $size ? $this->imageUrl( $this->attributes['image']->url, $size, false, $additional_options ) : $this->attributes['image']->url;
240 }
241
242 /**
243 * Get the srcset for the product media.
244 *
245 * @param array $sizes The sizes.
246 *
247 * @return string
248 */
249 public function getSrcSet( $sizes = [] ) {
250 if ( empty( $this->attributes['image']->url ) ) {
251 return '';
252 }
253 return $this->imageSrcSet( $this->attributes['image']->url, $sizes );
254 }
255
256 /**
257 * Get Template Content.
258 *
259 * @return string
260 */
261 public function getTemplateContent(): string {
262 return wp_is_block_theme() ?
263 $this->template->content ?? '' :
264 $this->template_part->content ?? '';
265 }
266 }
267