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 / CLAUDE.md
surecart / app Last commit date
helpers 1 day ago routes 1 day ago src 1 day ago CLAUDE.md 4 months ago config.php 1 day ago helpers.php 4 months ago hooks.php 2 months ago
CLAUDE.md
106 lines
1 # SureCart PHP Backend Patterns
2
3 Patterns and conventions for working in the `app/` directory. See root `CLAUDE.md` for architecture overview.
4
5 ## Adding a New Model
6
7 ```php
8 // app/src/Models/MyModel.php
9 namespace SureCart\Models;
10
11 class MyModel extends Model { // or DatabaseModel for WP DB storage
12 protected $endpoint = 'my_models'; // maps to api.surecart.com/my_models
13 protected $object_name = 'my_model';
14 }
15 ```
16
17 Available traits: `HasDates`, `HasCustomer`, `HasPurchases`, `HasBillingAddress`, `HasShippingAddress`, `HasPaymentIntent`, `HasPaymentMethod`, `HasDiscount`, `CanFinalize`, `CanDuplicate`, `HasImageSizes`, `HasSubscriptions`, `HasProcessorType`, `HasShippingChoices`, `HasCommissionStructure`
18
19 ## Adding a New REST Endpoint
20
21 Three-file pattern, then register in `app/config.php`:
22
23 ```php
24 // 1. Model (see above)
25
26 // 2. app/src/Controllers/Rest/MyModelController.php
27 class MyModelController extends RestController {
28 protected $class = MyModel::class;
29 }
30
31 // 3. app/src/Rest/MyModelRestServiceProvider.php
32 class MyModelRestServiceProvider extends RestServiceProvider {
33 protected $endpoint = 'my_models'; // /wp-json/surecart/v1/my_models
34 protected $controller = MyModelController::class;
35 protected $methods = ['index', 'create', 'find', 'edit', 'delete'];
36 }
37
38 // 4. Add MyModelRestServiceProvider::class to 'providers' array in app/config.php
39 ```
40
41 Permission callbacks use `current_user_can('edit_sc_my_models')` pattern.
42
43 ## Error Handling
44
45 ```php
46 // Controllers: propagate WP_Error upward — REST layer auto-converts to response
47 $result = MyModel::create($data);
48 if (is_wp_error($result)) {
49 return $result;
50 }
51
52 // Integrations: wrap in try-catch to prevent one integration killing others
53 try {
54 do_action('surecart/purchase_created', $purchase);
55 } catch (\Exception $e) {
56 error_log($e->getMessage());
57 }
58 ```
59
60 `ErrorsTranslationService` translates API error codes to user messages automatically via lookup files in `Support/Errors/`. Do not duplicate translation logic.
61
62 ## Adding a New Integration
63
64 All integrations extend `IntegrationService` and implement `PurchaseSyncInterface`:
65
66 ```php
67 // Required abstract methods from IntegrationService:
68 getName(), getModel(), getLogo(), getLabel(), getItemLabel(), getItemHelp()
69
70 // Required from PurchaseSyncInterface:
71 onPurchaseCreated($integration, $wp_user)
72 onPurchaseInvoked($integration, $wp_user)
73 onPurchaseRevoked($integration, $wp_user)
74 ```
75
76 - Integration data (product/price/variant -> third-party item mapping) stored in `surecart_integrations` table via `Integration` model (DatabaseModel)
77 - Register service provider in `app/config.php` under `'providers'`
78 - Actions fire from `DraftCheckoutsController::finalize()` and webhook processor — do not hook them manually
79
80 ## Routes and Middleware
81
82 ```php
83 // app/routes/admin.php pattern:
84 \SureCart::route()->get()
85 ->where('admin', 'sc-products')
86 ->middleware('user.can:edit_sc_products')
87 ->middleware('assets.components') // loads Stencil component assets
88 ->handle('ProductsController@index');
89 ```
90
91 Non-obvious middleware alias keys: `assets.components`, `assets.brand_colors`, `assets.admin_colors`, `nonce`, `webhooks`, `edit_model`, `archive_model`
92
93 ## Webhook Event -> WordPress Action Mapping
94
95 | API Event | WordPress Action |
96 |---|---|
97 | `purchase.created` | `surecart/purchase_created` |
98 | `purchase.revoked` | `surecart/purchase_revoked` |
99 | `purchase.invoked` | `surecart/purchase_invoked` |
100 | `purchase.updated` | `surecart/purchase_updated` |
101 | `customer.updated` | `surecart/customer_updated` |
102 | `account.updated` | `surecart/account_updated` |
103 | `subscription.renewed` | `surecart/subscription_renewed` |
104
105 Price/product CRUD events also fire but are rarely hooked externally.
106