PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 3.2.1
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v3.2.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 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 1 year ago AbandonedCheckoutProtocol.php 3 years ago Account.php 3 years ago AccountPortalSession.php 4 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 3 years ago BalanceTransaction.php 1 year ago Brand.php 4 years 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 1 year ago Checkout.php 1 year ago Click.php 1 year ago Collection.php 2 years ago CommissionStructure.php 2 years ago Component.php 4 years ago Coupon.php 1 year ago Customer.php 1 year ago CustomerLink.php 4 years ago CustomerNotificationProtocol.php 4 years ago CustomerPortalProtocol.php 1 year ago DatabaseModel.php 1 year ago Discount.php 1 year ago Download.php 4 years ago Event.php 4 years ago Export.php 2 years ago ExternalApiModel.php 1 year ago Form.php 3 years ago Fulfillment.php 1 year 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 IntegrationCatalog.php 1 year ago Invoice.php 1 year ago License.php 1 year ago LineItem.php 1 year ago ManualPaymentMethod.php 1 year ago Media.php 1 year ago Model.php 1 year ago ModelInterface.php 4 years ago Order.php 1 year ago OrderProtocol.php 4 years ago PaymentFailure.php 1 year ago PaymentInstrument.php 1 year ago PaymentIntent.php 4 years ago PaymentMethod.php 1 year ago Payout.php 1 year ago PayoutGroup.php 2 years ago Period.php 1 year ago PortalSession.php 4 years ago Price.php 1 year ago Processor.php 1 year ago Product.php 1 year ago ProductCollection.php 1 year ago ProductGroup.php 1 year ago ProductMedia.php 1 year ago Promotion.php 1 year ago ProvisionalAccount.php 2 years ago Purchase.php 2 years ago Referral.php 1 year ago ReferralItem.php 2 years ago Refund.php 1 year ago RegisteredWebhook.php 2 years ago ReturnItem.php 2 years ago ReturnReason.php 2 years ago ReturnRequest.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 4 years ago Subscription.php 1 year ago SubscriptionProtocol.php 4 years ago TaxOverride.php 2 years ago TaxProtocol.php 4 years ago TaxRegistration.php 1 year ago TaxZone.php 4 years ago Upload.php 4 years ago Upsell.php 1 year ago UpsellFunnel.php 1 year 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
259 lines
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