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 / IntegrationCatalog.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
IntegrationCatalog.php
227 lines
1 <?php
2
3 namespace SureCart\Models;
4
5 /**
6 * The integration listing model.
7 */
8 class IntegrationCatalog extends ExternalApiModel {
9 /**
10 * Rest API endpoint
11 *
12 * @var string
13 */
14 protected $endpoint = 'v1';
15
16 /**
17 * Default query parameters
18 *
19 * @var array
20 */
21 protected $default_query = [
22 '_embed' => true,
23 '_fields' => 'id,slug,title,content,_links.wp:featuredmedia,_embedded.wp:featuredmedia,_links.wp:term,_embedded.wp:term,acf',
24 'acf_format' => 'standard',
25 'per_page' => 100,
26 ];
27
28 /**
29 * Base URL
30 *
31 * @var string
32 */
33 protected $base_url = 'https://integrations-catalog.surecart.com/';
34
35 /**
36 * Get the install source attribute.
37 *
38 * Records that carry a GitHub download URL install from GitHub; everything
39 * else installs through the WordPress.org plugin directory.
40 *
41 * @return string
42 */
43 public function getSourceAttribute() {
44 return ! empty( $this->acf['download_url'] ) ? 'github' : 'wordpress';
45 }
46
47 /**
48 * Get the GitHub download URL attribute.
49 *
50 * Optional ACF field — null when the integration does not install from GitHub.
51 *
52 * @return string|null
53 */
54 public function getDownloadUrlAttribute() {
55 return $this->acf['download_url'] ?? null;
56 }
57
58 /**
59 * Get the GitHub repository URL attribute.
60 *
61 * Optional ACF field used by the frontend error fallback link — null when absent.
62 *
63 * @return string|null
64 */
65 public function getGithubRepoUrlAttribute() {
66 return $this->acf['github_repo_url'] ?? null;
67 }
68
69 /**
70 * Get the activation type attribute.
71 *
72 * @return string
73 */
74 public function getActivationTypeAttribute() {
75 if ( $this->acf['is_pre_installed'] ) {
76 return 'pre-installed';
77 }
78 if ( $this->acf['plugin_slug'] && $this->acf['plugin_file'] ) {
79 return 'plugin';
80 }
81 if ( $this->acf['theme_slug'] && ! $this->acf['activation_link'] ) {
82 return 'theme';
83 }
84 if ( $this->acf['activation_link'] ) {
85 return 'external';
86 }
87 return null;
88 }
89
90 /**
91 * Get the button text attribute.
92 *
93 * @return string
94 */
95 public function getButtonTextAttribute() {
96 if ( 'pre-installed' === $this->status ) {
97 return __( 'Pre-installed', 'surecart' );
98 }
99 if ( 'active' === $this->status ) {
100 return __( 'Enabled', 'surecart' );
101 }
102 if ( in_array( $this->activation_type, [ 'plugin', 'theme' ], true ) ) {
103 if ( 'inactive' === $this->status ) {
104 return __( 'Activate', 'surecart' );
105 }
106 return __( 'Install & Activate', 'surecart' );
107 }
108 return __( 'Activate', 'surecart' );
109 }
110
111 /**
112 * Get the status attribute.
113 *
114 * @return string
115 */
116 public function getStatusAttribute() {
117 if ( $this->acf['is_pre_installed'] ) {
118 return 'pre-installed';
119 }
120 if ( $this->is_enabled ) {
121 return 'active';
122 }
123 if ( 'plugin' === $this->activation_type ) {
124 if ( $this->is_plugin_installed && ! $this->is_plugin_active ) {
125 return 'inactive';
126 }
127 if ( ! $this->is_plugin_installed ) {
128 return 'not-installed';
129 }
130 }
131 return 'inactive';
132 }
133
134 /**
135 * Get the is plugin installed attribute.
136 *
137 * @return bool
138 */
139 public function getIsPluginInstalledAttribute() {
140 if ( empty( $this->acf['plugin_file'] ) ) {
141 return false;
142 }
143
144 $plugin_path = WP_PLUGIN_DIR . '/' . $this->acf['plugin_file'];
145 return file_exists( $plugin_path );
146 }
147
148 /**
149 * Get the is plugin active attribute.
150 *
151 * @return bool
152 */
153 public function getIsPluginActiveAttribute() {
154 if ( 'pie-calendar' === $this->slug ) { // Since Pie Calendar Free & Pro plugin had same plugin file name we need to check if the pro plugin is active explicitly.
155 return $this->isPieCalendarProPluginActive();
156 }
157
158 if ( empty( $this->acf['plugin_file'] ) ) {
159 return false;
160 }
161
162 return is_plugin_active( $this->acf['plugin_file'] );
163 }
164
165 /**
166 * Get the is plugin active attribute.
167 *
168 * @return bool
169 */
170 public function getIsThemeActiveAttribute() {
171 if ( empty( $this->acf['theme_slug'] ) ) {
172 return false;
173 }
174
175 return wp_get_theme()->get_template() === $this->acf['theme_slug'];
176 }
177
178 /**
179 * Get the is enabled attribute.
180 *
181 * @return bool
182 */
183 public function getIsEnabledAttribute() {
184 if ( $this->getIsThemeActiveAttribute() ) {
185 return true;
186 }
187 if ( $this->getIsPluginActiveAttribute() ) {
188 return true;
189 }
190
191 return false;
192 }
193
194 /**
195 * Get the logo URL.
196 *
197 * @return string
198 */
199 public function getLogoUrlAttribute() {
200 // svg first.
201 if ( file_exists( SURECART_PLUGIN_DIR . '/images/integrations/' . $this->slug . '.svg' ) ) {
202 return untrailingslashit( \SureCart::core()->assets()->getUrl() ) . '/images/integrations/' . $this->slug . '.svg';
203 }
204
205 // then png.
206 if ( file_exists( SURECART_PLUGIN_DIR . '/images/integrations/' . $this->slug . '.png' ) ) {
207 return untrailingslashit( \SureCart::core()->assets()->getUrl() ) . '/images/integrations/' . $this->slug . '.png';
208 }
209
210 // then fallback to the featured media.
211 return $this->_embedded['wp:featuredmedia'][0]['media_details']['sizes']['medium']['source_url'] ?? $this->_embedded['wp:featuredmedia'][0]['source_url'] ?? '';
212 }
213
214 /**
215 * Is Pie Calendar Pro plugin active.
216 *
217 * @return bool
218 */
219 public function isPieCalendarProPluginActive() {
220 if ( ! function_exists( 'piecal_pro_classic_metabox' ) ) {
221 return false;
222 }
223
224 return true;
225 }
226 }
227