Files
roi-theme/wp-content/plugins/perfmatters/inc/functions_script_manager.php
root a22573bf0b Commit inicial - WordPress Análisis de Precios Unitarios
- WordPress core y plugins
- Tema Twenty Twenty-Four configurado
- Plugin allow-unfiltered-html.php simplificado
- .gitignore configurado para excluir wp-config.php y uploads

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 21:04:30 -06:00

1563 lines
59 KiB
PHP
Executable File

<?php
//actions and filters
if(!empty($perfmatters_options['assets']['script_manager'])) {
add_action('shutdown', 'perfmatters_script_manager', 0);
add_action('admin_bar_menu', 'perfmatters_script_manager_admin_bar', 1);
add_filter('post_row_actions', 'perfmatters_script_manager_row_actions', 10, 2);
add_filter('page_row_actions', 'perfmatters_script_manager_row_actions', 10, 2);
add_action('script_loader_src', 'perfmatters_dequeue_scripts', 1000, 2);
add_action('style_loader_src', 'perfmatters_dequeue_scripts', 1000, 2);
add_action('update_option_perfmatters_script_manager_settings', 'perfmatters_script_manager_update_option', 10, 3);
add_action('add_option_perfmatters_script_manager_settings', 'perfmatters_script_manager_settings_add_option', 10, 2);
add_action('wp_enqueue_scripts', 'perfmatters_script_manager_scripts');
add_action('init', 'perfmatters_script_manager_force_admin_bar');
add_action('wp_ajax_pmsm_save', 'perfmatters_script_manager_update');
add_action('admin_notices', 'perfmatters_script_manager_mu_notice');
add_filter('autoptimize_filter_js_exclude', 'perfmatters_script_manager_exclude_autoptimize');
add_filter('sgo_js_minify_exclude', 'perfmatters_script_manager_exclude_sgo');
}
//script manager front end
function perfmatters_script_manager() {
include('script_manager.php');
}
//Script Manager Admin Bar Link
function perfmatters_script_manager_admin_bar(WP_Admin_Bar $wp_admin_bar) {
//check for proper access
if(!current_user_can('manage_options') || !perfmatters_network_access() || perfmatters_is_page_builder()) {
return;
}
if(is_admin()) {
if(function_exists('get_current_screen')) {
$current_screen = get_current_screen();
$permalink = get_permalink();
if($current_screen->base == 'post' && $current_screen->action != 'add' && !empty($permalink)) {
global $post;
//get public post types
$post_types = get_post_types(array('public' => true));
if(!empty($post->post_type) && in_array($post->post_type, $post_types)) {
$href = add_query_arg('perfmatters', '', $permalink);
$menu_text = __('Script Manager', 'perfmatters');
}
}
}
}
else {
global $wp;
$href = add_query_arg(str_replace(array('&perfmatters', 'perfmatters'), '', $_SERVER['QUERY_STRING']), '', home_url($wp->request));
if(!isset($_GET['perfmatters'])) {
$href.= !empty($_SERVER['QUERY_STRING']) ? '&perfmatters' : '?perfmatters';
$menu_text = __('Script Manager', 'perfmatters');
}
else {
$menu_text = __('Close Script Manager', 'perfmatters');
}
}
//build node and add to admin bar
if(!empty($menu_text) && !empty($href)) {
$args = array(
'parent' => 'perfmatters',
'id' => 'perfmatters_script_manager',
'title' => $menu_text,
'href' => $href
);
$wp_admin_bar->add_menu($args);
}
}
//script manage links in row actions
function perfmatters_script_manager_row_actions($actions, $post) {
//check for proper access
if(!current_user_can('manage_options') || !perfmatters_network_access()) {
return $actions;
}
//get post permalink
$permalink = get_permalink($post->ID);
if(!empty($permalink)) {
//get public post types
$post_types = get_post_types(array('public' => true));
if(!empty($post->post_type) && in_array($post->post_type, $post_types)) {
//add perfmatters query arg
$script_manager_link = add_query_arg('perfmatters', '', $permalink);
//merge link array with existing row actions
$actions = array_merge($actions, array(
'script_manager' => sprintf('<a href="%1$s">%2$s</a>', esc_url($script_manager_link), __('Script Manager', 'perfmatters'))
));
}
}
return $actions;
}
//Script Manager Force Admin Bar
function perfmatters_script_manager_force_admin_bar() {
if(!function_exists('wp_get_current_user') || !current_user_can('manage_options') || is_admin() || !isset($_GET['perfmatters']) || !perfmatters_network_access() || is_admin_bar_showing()) {
return;
}
add_filter('show_admin_bar', '__return_true' , 9999);
}
//Script Manager Scripts
function perfmatters_script_manager_scripts() {
if(!current_user_can('manage_options') || is_admin() || !isset($_GET['perfmatters']) || !perfmatters_network_access()) {
return;
}
wp_register_script('perfmatters-script-manager-js', plugins_url('js/script-manager.js', dirname(__FILE__)), array(), PERFMATTERS_VERSION);
wp_enqueue_script('perfmatters-script-manager-js');
//pass some data to our js file
$pmsm = array(
'currentID' => perfmatters_get_current_ID(),
'ajaxURL' => admin_url('admin-ajax.php'),
'messages' => array(
'buttonSave' => __('Save', 'perfmatters'),
'buttonSaving' => __('Saving', 'perfmatters'),
'updateSuccess' => __('Settings saved successfully!', 'perfmatters'),
'updateFailure' => __('Settings failed to update.', 'perfmatters'),
'updateNoOption' => __('No disabled location selected.', 'perfmatters'),
'updateNoChange' => __('No options were changed.', 'perfmatters')
)
);
wp_localize_script('perfmatters-script-manager-js', 'pmsm', $pmsm);
}
//create array of all assets for the script manager
function perfmatters_script_manager_load_master_array() {
if(!function_exists('get_plugins')) {
require_once(ABSPATH . 'wp-admin/includes/plugin.php');
}
global $wp_scripts;
global $wp_styles;
global $perfmatters_script_manager_settings;
$master_array = array('plugins' => array(), 'themes' => array(), 'misc' => array());
//mu mode
if(!empty($perfmatters_script_manager_settings['mu_mode'])) {
//grab global from mu plugin file
global $pmsm_active_plugins;
if(!empty($pmsm_active_plugins)) {
foreach($pmsm_active_plugins as $key => $path) {
$explode = explode('/', $path);
$data = get_plugins("/" . $explode[0]);
$master_array['plugins'][$explode[0]] = array('name' => $data[key($data)]['Name']);
}
}
}
$perfmatters_filters = array(
"js" => array (
"title" => "JS",
"scripts" => $wp_scripts
),
"css" => array(
"title" => "CSS",
"scripts" => $wp_styles
)
);
$loaded_plugins = array();
$loaded_themes = array();
$dependencies = array();
$requires = array();
foreach($perfmatters_filters as $type => $data) {
if(!empty($data["scripts"]->done)) {
$plug_org_scripts = array_unique($data["scripts"]->done);
foreach($plug_org_scripts as $key => $val) {
$src = $data['scripts']->registered[$val]->src;
if(strpos($src, "/wp-content/plugins/") !== false) {
$explode = explode("/wp-content/plugins/", $src);
$explode = explode('/', $explode[1]);
if(!array_key_exists($explode[0], $loaded_plugins)) {
$file_plugin = get_plugins('/' . $explode[0]);
if(!empty($file_plugin)) {
$loaded_plugins[$explode[0]] = $file_plugin;
$master_array['plugins'][$explode[0]] = array('name' => $file_plugin[key($file_plugin)]['Name']);
}
}
else {
$file_plugin = $loaded_plugins[$explode[0]];
}
$master_reference = &$master_array['plugins'][$explode[0]];
}
elseif(strpos($src, "/wp-content/themes/") !== false) {
$explode = explode("/wp-content/themes/", $src);
$explode = explode('/', $explode[1]);
if(!array_key_exists($explode[0], $loaded_themes)) {
$file_theme = wp_get_theme('/' . $explode[0]);
$loaded_themes[$explode[0]] = $file_theme;
$master_array['themes'][$explode[0]] = array('name' => $file_theme->get('Name'));
}
else {
$file_theme = $loaded_themes[$explode[0]];
}
$master_reference = &$master_array['themes'][$explode[0]];
}
else {
$master_reference = &$master_array['misc'];
}
//file size
if(!empty($src)) {
$file_path = str_replace('/wp-content', '', WP_CONTENT_DIR) . '/' . strtok(ltrim(str_replace(get_home_url(), '', $src), '/'), '?');
$size = file_exists($file_path) ? filesize($file_path) : 0;
$master_reference['size'] = (isset($master_reference['size']) ? $master_reference['size'] : 0) + $size;
}
else {
$size = '';
}
//add asset to array
$asset_array = array('type' => $type, 'handle' => $val, 'size' => $size);
//dependencies
if(!empty($data['scripts']->registered[$val]->deps)) {
$asset_array['deps'] = $data['scripts']->registered[$val]->deps;
$dependencies[$type][$val] = $data['scripts']->registered[$val]->deps;
//sort requires
foreach($data['scripts']->registered[$val]->deps as $key => $handle) {
$requires[$type][$handle][] = $val;
}
}
$master_reference['assets'][] = $asset_array;
unset($master_reference);
}
}
}
//don't show perfmatters in the list
if(isset($master_array['plugins']['perfmatters'])) {
unset($master_array['plugins']['perfmatters']);
}
//sorting function
function perfmatters_compare_array_items(&$items, $key) {
uasort($items, function($a, $b) use ($key) {
return strcmp($a[$key], $b[$key]);
});
}
//sort plugins + themes by name
perfmatters_compare_array_items($master_array['plugins'], 'name');
perfmatters_compare_array_items($master_array['themes'], 'name');
//sort assets by handle in each category
foreach($master_array as $category => $data) {
if($category !== 'misc') {
foreach($data as $key => $details) {
if(!empty($details['assets'])) {
perfmatters_compare_array_items($master_array[$category][$key]['assets'], 'handle');
}
}
}
elseif(!empty($details['assets'])) {
perfmatters_compare_array_items($master_array[$category]['assets'], 'handle');
}
}
$master_array = array('resources' => $master_array, 'requires' => $requires);
return $master_array;
}
//print script manager section
function perfmatters_script_manager_print_section($category, $group, $scripts = false) {
global $perfmatters_script_manager_options;
global $currentID;
$options = $perfmatters_script_manager_options;
$settings = get_option('perfmatters_script_manager_settings');
$mu_mode = !empty($settings['mu_mode']) && $category == 'plugins';
$statusDisabled = false;
if(isset($options['disabled'][$category][$group]['everywhere'])
|| (isset($options['disabled'][$category][$group]['current']) && in_array($currentID, $options['disabled'][$category][$group]['current'], TRUE))
|| !empty($options['disabled'][$category][$group]['regex'])
|| (!empty($options['disabled'][$category][$group]['404']) && $currentID === 'pmsm-404' && !$mu_mode)
|| isset($options['disabled'][$category][$group]['post_types'])
|| (!empty($options['disabled'][$category][$group]['archives']) && !$mu_mode)
|| !empty($options['disabled'][$category][$group]['user_status'])
|| !empty($options['disabled'][$category][$group]['device_type'])
) {
$statusDisabled = true;
}
echo "<div class='perfmatters-script-manager-section'>";
if(!empty($scripts)) {
echo "<table " . ($statusDisabled ? "style='display: none;'" : "") . ">";
echo "<thead>";
echo "<tr>";
echo "<th class='pmsm-column-status'>" . __('Status', 'perfmatters') . "</th>";
echo "<th>" . __('Script', 'perfmatters') . "</th>";
echo "<th class='pmsm-column-type'>" . __('Type', 'perfmatters') . "</th>";
echo "<th class='pmsm-column-size'>" . __('Size', 'perfmatters') . "</th>";
echo "</tr>";
echo "</thead>";
echo "<tbody>";
foreach($scripts as $key => $details) {
perfmatters_script_manager_print_script($category, $group, $details);
}
echo "</tbody>";
echo "</table>";
}
if($category != "misc") {
echo "<div class='perfmatters-script-manager-assets-disabled' " . (!$statusDisabled ? "style='display: none;'" : "") . ">";
echo "<div class='perfmatters-script-manager-controls'>";
//Disable
perfmatters_script_manager_print_disable($category, $group);
//Enable
perfmatters_script_manager_print_enable($category, $group);
echo "</div>";
//group disabled message
if($mu_mode) {
echo "<p>" . __('MU Mode is currently enabled, the above settings will apply to the entire plugin.', 'perfmatters') . "</p>";
}
else {
echo "<p>" . __('The above settings will apply to all assets in this group.', 'perfmatters') . "</p>";
}
echo "</div>";
}
echo "</div>";
}
//print script manager script
function perfmatters_script_manager_print_script($category, $group, $details) {
global $perfmatters_tools;
global $perfmatters_script_manager_settings;
global $master_array;
global $perfmatters_filters;
global $perfmatters_disables;
global $perfmatters_script_manager_options;
global $currentID;
global $statusDisabled;
$options = $perfmatters_script_manager_options;
$data = $perfmatters_filters[$details['type']];
$locked = false;
if(empty($data["scripts"]->registered[$details['handle']]->src) && (empty($perfmatters_script_manager_settings['dependencies']) || (empty($data["scripts"]->registered[$details['handle']]->deps) && empty($master_array['requires'][$details['type']][$details['handle']])))) {
return;
}
//Check for disables already set
if(!empty($perfmatters_disables)) {
foreach($perfmatters_disables as $key => $val) {
if(strpos($data["scripts"]->registered[$details['handle']]->src, $val) !== false) {
return;
}
}
}
$locked_scripts = array(
'admin-bar'
);
if(in_array($details['handle'], $locked_scripts) || empty($data['scripts']->registered[$details['handle']]->src)) {
$locked = true;
}
echo "<tr" . ($locked ? ' class="pmsm-locked"' : '') . ">";
//Status
echo "<td class='perfmatters-script-manager-status'>";
//if(!empty($data["scripts"]->registered[$details['handle']]->src)) {
if(!$locked) {
perfmatters_script_manager_print_status($details['type'], $details['handle']);
}
echo "</td>";
//Script Cell
echo "<td class='perfmatters-script-manager-script'>";
//Script Handle
echo "<span class='pmsm-script-handle'>" . $details['handle'] . "</span>";
//script path
if(!empty($data["scripts"]->registered[$details['handle']]->src)) {
echo "<a href='" . $data["scripts"]->registered[$details['handle']]->src . "' target='_blank'>" . str_replace(get_home_url(), '', $data["scripts"]->registered[$details['handle']]->src) . "</a>";
}
//dependencies
if(!empty($perfmatters_script_manager_settings['dependencies']) && (!empty($data["scripts"]->registered[$details['handle']]->deps) || !empty($master_array['requires'][$details['type']][$details['handle']]))) {
echo "<div class='pmsm-dependencies'>";
if(!empty($data["scripts"]->registered[$details['handle']]->deps)) {
echo "<div class='pmsm-deps'>";
echo "<span>" . __('Depends on' , 'perfmatters') . ":</span> ";
$dep_string = "";
foreach($data["scripts"]->registered[$details['handle']]->deps as $key => $dep_handle) {
$dep_string.= $dep_handle . ", ";
}
echo rtrim($dep_string, ", ");
echo "</div>";
}
if(!empty($master_array['requires'][$details['type']][$details['handle']])) {
echo "<div class='pmsm-reqs'>";
echo "<span>" . __('Required by' , 'perfmatters') . ":</span> ";
$req_string = "";
foreach($master_array['requires'][$details['type']][$details['handle']] as $key => $req_handle) {
$req_string.= $req_handle . ", ";
}
echo rtrim($req_string, ", ");
echo "</div>";
}
echo "</div>";
}
//controls
if(!empty($data["scripts"]->registered[$details['handle']]->src)) {
echo "<div class='perfmatters-script-manager-controls' " . (!$statusDisabled ? "style='display: none;'" : "") . ">";
//disable
perfmatters_script_manager_print_disable($details['type'], $details['handle']);
//enable
perfmatters_script_manager_print_enable($details['type'], $details['handle']);
echo "</div>";
}
echo "</td>";
//Type
echo "<td class='perfmatters-script-manager-type pmsm-script-type-" . $details['type'] . "'>";
if(!empty($details['type'])) {
echo "<span class='pmsm-tag'>" . $details['type'] . "</span>";
}
echo "</td>";
//Size
echo "<td class='perfmatters-script-manager-size'>";
if(!empty($details['size'])) {
echo round($details['size'] / 1024, 1) . ' KB';
}
echo "</td>";
echo "</tr>";
}
//print status toggle
function perfmatters_script_manager_print_status($type, $handle) {
global $perfmatters_tools;
global $perfmatters_script_manager_options;
global $currentID;
$options = $perfmatters_script_manager_options;
$settings = get_option('perfmatters_script_manager_settings');
$mu_mode = !empty($settings['mu_mode']) && $type == 'plugins';
global $statusDisabled;
$statusDisabled = false;
//get disabled status
if(isset($options['disabled'][$type][$handle]['everywhere'])
|| (isset($options['disabled'][$type][$handle]['current']) && in_array($currentID, $options['disabled'][$type][$handle]['current'], TRUE))
|| !empty($options['disabled'][$type][$handle]['regex'])
|| (!empty($options['disabled'][$type][$handle]['404']) && $currentID === 'pmsm-404' && !$mu_mode)
|| isset($options['disabled'][$type][$handle]['post_types'])
|| (!empty($options['disabled'][$type][$handle]['archives']) && !$mu_mode)
|| !empty($options['disabled'][$type][$handle]['user_status'])
|| !empty($options['disabled'][$type][$handle]['device_type'])
) {
$statusDisabled = true;
}
//mu mode label
if($mu_mode) {
echo "<span class='pmsm-group-tag pmsm-mu-mode-badge'" . (!$statusDisabled ? " style='display: none;'" : "") . ">" . __('MU Mode', 'perfmatters') . "</span>";
}
//print status input
if(!empty($perfmatters_tools['accessibility_mode']) && $perfmatters_tools['accessibility_mode'] == "1") {
echo "<select name='pmsm_status[" . $type . "][" . $handle . "]' class='perfmatters-status-select " . ($statusDisabled ? "disabled" : "") . "'>";
echo "<option value='enabled' class='perfmatters-option-enabled'>" . __('ON', 'perfmatters') . "</option>";
echo "<option value='disabled' class='perfmatters-option-everywhere' " . ($statusDisabled ? "selected" : "") . ">" . __('OFF', 'perfmatters') . "</option>";
echo "</select>";
}
else {
echo "<div class='pmsm-checkbox-container' style='display: flex;'>";
echo "<input type='hidden' name='pmsm_status[" . $type . "][" . $handle . "]' value='enabled' />";
echo "<label for='pmsm_status_" . $type . "_" . $handle . "' class='perfmatters-script-manager-switch'>";
echo "<input type='checkbox' id='pmsm_status_" . $type . "_" . $handle . "' name='pmsm_status[" . $type . "][" . $handle . "]' value='disabled' " . ($statusDisabled ? "checked" : "") . " class='perfmatters-status-toggle'>";
echo "<div class='perfmatters-script-manager-slider'></div>";
echo "</label>";
echo "</div>";
}
}
//print disable options
function perfmatters_script_manager_print_disable($type, $handle) {
global $perfmatters_script_manager_settings;
global $perfmatters_script_manager_options;
global $currentID;
$options = $perfmatters_script_manager_options;
$pmsm_hide = !empty($options['disabled'][$type][$handle]['everywhere']) ? ' pmsm-hide' : '';
echo "<div class='perfmatters-script-manager-disable'>";
echo "<div style='font-size: 16px;'>" . __('Disabled', 'perfmatters') . "</div>";
//locations
echo "<div class='pmsm-input-group'>";
echo "<span class='pmsm-input-group-label'>Locations:</span>";
echo "<div class='pmsm-input-group-container'>";
//everywhere
echo "<div class='pmsm-checkbox-container'>";
echo "<input type='hidden' name='pmsm_disabled[" . $type . "][" . $handle . "][everywhere]' value='' />";
echo "<label for='" . $type . "-" . $handle . "-disable-everywhere'>";
echo "<input type='checkbox' name='pmsm_disabled[" . $type . "][" . $handle . "][everywhere]' id='" . $type . "-" . $handle . "-disable-everywhere' class='perfmatters-disable-select pmsm-disable-everywhere' value='1' ";
echo (!empty($options['disabled'][$type][$handle]['everywhere']) ? "checked" : "");
echo " />";
echo __('Everywhere', 'perfmatters');
echo "</label>";
echo "</div>";
//id is available
if(!empty($currentID) || $currentID === 0) {
echo "<div class='pmsm-checkbox-container pmsm-everywhere-hide" . $pmsm_hide . "'>";
//404 template
if($currentID === "pmsm-404") {
if(empty($perfmatters_script_manager_settings['mu_mode']) || $type != 'plugins') {
echo "<input type='hidden' name='pmsm_disabled[" . $type . "][" . $handle . "][404]' value='' />";
echo "<label for='" . $type . "-" . $handle . "-disable-404'>";
echo "<input type='checkbox' name='pmsm_disabled[" . $type . "][" . $handle . "][404]' id='" . $type . "-" . $handle . "-disable-404' value='404' ";
if(!empty($options['disabled'][$type][$handle]['404'])) {
echo "checked";
}
echo " />";
echo __("404 Template", 'perfmatters');
echo "</label>";
}
}
//current url
else {
echo "<input type='hidden' name='pmsm_disabled[" . $type . "][" . $handle . "][current]' value='' />";
echo "<label for='" . $type . "-" . $handle . "-disable-current'>";
echo "<input type='checkbox' name='pmsm_disabled[" . $type . "][" . $handle . "][current]' id='" . $type . "-" . $handle . "-disable-current' value='" . $currentID ."' ";
if(isset($options['disabled'][$type][$handle]['current'])) {
if(in_array($currentID, $options['disabled'][$type][$handle]['current'])) {
echo "checked";
}
}
echo " />";
echo __("Current URL", 'perfmatters');
echo "</label>";
}
echo "</div>";
}
//post types
$post_types = get_post_types(array('public' => true), 'objects', 'and');
if(!empty($post_types)) {
if(isset($post_types['attachment'])) {
unset($post_types['attachment']);
}
echo "<div class='pmsm-checkbox-container pmsm-everywhere-hide" . $pmsm_hide . "'>";
echo "<input type='hidden' name='pmsm_disabled[" . $type . "][" . $handle . "][post_types]' value='' />";
foreach($post_types as $key => $value) {
echo "<label for='" . $type . "-" . $handle . "-disabled-" . $key . "' title='" . $key . " (Post Type)'>";
echo "<input type='checkbox' name='pmsm_disabled[" . $type . "][" . $handle . "][post_types][]' id='" . $type . "-" . $handle . "-disabled-" . $key . "' value='" . $key ."' ";
if(isset($options['disabled'][$type][$handle]['post_types'])) {
if(in_array($key, $options['disabled'][$type][$handle]['post_types'])) {
echo "checked";
}
}
echo " />" . $value->label;
echo "</label>";
}
echo "</div>";
}
//archives
if(!empty($perfmatters_script_manager_settings['separate_archives']) && (empty($perfmatters_script_manager_settings['mu_mode']) || $type != 'plugins')) {
echo "<div class='pmsm-checkbox-container pmsm-everywhere-hide" . $pmsm_hide . "'>";
echo "<input type='hidden' name='pmsm_disabled[" . $type . "][" . $handle . "][archives]' value='' />";
//built-in tax archives
$wp_archives = array('category' => 'Categories', 'post_tag' => 'Tags', 'author' => 'Authors');
foreach($wp_archives as $key => $value) {
echo "<label for='" . $type . "-" . $handle . "-disable-archive-" . $key . "' title='" . $key . " (WordPress Taxonomy Archive)'>";
echo "<input type='checkbox' name='pmsm_disabled[" . $type . "][" . $handle . "][archives][]' id='" . $type . "-" . $handle . "-disable-archive-" . $key . "' value='" . $key ."' ";
if(isset($options['disabled'][$type][$handle]['archives'])) {
if(in_array($key, $options['disabled'][$type][$handle]['archives'])) {
echo "checked";
}
}
echo " />" . $value;
echo "</label>";
}
//custom tax archives
$taxonomies = get_taxonomies(array('public' => true, '_builtin' => false), 'objects', 'and');
if(!empty($taxonomies)) {
foreach($taxonomies as $key => $value) {
echo "<label for='" . $type . "-" . $handle . "-disable-archive-" . $key . "' title='" . $key . " (Custom Taxonomy Archive)'>";
echo "<input type='checkbox' name='pmsm_disabled[" . $type . "][" . $handle . "][archives][]' id='" . $type . "-" . $handle . "-disable-archive-" . $key . "' value='" . $key ."' ";
if(isset($options['disabled'][$type][$handle]['archives'])) {
if(in_array($key, $options['disabled'][$type][$handle]['archives'])) {
echo "checked";
}
}
echo " />" . $value->label;
echo "</label>";
}
}
//post type archives
$archive_post_types = get_post_types(array('public' => true, 'has_archive' => true), 'objects', 'and');
if(!empty($archive_post_types)) {
foreach($archive_post_types as $key => $value) {
echo "<label for='" . $type . "-" . $handle . "-disable-archive-" . $key . "' title='" . $key . " (Post Type Archive)'>";
echo "<input type='checkbox' name='pmsm_disabled[" . $type . "][" . $handle . "][archives][]' id='" . $type . "-" . $handle . "-disable-archive-" . $key . "' value='" . $key ."' ";
if(isset($options['disabled'][$type][$handle]['archives'])) {
if(in_array($key, $options['disabled'][$type][$handle]['archives'])) {
echo "checked";
}
}
echo " />" . $value->label;
echo "</label>";
}
}
echo "</div>";
}
echo "</div>";
echo "</div>";
//users
echo "<div class='pmsm-input-group pmsm-everywhere-hide" . $pmsm_hide . "'>";
echo "<label for='" . $type . "-" . $handle . "-enable-user-status-value' style='width: 100%;'>";
echo "<span class='pmsm-input-group-label'>" . __('Users', 'perfmatters') . ":</span>";
echo "<select name='pmsm_disabled[" . $type . "][" . $handle . "][user_status]' id='" . $type . "-" . $handle . "-enable-user-status-value'>";
echo "<option value=''>" . __('Default', 'perfmatters') . "</option>";
echo "<option value='loggedin'" . (!empty($options['disabled'][$type][$handle]['user_status']) && $options['disabled'][$type][$handle]['user_status'] == 'loggedin' ? " selected" : "") . ">" . __('Logged In', 'perfmatters') . "</option>";
echo "<option value='loggedout'" . (!empty($options['disabled'][$type][$handle]['user_status']) && $options['disabled'][$type][$handle]['user_status'] == 'loggedout' ? " selected" : "") . ">" . __('Logged Out', 'perfmatters') . "</option>";
echo "</select>";
echo "</label>";
echo "</div>";
//devices
echo "<div class='pmsm-input-group pmsm-everywhere-hide" . $pmsm_hide . "'>";
echo "<label for='" . $type . "-" . $handle . "-enable-device-type-value' style='width: 100%;'>";
echo "<span class='pmsm-input-group-label'>" . __('Devices', 'perfmatters') . ":</span>";
echo "<select name='pmsm_disabled[" . $type . "][" . $handle . "][device_type]' id='" . $type . "-" . $handle . "-enable-device-type-value'>";
echo "<option value=''>" . __('Default', 'perfmatters') . "</option>";
echo "<option value='desktop'" . (!empty($options['disabled'][$type][$handle]['device_type']) && $options['disabled'][$type][$handle]['device_type'] == 'desktop' ? " selected" : "") . ">" . __('Desktop', 'perfmatters') . "</option>";
echo "<option value='mobile'" . (!empty($options['disabled'][$type][$handle]['device_type']) && $options['disabled'][$type][$handle]['device_type'] == 'mobile' ? " selected" : "") . ">" . __('Mobile', 'perfmatters') . "</option>";
echo "</select>";
echo "</label>";
echo "</div>";
//regex
echo "<div class='pmsm-input-group pmsm-disable-regex pmsm-everywhere-hide" . $pmsm_hide . "'>";
echo "<label for='pmsm_disabled-" . $type . "-" . $handle . "-regex-value' style='width: 100%;'>";
echo "<span class='pmsm-input-group-label'>" . __('Regex', 'perfmatters') . ":</span>";
echo "<input type='text' name='pmsm_disabled[" . $type . "][" . $handle . "][regex]' id='pmsm_disabled-" . $type . "-" . $handle . "-regex-value' value='" . (!empty($options['disabled'][$type][$handle]['regex']) ? esc_attr($options['disabled'][$type][$handle]['regex']) : "") . "' />";
echo "</label>";
echo "</div>";
echo "</div>";
}
//print enable options
function perfmatters_script_manager_print_enable($type, $handle) {
global $perfmatters_script_manager_settings;
global $perfmatters_script_manager_options;
global $currentID;
$options = $perfmatters_script_manager_options;
echo "<div class='perfmatters-script-manager-enable'"; if(empty($options['disabled'][$type][$handle]['everywhere'])) { echo " style='display: none;'"; } echo">";
echo "<div style='font-size: 16px;'>" . __('Exceptions', 'perfmatters') . "</div>";
//locations
echo "<div class='pmsm-input-group'>";
echo "<span class='pmsm-input-group-label'>Locations:</span>";
echo "<div class='pmsm-input-group-container'>";
//Current URL
if(!empty($currentID) || $currentID === 0) {
echo "<div class='pmsm-checkbox-container'>";
//404 check
if($currentID === "pmsm-404") {
if(empty($perfmatters_script_manager_settings['mu_mode']) || $type != 'plugins') {
echo "<input type='hidden' name='pmsm_enabled[" . $type . "][" . $handle . "][404]' value='' />";
echo "<label for='" . $type . "-" . $handle . "-enable-404'>";
echo "<input type='checkbox' name='pmsm_enabled[" . $type . "][" . $handle . "][404]' id='" . $type . "-" . $handle . "-enable-404' value='404' ";
if(!empty($options['enabled'][$type][$handle]['404'])) {
echo "checked";
}
echo " />";
echo __("404 Template", 'perfmatters');
echo "</label>";
}
}
else {
echo "<input type='hidden' name='pmsm_enabled[" . $type . "][" . $handle . "][current]' value='' />";
echo "<label for='" . $type . "-" . $handle . "-enable-current'>";
echo "<input type='checkbox' name='pmsm_enabled[" . $type . "][" . $handle . "][current]' id='" . $type . "-" . $handle . "-enable-current' value='" . $currentID ."' ";
if(isset($options['enabled'][$type][$handle]['current'])) {
if(in_array($currentID, $options['enabled'][$type][$handle]['current'])) {
echo "checked";
}
}
echo " />";
echo __("Current URL", 'perfmatters');
echo "</label>";
}
echo "</div>";
}
//Post Types
$post_types = get_post_types(array('public' => true), 'objects', 'and');
if(!empty($post_types)) {
if(isset($post_types['attachment'])) {
unset($post_types['attachment']);
}
echo "<div class='pmsm-checkbox-container'>";
echo "<input type='hidden' name='pmsm_enabled[" . $type . "][" . $handle . "][post_types]' value='' />";
foreach($post_types as $key => $value) {
echo "<label for='" . $type . "-" . $handle . "-enable-" . $key . "' title='" . $key . " (Post Type)'>";
echo "<input type='checkbox' name='pmsm_enabled[" . $type . "][" . $handle . "][post_types][]' id='" . $type . "-" . $handle . "-enable-" . $key . "' value='" . $key ."' ";
if(isset($options['enabled'][$type][$handle]['post_types'])) {
if(in_array($key, $options['enabled'][$type][$handle]['post_types'])) {
echo "checked";
}
}
echo " />" . $value->label;
echo "</label>";
}
echo "</div>";
}
//Archives
if(!empty($perfmatters_script_manager_settings['separate_archives']) && (empty($perfmatters_script_manager_settings['mu_mode']) || $type != 'plugins')) {
echo "<div class='pmsm-checkbox-container'>";
echo "<input type='hidden' name='pmsm_enabled[" . $type . "][" . $handle . "][archives]' value='' />";
//Built-In Tax Archives
$wp_archives = array('category' => 'Categories', 'post_tag' => 'Tags', 'author' => 'Authors');
foreach($wp_archives as $key => $value) {
echo "<label for='" . $type . "-" . $handle . "-enable-archive-" . $key . "' title='" . $key . " (WordPress Taxonomy Archive)'>";
echo "<input type='checkbox' name='pmsm_enabled[" . $type . "][" . $handle . "][archives][]' id='" . $type . "-" . $handle . "-enable-archive-" . $key . "' value='" . $key ."' ";
if(isset($options['enabled'][$type][$handle]['archives'])) {
if(in_array($key, $options['enabled'][$type][$handle]['archives'])) {
echo "checked";
}
}
echo " />" . $value;
echo "</label>";
}
//Custom Tax Archives
$taxonomies = get_taxonomies(array('public' => true, '_builtin' => false), 'objects', 'and');
if(!empty($taxonomies)) {
foreach($taxonomies as $key => $value) {
echo "<label for='" . $type . "-" . $handle . "-enable-archive-" . $key . "' title='" . $key . " (Custom Taxonomy Archive)'>";
echo "<input type='checkbox' name='pmsm_enabled[" . $type . "][" . $handle . "][archives][]' id='" . $type . "-" . $handle . "-enable-archive-" . $key . "' value='" . $key ."' ";
if(isset($options['enabled'][$type][$handle]['archives'])) {
if(in_array($key, $options['enabled'][$type][$handle]['archives'])) {
echo "checked";
}
}
echo " />" . $value->label;
echo "</label>";
}
}
//Post Type Archives
$archive_post_types = get_post_types(array('public' => true, 'has_archive' => true), 'objects', 'and');
if(!empty($archive_post_types)) {
foreach($archive_post_types as $key => $value) {
echo "<label for='" . $type . "-" . $handle . "-enable-archive-" . $key . "' title='" . $key . " (Post Type Archive)'>";
echo "<input type='checkbox' name='pmsm_enabled[" . $type . "][" . $handle . "][archives][]' id='" . $type . "-" . $handle . "-enable-archive-" . $key . "' value='" . $key ."' ";
if(isset($options['enabled'][$type][$handle]['archives'])) {
if(in_array($key, $options['enabled'][$type][$handle]['archives'])) {
echo "checked";
}
}
echo " />" . $value->label;
echo "</label>";
}
}
echo "</div>";
}
echo "</div>";
echo "</div>";
//users
echo "<div class='pmsm-input-group'>";
echo "<label for='" . $type . "-" . $handle . "-enable-user-status-value' style='width: 100%;'>";
echo "<span class='pmsm-input-group-label'>" . __('Users', 'perfmatters') . ":</span>";
echo "<select name='pmsm_enabled[" . $type . "][" . $handle . "][user_status]' id='" . $type . "-" . $handle . "-enable-user-status-value'>";
echo "<option value=''>" . __('Default', 'perfmatters') . "</option>";
echo "<option value='loggedin'" . (!empty($options['enabled'][$type][$handle]['user_status']) && $options['enabled'][$type][$handle]['user_status'] == 'loggedin' ? " selected" : "") . ">" . __('Logged In', 'perfmatters') . "</option>";
echo "<option value='loggedout'" . (!empty($options['enabled'][$type][$handle]['user_status']) && $options['enabled'][$type][$handle]['user_status'] == 'loggedout' ? " selected" : "") . ">" . __('Logged Out', 'perfmatters') . "</option>";
echo "</select>";
echo "</label>";
echo "</div>";
//devices
echo "<div class='pmsm-input-group'>";
echo "<label for='" . $type . "-" . $handle . "-enable-device-type-value' style='width: 100%;'>";
echo "<span class='pmsm-input-group-label'>" . __('Devices', 'perfmatters') . ":</span>";
echo "<select name='pmsm_enabled[" . $type . "][" . $handle . "][device_type]' id='" . $type . "-" . $handle . "-enable-device-type-value'>";
echo "<option value=''>" . __('Default', 'perfmatters') . "</option>";
echo "<option value='desktop'" . (!empty($options['enabled'][$type][$handle]['device_type']) && $options['enabled'][$type][$handle]['device_type'] == 'desktop' ? " selected" : "") . ">" . __('Desktop', 'perfmatters') . "</option>";
echo "<option value='mobile'" . (!empty($options['enabled'][$type][$handle]['device_type']) && $options['enabled'][$type][$handle]['device_type'] == 'mobile' ? " selected" : "") . ">" . __('Mobile', 'perfmatters') . "</option>";
echo "</select>";
echo "</label>";
echo "</div>";
//Regex
echo "<div class='pmsm-input-group pmsm-enable-regex'>";
echo "<label for='" . $type . "-" . $handle . "-enable-regex-value' style='width: 100%;'>";
echo "<span class='pmsm-input-group-label'>" . __('Regex', 'perfmatters') . ":</span>";
echo "<input type='text' name='pmsm_enabled[" . $type . "][" . $handle . "][regex]' id='" . $type . "-" . $handle . "-enable-regex-value' value='" . (!empty($options['enabled'][$type][$handle]['regex']) ? esc_attr($options['enabled'][$type][$handle]['regex']) : "") . "' />";
echo "</label>";
echo "</div>";
echo "</div>";
}
//script manager update funciton triggered by ajax call
function perfmatters_script_manager_update() {
if(!empty($_POST['pmsm_data'])) {
//parse the data
$pmsm_data = array();
parse_str($_POST['pmsm_data'], $pmsm_data);
//grab current ID
if(isset($_POST['current_id'])) {
if($_POST['current_id'] === 'pmsm-404') {
$currentID = $_POST['current_id'];
}
else {
$currentID = (int)$_POST['current_id'];
}
}
else {
$currentID = "";
}
//get script manager settings
$settings = get_option('perfmatters_script_manager_settings');
//get existing script manager options
$options = get_option('perfmatters_script_manager');
//clone saved options for later
$options_old = $options;
//setup filters to walk through
$perfmatters_filters = array("js", "css", "plugins", "themes");
foreach($perfmatters_filters as $type) {
//check status array
if(isset($pmsm_data['pmsm_status'][$type])) {
foreach($pmsm_data['pmsm_status'][$type] as $handle => $status) {
//status toggle was enabled
if($status == 'enabled') {
//remove current url disable
if(isset($options['disabled'][$type][$handle]['current'])) {
$current_key = array_search($currentID, $options['disabled'][$type][$handle]['current']);
if($current_key !== false) {
unset($options['disabled'][$type][$handle]['current'][$current_key]);
}
}
//remove current url exception
if(isset($options['enabled'][$type][$handle]['current'])) {
$current_key = array_search($currentID, $options['enabled'][$type][$handle]['current']);
if($current_key !== false) {
unset($options['enabled'][$type][$handle]['current'][$current_key]);
}
}
//remove disables
if(isset($options['disabled'][$type][$handle])) {
unset($options['disabled'][$type][$handle]['everywhere']);
unset($options['disabled'][$type][$handle]['post_types']);
unset($options['disabled'][$type][$handle]['archives']);
unset($options['disabled'][$type][$handle]['user_status']);
unset($options['disabled'][$type][$handle]['device_type']);
unset($options['disabled'][$type][$handle]['regex']);
if($currentID === 'pmsm-404') {
unset($options['disabled'][$type][$handle]['404']);
}
}
//remove exceptions
if(isset($options['enabled'][$type][$handle])) {
unset($options['enabled'][$type][$handle]['post_types']);
unset($options['enabled'][$type][$handle]['archives']);
unset($options['enabled'][$type][$handle]['user_status']);
unset($options['enabled'][$type][$handle]['device_type']);
unset($options['enabled'][$type][$handle]['regex']);
if($currentID === 'pmsm-404') {
unset($options['enabled'][$type][$handle]['404']);
}
}
}
}
}
//check disabled array
if(isset($pmsm_data['pmsm_disabled'][$type])) {
foreach($pmsm_data['pmsm_disabled'][$type] as $handle => $value) {
$disabled_trash = array();
//make sure status is disabled and we have a value to set
if((empty($pmsm_data['pmsm_status'][$type][$handle]) || $pmsm_data['pmsm_status'][$type][$handle] != 'enabled') && !empty($value)) {
if(!empty($value['everywhere'])) {
$options['disabled'][$type][$handle]['everywhere'] = 1;
$disabled_trash = array('current', 'regex', '404', 'post_types', 'archives', 'user_status', 'device_type');
}
else {
if(isset($value['everywhere'])) {
$disabled_trash = array('everywhere');
unset($options['enabled'][$type][$handle]);
unset($pmsm_data['pmsm_enabled'][$type][$handle]);
}
if(isset($value['current'])) {
if(!empty($value['current']) || $value['current'] === "0") {
if(!isset($options['disabled'][$type][$handle]['current']) || !is_array($options['disabled'][$type][$handle]['current'])) {
$options['disabled'][$type][$handle]['current'] = array();
}
if(!in_array($value['current'], $options['disabled'][$type][$handle]['current'], TRUE)) {
array_push($options['disabled'][$type][$handle]['current'], $currentID);
}
}
else {
if(isset($options['disabled'][$type][$handle]['current'])) {
$current_key = array_search($currentID, $options['disabled'][$type][$handle]['current']);
if($current_key !== false) {
unset($options['disabled'][$type][$handle]['current'][$current_key]);
}
}
}
}
if(isset($value['404'])) {
if(!empty($value['404'])) {
$options['disabled'][$type][$handle]['404'] = 1;
}
else {
unset($options['disabled'][$type][$handle]['404']);
}
}
//set post type disable
if(isset($value['post_types'])) {
if(!empty($value['post_types'])) {
$options['disabled'][$type][$handle]['post_types'] = array();
foreach($value['post_types'] as $key => $post_type) {
if(isset($options['disabled'][$type][$handle]['post_types'])) {
if(!in_array($post_type, $options['disabled'][$type][$handle]['post_types'])) {
array_push($options['disabled'][$type][$handle]['post_types'], $post_type);
}
}
}
}
else {
unset($options['disabled'][$type][$handle]['post_types']);
}
}
//set archives disable
if(!empty($settings['separate_archives']) && $settings['separate_archives'] == "1") {
if(isset($value['archives'])) {
if(is_array($value['archives'])) {
$value['archives'] = array_filter($value['archives']);
}
if(!empty($value['archives'])) {
$options['disabled'][$type][$handle]['archives'] = array();
foreach($value['archives'] as $key => $archive) {
if(!in_array($archive, $options['disabled'][$type][$handle]['archives'])) {
array_push($options['disabled'][$type][$handle]['archives'], $archive);
}
}
}
else {
unset($options['disabled'][$type][$handle]['archives']);
}
}
}
//set user status disable
if(isset($value['user_status'])) {
if(!empty($value['user_status'])) {
$options['disabled'][$type][$handle]['user_status'] = $value['user_status'];
}
else {
unset($options['disabled'][$type][$handle]['user_status']);
}
}
//set device type disable
if(isset($value['device_type'])) {
if(!empty($value['device_type'])) {
$options['disabled'][$type][$handle]['device_type'] = $value['device_type'];
}
else {
unset($options['disabled'][$type][$handle]['device_type']);
}
}
//set regex disable
if(isset($value['regex'])) {
if(!empty($value['regex'])) {
$options['disabled'][$type][$handle]['regex'] = $value['regex'];
}
else {
unset($options['disabled'][$type][$handle]['regex']);
}
}
}
}
//empty disabled trash
if(!empty($disabled_trash) && isset($options['disabled'][$type][$handle])) {
foreach($disabled_trash as $trash) {
unset($options['disabled'][$type][$handle][$trash]);
}
}
}
}
//check enabled array
if(isset($pmsm_data['pmsm_enabled'][$type])) {
foreach($pmsm_data['pmsm_enabled'][$type] as $handle => $value) {
//make sure status is disabled and we have a value to set
if((empty($pmsm_data['pmsm_status'][$type][$handle]) || $pmsm_data['pmsm_status'][$type][$handle] != 'enabled') && !empty($value)) {
//set current url exception
if(isset($value['current'])) {
if(!empty($value['current']) || $value['current'] === "0") {
if(!isset($options['enabled'][$type][$handle]['current']) || !is_array($options['enabled'][$type][$handle]['current'])) {
$options['enabled'][$type][$handle]['current'] = array();
}
if(!in_array($value['current'], $options['enabled'][$type][$handle]['current'], TRUE)) {
array_push($options['enabled'][$type][$handle]['current'], $value['current']);
}
}
else {
if(isset($options['enabled'][$type][$handle]['current'])) {
$current_key = array_search($currentID, $options['enabled'][$type][$handle]['current']);
if($current_key !== false) {
unset($options['enabled'][$type][$handle]['current'][$current_key]);
}
}
}
}
//set 404 exception
if(isset($value['404'])) {
if(!empty($value['404'])) {
$options['enabled'][$type][$handle]['404'] = 1;
}
else {
unset($options['enabled'][$type][$handle]['404']);
}
}
//set post types exception
if(isset($value['post_types'])) {
if(!empty($value['post_types'])) {
$options['enabled'][$type][$handle]['post_types'] = array();
foreach($value['post_types'] as $key => $post_type) {
if(isset($options['enabled'][$type][$handle]['post_types'])) {
if(!in_array($post_type, $options['enabled'][$type][$handle]['post_types'])) {
array_push($options['enabled'][$type][$handle]['post_types'], $post_type);
}
}
}
}
else {
unset($options['enabled'][$type][$handle]['post_types']);
}
}
//set archives exception
if(!empty($settings['separate_archives']) && $settings['separate_archives'] == "1") {
if(isset($value['archives'])) {
if(is_array($value['archives'])) {
$value['archives'] = array_filter($value['archives']);
}
if(!empty($value['archives'])) {
$options['enabled'][$type][$handle]['archives'] = array();
foreach($value['archives'] as $key => $archive) {
if(!in_array($archive, $options['enabled'][$type][$handle]['archives'])) {
array_push($options['enabled'][$type][$handle]['archives'], $archive);
}
}
}
else {
unset($options['enabled'][$type][$handle]['archives']);
}
}
}
//set user status exception
if(isset($value['user_status'])) {
if(!empty($value['user_status'])) {
$options['enabled'][$type][$handle]['user_status'] = $value['user_status'];
}
else {
unset($options['enabled'][$type][$handle]['user_status']);
}
}
//set device type exception
if(isset($value['device_type'])) {
if(!empty($value['device_type'])) {
$options['enabled'][$type][$handle]['device_type'] = $value['device_type'];
}
else {
unset($options['enabled'][$type][$handle]['device_type']);
}
}
//set regex exception
if(isset($value['regex'])) {
if(!empty($value['regex'])) {
$options['enabled'][$type][$handle]['regex'] = $value['regex'];
}
else {
unset($options['enabled'][$type][$handle]['regex']);
}
}
}
}
}
}
//clean up the options array before saving
perfmatters_script_manager_filter_options($options);
if(update_option('perfmatters_script_manager', $options)) {
echo 'update_success';
}
elseif($options == $options_old) {
echo 'update_nooption';
}
else {
echo 'update_failure';
}
}
else {
echo 'update_nochange';
}
wp_die();
}
function perfmatters_script_manager_filter_options(&$options) {
foreach($options as $key => $item) {
is_array($item) && $options[$key] = perfmatters_script_manager_filter_options($item);
if(empty($options[$key]) && $options[$key] != 0) {
unset($options[$key]);
}
}
return $options;
}
//after script manager settings option update
function perfmatters_script_manager_update_option($old_value, $value, $option) {
pmsm_settings_update_process($old_value, $value);
}
//after script manager settings option add
function perfmatters_script_manager_settings_add_option($option, $value) {
pmsm_settings_update_process('', $value);
}
//process settings update
function pmsm_settings_update_process($old_value, $value) {
//trigger success popup message
add_action('shutdown', function() {
echo "<script>pmsmPopupMessage('" . __('Settings saved successfully!', 'perfmatters') . "');</script>";
}, 9999);
//mu mode was enabled
if(!empty($value['mu_mode']) && empty($old_value['mu_mode'])) {
$mu_version_match = false;
//make sure mu directory exists
if(!file_exists(WPMU_PLUGIN_DIR)) {
@mkdir(WPMU_PLUGIN_DIR);
}
//remove existing mu plugin file
if(file_exists(WPMU_PLUGIN_DIR . "/perfmatters_mu.php")) {
if(!function_exists('get_plugin_data')) {
require_once(ABSPATH . 'wp-admin/includes/plugin.php');
}
//get plugin data
$mu_plugin_data = get_plugin_data(WPMU_PLUGIN_DIR . "/perfmatters_mu.php");
if(!empty($mu_plugin_data['Version']) && defined('PERFMATTERS_VERSION') && $mu_plugin_data['Version'] == PERFMATTERS_VERSION) {
$mu_version_match = true;
}
else {
@unlink(WPMU_PLUGIN_DIR . "/perfmatters_mu.php");
}
}
//copy current mu plugin file
if(file_exists(plugin_dir_path(__FILE__) . "/perfmatters_mu.php") && !$mu_version_match) {
@copy(plugin_dir_path(__FILE__) . "/perfmatters_mu.php", WPMU_PLUGIN_DIR . "/perfmatters_mu.php");
}
}
}
//dequeue scripts based on script manager configuration
function perfmatters_dequeue_scripts($src, $handle) {
if(is_admin() || isset($_GET['perfmatters']) || isset($_GET['perfmattersoff']) || perfmatters_is_page_builder()) {
return $src;
}
//load settings
$settings = get_option('perfmatters_script_manager_settings');
if(!empty($settings['testing_mode']) && !current_user_can('manage_options')) {
return $src;
}
//get script type
$type = current_filter() == 'script_loader_src' ? "js" : "css";
//load options
$options = get_option('perfmatters_script_manager');
$currentID = perfmatters_get_current_ID();
//get category + group from src
preg_match('/\/wp-content\/(.*?\/.*?)\//', $src, $match);
if(!empty($match[1])) {
$match = explode("/", $match[1]);
$category = $match[0];
$group = $match[1];
}
//check for group disable settings and override
if(!empty($category) && !empty($group) && !empty($options['disabled'][$category][$group])) {
if(!empty($options['disabled'][$category][$group]['everywhere'])
|| (!empty($options['disabled'][$category][$group]['current']) && in_array($currentID, $options['disabled'][$category][$group]['current']))
|| (!empty($options['disabled'][$category][$group]['404']) && $currentID === 'pmsm-404')
|| !empty($options['disabled'][$category][$group]['post_types'])
|| !empty($options['disabled'][$category][$group]['archives'])
|| !empty($options['disabled'][$category][$group]['user_status'])
|| !empty($options['disabled'][$category][$group]['device_type'])
|| !empty($options['disabled'][$category][$group]['regex'])
) {
$type = $category;
$handle = $group;
}
}
//disable is set, check options
if(!empty($options['disabled'][$type][$handle])) {
$disabled_option = $options['disabled'][$type][$handle];
$is_archive = !empty($settings['separate_archives']) && is_archive();
if(!empty($disabled_option['everywhere'])
|| (!empty($disabled_option['current']) && in_array($currentID, $disabled_option['current']))
|| (!empty($disabled_option['404']) && $currentID === 'pmsm-404')
|| (!$is_archive && pmsm_check_post_types($disabled_option))
|| ($is_archive && pmsm_check_archives($disabled_option))
|| pmsm_check_user_status($disabled_option)
|| pmsm_check_device_type($disabled_option)
|| (!empty($disabled_option['regex']) && preg_match($disabled_option['regex'], home_url(add_query_arg(array(), $_SERVER['REQUEST_URI']))))
) {
//enabled checks
if(!empty($options['enabled'][$type][$handle])) {
$enabled_option = $options['enabled'][$type][$handle];
//current url check
if(!empty($enabled_option['current']) && in_array($currentID, $enabled_option['current'])) {
return $src;
}
//404 check
if(!empty($enabled_option['404']) && $currentID === 'pmsm-404') {
return $src;
}
//user status check
if(pmsm_check_user_status($enabled_option)) {
return $src;
}
//device type check
if(pmsm_check_device_type($enabled_option)) {
return $src;
}
//regex check
if(!empty($options['enabled'][$type][$handle]['regex'])) {
$current_url = home_url(add_query_arg(array(), $_SERVER['REQUEST_URI']));
if(preg_match($enabled_option['regex'], $current_url)) {
return $src;
}
}
//archive check
if(!empty($settings['separate_archives']) && is_archive()) {
return pmsm_check_archives($enabled_option) ? $src : false;
}
//post type check
if(pmsm_check_post_types($enabled_option)) {
return $src;
}
}
return false;
}
}
//original script src
return $src;
}
//Script Manager Get Current ID
function perfmatters_get_current_ID() {
global $currentID;
//check if global is set and return
if(!empty($currentID) || $currentID === 0) {
return $currentID;
}
global $wp_query;
//make sure we have a usable query
if(empty($wp_query->posts) || $wp_query->is_archive()) {
//404 check
if(is_404()) {
return 'pmsm-404';
}
//woocommerce shop check
if(function_exists('is_shop') && is_shop()) {
return wc_get_page_id('shop');
}
return '';
}
$currentID = '';
if(is_object($wp_query)) {
$currentID = $wp_query->get_queried_object_id();
}
if($currentID === 0) {
if(!is_front_page()) {
$postID = get_the_ID();
if($postID !== 0) {
$currentID = $postID;
}
}
}
if(has_filter('perfmatters_get_current_ID')) {
$currentID = apply_filters('perfmatters_get_current_ID', $currentID);
}
return $currentID;
}
//check if current post type is set in option
function pmsm_check_post_types($option) {
if(!empty($option['post_types'])) {
if(is_front_page() || is_home()) {
if(get_option('show_on_front') == 'page' && in_array('page', $option['post_types'])) {
return true;
}
}
else {
if(in_array(get_post_type(), $option['post_types'])) {
return true;
}
}
}
return false;
}
//check if current archive is set in option
function pmsm_check_archives($option) {
if(!empty($option['archives'])) {
$object = get_queried_object();
if(!empty($object)) {
$objectClass = get_class($object);
if($objectClass == "WP_Post_Type") {
if(in_array($object->name, $option['archives'])) {
return true;
}
}
elseif($objectClass == "WP_User") {
if(in_array("author", $option['archives'])) {
return true;
}
}
else {
if(in_array($object->taxonomy, $option['archives'])) {
return true;
}
}
}
}
return false;
}
//check if current user status is set
function pmsm_check_user_status($option) {
if(!empty($option['user_status'])) {
$status = is_user_logged_in();
if(($status && $option['user_status'] == 'loggedin') || (!$status && $option['user_status'] == 'loggedout')) {
return true;
}
}
return false;
}
//check if current device type is set
function pmsm_check_device_type($option) {
if(!empty($option['device_type'])) {
$mobile = wp_is_mobile();
if(($mobile && $option['device_type'] == 'mobile') || (!$mobile && $option['device_type'] == 'desktop')) {
return true;
}
}
return false;
}
//check if mu mode is on and version is correct
function perfmatters_script_manager_mu_notice() {
$pmsm_settings = get_option('perfmatters_script_manager_settings');
if(!empty($pmsm_settings['mu_mode'])) {
if(!function_exists('get_plugin_data')) {
require_once(ABSPATH . 'wp-admin/includes/plugin.php');
}
//get plugin data
$mu_plugin_data = get_plugin_data(WPMU_PLUGIN_DIR . "/perfmatters_mu.php");
//display mu version mismatch notice
if(defined('PERFMATTERS_VERSION') && !empty($mu_plugin_data['Version']) && $mu_plugin_data['Version'] != PERFMATTERS_VERSION) {
echo "<div class='notice notice-warning'>";
echo "<p>";
echo "<strong>" . __('Perfmatters Warning', 'perfmatters') . ":</strong> ";
echo __('MU plugin version mismatch.', 'perfmatters') . " <a href='https://perfmatters.io/docs/mu-mode/' target='_blank'>" . __('View Documentation', 'perfmatters') . "</a>";
echo "</p>";
echo "</div>";
}
elseif(!file_exists(WPMU_PLUGIN_DIR . "/perfmatters_mu.php")) {
echo "<div class='notice notice-error'>";
echo "<p>";
echo "<strong>" . __('Perfmatters Warning', 'perfmatters') . ":</strong> ";
echo __('MU plugin file not found.', 'perfmatters') . " <a href='https://perfmatters.io/docs/mu-mode/' target='_blank'>" . __('View Documentation', 'perfmatters') . "</a>";
echo "</p>";
echo "</div>";
}
}
}
//exclude our script manager js from autoptimize
function perfmatters_script_manager_exclude_autoptimize($exclude) {
if(!strpos($exclude, 'script-manager.js')) {
$exclude.= ',script-manager.js';
}
return $exclude;
}
//exclude our script manager js from siteground optimizer
function perfmatters_script_manager_exclude_sgo($exclude) {
$exclude[] = 'perfmatters-script-manager-js';
return $exclude;
}