PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.5.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.5.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 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 2 months ago Concerns 6 months ago Traits 2 weeks ago Wordpress 1 year ago AbandonedCheckout.php 1 year ago AbandonedCheckoutProtocol.php 3 years ago Account.php 10 months ago AccountPortalSession.php 3 years ago Activation.php 1 year ago Affiliation.php 1 year ago AffiliationProduct.php 1 year ago AffiliationProtocol.php 2 years ago AffiliationRequest.php 1 year ago ApiToken.php 6 months ago AutoFee.php 5 months ago AutoFeeProtocol.php 5 months ago BalanceTransaction.php 1 year ago Batch.php 2 days ago Brand.php 4 months ago BulkAction.php 2 years ago Bump.php 1 year ago BuyLink.php 2 years ago CancellationAct.php 1 year ago CancellationReason.php 3 years ago Charge.php 9 months ago Checkout.php 2 months ago Click.php 1 year ago Collection.php 3 months ago CommissionStructure.php 2 years ago Component.php 4 months ago Coupon.php 2 months ago Customer.php 2 weeks ago CustomerLink.php 3 years ago CustomerNotificationProtocol.php 3 years ago CustomerPortalProtocol.php 1 year ago DatabaseModel.php 2 months ago Discount.php 1 year ago DisplayCurrency.php 1 year ago Dispute.php 9 months ago Download.php 3 years ago Event.php 3 years ago Export.php 2 years ago ExternalApiModel.php 3 months ago Fee.php 1 year ago Form.php 3 years ago Fulfillment.php 1 year ago FulfillmentItem.php 1 year ago GalleryItem.php 9 months ago GalleryItemAttachment.php 5 months ago GalleryItemImageAttachment.php 3 months ago GalleryItemMedia.php 1 year ago GalleryItemProductMedia.php 1 month ago GalleryItemVideoAttachment.php 3 months ago Import.php 6 months ago ImportRow.php 2 months ago IncomingWebhook.php 1 year ago Integration.php 2 years ago IntegrationCatalog.php 2 days ago Invoice.php 1 year ago License.php 1 year ago LineItem.php 9 months ago ManualPaymentMethod.php 1 year ago Media.php 1 month ago Model.php 2 days ago ModelInterface.php 3 years ago Order.php 2 weeks ago OrderProtocol.php 3 years ago ParcelTemplate.php 3 months ago PaymentFailure.php 1 year ago PaymentInstrument.php 2 months ago PaymentIntent.php 1 year ago PaymentMethod.php 1 year ago Payout.php 1 year ago PayoutGroup.php 2 years ago Period.php 1 year ago PlatformFee.php 1 year ago PortalSession.php 3 years ago Price.php 6 months ago Processor.php 1 year ago Product.php 2 days ago ProductCollection.php 1 year ago ProductCollectionImport.php 6 months ago ProductGroup.php 1 year ago ProductImport.php 6 months ago ProductMedia.php 4 months ago Promotion.php 1 year ago ProvisionalAccount.php 2 months ago Purchase.php 2 years ago Referral.php 1 year ago ReferralItem.php 2 years ago Refund.php 1 year ago RefundItem.php 1 year ago RegisteredWebhook.php 2 months ago ReturnItem.php 2 years ago ReturnReason.php 2 years ago ReturnRequest.php 1 year ago Review.php 4 months ago ReviewProtocol.php 4 months ago RuleSchema.php 5 months ago ServiceFee.php 1 year ago ShippingChoice.php 1 year 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 2 weeks ago SubscriptionProtocol.php 3 years ago Swap.php 1 year ago TaxOverride.php 2 years ago TaxProtocol.php 3 years ago TaxRegistration.php 1 year ago TaxZone.php 3 years ago Upload.php 3 years ago Upsell.php 1 year ago UpsellFunnel.php 1 year ago User.php 1 month ago Variant.php 2 days 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
254 lines
1 <?php
2
3 namespace SureCart\Models;
4
5 use SureCart\Models\Traits\HasDates;
6 use SureCart\Models\Traits\HasImageSizes;
7 use SureCart\Models\Wordpress\Collection;
8 use SureCart\Support\Contracts\PageModel;
9
10 /**
11 * Holds Product Collection data.
12 */
13 class ProductCollection extends Model implements PageModel {
14 use HasImageSizes;
15 use HasDates;
16
17 /**
18 * Rest API endpoint
19 *
20 * @var string
21 */
22 protected $endpoint = 'product_collections';
23
24 /**
25 * Object name
26 *
27 * @var string
28 */
29 protected $object_name = 'product_collection';
30
31 /**
32 * Is this cachable.
33 *
34 * @var boolean
35 */
36 protected $cachable = true;
37
38 /**
39 * Clear cache when products are updated.
40 *
41 * @var string
42 */
43 protected $cache_key = 'product_collections';
44
45 /**
46 * Create a new model
47 *
48 * @param array $attributes Attributes to create.
49 *
50 * @return $this|false
51 */
52 protected function create( $attributes = [] ) {
53 $created = parent::create( $attributes );
54
55 if ( is_wp_error( $created ) ) {
56 return $created;
57 }
58
59 // sync with the post.
60 $this->sync();
61
62 return $this;
63 }
64
65 /**
66 * Update a model
67 *
68 * @param array $attributes Attributes to update.
69 *
70 * @return $this|false
71 */
72 protected function update( $attributes = array() ) {
73 // update the model.
74 $updated = parent::update( $attributes );
75 if ( is_wp_error( $updated ) ) {
76 return $updated;
77 }
78
79 // sync with the post.
80 $this->sync();
81
82 // return.
83 return $this;
84 }
85
86 /**
87 * Update a model
88 *
89 * @param string $id The id of the model to delete.
90 * @return $this|false
91 */
92 protected function delete( $id = '' ) {
93 // delete the model.
94 $deleted = parent::delete( $id );
95
96 // check for errors.
97 if ( is_wp_error( $deleted ) ) {
98 return $deleted;
99 }
100
101 // delete the post.
102 $this->deleteSynced( $id );
103
104 // return.
105 return $this;
106 }
107
108 /**
109 * Delete the synced post.
110 *
111 * @param string $id The id of the model to delete.
112 * @return \SureCart\Models\Product
113 */
114 protected function deleteSynced( $id = '' ) {
115 $id = ! empty( $id ) ? $id : $this->id;
116 Collection::delete( $id );
117 return $this;
118 }
119
120 /**
121 * Sync the collection
122 */
123 public function sync() {
124 Collection::sync( $this );
125 return $this;
126 }
127
128 /**
129 * Get the attached term.
130 *
131 * @return int|false
132 */
133 public function getTermAttribute() {
134 if ( empty( $this->id ) ) {
135 return false;
136 }
137 return Collection::findByModelId( $this->id );
138 }
139
140 /**
141 * Get the product template
142 *
143 * @return \WP_Template
144 */
145 public function getTemplateAttribute() {
146 return get_block_template( $this->getTemplateIdAttribute() );
147 }
148
149 /**
150 * Get the product template part template.
151 *
152 * @return \WP_Template
153 */
154 public function getTemplatePartAttribute() {
155 return get_block_template( $this->getTemplatePartIdAttribute(), 'wp_template_part' );
156 }
157
158 /**
159 * Get the product template id.
160 *
161 * @return string|false
162 */
163 public function getTemplatePartIdAttribute(): string {
164 if ( ! empty( $this->metadata->wp_template_part_id ) ) {
165 return $this->metadata->wp_template_part_id;
166 }
167 return 'surecart/surecart//product-collection-part';
168 }
169
170 /**
171 * Get the product template id.
172 *
173 * @return string
174 */
175 public function getTemplateIdAttribute(): string {
176 if ( ! empty( $this->metadata->wp_template_id ) ) {
177 // we have a php file, switch to default.
178 if ( wp_is_block_theme() && false !== strpos( $this->metadata->wp_template_id, '.php' ) ) {
179 return 'surecart/surecart//product-collection';
180 }
181
182 // this is acceptable.
183 return $this->metadata->wp_template_id;
184 }
185 return 'surecart/surecart//product-collection';
186 }
187
188 /**
189 * Get the product permalink.
190 *
191 * @return string
192 */
193 public function getPermalinkAttribute(): string {
194 if ( empty( $this->attributes['id'] ) ) {
195 return false;
196 }
197
198 $term = $this->term;
199
200 if ( isset( $term->term_id ) ) {
201 return get_term_link( $term );
202 }
203
204 return '';
205 }
206
207 /**
208 * Get the page title for SEO.
209 *
210 * @return string
211 */
212 public function getPageTitleAttribute(): string {
213 return $this->attributes['name'] ?? '';
214 }
215
216 /**
217 * Get the page description for SEO.
218 *
219 * @return string
220 */
221 public function getMetaDescriptionAttribute(): string {
222 return $this->attributes['description'] ?? '';
223 }
224
225 /**
226 * Get the image url for a specific size.
227 *
228 * @param integer $size The size.
229 *
230 * @return string
231 */
232 public function getImageUrl( $size = 0, $additional_options = '' ) {
233 if ( empty( $this->attributes['image']->url ) ) {
234 return '';
235 }
236
237 return $size ? $this->imageUrl( $this->attributes['image']->url, $size, false, $additional_options ) : $this->attributes['image']->url;
238 }
239
240 /**
241 * Get the srcset for the product media.
242 *
243 * @param array $sizes The sizes.
244 *
245 * @return string
246 */
247 public function getSrcSet( $sizes = [] ) {
248 if ( empty( $this->attributes['image']->url ) ) {
249 return '';
250 }
251 return $this->imageSrcSet( $this->attributes['image']->url, $sizes );
252 }
253 }
254