PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.13.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.13.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 / 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 2 years ago PermalinkSettingService.php 2 years ago PermalinksSettingsService.php 2 years ago RouteConditionsServiceProvider.php 3 years ago
PermalinkSettingService.php
193 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 * Last part of the permalink. This is used to generate the preview.
52 *
53 * @var string
54 */
55 protected $sample_preview_text = '';
56
57 /**
58 * Build the permalink setting.
59 *
60 * @param array $args The arguments.
61 */
62 public function __construct( $args = [] ) {
63 $this->slug = $args['slug'] ?? '';
64 $this->label = $args['label'] ?? '';
65 $this->description = $args['description'] ?? '';
66 $this->options = $args['options'] ?? [];
67 $this->current_base = \SureCart::settings()->permalinks()->getBase( "{$this->slug}_page" );
68 $this->sample_preview_text = $args['sample_preview_text'] ?? 'sample-product';
69 }
70
71 /**
72 * Boostrap settings.
73 *
74 * @return void
75 */
76 public function bootstrap() {
77 add_action( 'admin_init', [ $this, 'addSettingsSection' ] );
78 add_action( 'admin_init', [ $this, 'maybeSaveSettings' ] );
79 }
80
81 /**
82 * Add sections to permalinks page.
83 */
84 public function addSettingsSection() {
85 add_settings_section( "surecart-$this->slug-permalink", $this->label, [ $this, 'settings' ], 'permalink' );
86 }
87
88 /**
89 * Display the settings.
90 */
91 public function settings() {
92 echo wp_kses_post( wpautop( $this->description ) );
93
94 $values = array_values(
95 array_map(
96 function( $permalink ) {
97 return $permalink['value'];
98 },
99 $this->options
100 )
101 );
102 ?>
103
104 <table class="form-table sc-<?php echo esc_attr( $this->slug ); ?>-permalink-structure">
105 <tbody>
106 <?php foreach ( $this->options as $permalink ) : ?>
107 <tr>
108 <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>
109 <td><code><?php echo esc_html( home_url() ); ?>/<?php echo esc_attr( $permalink['value'] ); ?>/<?php echo esc_attr( $this->sample_preview_text ); ?>/</code></td>
110 </tr>
111 <?php endforeach; ?>
112 <tr>
113 <th>
114 <label>
115 <input
116 name="sc_<?php echo esc_attr( $this->slug ); ?>_permalink"
117 id="surecart_<?php echo esc_attr( $this->slug ); ?>_custom_selection"
118 type="radio"
119 value="custom"
120 class="tog"
121 <?php
122 checked(
123 in_array(
124 $this->current_base,
125 array_map(
126 function( $opt ) {
127 return $opt['value'];
128 },
129 $this->options
130 ),
131 true
132 ),
133 false
134 );
135 ?>
136 />
137 <?php esc_html_e( 'Custom base', 'surecart' ); ?>
138 </label>
139 </th>
140 <td>
141 <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>
142 </td>
143 </tr>
144 </tbody>
145 </table>
146
147 <?php wp_nonce_field( 'surecart-permalinks', 'surecart-permalinks-nonce' ); ?>
148
149 <script>
150 jQuery( function() {
151 jQuery('input.sc-tog-<?php echo esc_attr( $this->slug ); ?>').on( 'change', function() {
152 jQuery('#surecart_<?php echo esc_attr( $this->slug ); ?>_permalink_structure').val( jQuery( this ).val() );
153 });
154 jQuery('.sc-<?php echo esc_attr( $this->slug ); ?>-permalink-structure input:checked').trigger( 'change' );
155 jQuery('#surecart_<?php echo esc_attr( $this->slug ); ?>_permalink_structure').on( 'focus', function(){
156 jQuery('#surecart_<?php echo esc_attr( $this->slug ); ?>_custom_selection').trigger( 'click' );
157 } );
158 } );
159 </script>
160 <?php
161 }
162
163 /**
164 * Save the settings.
165 */
166 public function maybeSaveSettings() {
167 if ( ! is_admin() ) {
168 return;
169 }
170
171 $structure_key = 'sc_' . esc_attr( $this->slug ) . '_permalink_structure';
172 $permalink_key = 'sc_' . esc_attr( $this->slug ) . '_permalink';
173
174 // we must have our permalink post data and nonce.
175 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.
176 return;
177 }
178
179 // get the buy base.
180 $page = isset( $_POST[ $permalink_key ] ) ? sanitize_text_field( wp_unslash( $_POST[ $permalink_key ] ) ) : '';
181 $page_struct = isset( $_POST[ $structure_key ] ) ? sanitize_text_field( wp_unslash( $_POST[ $structure_key ] ) ) : '';
182
183 if ( 'custom' === $page ) {
184 $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.
185 } elseif ( empty( $page ) ) {
186 $page = $this->options[0]['value'];
187 }
188
189 \SureCart::settings()->permalinks()->updatePermalinkSettings( $this->slug . '_page', sanitize_title( $page ) );
190 }
191
192 }
193