PluginProbe
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.31.2
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.31.2
4.7.2 4.7.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 All 281 releases
surecart / app / src / Models / ProductCollection.php
ProductCollection.php
191 lines 4.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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 return parent::create( $attributes );
57 }
58
59 /**
60 * Get the product template
61 *
62 * @return \WP_Template
63 */
64 public function getTemplateAttribute() {
65 return get_block_template( $this->getTemplateIdAttribute() );
66 }
67
68 /**
69 * Get the product template part template.
70 *
71 * @return \WP_Template
72 */
73 public function getTemplatePartAttribute() {
74 return get_block_template( $this->getTemplatePartIdAttribute(), 'wp_template_part' );
75 }
76
77 /**
78 * Get the product template id.
79 *
80 * @return string|false
81 */
82 public function getTemplatePartIdAttribute(): string {
83 if ( ! empty( $this->attributes['metadata']->wp_template_part_id ) ) {
84 return $this->attributes['metadata']->wp_template_part_id;
85 }
86 return 'surecart/surecart//product-collection-part';
87 }
88
89 /**
90 * Get the product template id.
91 *
92 * @return string
93 */
94 public function getTemplateIdAttribute(): string {
95 if ( ! empty( $this->attributes['metadata']->wp_template_id ) ) {
96 // we have a php file, switch to default.
97 if ( wp_is_block_theme() && false !== strpos( $this->attributes['metadata']->wp_template_id, '.php' ) ) {
98 return 'surecart/surecart//product-collection';
99 }
100
101 // this is acceptable.
102 return $this->attributes['metadata']->wp_template_id;
103 }
104 return 'surecart/surecart//product-collection';
105 }
106
107 /**
108 * Get the product permalink.
109 *
110 * @return string
111 */
112 public function getPermalinkAttribute(): string {
113 if ( empty( $this->attributes['id'] ) ) {
114 return false;
115 }
116 // permalinks off.
117 if ( ! get_option( 'permalink_structure' ) ) {
118 return add_query_arg( 'sc_collection_page_id', $this->slug, get_home_url() );
119 }
120 // permalinks on.
121 return trailingslashit( get_home_url() ) . trailingslashit( \SureCart::settings()->permalinks()->getBase( 'collection_page' ) ) . trailingslashit( $this->slug );
122 }
123
124 /**
125 * Get the JSON Schema Array
126 *
127 * @return array
128 */
129 public function getJsonSchemaArray(): array {
130 return [];
131 }
132
133 /**
134 * Get the page title for SEO.
135 *
136 * @return string
137 */
138 public function getPageTitleAttribute(): string {
139 return $this->attributes['name'] ?? '';
140 }
141
142 /**
143 * Get the page description for SEO.
144 *
145 * @return string
146 */
147 public function getMetaDescriptionAttribute(): string {
148 return $this->attributes['description'] ?? '';
149 }
150
151 /**
152 * Get the image url for a specific size.
153 *
154 * @param integer $size The size.
155 *
156 * @return string
157 */
158 public function getImageUrl( $size = 0, $additional_options = '' ) {
159 if ( empty( $this->attributes['image']->url ) ) {
160 return '';
161 }
162
163 return $size ? $this->imageUrl( $this->attributes['image']->url, $size, false, $additional_options ) : $this->attributes['image']->url;
164 }
165
166 /**
167 * Get the srcset for the product media.
168 *
169 * @param array $sizes The sizes.
170 *
171 * @return string
172 */
173 public function getSrcSet( $sizes = [] ) {
174 if ( empty( $this->attributes['image']->url ) ) {
175 return '';
176 }
177 return $this->imageSrcSet( $this->attributes['image']->url, $sizes );
178 }
179
180 /**
181 * Get Template Content.
182 *
183 * @return string
184 */
185 public function getTemplateContent() : string {
186 return wp_is_block_theme() ?
187 $this->template->content ?? '' :
188 $this->template_part->content ?? '';
189 }
190 }
191