PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 3.0.0-beta2
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v3.0.0-beta2
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 2 years ago AbandonedCheckoutProtocol.php 3 years ago Account.php 3 years ago AccountPortalSession.php 4 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 4 years ago Brand.php 4 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 4 years ago Checkout.php 1 year ago Click.php 2 years ago Collection.php 2 years ago CommissionStructure.php 2 years ago Component.php 4 years ago Coupon.php 1 year ago Customer.php 2 years ago CustomerLink.php 4 years ago CustomerNotificationProtocol.php 4 years 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 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 2 years ago Integration.php 2 years ago Invoice.php 4 years ago License.php 2 years ago LineItem.php 1 year ago ManualPaymentMethod.php 3 years ago Media.php 1 year ago Model.php 1 year ago ModelInterface.php 4 years ago Order.php 2 years ago OrderProtocol.php 4 years ago PaymentIntent.php 4 years ago PaymentMethod.php 4 years ago Payout.php 2 years ago PayoutGroup.php 2 years ago Period.php 3 years ago PortalProtocol.php 4 years ago PortalSession.php 4 years ago Price.php 1 year ago Processor.php 3 years ago Product.php 1 year ago ProductCollection.php 1 year ago ProductGroup.php 2 years ago ProductMedia.php 1 year ago Promotion.php 4 years ago ProvisionalAccount.php 2 years ago Purchase.php 2 years ago Referral.php 2 years ago ReferralItem.php 2 years ago Refund.php 4 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 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 4 years ago TaxZone.php 4 years ago Upload.php 4 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 2 years ago WebhookRegistration.php 2 years ago
ProductCollection.php
234 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_updated_at';
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 if ( ! wp_is_block_theme() ) {
50 $attributes['metadata'] = [
51 ...$attributes['metadata'] ?? [],
52 'wp_template_id' => apply_filters( 'surecart/templates/collections/default', 'pages/template-surecart-collection.php' ),
53 ];
54 }
55
56 $created = parent::create( $attributes );
57
58 if ( is_wp_error( $created ) ) {
59 return $created;
60 }
61
62 // sync with the post.
63 $this->sync();
64
65 return $this;
66 }
67
68 /**
69 * Update a model
70 *
71 * @param array $attributes Attributes to update.
72 *
73 * @return $this|false
74 */
75 protected function update( $attributes = array() ) {
76 // update the model.
77 $updated = parent::update( $attributes );
78 if ( is_wp_error( $updated ) ) {
79 return $updated;
80 }
81
82 // sync with the post.
83 $this->sync();
84
85 // return.
86 return $this;
87 }
88
89 /**
90 * Sync the collection
91 */
92 public function sync() {
93 \SureCart::sync()
94 ->collection()
95 ->sync( $this );
96
97 return $this;
98 }
99
100 /**
101 * Get the attached term.
102 *
103 * @return int|false
104 */
105 public function getTermAttribute() {
106 return \SureCart::sync()->collection()->findByModelId( $this->id );
107 }
108
109 /**
110 * Get the product template
111 *
112 * @return \WP_Template
113 */
114 public function getTemplateAttribute() {
115 return get_block_template( $this->getTemplateIdAttribute() );
116 }
117
118 /**
119 * Get the product template part template.
120 *
121 * @return \WP_Template
122 */
123 public function getTemplatePartAttribute() {
124 return get_block_template( $this->getTemplatePartIdAttribute(), 'wp_template_part' );
125 }
126
127 /**
128 * Get the product template id.
129 *
130 * @return string|false
131 */
132 public function getTemplatePartIdAttribute(): string {
133 if ( ! empty( $this->attributes['metadata']->wp_template_part_id ) ) {
134 return $this->attributes['metadata']->wp_template_part_id;
135 }
136 return 'surecart/surecart//product-collection-part';
137 }
138
139 /**
140 * Get the product template id.
141 *
142 * @return string
143 */
144 public function getTemplateIdAttribute(): string {
145 if ( ! empty( $this->attributes['metadata']->wp_template_id ) ) {
146 // we have a php file, switch to default.
147 if ( wp_is_block_theme() && false !== strpos( $this->attributes['metadata']->wp_template_id, '.php' ) ) {
148 return 'surecart/surecart//product-collection';
149 }
150
151 // this is acceptable.
152 return $this->attributes['metadata']->wp_template_id;
153 }
154 return 'surecart/surecart//product-collection';
155 }
156
157 /**
158 * Get the product permalink.
159 *
160 * @return string
161 */
162 public function getPermalinkAttribute(): string {
163 if ( empty( $this->attributes['id'] ) ) {
164 return false;
165 }
166
167 $term = $this->term;
168
169 if ( isset( $term->term_id ) ) {
170 return get_term_link( $term );
171 }
172
173 return '';
174 }
175
176 /**
177 * Get the page title for SEO.
178 *
179 * @return string
180 */
181 public function getPageTitleAttribute(): string {
182 return $this->attributes['name'] ?? '';
183 }
184
185 /**
186 * Get the page description for SEO.
187 *
188 * @return string
189 */
190 public function getMetaDescriptionAttribute(): string {
191 return $this->attributes['description'] ?? '';
192 }
193
194 /**
195 * Get the image url for a specific size.
196 *
197 * @param integer $size The size.
198 *
199 * @return string
200 */
201 public function getImageUrl( $size = 0, $additional_options = '' ) {
202 if ( empty( $this->attributes['image']->url ) ) {
203 return '';
204 }
205
206 return $size ? $this->imageUrl( $this->attributes['image']->url, $size, false, $additional_options ) : $this->attributes['image']->url;
207 }
208
209 /**
210 * Get the srcset for the product media.
211 *
212 * @param array $sizes The sizes.
213 *
214 * @return string
215 */
216 public function getSrcSet( $sizes = [] ) {
217 if ( empty( $this->attributes['image']->url ) ) {
218 return '';
219 }
220 return $this->imageSrcSet( $this->attributes['image']->url, $sizes );
221 }
222
223 /**
224 * Get Template Content.
225 *
226 * @return string
227 */
228 public function getTemplateContent(): string {
229 return wp_is_block_theme() ?
230 $this->template->content ?? '' :
231 $this->template_part->content ?? '';
232 }
233 }
234