PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 3.0.0-beta1
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v3.0.0-beta1
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 2 years ago Concerns 2 years ago Traits 2 years 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 2 years 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 2 years ago BuyLink.php 2 years ago CancellationAct.php 3 years ago CancellationReason.php 3 years ago Charge.php 4 years ago Checkout.php 2 years ago Click.php 2 years ago Collection.php 2 years ago CommissionStructure.php 2 years ago Component.php 4 years ago Coupon.php 2 years ago Customer.php 2 years ago CustomerLink.php 4 years ago CustomerNotificationProtocol.php 4 years ago DatabaseModel.php 2 years ago Discount.php 2 years 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 2 years ago GalleryItem.php 2 years ago GalleryItemAttachment.php 2 years ago GalleryItemMedia.php 2 years ago GalleryItemProductMedia.php 2 years ago IncomingWebhook.php 2 years ago Integration.php 2 years ago Invoice.php 4 years ago License.php 2 years ago LineItem.php 2 years ago ManualPaymentMethod.php 3 years ago Media.php 2 years ago Model.php 2 years 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 2 years ago Processor.php 3 years ago Product.php 2 years ago ProductCollection.php 2 years ago ProductGroup.php 2 years ago ProductMedia.php 2 years 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 2 years 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 2 years ago UpsellFunnel.php 2 years ago User.php 2 years ago Variant.php 2 years ago VariantOption.php 2 years ago VariantOptionValue.php 2 years 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