PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.6.1
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.6.1
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 / PermalinkSettingService.php
surecart / app / src / Routing Last commit date
AdminRouteService.php 2 years ago AdminRouteServiceProvider.php 3 years ago AdminURLService.php 3 years ago PermalinkService.php 3 years ago PermalinkServiceProvider.php 3 years ago PermalinkSettingService.php 3 years ago PermalinksSettingsService.php 3 years ago RouteConditionsServiceProvider.php 3 years ago
PermalinkSettingService.php
183 lines
1 <?php
2 namespace SureCart\Routing;
3
4 /**
5 * A service for handling permalink settings on the permalinks page.
6 */
7 class PermalinkSettingService {
8 /**
9 * The slug of the setting.
10 *
11 * @var string
12 */
13 protected $slug = '';
14
15 /**
16 * The label of the setting.
17 *
18 * @var string
19 */
20 protected $description = '';
21
22 /**
23 * The label of the setting.
24 *
25 * @var string
26 */
27 protected $label = '';
28
29 /**
30 * The permalinks for the setting.
31 *
32 * @var array
33 */
34 protected $options = [];
35
36 /**
37 * Currently saved base.
38 *
39 * @var string
40 */
41 protected $current_base = '';
42
43 /**
44 * The option key.
45 *
46 * @var string
47 */
48 protected $option_key = '';
49
50 /**
51 * Build the permalink setting.
52 */
53 public function __construct( $args = [] ) {
54 $this->slug = $args['slug'] ?? '';
55 $this->label = $args['label'] ?? '';
56 $this->description = $args['description'] ?? '';
57 $this->options = $args['options'] ?? [];
58 $this->current_base = \SureCart::settings()->permalinks()->getBase( "{$this->slug}_page" );
59 }
60
61 /**
62 * Boostrap settings.
63 *
64 * @return void
65 */
66 public function bootstrap() {
67 add_action( 'admin_init', [ $this, 'addSettingsSection' ] );
68 add_action( 'admin_init', [ $this, 'maybeSaveSettings' ] );
69 }
70
71 /**
72 * Add sections to permalinks page.
73 */
74 public function addSettingsSection() {
75 add_settings_section( "surecart-$this->slug-permalink", $this->label, [ $this, 'settings' ], 'permalink' );
76 }
77
78 /**
79 * Display the settings.
80 */
81 public function settings() {
82 echo wp_kses_post( wpautop( $this->description ) );
83
84 $values = array_values(
85 array_map(
86 function( $permalink ) {
87 return $permalink['value'];
88 },
89 $this->options
90 )
91 );
92 ?>
93
94 <table class="form-table sc-<?php echo esc_attr( $this->slug ); ?>-permalink-structure">
95 <tbody>
96 <?php foreach ( $this->options as $permalink ) : ?>
97 <tr>
98 <th><label><input name="sc_<?php echo esc_attr( $this->slug ); ?>_permalink" type="radio" value="<?php echo esc_attr( $permalink['value'] ); ?>" class="sc-tog-<?php echo esc_attr( $this->slug ); ?>" <?php checked( $permalink['value'], $this->current_base ); ?> /> <?php echo esc_html( $permalink['label'] ); ?></label></th>
99 <td><code><?php echo esc_html( home_url() ); ?>/<?php echo esc_attr( $permalink['value'] ); ?>/sample-product/</code></td>
100 </tr>
101 <?php endforeach; ?>
102 <tr>
103 <th>
104 <label>
105 <input
106 name="sc_<?php echo esc_attr( $this->slug ); ?>_permalink"
107 id="surecart_<?php echo esc_attr( $this->slug ); ?>_custom_selection"
108 type="radio"
109 value="custom"
110 class="tog"
111 <?php
112 checked(
113 in_array(
114 $this->current_base,
115 array_map(
116 function( $opt ) {
117 return $opt['value'];
118 },
119 $this->options
120 ),
121 true
122 ),
123 false
124 );
125 ?>
126 />
127 <?php esc_html_e( 'Custom base', 'surecart' ); ?>
128 </label>
129 </th>
130 <td>
131 <input name="sc_<?php echo esc_attr( $this->slug ); ?>_permalink_structure" id="surecart_<?php echo esc_attr( $this->slug ); ?>_permalink_structure" type="text" value="<?php echo esc_attr( ! in_array( $this->current_base, [ $values ], true ) ? untrailingslashit( $this->current_base ) : '' ); ?>" class="regular-text code"> <span class="description"><?php esc_html_e( 'Enter a custom base to use. A base must be set or WordPress will use default instead.', 'surecart' ); ?></span>
132 </td>
133 </tr>
134 </tbody>
135 </table>
136
137 <?php wp_nonce_field( 'surecart-permalinks', 'surecart-permalinks-nonce' ); ?>
138
139 <script>
140 jQuery( function() {
141 jQuery('input.sc-tog-<?php echo esc_attr( $this->slug ); ?>').on( 'change', function() {
142 jQuery('#surecart_<?php echo esc_attr( $this->slug ); ?>_permalink_structure').val( jQuery( this ).val() );
143 });
144 jQuery('.sc-<?php echo esc_attr( $this->slug ); ?>-permalink-structure input:checked').trigger( 'change' );
145 jQuery('#surecart_<?php echo esc_attr( $this->slug ); ?>_permalink_structure').on( 'focus', function(){
146 jQuery('#surecart_<?php echo esc_attr( $this->slug ); ?>_custom_selection').trigger( 'click' );
147 } );
148 } );
149 </script>
150 <?php
151 }
152
153 /**
154 * Save the settings.
155 */
156 public function maybeSaveSettings() {
157 if ( ! is_admin() ) {
158 return;
159 }
160
161 $structure_key = 'sc_' . esc_attr( $this->slug ) . '_permalink_structure';
162 $permalink_key = 'sc_' . esc_attr( $this->slug ) . '_permalink';
163
164 // we must have our permalink post data and nonce.
165 if ( ! isset( $_POST[ $structure_key ], $_POST[ $permalink_key ] ) || ! wp_verify_nonce( wp_unslash( $_POST['surecart-permalinks-nonce'] ), 'surecart-permalinks' ) ) { // WPCS: input var ok, sanitization ok.
166 return;
167 }
168
169 // get the buy base.
170 $page = isset( $_POST[ $permalink_key ] ) ? sanitize_text_field( wp_unslash( $_POST[ $permalink_key ] ) ) : '';
171 $page_struct = isset( $_POST[ $structure_key ] ) ? sanitize_text_field( wp_unslash( $_POST[ $structure_key ] ) ) : '';
172
173 if ( 'custom' === $page ) {
174 $page = ! empty( $_POST[ $structure_key ] ) ? preg_replace( '#/+#', '/', '/' . str_replace( '#', '', trim( wp_unslash( $_POST[ $structure_key ] ) ) ) ) : $this->options[0]['value']; // WPCS: input var ok, sanitization ok.
175 } elseif ( empty( $page ) ) {
176 $page = $this->options[0]['value'];
177 }
178
179 \SureCart::settings()->permalinks()->updatePermalinkSettings( $this->slug . '_page', sanitize_title( $page ) );
180 }
181
182 }
183