PluginProbe ʕ •ᴥ•ʔ
Permalink Manager Lite / 2.2.7.2
Permalink Manager Lite v2.2.7.2
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 / permalink-manager.php
permalink-manager Last commit date
includes 6 years ago languages 6 years ago out 6 years ago LICENSE.txt 6 years ago README.txt 6 years ago permalink-manager.php 6 years ago
permalink-manager.php
338 lines
1 <?php
2
3 /**
4 * Plugin Name: Permalink Manager Lite
5 * Plugin URI: https://permalinkmanager.pro?utm_source=plugin
6 * Description: Advanced plugin that allows to set-up custom permalinks (bulk editors included), slugs and permastructures (WooCommerce compatible).
7 * Version: 2.2.7.2
8 * Author: Maciej Bis
9 * Author URI: http://maciejbis.net/
10 * License: GPL-2.0+
11 * License URI: http://www.gnu.org/licenses/gpl-2.0.txt
12 * Text Domain: permalink-manager
13 * Domain Path: /languages
14 * WC requires at least: 3.0.0
15 * WC tested up to: 3.7.0
16 */
17
18 // If this file is called directly or plugin is already defined, abort.
19 if (!defined('WPINC')) {
20 die;
21 }
22
23 // Define the directories used to load plugin files.
24 define( 'PERMALINK_MANAGER_PLUGIN_NAME', 'Permalink Manager' );
25 define( 'PERMALINK_MANAGER_PLUGIN_SLUG', 'permalink-manager' );
26 define( 'PERMALINK_MANAGER_VERSION', '2.2.7.2' );
27 define( 'PERMALINK_MANAGER_FILE', __FILE__ );
28 define( 'PERMALINK_MANAGER_DIR', untrailingslashit(dirname(__FILE__)) );
29 define( 'PERMALINK_MANAGER_BASENAME', plugin_basename(__FILE__));
30 define( 'PERMALINK_MANAGER_URL', untrailingslashit( plugins_url('', __FILE__) ) );
31 define( 'PERMALINK_MANAGER_WEBSITE', 'http://permalinkmanager.pro?utm_source=plugin' );
32 define( 'PERMALINK_MANAGER_DONATE', 'https://www.paypal.me/Bismit' );
33
34 class Permalink_Manager_Class {
35
36 public $permalink_manager_options_page, $permalink_manager_options;
37 public $sections, $functions, $permalink_manager_before_sections_html, $permalink_manager_after_sections_html;
38
39 /**
40 * Get options from DB, load subclasses & hooks
41 */
42 public function __construct() {
43 $this->include_subclassess();
44 $this->register_init_hooks();
45 }
46
47 /**
48 * Include back-end classess and set their instances
49 */
50 function include_subclassess() {
51 // WP_List_Table needed for post types & taxnomies editors
52 if( ! class_exists( 'WP_List_Table' ) ) {
53 require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
54 }
55
56 $classes = array(
57 'core' => array(
58 'helper-functions' => 'Permalink_Manager_Helper_Functions',
59 'uri-functions-post' => 'Permalink_Manager_URI_Functions_Post',
60 'uri-functions-tax' => 'Permalink_Manager_URI_Functions_Tax',
61 'admin-functions' => 'Permalink_Manager_Admin_Functions',
62 'actions' => 'Permalink_Manager_Actions',
63 'third-parties' => 'Permalink_Manager_Third_Parties',
64 'core-functions' => 'Permalink_Manager_Core_Functions',
65 'gutenberg' => 'Permalink_Manager_Gutenberg',
66 'debug' => 'Permalink_Manager_Debug_Functions',
67 'pro-functions' => 'Permalink_Manager_Pro_Functions'
68 ),
69 'views' => array(
70 'uri-editor' => 'Permalink_Manager_Uri_Editor',
71 'tools' => 'Permalink_Manager_Tools',
72 'permastructs' => 'Permalink_Manager_Permastructs',
73 'settings' => 'Permalink_Manager_Settings',
74 'debug' => 'Permalink_Manager_Debug',
75 'pro-addons' => 'Permalink_Manager_Pro_Addons',
76 'help' => 'Permalink_Manager_Help',
77 'uri-editor-tax' => false,
78 'uri-editor-post' => false
79 )
80 );
81
82 // Load classes and set-up their instances
83 foreach($classes as $class_type => $classes_array) {
84 foreach($classes_array as $class => $class_name) {
85 $filename = PERMALINK_MANAGER_DIR . "/includes/{$class_type}/permalink-manager-{$class}.php";
86
87 if(file_exists($filename)) {
88 require_once $filename;
89 if($class_name) { $this->functions[$class] = new $class_name(); }
90 }
91 }
92 }
93 }
94
95 /**
96 * Register general hooks
97 */
98 public function register_init_hooks() {
99 // Localize plugin
100 add_action( 'init', array($this, 'localize_me'), 1 );
101
102 // Support deprecated hooks
103 add_action( 'plugins_loaded', array($this, 'deprecated_hooks'), 9 );
104
105 // Load globals & options
106 add_action( 'plugins_loaded', array($this, 'get_options_and_globals'), 9 );
107
108 // Legacy support
109 add_action( 'init', array($this, 'legacy_support'), 2 );
110
111 // Default settings & alerts
112 add_filter( 'permalink_manager_options', array($this, 'default_settings'), 1 );
113 add_filter( 'permalink_manager_alerts', array($this, 'default_alerts'), 1 );
114 }
115
116 /**
117 * Localize this plugin
118 */
119 function localize_me() {
120 load_plugin_textdomain( 'permalink-manager', false, basename(dirname(__FILE__)) . "/languages" );
121 }
122
123 /**
124 * Get options values & set global
125 */
126 public function get_options_and_globals() {
127 // 1. Globals with data stored in DB
128 global $permalink_manager_options, $permalink_manager_uris, $permalink_manager_permastructs, $permalink_manager_redirects, $permalink_manager_external_redirects;
129
130 $this->permalink_manager_options = $permalink_manager_options = apply_filters('permalink_manager_options', get_option('permalink-manager', array()));
131 $this->permalink_manager_uris = $permalink_manager_uris = apply_filters('permalink_manager_uris', get_option('permalink-manager-uris', array()));
132 $this->permalink_manager_permastructs = $permalink_manager_permastructs = apply_filters('permalink_manager_permastructs', get_option('permalink-manager-permastructs', array()));
133 $this->permalink_manager_redirects = $permalink_manager_redirects = apply_filters('permalink_manager_redirects', get_option('permalink-manager-redirects', array()));
134 $this->permalink_manager_external_redirects = $permalink_manager_external_redirects = apply_filters('permalink_manager_external_redirects', get_option('permalink-manager-external-redirects', array()));
135
136 // 2. Globals used to display additional content (eg. alerts)
137 global $permalink_manager_alerts, $permalink_manager_before_sections_html, $permalink_manager_after_sections_html;
138
139 $this->permalink_manager_alerts = $permalink_manager_alerts = apply_filters('permalink_manager_alerts', get_option('permalink-manager-alerts', array()));
140 $this->permalink_manager_before_sections_html = $permalink_manager_before_sections_html = apply_filters('permalink_manager_before_sections', '');
141 $this->permalink_manager_after_sections_html = $permalink_manager_after_sections_html = apply_filters('permalink_manager_after_sections', '');
142 }
143
144 /**
145 * Set the initial/default settings (including "Screen Options")
146 */
147 public function default_settings($settings) {
148 $all_taxonomies = Permalink_Manager_Helper_Functions::get_taxonomies_array();
149 $all_post_types = Permalink_Manager_Helper_Functions::get_post_types_array();
150
151 $default_settings = apply_filters('permalink_manager_default_options', array(
152 'screen-options' => array(
153 'per_page' => 20,
154 'post_statuses' => array('publish'),
155 'group' => false,
156 ),
157 'general' => array(
158 'auto_update_uris' => 0,
159 'show_native_slug_field' => 0,
160 'pagination_redirect' => 0,
161 'sslwww_redirect' => 0,
162 'canonical_redirect' => 1,
163 'setup_redirects' => 1,
164 'redirect' => '301',
165 'trailing_slashes' => 0,
166 'auto_remove_duplicates' => 1,
167 'fix_language_mismatch' => 1,
168 'pmxi_import_support' => 0,
169 'yoast_breadcrumbs' => 0,
170 'force_custom_slugs' => 0,
171 'disable_slug_sanitization' => 0,
172 'partial_disable' => array(),
173 'deep_detect' => 1,
174 'edit_uris_cap' => 'publish_posts',
175 ),
176 'licence' => array()
177 ));
178
179 // Apply the default settings (if empty values) in all settings sections
180 foreach($default_settings as $group_name => $fields) {
181 foreach($fields as $field_name => $field) {
182 if(!isset($settings[$group_name][$field_name])) {
183 $settings[$group_name][$field_name] = $field;
184 }
185 }
186 }
187
188 return $settings;
189 }
190
191 /**
192 * Set the initial/default admin notices
193 */
194 public function default_alerts($alerts) {
195 $default_alerts = apply_filters('permalink_manager_default_alerts', array(
196 'june19promo' => array(
197 'txt' => sprintf(
198 __("Get access to extra features: full taxonomy and WooCommerce support, possibility to use custom fields inside the permalinks and more!<br /><strong>Buy Permalink Manager Pro <a href=\"%s\" target=\"_blank\">here</a> and save %s using \"%s\" coupon code!</strong> Valid until %s!", "permalink-manager"),
199 PERMALINK_MANAGER_WEBSITE . "&utm_campaign=discount_code",
200 '20&#37;',
201 'JUNE19',
202 '30.06'
203 ),
204 'type' => 'notice-info',
205 'show' => 'pro_hide',
206 'plugin_only' => true,
207 'until' => '2019-06-30'
208 )
209 ));
210
211 // Apply the default settings (if empty values) in all settings sections
212 return (array) $alerts + (array) $default_alerts;
213 }
214
215 /**
216 * Temporary hook
217 */
218 function legacy_support() {
219 global $permalink_manager_permastructs, $permalink_manager_options;
220
221 if(isset($permalink_manager_options['base-editor'])) {
222 $new_options['post_types'] = $permalink_manager_options['base-editor'];
223 update_option('permalink-manager-permastructs', $new_options);
224 }
225 else if(empty($permalink_manager_permastructs['post_types']) && empty($permalink_manager_permastructs['taxonomies']) && count($permalink_manager_permastructs) > 0) {
226 $new_options['post_types'] = $permalink_manager_permastructs;
227 update_option('permalink-manager-permastructs', $new_options);
228 }
229
230 // Adjust options structure
231 if(!empty($permalink_manager_options['miscellaneous'])) {
232 // Combine general & general
233 $permalink_manager_unfiltered_options['general'] = array_merge($permalink_manager_unfiltered_options['general'], $permalink_manager_unfiltered_options['miscellaneous']);
234
235 // Move licence key to different section
236 $permalink_manager_unfiltered_options['licence']['licence_key'] = (!empty($permalink_manager_unfiltered_options['miscellaneous']['license_key'])) ? $permalink_manager_unfiltered_options['miscellaneous']['license_key'] : "";
237
238 // Remove redundant keys
239 unset($permalink_manager_unfiltered_options['general']['license_key']);
240 unset($permalink_manager_unfiltered_options['miscellaneous']);
241 unset($permalink_manager_unfiltered_options['permalink_manager_options']);
242 unset($permalink_manager_unfiltered_options['_wp_http_referer']);
243 }
244
245 // Adjust "Force Custom Slugs" + "Sanitize" settings
246 if(!empty($permalink_manager_options['general']['force_custom_slugs']) && $permalink_manager_options['general']['force_custom_slugs'] == 2) {
247 $permalink_manager_unfiltered_options = $permalink_manager_options;
248
249 $permalink_manager_unfiltered_options['general']['force_custom_slugs'] = 1;
250 $permalink_manager_unfiltered_options['general']['disable_slug_sanitization'] = 1;
251 }
252
253 // Save the settings in database
254 if(!empty($permalink_manager_unfiltered_options)) {
255 update_option('permalink-manager', $permalink_manager_unfiltered_options);
256 }
257 }
258
259 /**
260 * Support deprecated hooks
261 */
262 function deprecated_hooks_list($filters = true) {
263 $deprecated_filters = array(
264 'permalink_manager_default_options' => 'permalink-manager-default-options',
265 'permalink_manager_options' => 'permalink-manager-options',
266 'permalink_manager_uris' => 'permalink-manager-uris',
267 'permalink_manager_alerts' => 'permalink-manager-alerts',
268 'permalink_manager_redirects' => 'permalink-manager-redirects',
269 'permalink_manager_external_redirects' => 'permalink-manager-external-redirects',
270 'permalink_manager_permastructs' => 'permalink-manager-permastructs',
271
272 'permalink_manager_alerts' => 'permalink-manager-alerts',
273 'permalink_manager_before_sections' => 'permalink-manager-before-sections',
274 'permalink_manager_sections' => 'permalink-manager-sections',
275 'permalink_manager_after_sections' => 'permalink-manager-after-sections',
276
277 'permalink_manager_field_args' => 'permalink-manager-field-args',
278 'permalink_manager_field_output' => 'permalink-manager-field-output',
279
280 'permalink_manager_deep_uri_detect' => 'permalink-manager-deep-uri-detect',
281 'permalink_manager_detect_uri' => 'permalink-manager-detect-uri',
282 'permalink_manager_detected_element_id' => 'permalink-manager-detected-initial-id',
283 'permalink_manager_detected_term_id' => 'permalink-manager-detected-term-id',
284 'permalink_manager_detected_post_id' => 'permalink-manager-detected-post-id',
285
286 'permalink_manager_primary_term' => 'permalink-manager-primary-term',
287 'permalink_manager_disabled_post_types' => 'permalink-manager-disabled-post-types',
288 'permalink_manager_disabled_taxonomies' => 'permalink-manager-disabled-taxonomies',
289 'permalink_manager_endpoints' => 'permalink-manager-endpoints',
290 'permalink_manager_filter_permalink_base' => 'permalink_manager-filter-permalink-base',
291 'permalink_manager_force_lowercase_uris' => 'permalink-manager-force-lowercase-uris',
292
293 'permalink_manager_uri_editor_extra_info' => 'permalink-manager-uri-editor-extra-info',
294 'permalink_manager_debug_fields' => 'permalink-manager-debug-fields',
295 'permalink_manager_permastructs_fields' => 'permalink-manager-permastructs-fields',
296 'permalink_manager_settings_fields' => 'permalink-manager-settings-fields',
297 'permalink_manager_tools_fields' => 'permalink-manager-tools-fields',
298
299 'permalink_manager_uri_editor_columns' => 'permalink-manager-uri-editor-columns',
300 'permalink_manager_uri_editor_column_content' => 'permalink-manager-uri-editor-column-content',
301 );
302
303 return ($filters) ? $deprecated_filters : array();
304 }
305
306 function deprecated_hooks() {
307 $deprecated_filters = (array) $this->deprecated_hooks_list(true);
308 foreach($deprecated_filters as $new => $old) {
309 add_filter($new, array($this, 'deprecated_hooks_mapping'), -1000, 8);
310 }
311 }
312
313 function deprecated_hooks_mapping($data) {
314 $deprecated_filters = $this->deprecated_hooks_list(true);
315 $filter = current_filter();
316
317 if(isset($deprecated_filters[$filter])) {
318 if(has_filter($deprecated_filters[$filter])) {
319 $args = func_get_args();
320 $data = apply_filters_ref_array($deprecated_filters[$filter], $args);
321 }
322 }
323
324 return $data;
325 }
326
327 }
328
329 /**
330 * Begins execution of the plugin.
331 */
332 function run_permalink_manager() {
333 global $permalink_manager;
334
335 $permalink_manager = new Permalink_Manager_Class();
336 }
337 run_permalink_manager();
338