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 |