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 / Routing / PermalinkServiceProvider.php
surecart / app / src / Routing Last commit date
AdminRouteService.php 4 months ago AdminRouteServiceProvider.php 3 years ago AdminURLService.php 2 months ago PermalinkService.php 1 year ago PermalinkServiceProvider.php 1 year ago PermalinkSettingService.php 1 year ago PermalinksSettingsService.php 1 year ago RouteConditionsServiceProvider.php 3 years ago
PermalinkServiceProvider.php
176 lines
1 <?php
2
3 namespace SureCart\Routing;
4
5 use SureCartCore\ServiceProviders\ServiceProviderInterface;
6
7 /**
8 * Provide custom route conditions.
9 * This is an example class so feel free to modify or remove it.
10 */
11 class PermalinkServiceProvider implements ServiceProviderInterface {
12 /**
13 * Register all dependencies in the IoC container.
14 *
15 * @param \Pimple\Container $container Service container.
16 * @return void
17 */
18 public function register( $container ) {
19 $container['surecart.settings.permalinks.product'] = function () {
20 return new PermalinkSettingService(
21 [
22 'slug' => 'product',
23 'label' => 'SureCart Product Permalinks',
24 /* translators: %s: Home URL */
25 'description' => sprintf( 'If you like, you may enter custom structures for your product page URLs here. For example, using <code>products</code> would make your product buy links like <code>%sproducts/sample-product/</code>.', esc_url( home_url( '/' ) ) ),
26 'options' => [
27 [
28 'value' => 'products',
29 'label' => 'Default',
30 ],
31 [
32 'value' => 'shop',
33 'label' => 'Shop',
34 ],
35 [
36 'value' => 'shop/%sc_collection%',
37 'display' => 'shop/product-collection/',
38 'label' => 'Shop base with collection',
39 ],
40 ],
41 ]
42 );
43 };
44
45 $container['surecart.settings.permalinks.buy'] = function () {
46 return new PermalinkSettingService(
47 [
48 'slug' => 'buy',
49 'label' => 'SureCart Instant Checkout Permalinks',
50 /* translators: %s: Home URL */
51 'description' => sprintf( 'If you like, you may enter custom structures for your instant checkout URLs here. For example, using <code>buy</code> would make your product buy links like <code>%sbuy/sample-product/</code>.', esc_url( home_url( '/' ) ) ),
52 'options' => [
53 [
54 'value' => 'buy',
55 'label' => 'Default',
56 ],
57 [
58 'value' => 'purchase',
59 'label' => 'Purchase',
60 ],
61 ],
62 ]
63 );
64 };
65
66 $container['surecart.settings.permalinks.collection'] = function () {
67 return new PermalinkSettingService(
68 [
69 'slug' => 'collection',
70 'label' => 'SureCart Product Collection Permalinks',
71 /* translators: %s: Home URL */
72 'description' => sprintf( 'If you like, you may enter custom structures for your product page URLs here. For example, using <code>collections</code> would make your product collection links like <code>%scollections/sample-collection/</code>.', esc_url( home_url( '/' ) ) ),
73 'options' => [
74 [
75 'value' => 'collections',
76 'label' => 'Default',
77 ],
78 [
79 'value' => 'product-collections',
80 'label' => 'Product Collections',
81 ],
82 ],
83 'sample_preview_text' => 'sample-collection',
84 ]
85 );
86 };
87
88 $container['surecart.settings.permalinks.upsell'] = function () {
89 return new PermalinkSettingService(
90 [
91 'slug' => 'upsell',
92 'label' => 'SureCart Upsell Permalinks',
93 /* translators: %s: Home URL */
94 'description' => sprintf( 'If you like, you may enter custom structures for your upsell URLs here. For example, using <code>offers</code> would make your upsell\'s links like <code>%soffers/upsell-id/</code>.', esc_url( home_url( '/' ) ) ),
95 'options' => [
96 [
97 'value' => 'offer',
98 'label' => 'Default',
99 ],
100 [
101 'value' => 'special-offer',
102 'label' => 'Special Offer',
103 ],
104 ],
105 ]
106 );
107 };
108 }
109
110 /**
111 * Bootstrap any services if needed.
112 *
113 * @param \Pimple\Container $container Service container.
114 * @return void
115 */
116 public function bootstrap( $container ) {
117 $container['surecart.settings.permalinks.product']->bootstrap();
118
119 $product_base = \SureCart::settings()->permalinks()->getBase( 'product_page' );
120 // Handle product page with collection support.
121 $permalink = new PermalinkService();
122 $permalink->url( untrailingslashit( $product_base ) . '/([a-z0-9-]+)[/]?$' )
123 ->query( 'index.php?sc_product=$matches[1]' );
124
125 // We need to make sure WordPress does not try to go to a collection page.
126 if ( preg_match( '`/(.+)(/%sc_collection%)`', $product_base, $matches ) ) {
127 $permalink->removeRules(
128 '`^' . preg_quote( $matches[1], '`' ) . '/([^/]+)$`',
129 '/^(index\.php\?sc_collection)(?!(.*product))/'
130 );
131 }
132
133 // Get clean product base without collection.
134 $clean_product_base = preg_replace( '/%sc_collection%\/?/', '', $product_base );
135
136 // Rule for default product base.
137 $permalink->addRule(
138 '^' . preg_quote( trim( $clean_product_base, '/' ), '^' ) . '/([^/]+)/?$',
139 'index.php?sc_product=$matches[1]',
140 'top'
141 );
142
143 // Add default product route.
144 $permalink->create();
145
146 $container['surecart.settings.permalinks.buy']->bootstrap();
147 ( new PermalinkService() )
148 ->params( [ 'sc_checkout_product_id' ] )
149 ->url( untrailingslashit( \SureCart::settings()->permalinks()->getBase( 'buy_page' ) ) . '/([a-z0-9-]+)[/]?$' )
150 ->query( 'index.php?sc_checkout_product_id=$matches[1]' )
151 ->create();
152
153 // Upsell.
154 $container['surecart.settings.permalinks.upsell']->bootstrap();
155 ( new PermalinkService() )
156 ->params( [ 'sc_upsell_id' ] )
157 ->url( untrailingslashit( \SureCart::settings()->permalinks()->getBase( 'upsell_page' ) ) . '/([a-z0-9-]+)[/]?$' )
158 ->query( 'index.php?sc_upsell_id=$matches[1]' )
159 ->create();
160
161 // Checkout change mode redirection.
162 ( new PermalinkService() )
163 ->params( [ 'sc_checkout_change_mode', 'sc_checkout_post' ] )
164 ->url( 'surecart/change-checkout-mode' )
165 ->query( 'index.php?sc_checkout_change_mode=1&sc_checkout_post=1' )
166 ->create();
167
168 // Redirect.
169 ( new PermalinkService() )
170 ->params( [ 'sc_redirect' ] )
171 ->url( 'surecart/redirect' )
172 ->query( 'index.php?sc_redirect=1' )
173 ->create();
174 }
175 }
176