PluginProbe ʕ •ᴥ•ʔ
Permalink Manager Lite / 2.5.1
Permalink Manager Lite v2.5.1
2.5.4 2.5.3.4 2.2.18 2.2.19.2 2.2.19.3 2.2.19.3.1 2.2.2 2.2.20 2.2.20.1 2.2.20.3 2.2.4 2.2.5 2.2.6 2.2.7.2 2.2.7.3 2.2.7.5 2.2.7.6 2.2.8.4 2.2.8.5 2.2.8.6 2.2.8.7 2.2.8.9 2.2.9.1 2.2.9.2 2.2.9.2.1 2.2.9.3 2.2.9.4 2.2.9.6 2.2.9.7 2.2.9.9 2.3.0 2.3.1.1 2.4.0 2.4.1 2.4.1.2 2.4.1.3 2.4.1.4 2.4.1.5 2.4.1.6 2.4.2 2.4.2.1 2.4.3 2.4.3.1 2.4.3.2 2.4.3.3 2.4.3.4 2.4.4 2.4.4.1 2.4.4.2 2.4.4.3 2.5.0 2.5.1 2.5.1.1 2.5.1.2 2.5.1.3 2.5.1.4 2.5.2 2.5.2.1 2.5.2.2 2.5.2.3 2.5.2.4 2.5.3 2.5.3.1 2.5.3.2 2.5.3.3 trunk 0.2 0.3 0.3.1 0.3.2 0.3.3 0.3.4 0.4 0.4.1 0.4.2 0.4.3 0.4.4 0.4.6 0.4.7 0.4.8 0.4.9 0.5.3 0.5.4 1.0.0 1.0.1 1.0.4 1.1.0 1.1.1 1.1.2 1.11.6.3 2.0.0 2.0.3 2.0.4 2.0.4.3 2.0.5.1 2.0.5.2 2.0.5.3 2.0.5.3.1 2.0.5.4 2.0.5.4a 2.0.5.5 2.0.5.6 2.0.5.6.1 2.0.5.7 2.0.5.9a 2.0.6.2.1 2.0.6.2a 2.0.6.3 2.1.0 2.1.1 2.1.2.4 2.2.0 2.2.1.1 2.2.1.2 2.2.11 2.2.12 2.2.13.1 2.2.14 2.2.15.1 2.2.16 2.2.17
permalink-manager / includes / core / permalink-manager-admin-functions.php
permalink-manager / includes / core Last commit date
permalink-manager-actions.php 1 year ago permalink-manager-admin-functions.php 1 year ago permalink-manager-core-functions.php 1 year ago permalink-manager-debug.php 1 year ago permalink-manager-gutenberg.php 1 year ago permalink-manager-helper-functions.php 1 year ago permalink-manager-permastructures-functions.php 1 year ago permalink-manager-uri-functions-post.php 1 year ago permalink-manager-uri-functions.php 1 year ago
permalink-manager-admin-functions.php
321 lines
1 <?php
2
3 /**
4 * Additional functions related to WordPress Admin Dashboard UI
5 */
6 class Permalink_Manager_Admin_Functions {
7
8 public $menu_name, $sections, $active_section, $active_subsection;
9
10 public function __construct() {
11 add_action( 'admin_menu', array( $this, 'add_menu_page' ) );
12 add_action( 'admin_init', array( $this, 'init' ) );
13 add_action( 'admin_bar_menu', array( $this, 'fix_customize_url' ), 41 );
14
15 add_action( 'admin_notices', array( $this, 'display_plugin_notices' ) );
16 add_action( 'admin_notices', array( $this, 'display_global_notices' ) );
17 }
18
19 /**
20 * Hooks that should be triggered with "admin_init"
21 */
22 public function init() {
23 // Additional links in "Plugins" page
24 add_filter( "plugin_action_links_" . PERMALINK_MANAGER_BASENAME, array( $this, "plugins_page_links" ) );
25 add_filter( "plugin_row_meta", array( $this, "plugins_page_meta" ), 10, 2 );
26
27 // Detect current section
28 $this->sections = apply_filters( 'permalink_manager_sections', array() );
29 $this->get_current_section();
30 }
31
32 /**
33 * Use the native URL for "Customize" button in the admin bar
34 *
35 * @param WP_Admin_Bar $wp_admin_bar
36 */
37 public function fix_customize_url( $wp_admin_bar ) {
38 global $permalink_manager_ignore_permalink_filters;
39
40 $object = get_queried_object();
41 $customize = $wp_admin_bar->get_node( 'customize' );
42
43 if ( empty( $customize->href ) ) {
44 return;
45 }
46
47 $permalink_manager_ignore_permalink_filters = true;
48 if ( ! empty( $object->ID ) && is_a( $object, 'WP_Post' ) ) {
49 $new_url = get_permalink( $object->ID );
50 } else if ( ! empty( $object->taxonomy ) && is_a( $object, 'WP_Term' ) ) {
51 $new_url = get_term_link( $object, $object->taxonomy );
52 }
53 $permalink_manager_ignore_permalink_filters = false;
54
55 if ( ! empty( $new_url ) ) {
56 // The original permalink should be already encoded via "utf8_uri_encode()" in "sanitize_title_with_dashes()" function, so there is no need to encode them once again
57 $new_url = filter_var( $new_url, FILTER_SANITIZE_URL );
58 $customize_url = preg_replace( '/url=([^&]+)/', "url={$new_url}", $customize->href );
59
60 $wp_admin_bar->add_node( array(
61 'id' => 'customize',
62 'href' => $customize_url,
63 ) );
64 }
65 }
66
67 /**
68 * Get current section of Permalink Manager admin panel
69 */
70 public function get_current_section() {
71 global $active_section, $active_subsection, $current_admin_tax;
72
73 // 1. Get current section
74 if ( isset( $_GET['page'] ) && $_GET['page'] == PERMALINK_MANAGER_PLUGIN_SLUG ) {
75 if ( isset( $_POST['section'] ) ) {
76 $this->active_section = sanitize_title_with_dashes( $_POST['section'] );
77 } else if ( isset( $_GET['section'] ) ) {
78 $this->active_section = sanitize_title_with_dashes( $_GET['section'] );
79 } else {
80 $sections_names = array_keys( $this->sections );
81 $this->active_section = $sections_names[0];
82 }
83 }
84
85 // 2. Get current subsection
86 if ( $this->active_section && isset( $this->sections[ $this->active_section ]['subsections'] ) ) {
87 if ( isset( $_POST['subsection'] ) ) {
88 $this->active_subsection = sanitize_title_with_dashes( $_POST['subsection'] );
89 } else if ( isset( $_GET['subsection'] ) ) {
90 $this->active_subsection = sanitize_title_with_dashes( $_GET['subsection'] );
91 } else {
92 $subsections_names = array_keys( $this->sections[ $this->active_section ]['subsections'] );
93 $this->active_subsection = $subsections_names[0];
94 }
95 }
96
97 // 3. Check if current admin page is related to taxonomies
98 if ( ! empty( $this->active_subsection ) && substr( $this->active_subsection, 0, 4 ) == 'tax_' ) {
99 $current_admin_tax = substr( $this->active_subsection, 4, strlen( $this->active_subsection ) );
100 } else {
101 $current_admin_tax = false;
102 }
103
104 // Set globals
105 $active_section = $this->active_section;
106 $active_subsection = $this->active_subsection;
107 }
108
109 /**
110 * Add "Tools -> Permalink Manager" to the admin sidebar menu
111 */
112 public function add_menu_page() {
113 $this->menu_name = add_management_page( __( 'Permalink Manager', 'permalink-manager' ), __( 'Permalink Manager', 'permalink-manager' ), 'manage_options', PERMALINK_MANAGER_PLUGIN_SLUG, array( $this, 'display_section' ) );
114
115 add_action( 'admin_init', array( $this, 'enqueue_cssjs' ) );
116 }
117
118 /**
119 * Display the plugin sections
120 */
121 public function display_section() {
122 // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
123 echo Permalink_Manager_UI_Elements::get_plugin_sections_html( $this->sections, $this->active_section, $this->active_subsection );
124 }
125
126 /**
127 * Register the CSS & JS files for the plugin's dashboard
128 */
129 public function enqueue_cssjs() {
130 wp_enqueue_style( 'permalink-manager-plugins', PERMALINK_MANAGER_URL . '/out/permalink-manager-plugins.css', array(), PERMALINK_MANAGER_VERSION );
131 wp_enqueue_style( 'permalink-manager', PERMALINK_MANAGER_URL . '/out/permalink-manager-admin.css', array( 'permalink-manager-plugins' ), PERMALINK_MANAGER_VERSION );
132
133 wp_enqueue_script( 'permalink-manager-plugins', PERMALINK_MANAGER_URL . '/out/permalink-manager-plugins.js', array( 'jquery', ), PERMALINK_MANAGER_VERSION, array( 'in_footer' => false ) );
134 wp_enqueue_script( 'permalink-manager', PERMALINK_MANAGER_URL . '/out/permalink-manager-admin.js', array( 'jquery', 'permalink-manager-plugins' ), PERMALINK_MANAGER_VERSION, array( 'in_footer' => false ) );
135
136 if ( isset( $_GET['section'] ) && $_GET['section'] === 'permastructs' ) {
137 wp_enqueue_script( 'thickbox' );
138 wp_enqueue_style( 'thickbox' );
139 }
140
141 wp_localize_script( 'permalink-manager', 'permalink_manager', array(
142 'ajax_url' => admin_url( 'admin-ajax.php' ),
143 'url' => PERMALINK_MANAGER_URL,
144 'confirm' => __( 'Are you sure? This action cannot be undone!', 'permalink-manager' ),
145 'spinners' => admin_url( 'images' )
146 ) );
147
148 }
149
150 /**
151 * Get the URL of the plugin's dashboard
152 *
153 * @param string $append
154 *
155 * @return string
156 */
157 public static function get_admin_url( $append = '' ) {
158 //return menu_page_url(PERMALINK_MANAGER_PLUGIN_SLUG, false) . $append;
159 $admin_page = sprintf( "tools.php?page=%s", PERMALINK_MANAGER_PLUGIN_SLUG . $append );
160
161 return admin_url( $admin_page );
162 }
163
164 /**
165 * Add shortcut links for Permalink Manager on "Plugins" page
166 *
167 * @param array $links
168 *
169 * @return array
170 */
171 public function plugins_page_links( $links ) {
172 $new_links = array(
173 sprintf( '<a href="%s">%s</a>', $this->get_admin_url(), __( 'URI Editor', 'permalink-manager' ) ),
174 sprintf( '<a href="%s">%s</a>', $this->get_admin_url( '&section=settings' ), __( 'Settings', 'permalink-manager' ) ),
175 );
176
177 return array_merge( $links, $new_links );
178 }
179
180 /**
181 * Add shortcut meta links for Permalink Manager on "Plugins" page
182 *
183 * @param array $links
184 * @param string $file
185 *
186 * @return array
187 */
188 public function plugins_page_meta( $links, $file ) {
189 if ( $file == PERMALINK_MANAGER_BASENAME ) {
190 $new_links = array(
191 'doc' => sprintf( '<a href="%s?utm_source=plugin_admin_page" target="_blank">%s</a>', 'https://permalinkmanager.pro/docs/', __( 'Documentation', 'permalink-manager' ) )
192 );
193
194 if ( ! defined( 'PERMALINK_MANAGER_PRO' ) ) {
195 $new_links['upgrade'] = sprintf( '<a href="%s?utm_source=plugin_admin_page" target="_blank"><strong>%s</strong></a>', PERMALINK_MANAGER_WEBSITE, __( 'Buy Permalink Manager Pro', 'permalink-manager' ) );
196 }
197
198 $links = array_merge( $links, $new_links );
199 }
200
201 return $links;
202 }
203
204 /**
205 * Check if URI Editor should be displayed for current user
206 *
207 * @return bool
208 */
209 public static function current_user_can_edit_uris() {
210 global $permalink_manager_options;
211
212 $edit_uris_cap = ( ! empty( $permalink_manager_options['general']['edit_uris_cap'] ) ) ? $permalink_manager_options['general']['edit_uris_cap'] : 'publish_posts';
213
214 return current_user_can( $edit_uris_cap );
215 }
216
217 /**
218 * Display global notices (throughout wp-admin dashboard)
219 */
220 function display_global_notices() {
221 global $permalink_manager_alerts, $active_section;
222
223 $html = "";
224 if ( ! empty( $permalink_manager_alerts ) && is_array( $permalink_manager_alerts ) ) {
225 foreach ( $permalink_manager_alerts as $alert_id => $alert ) {
226 $dismissed_transient_name = sprintf( 'permalink-manager-notice_%s', sanitize_title( $alert_id ) );
227 $dismissed = get_transient( $dismissed_transient_name );
228
229 // Check if alert was dismissed
230 if ( empty( $dismissed ) ) {
231 // Display the notice only on the plugin pages
232 if ( empty( $active_section ) && ! empty( $alert['plugin_only'] ) ) {
233 continue;
234 }
235
236 // Check if the notice did not expire
237 if ( isset( $alert['until'] ) && ( time() > strtotime( $alert['until'] ) ) ) {
238 continue;
239 }
240
241 $html .= Permalink_Manager_UI_Elements::get_alert_message( $alert['txt'], $alert['type'], true, $alert_id );
242 }
243 }
244 }
245
246 echo wp_kses_post( $html );
247 }
248
249 /**
250 * Display notices generated by Permalink Manager tools
251 */
252 function display_plugin_notices() {
253 global $permalink_manager_before_sections_html;
254
255 echo wp_kses_post( $permalink_manager_before_sections_html );
256 }
257
258 /**
259 * Get the list of all duplicated redirects and custom permalinks
260 *
261 * @param bool $include_custom_uris
262 *
263 * @return array
264 */
265 public static function get_all_duplicates( $include_custom_uris = true ) {
266 global $permalink_manager_redirects;
267
268 // Make sure that both variables are arrays
269 $all_uris = ( $include_custom_uris ) ? Permalink_Manager_URI_Functions::get_all_uris() : array();
270 $permalink_manager_redirects = ( is_array( $permalink_manager_redirects ) ) ? $permalink_manager_redirects : array();
271
272 // Convert redirects list, so it can be merged with custom permalinks array
273 foreach ( $permalink_manager_redirects as $element_id => $redirects ) {
274 if ( is_array( $redirects ) ) {
275 foreach ( $redirects as $index => $uri ) {
276 $all_uris["redirect-{$index}_{$element_id}"] = $uri;
277 }
278 }
279 }
280
281 // Count duplicates
282 $duplicates_groups = array();
283 $duplicates_list = array_count_values( $all_uris );
284 $duplicates_list = array_filter( $duplicates_list, function ( $x ) {
285 return $x >= 2;
286 } );
287
288 // Assign keys to duplicates (group them)
289 if ( count( $duplicates_list ) > 0 ) {
290 foreach ( $duplicates_list as $duplicated_uri => $count ) {
291 $duplicated_ids = array_keys( $all_uris, $duplicated_uri );
292
293 // Ignore duplicates in different langauges
294 if ( Permalink_Manager_URI_Functions::is_uri_duplicated( $duplicated_uri, $duplicated_ids[0], $duplicated_ids ) ) {
295 $duplicates_groups[ $duplicated_uri ] = $duplicated_ids;
296 }
297 }
298 }
299
300 return $duplicates_groups;
301 }
302
303 /**
304 * Check if Permalink Manager Pro is active
305 *
306 * @return bool
307 */
308 public static function is_pro_active() {
309 if ( defined( 'PERMALINK_MANAGER_PRO' ) && class_exists( 'Permalink_Manager_Pro_Functions' ) ) {
310 // Check if license is active
311 $exp_date = Permalink_Manager_Pro_Functions::get_expiration_date( true );
312
313 $is_pro = ( $exp_date > 2 ) ? false : true;
314 } else {
315 $is_pro = false;
316 }
317
318 return $is_pro;
319 }
320 }
321