1917 lines
74 KiB
PHP
1917 lines
74 KiB
PHP
<?php
|
|
/**
|
|
* Manages the settings page to edit the plugin option settings
|
|
*
|
|
* @package Media Library Assistant
|
|
* @since 0.1
|
|
*/
|
|
|
|
/**
|
|
* Class MLA (Media Library Assistant) Settings provides the settings page to edit the plugin option settings
|
|
*
|
|
* @package Media Library Assistant
|
|
* @since 0.1
|
|
*/
|
|
class MLASettings {
|
|
/**
|
|
* Slug for localizing and enqueueing JavaScript - MLA View List Table
|
|
*
|
|
* @since 1.40
|
|
*
|
|
* @var string
|
|
*/
|
|
const JAVASCRIPT_INLINE_EDIT_VIEW_SLUG = 'mla-inline-edit-view-scripts';
|
|
|
|
/**
|
|
* Slug for localizing and enqueueing JavaScript - MLA Upload List Table
|
|
*
|
|
* @since 1.40
|
|
*
|
|
* @var string
|
|
*/
|
|
const JAVASCRIPT_INLINE_EDIT_UPLOAD_SLUG = 'mla-inline-edit-upload-scripts';
|
|
|
|
/**
|
|
* Slug for localizing and enqueueing JavaScript - MLA Custom Fields List Table
|
|
*
|
|
* @since 2.50
|
|
*
|
|
* @var string
|
|
*/
|
|
const JAVASCRIPT_INLINE_EDIT_CUSTOM_SLUG = 'mla-inline-edit-custom-scripts';
|
|
|
|
/**
|
|
* Slug for localizing and enqueueing JavaScript - MLA Custom tab
|
|
*
|
|
* @since 2.00
|
|
*
|
|
* @var string
|
|
*/
|
|
const JAVASCRIPT_INLINE_MAPPING_CUSTOM_SLUG = 'mla-inline-mapping-custom-scripts';
|
|
|
|
/**
|
|
* Slug for localizing and enqueueing JavaScript - MLA IPTC/EXIF List Table
|
|
*
|
|
* @since 2.60
|
|
*
|
|
* @var string
|
|
*/
|
|
const JAVASCRIPT_INLINE_EDIT_IPTC_EXIF_SLUG = 'mla-inline-edit-iptc-exif-scripts';
|
|
|
|
/**
|
|
* Slug for localizing and enqueueing JavaScript - MLA IPTC/EXIF tab
|
|
*
|
|
* @since 2.00
|
|
*
|
|
* @var string
|
|
*/
|
|
const JAVASCRIPT_INLINE_MAPPING_IPTC_EXIF_SLUG = 'mla-inline-mapping-iptc-exif-scripts';
|
|
|
|
/**
|
|
* Object name for localizing JavaScript - MLA Custom and IPTC/EXIF tabs
|
|
*
|
|
* @since 2.00
|
|
*
|
|
* @var string
|
|
*/
|
|
const JAVASCRIPT_INLINE_MAPPING_OBJECT = 'mla_inline_mapping_vars';
|
|
|
|
/**
|
|
* Holds screen id to match help text to corresponding screen
|
|
*
|
|
* @since 1.40
|
|
*
|
|
* @var array
|
|
*/
|
|
private static $current_page_hook = '';
|
|
|
|
/**
|
|
* Initialization function, similar to __construct()
|
|
*
|
|
* @since 0.1
|
|
*
|
|
* @return void
|
|
*/
|
|
public static function initialize( ) {
|
|
MLASettings::_localize_tablist();
|
|
|
|
//add_action( 'admin_page_access_denied', 'MLASettings::mla_admin_page_access_denied_action' );
|
|
add_action( 'admin_init', 'MLASettings::mla_admin_init_action' );
|
|
add_action( 'admin_menu', 'MLASettings::mla_admin_menu_action' );
|
|
add_action( 'admin_enqueue_scripts', 'MLASettings::mla_admin_enqueue_scripts_action' );
|
|
add_filter( 'set-screen-option', 'MLASettings::mla_set_screen_option_filter', 10, 3 ); // $status, $option, $value
|
|
add_filter( 'screen_options_show_screen', 'MLASettings::mla_screen_options_show_screen_filter', 10, 2 ); // $show_screen, $this
|
|
self::_version_upgrade();
|
|
|
|
if( defined('DOING_AJAX') && DOING_AJAX && isset( $_REQUEST['action'] ) ) {
|
|
// Ajax handlers
|
|
switch ( $_REQUEST['action'] ) {
|
|
case self::JAVASCRIPT_INLINE_EDIT_UPLOAD_SLUG:
|
|
require_once( MLA_PLUGIN_PATH . 'includes/class-mla-settings-upload-tab.php' );
|
|
break;
|
|
case self::JAVASCRIPT_INLINE_EDIT_VIEW_SLUG:
|
|
require_once( MLA_PLUGIN_PATH . 'includes/class-mla-settings-view-tab.php' );
|
|
break;
|
|
case self::JAVASCRIPT_INLINE_EDIT_CUSTOM_SLUG:
|
|
case self::JAVASCRIPT_INLINE_MAPPING_CUSTOM_SLUG:
|
|
require_once( MLA_PLUGIN_PATH . 'includes/class-mla-settings-custom-fields-tab.php' );
|
|
break;
|
|
case self::JAVASCRIPT_INLINE_EDIT_IPTC_EXIF_SLUG:
|
|
case self::JAVASCRIPT_INLINE_MAPPING_IPTC_EXIF_SLUG:
|
|
require_once( MLA_PLUGIN_PATH . 'includes/class-mla-settings-iptc-exif-tab.php' );
|
|
break;
|
|
}
|
|
} elseif ( isset( $_REQUEST['page'] ) && is_string( $_REQUEST['page'] ) && ( 'mla-settings-menu-' == substr( $_REQUEST['page'], 0, 18 ) ) ) {
|
|
// Settings/Media Library Assistant current tab
|
|
switch( substr( $_REQUEST['page'], 18 ) ) {
|
|
case 'upload':
|
|
require_once( MLA_PLUGIN_PATH . 'includes/class-mla-settings-upload-tab.php' );
|
|
break;
|
|
case 'view':
|
|
require_once( MLA_PLUGIN_PATH . 'includes/class-mla-settings-view-tab.php' );
|
|
break;
|
|
case 'shortcodes':
|
|
require_once( MLA_PLUGIN_PATH . 'includes/class-mla-settings-shortcodes-tab.php' );
|
|
break;
|
|
case 'custom_field':
|
|
require_once( MLA_PLUGIN_PATH . 'includes/class-mla-settings-custom-fields-tab.php' );
|
|
break;
|
|
case 'iptc_exif':
|
|
require_once( MLA_PLUGIN_PATH . 'includes/class-mla-settings-iptc-exif-tab.php' );
|
|
break;
|
|
case 'documentation':
|
|
require_once( MLA_PLUGIN_PATH . 'includes/class-mla-settings-documentation-tab.php' );
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Database and option update check, for installing new versions
|
|
*
|
|
* @since 0.30
|
|
*
|
|
* @return void
|
|
*/
|
|
private static function _version_upgrade( ) {
|
|
$current_version = MLACore::mla_get_option( MLACoreOptions::MLA_VERSION_OPTION );
|
|
|
|
if ( version_compare( '.30', $current_version, '>' ) ) {
|
|
/*
|
|
* Convert attachment_category and _tag to taxonomy_support;
|
|
* change the default if either option is unchecked
|
|
*/
|
|
$category_option = MLACore::mla_get_option( 'attachment_category' );
|
|
$tag_option = MLACore::mla_get_option( 'attachment_tag' );
|
|
if ( ! ( ( 'checked' == $category_option ) && ( 'checked' == $tag_option ) ) ) {
|
|
$tax_option = MLACore::mla_get_option( MLACoreOptions::MLA_TAXONOMY_SUPPORT );
|
|
if ( 'checked' != $category_option ) {
|
|
if ( isset( $tax_option['tax_support']['attachment_category'] ) ) {
|
|
unset( $tax_option['tax_support']['attachment_category'] );
|
|
}
|
|
}
|
|
|
|
if ( 'checked' != $tag_option ) {
|
|
if ( isset( $tax_option['tax_support']['attachment_tag'] ) ) {
|
|
unset( $tax_option['tax_support']['attachment_tag'] );
|
|
}
|
|
}
|
|
|
|
MLAOptions::mla_taxonomy_option_handler( 'update', 'taxonomy_support', MLACoreOptions::$mla_option_definitions['taxonomy_support'], $tax_option );
|
|
} // one or both options unchecked
|
|
|
|
MLACore::mla_delete_option( 'attachment_category' );
|
|
MLACore::mla_delete_option( 'attachment_tag' );
|
|
} // version is less than .30
|
|
|
|
if ( version_compare( '1.13', $current_version, '>' ) ) {
|
|
/*
|
|
* Add quick_edit and bulk_edit values to custom field mapping rules
|
|
*/
|
|
$new_values = array();
|
|
|
|
foreach ( MLACore::mla_get_option( 'custom_field_mapping' ) as $key => $value ) {
|
|
$value['quick_edit'] = ( isset( $value['quick_edit'] ) && $value['quick_edit'] ) ? true : false;
|
|
$value['bulk_edit'] = ( isset( $value['bulk_edit'] ) && $value['bulk_edit'] ) ? true : false;
|
|
$new_values[ $key ] = $value;
|
|
}
|
|
|
|
MLACore::mla_update_option( 'custom_field_mapping', $new_values );
|
|
} // version is less than 1.13
|
|
|
|
if ( version_compare( '1.30', $current_version, '>' ) ) {
|
|
/*
|
|
* Add metadata values to custom field mapping rules
|
|
*/
|
|
$new_values = array();
|
|
|
|
foreach ( MLACore::mla_get_option( 'custom_field_mapping' ) as $key => $value ) {
|
|
$value['meta_name'] = isset( $value['meta_name'] ) ? $value['meta_name'] : '';
|
|
$value['meta_single'] = ( isset( $value['meta_single'] ) && $value['meta_single'] ) ? true : false;
|
|
$value['meta_export'] = ( isset( $value['meta_export'] ) && $value['meta_export'] ) ? true : false;
|
|
$new_values[ $key ] = $value;
|
|
}
|
|
|
|
MLACore::mla_update_option( 'custom_field_mapping', $new_values );
|
|
} // version is less than 1.30
|
|
|
|
if ( version_compare( '1.40', $current_version, '>' ) ) {
|
|
/*
|
|
* Add metadata values to custom field mapping rules
|
|
*/
|
|
$new_values = array();
|
|
|
|
foreach ( MLACore::mla_get_option( 'custom_field_mapping' ) as $key => $value ) {
|
|
$value['no_null'] = ( isset( $value['no_null'] ) && $value['no_null'] ) ? true : false;
|
|
|
|
if ( isset( $value['meta_single'] ) && $value['meta_single'] ) {
|
|
$value['option'] = 'single';
|
|
} elseif ( isset( $value['meta_export'] ) && $value['meta_export'] ) {
|
|
$value['option'] = 'export';
|
|
} else {
|
|
$value['option'] = 'text';
|
|
}
|
|
|
|
unset( $value['meta_single'] );
|
|
unset( $value['meta_export'] );
|
|
|
|
$new_values[ $key ] = $value;
|
|
}
|
|
|
|
MLACore::mla_update_option( 'custom_field_mapping', $new_values );
|
|
} // version is less than 1.40
|
|
|
|
if ( version_compare( '1.60', $current_version, '>' ) ) {
|
|
/*
|
|
* Add delimiters values to taxonomy mapping rules
|
|
*/
|
|
$option_value = MLACore::mla_get_option( 'iptc_exif_mapping' );
|
|
$new_values = array();
|
|
|
|
foreach ( $option_value['taxonomy'] as $key => $value ) {
|
|
$value['delimiters'] = isset( $value['delimiters'] ) ? $value['delimiters'] : '';
|
|
$new_values[ $key ] = $value;
|
|
}
|
|
|
|
$option_value['taxonomy'] = $new_values;
|
|
MLACore::mla_update_option( 'iptc_exif_mapping', $option_value );
|
|
} // version is less than 1.60
|
|
|
|
if ( version_compare( '1.72', $current_version, '>' ) ) {
|
|
/*
|
|
* Strip default descriptions from the options table
|
|
*/
|
|
MLAMime::mla_update_upload_mime();
|
|
} // version is less than 1.72
|
|
|
|
if ( version_compare( '2.13', $current_version, '>' ) ) {
|
|
/*
|
|
* Add format, option and no_null to IPTC/EXIF custom mapping rules
|
|
*/
|
|
$option_value = MLACore::mla_get_option( 'iptc_exif_mapping' );
|
|
|
|
if ( !empty( $option_value['custom'] ) ) {
|
|
$new_values = array();
|
|
|
|
foreach ( $option_value['custom'] as $key => $value ) {
|
|
$value['format'] = isset( $value['format'] ) ? $value['format'] : 'native';
|
|
$value['option'] = isset( $value['option'] ) ? $value['option'] : 'text';
|
|
$value['no_null'] = isset( $value['no_null'] ) ? $value['no_null'] : false;
|
|
$new_values[ $key ] = $value;
|
|
}
|
|
|
|
$option_value['custom'] = $new_values;
|
|
MLACore::mla_update_option( 'iptc_exif_mapping', $option_value );
|
|
}
|
|
} // version is less than 2.13
|
|
|
|
MLACore::mla_update_option( MLACoreOptions::MLA_VERSION_OPTION, MLACore::CURRENT_MLA_VERSION );
|
|
}
|
|
|
|
/**
|
|
* Perform one-time actions on plugin activation
|
|
*
|
|
* @since 0.40
|
|
*
|
|
* @return void
|
|
*/
|
|
public static function mla_activation_hook( ) {
|
|
/*
|
|
* Disable the uninstall file while the plugin is active
|
|
*/
|
|
if ( file_exists( MLA_PLUGIN_PATH . 'uninstall.php' ) ) {
|
|
@rename ( MLA_PLUGIN_PATH . 'uninstall.php' , MLA_PLUGIN_PATH . 'mla-uninstall.php' );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Perform one-time actions on plugin deactivation
|
|
*
|
|
* @since 0.40
|
|
*
|
|
* @return void
|
|
*/
|
|
public static function mla_deactivation_hook( ) {
|
|
$delete_option_settings = 'checked' === MLACore::mla_get_option( MLACoreOptions::MLA_DELETE_OPTION_SETTINGS );
|
|
$delete_option_backups = 'checked' === MLACore::mla_get_option( MLACoreOptions::MLA_DELETE_OPTION_BACKUPS );
|
|
|
|
/*
|
|
* We only need the uninstall file if one or both options are true,
|
|
* otherwise disable it to prevent a false "Delete files and data" warning
|
|
*/
|
|
if ( $delete_option_backups || $delete_option_settings ) {
|
|
if ( file_exists( MLA_PLUGIN_PATH . 'mla-uninstall.php' ) ) {
|
|
@rename ( MLA_PLUGIN_PATH . 'mla-uninstall.php' , MLA_PLUGIN_PATH . 'uninstall.php' );
|
|
}
|
|
} else {
|
|
if ( file_exists( MLA_PLUGIN_PATH . 'uninstall.php' ) ) {
|
|
@rename ( MLA_PLUGIN_PATH . 'uninstall.php' , MLA_PLUGIN_PATH . 'mla-uninstall.php' );
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Debug logging for "You do not have sufficient permissions to access this page."
|
|
*
|
|
* @since 1.40
|
|
*
|
|
* @return void
|
|
* /
|
|
public static function mla_admin_page_access_denied_action() {
|
|
global $pagenow;
|
|
global $menu;
|
|
global $submenu;
|
|
global $_wp_menu_nopriv;
|
|
global $_wp_submenu_nopriv;
|
|
global $plugin_page;
|
|
global $_registered_pages;
|
|
|
|
error_log( 'DEBUG: mla_admin_page_access_denied_action xdebug_get_function_stack = ' . var_export( xdebug_get_function_stack(), true), 0 );
|
|
error_log( 'DEBUG: mla_admin_page_access_denied_action $_SERVER[REQUEST_URI] = ' . var_export( $_SERVER['REQUEST_URI'], true), 0 );
|
|
error_log( 'DEBUG: mla_admin_page_access_denied_action $_REQUEST = ' . var_export( $_REQUEST, true), 0 );
|
|
error_log( 'DEBUG: mla_admin_page_access_denied_action $pagenow = ' . var_export( $pagenow, true), 0 );
|
|
error_log( 'DEBUG: mla_admin_page_access_denied_action $parent = ' . var_export( get_admin_page_parent(), true), 0 );
|
|
error_log( 'DEBUG: mla_admin_page_access_denied_action $menu = ' . var_export( $menu, true), 0 );
|
|
error_log( 'DEBUG: mla_admin_page_access_denied_action $submenu = ' . var_export( $submenu, true), 0 );
|
|
error_log( 'DEBUG: mla_admin_page_access_denied_action $_wp_menu_nopriv = ' . var_export( $_wp_menu_nopriv, true), 0 );
|
|
error_log( 'DEBUG: mla_admin_page_access_denied_action $_wp_submenu_nopriv = ' . var_export( $_wp_submenu_nopriv, true), 0 );
|
|
error_log( 'DEBUG: mla_admin_page_access_denied_action $plugin_page = ' . var_export( $plugin_page, true), 0 );
|
|
error_log( 'DEBUG: mla_admin_page_access_denied_action $_registered_pages = ' . var_export( $_registered_pages, true), 0 );
|
|
}
|
|
// */
|
|
|
|
/**
|
|
* Load the plugin's Ajax handler
|
|
*
|
|
* @since 1.40
|
|
*
|
|
* @return void
|
|
*/
|
|
public static function mla_admin_init_action() {
|
|
add_action( 'wp_ajax_' . self::JAVASCRIPT_INLINE_EDIT_VIEW_SLUG, 'MLASettings_View::mla_inline_edit_view_action' );
|
|
add_action( 'wp_ajax_' . self::JAVASCRIPT_INLINE_EDIT_UPLOAD_SLUG, 'MLASettings_Upload::mla_inline_edit_upload_action' );
|
|
add_action( 'wp_ajax_' . self::JAVASCRIPT_INLINE_EDIT_CUSTOM_SLUG, 'MLASettings_CustomFields::mla_inline_edit_custom_action' );
|
|
add_action( 'wp_ajax_' . self::JAVASCRIPT_INLINE_MAPPING_CUSTOM_SLUG, 'MLASettings_CustomFields::mla_inline_mapping_custom_action' );
|
|
add_action( 'wp_ajax_' . self::JAVASCRIPT_INLINE_EDIT_IPTC_EXIF_SLUG, 'MLASettings_IPTCEXIF::mla_inline_edit_iptc_exif_action' );
|
|
add_action( 'wp_ajax_' . self::JAVASCRIPT_INLINE_MAPPING_IPTC_EXIF_SLUG, 'MLASettings_IPTCEXIF::mla_inline_mapping_iptc_exif_action' );
|
|
}
|
|
|
|
/**
|
|
* Load the plugin's Style Sheet and Javascript files
|
|
*
|
|
* @since 1.40
|
|
*
|
|
* @param string Name of the page being loaded
|
|
*
|
|
* @return void
|
|
*/
|
|
public static function mla_admin_enqueue_scripts_action( $page_hook ) {
|
|
global $wpdb, $wp_locale;
|
|
|
|
/*
|
|
* Without a tab value, there's nothing to do
|
|
*/
|
|
if ( ( self::$current_page_hook != $page_hook ) || empty( $_REQUEST['mla_tab'] ) ) {
|
|
return;
|
|
}
|
|
|
|
if ( $wp_locale->is_rtl() ) {
|
|
wp_register_style( MLACore::STYLESHEET_SLUG, MLA_PLUGIN_URL . 'css/mla-style-rtl.css', false, MLACore::CURRENT_MLA_VERSION );
|
|
} else {
|
|
wp_register_style( MLACore::STYLESHEET_SLUG, MLA_PLUGIN_URL . 'css/mla-style.css', false, MLACore::CURRENT_MLA_VERSION );
|
|
}
|
|
|
|
wp_enqueue_style( MLACore::STYLESHEET_SLUG );
|
|
}
|
|
|
|
/**
|
|
* Add settings page in the "Settings" section,
|
|
* add screen options and help tabs,
|
|
* add settings link in the Plugins section entry for MLA.
|
|
*
|
|
* @since 0.1
|
|
*
|
|
* @return void
|
|
*/
|
|
public static function mla_admin_menu_action( ) {
|
|
/*
|
|
* We need a tab-specific page ID to manage the screen options on the Views and Uploads tabs.
|
|
* Use the URL suffix, if present. If the URL doesn't have a tab suffix, use '-general'.
|
|
* This hack is required to pass the WordPress "referer" validation.
|
|
*/
|
|
if ( isset( $_REQUEST['page'] ) && is_string( $_REQUEST['page'] ) && ( 'mla-settings-menu-' == substr( $_REQUEST['page'], 0, 18 ) ) ) {
|
|
$tab = substr( $_REQUEST['page'], 18 );
|
|
} else {
|
|
$tab = 'general';
|
|
}
|
|
|
|
$tab = self::_get_options_tablist( $tab ) ? '-' . $tab : '-general';
|
|
self::$current_page_hook = add_submenu_page( 'options-general.php', __( 'Media Library Assistant', 'media-library-assistant' ) . ' ' . __( 'Settings', 'media-library-assistant' ), __( 'Media Library Assistant', 'media-library-assistant' ), 'manage_options', MLACoreOptions::MLA_SETTINGS_SLUG . $tab, 'MLASettings::mla_render_settings_page' );
|
|
add_action( 'load-' . self::$current_page_hook, 'MLASettings::mla_add_menu_options_action' );
|
|
add_action( 'load-' . self::$current_page_hook, 'MLASettings::mla_add_help_tab_action' );
|
|
add_filter( 'plugin_action_links', 'MLASettings::mla_add_plugin_settings_link_filter', 10, 2 );
|
|
}
|
|
|
|
/**
|
|
* Add the "XX Entries per page" filter to the Screen Options tab
|
|
*
|
|
* @since 1.40
|
|
*
|
|
* @return void
|
|
*/
|
|
public static function mla_add_menu_options_action( ) {
|
|
if ( isset( $_REQUEST['mla_tab'] ) ) {
|
|
if ( 'view' == $_REQUEST['mla_tab'] ) {
|
|
$option = 'per_page';
|
|
|
|
$args = array(
|
|
'label' => __( 'Views per page', 'media-library-assistant' ),
|
|
'default' => 10,
|
|
'option' => 'mla_views_per_page'
|
|
);
|
|
|
|
add_screen_option( $option, $args );
|
|
} // view
|
|
elseif ( isset( $_REQUEST['mla-optional-uploads-display'] ) || isset( $_REQUEST['mla-optional-uploads-search'] ) ) {
|
|
$option = 'per_page';
|
|
|
|
$args = array(
|
|
'label' => __( 'Types per page', 'media-library-assistant' ),
|
|
'default' => 10,
|
|
'option' => 'mla_types_per_page'
|
|
);
|
|
|
|
add_screen_option( $option, $args );
|
|
} // optional upload
|
|
elseif ( 'upload' == $_REQUEST['mla_tab'] ) {
|
|
$option = 'per_page';
|
|
|
|
$args = array(
|
|
'label' => __( 'Upload types per page', 'media-library-assistant' ),
|
|
'default' => 10,
|
|
'option' => 'mla_uploads_per_page'
|
|
);
|
|
|
|
add_screen_option( $option, $args );
|
|
} // upload
|
|
elseif ( 'shortcodes' == $_REQUEST['mla_tab'] ) {
|
|
$option = 'per_page';
|
|
|
|
$args = array(
|
|
'label' => __( 'Shortcode templates per page', 'media-library-assistant' ),
|
|
'default' => 10,
|
|
'option' => 'mla_shortcode_templates_per_page'
|
|
);
|
|
|
|
add_screen_option( $option, $args );
|
|
} // shortcodes
|
|
elseif ( 'custom_field' == $_REQUEST['mla_tab'] ) {
|
|
$option = 'per_page';
|
|
|
|
$args = array(
|
|
'label' => __( 'Rules per page', 'media-library-assistant' ),
|
|
'default' => 10,
|
|
'option' => 'mla_custom_field_rules_per_page'
|
|
);
|
|
|
|
add_screen_option( $option, $args );
|
|
} // custom_field
|
|
elseif ( 'iptc_exif' == $_REQUEST['mla_tab'] ) {
|
|
$option = 'per_page';
|
|
|
|
$args = array(
|
|
'label' => __( 'Rules per page', 'media-library-assistant' ),
|
|
'default' => 10,
|
|
'option' => 'mla_iptc_exif_rules_per_page'
|
|
);
|
|
|
|
add_screen_option( $option, $args );
|
|
} // iptc_exif
|
|
elseif ( 'documentation' == $_REQUEST['mla_tab'] ) {
|
|
if ( isset( $_REQUEST['mla-example-display'] ) || isset( $_REQUEST['mla-example-search'] ) ) {
|
|
$option = 'per_page';
|
|
|
|
$args = array(
|
|
'label' => __( 'Plugins per page', 'media-library-assistant' ),
|
|
'default' => 10,
|
|
'option' => 'mla_example_plugins_per_page'
|
|
);
|
|
|
|
add_screen_option( $option, $args );
|
|
}
|
|
} // documentation
|
|
} // isset mla_tab
|
|
}
|
|
|
|
/**
|
|
* Add contextual help tabs to all the MLA pages
|
|
*
|
|
* @since 1.40
|
|
*
|
|
* @return void
|
|
*/
|
|
public static function mla_add_help_tab_action( ) {
|
|
$screen = get_current_screen();
|
|
|
|
// Do we have options/help information for this tab?
|
|
$screen_suffix = substr( $screen->id, strlen( 'settings_page_' . MLACoreOptions::MLA_SETTINGS_SLUG ) ) ;
|
|
if ( ! in_array( $screen_suffix, array( '-view', '-upload', '-shortcodes', '-custom_field', '-iptc_exif', '-documentation' ) ) ) {
|
|
return;
|
|
}
|
|
|
|
$file_suffix = self::$current_page_hook;
|
|
|
|
/*
|
|
* Override the screen suffix if we are going to display something other than the attachment table
|
|
*/
|
|
if ( isset( $_REQUEST['mla-optional-uploads-display'] ) || isset( $_REQUEST['mla-optional-uploads-search'] ) ) {
|
|
$file_suffix .= '-optional';
|
|
} elseif ( isset( $_REQUEST['mla-example-display'] ) || isset( $_REQUEST['mla-example-search'] ) ) {
|
|
$file_suffix = str_replace( '-documentation', '-example', $file_suffix );
|
|
} elseif ( isset( $_REQUEST['mla_admin_action'] ) ) {
|
|
switch ( $_REQUEST['mla_admin_action'] ) {
|
|
case MLACore::MLA_ADMIN_SINGLE_EDIT_DISPLAY:
|
|
$file_suffix .= '-edit';
|
|
break;
|
|
} // switch
|
|
} // isset( $_REQUEST['mla_admin_action'] )
|
|
|
|
$template_array = MLACore::mla_load_template( 'help-for-' . $file_suffix . '.tpl' );
|
|
if ( empty( $template_array ) ) {
|
|
return;
|
|
}
|
|
|
|
if ( !empty( $template_array['sidebar'] ) ) {
|
|
$page_values = array( 'settingsURL' => admin_url('options-general.php') );
|
|
$content = MLAData::mla_parse_template( $template_array['sidebar'], $page_values );
|
|
$screen->set_help_sidebar( $content );
|
|
unset( $template_array['sidebar'] );
|
|
}
|
|
|
|
/*
|
|
* Provide explicit control over tab order
|
|
*/
|
|
$tab_array = array();
|
|
|
|
foreach ( $template_array as $id => $content ) {
|
|
$match_count = preg_match( '#\<!-- title="(.+)" order="(.+)" --\>#', $content, $matches, PREG_OFFSET_CAPTURE );
|
|
|
|
if ( $match_count > 0 ) {
|
|
$page_values = array( 'settingsURL' => admin_url('options-general.php') );
|
|
$content = MLAData::mla_parse_template( $content, $page_values );
|
|
$tab_array[ $matches[ 2 ][ 0 ] ] = array(
|
|
'id' => $id,
|
|
'title' => $matches[ 1 ][ 0 ],
|
|
'content' => $content
|
|
);
|
|
} else {
|
|
/* translators: 1: ERROR tag 2: function name 3: template key */
|
|
MLACore::mla_debug_add( sprintf( _x( '%1$s: %2$s discarding "%3$s"; no title/order', 'error_log', 'media-library-assistant' ), __( 'ERROR', 'media-library-assistant' ), 'mla_add_help_tab_action', $id ), MLACore::MLA_DEBUG_CATEGORY_ANY );
|
|
}
|
|
}
|
|
|
|
ksort( $tab_array, SORT_NUMERIC );
|
|
foreach ( $tab_array as $indx => $value ) {
|
|
$screen->add_help_tab( $value );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Only show screen options on the View and Upload tabs
|
|
*
|
|
* @since 1.40
|
|
*
|
|
* @param boolean True to display "Screen Options", false to suppress them
|
|
* @param string Name of the page being loaded
|
|
*
|
|
* @return boolean True to display "Screen Options", false to suppress them
|
|
*/
|
|
public static function mla_screen_options_show_screen_filter( $show_screen, $this_screen ) {
|
|
if ( self::$current_page_hook == $this_screen->base ) {
|
|
if ( isset( $_REQUEST['mla_tab'] ) && in_array( $_REQUEST['mla_tab'], array( 'view', 'upload' ) ) ) {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return $show_screen;
|
|
}
|
|
|
|
/**
|
|
* Save the "Views/Uploads per page" option set by this user
|
|
*
|
|
* @since 1.40
|
|
*
|
|
* @param mixed false or value returned by previous filter
|
|
* @param string Name of the option being changed
|
|
* @param string New value of the option
|
|
*
|
|
* @return mixed New value if this is our option, otherwise original status
|
|
*/
|
|
public static function mla_set_screen_option_filter( $status, $option, $value ) {
|
|
if ( in_array( $option, array ( 'mla_views_per_page', 'mla_uploads_per_page', 'mla_types_per_page', 'mla_shortcode_templates_per_page', 'mla_custom_field_rules_per_page', 'mla_iptc_exif_rules_per_page', 'mla_example_plugins_per_page' ) ) ) {
|
|
return $value;
|
|
}
|
|
|
|
MLACore::mla_debug_add( __LINE__ . " MLASettings::mla_set_screen_option_filter( {$option} ) status = " . var_export( $status, true ), MLACore::MLA_DEBUG_CATEGORY_ANY );
|
|
MLACore::mla_debug_add( __LINE__ . " MLASettings::mla_set_screen_option_filter( {$option} ) value = " . var_export( $value, true ), MLACore::MLA_DEBUG_CATEGORY_ANY );
|
|
|
|
return $status;
|
|
}
|
|
|
|
/**
|
|
* Add the "Settings" link to the MLA entry in the Plugins section
|
|
*
|
|
* @since 0.1
|
|
*
|
|
* @param array array of links for the Plugin, e.g., "Activate"
|
|
* @param string Directory and name of the plugin Index file
|
|
*
|
|
* @return array Updated array of links for the Plugin
|
|
*/
|
|
public static function mla_add_plugin_settings_link_filter( $links, $file ) {
|
|
if ( $file == 'media-library-assistant/index.php' && current_user_can( 'manage_options' ) ) {
|
|
$settings_link = sprintf( '<a href="%s">%s</a>', admin_url( 'options-general.php?page=' . MLACoreOptions::MLA_SETTINGS_SLUG . '-documentation&mla_tab=documentation' ), __( 'Guide', 'media-library-assistant' ) );
|
|
array_unshift( $links, $settings_link );
|
|
$settings_link = sprintf( '<a href="%s">%s</a>', admin_url( 'options-general.php?page=' . MLACoreOptions::MLA_SETTINGS_SLUG . '-general' ), __( 'Settings', 'media-library-assistant' ) );
|
|
array_unshift( $links, $settings_link );
|
|
}
|
|
|
|
return $links;
|
|
}
|
|
|
|
/**
|
|
* Update or delete a single MLA option value
|
|
*
|
|
* @since 0.80
|
|
* @uses $_REQUEST
|
|
*
|
|
* @param string HTML id/name attribute and option database key (OMIT MLA_OPTION_PREFIX)
|
|
* @param array Option parameters, e.g., 'type', 'std'
|
|
* @param array Custom option definitions
|
|
*
|
|
* @return string HTML markup for the option's table row
|
|
*/
|
|
public static function mla_update_option_row( $key, $value, $option_table = NULL ) {
|
|
$default = MLACore::mla_get_option( $key, true, false, $option_table );
|
|
|
|
/*
|
|
* Checkbox logic is done in the switch statements below,
|
|
* custom logic is done in the handler.
|
|
*/
|
|
if ( ( 'checkbox' != $value['type'] ) && ( 'custom' != $value['type'] ) ) {
|
|
if ( isset( $_REQUEST[ MLA_OPTION_PREFIX . $key ] ) ) {
|
|
$current = $_REQUEST[ MLA_OPTION_PREFIX . $key ];
|
|
} else {
|
|
$current = $default;
|
|
}
|
|
|
|
if ( $current == $default ) {
|
|
unset( $_REQUEST[ MLA_OPTION_PREFIX . $key ] );
|
|
}
|
|
}
|
|
|
|
if ( isset( $_REQUEST[ MLA_OPTION_PREFIX . $key ] ) ) {
|
|
$message = '<br>update_option(' . $key . ")\r\n";
|
|
switch ( $value['type'] ) {
|
|
case 'checkbox':
|
|
if ( 'checked' == $default ) {
|
|
MLACore::mla_delete_option( $key, $option_table );
|
|
} else {
|
|
$message = '<br>check_option(' . $key . ')';
|
|
MLACore::mla_update_option( $key, 'checked', $option_table );
|
|
}
|
|
break;
|
|
case 'header':
|
|
case 'subheader':
|
|
$message = '';
|
|
break;
|
|
case 'radio':
|
|
MLACore::mla_update_option( $key, $_REQUEST[ MLA_OPTION_PREFIX . $key ], $option_table );
|
|
break;
|
|
case 'select':
|
|
MLACore::mla_update_option( $key, $_REQUEST[ MLA_OPTION_PREFIX . $key ], $option_table );
|
|
break;
|
|
case 'text':
|
|
MLACore::mla_update_option( $key, stripslashes( trim( $_REQUEST[ MLA_OPTION_PREFIX . $key ], $option_table ) ) );
|
|
break;
|
|
case 'textarea':
|
|
MLACore::mla_update_option( $key, stripslashes( trim( $_REQUEST[ MLA_OPTION_PREFIX . $key ], $option_table ) ) );
|
|
break;
|
|
case 'custom':
|
|
$message = call_user_func( array( 'MLAOptions', $value['update'] ), 'update', $key, $value, $_REQUEST );
|
|
break;
|
|
case 'hidden':
|
|
break;
|
|
default:
|
|
/* translators: 1: ERROR tag 2: function name 3: option type, e.g., radio, select, text */
|
|
MLACore::mla_debug_add( sprintf( _x( '%1$s: %2$s unknown type = "%3$s"', 'error_log', 'media-library-assistant' ), __( 'ERROR', 'media-library-assistant' ), '_save_settings(1)', var_export( $value, true ) ), MLACore::MLA_DEBUG_CATEGORY_ANY );
|
|
} // $value['type']
|
|
} // isset $key
|
|
else {
|
|
$message = '<br>delete_option(' . $key . ')';
|
|
switch ( $value['type'] ) {
|
|
case 'checkbox':
|
|
if ( 'checked' == $default ) {
|
|
$message = '<br>uncheck_option(' . $key . ')';
|
|
MLACore::mla_update_option( $key, 'unchecked', $option_table );
|
|
} else {
|
|
MLACore::mla_delete_option( $key, $option_table );
|
|
}
|
|
break;
|
|
case 'header':
|
|
case 'subheader':
|
|
$message = '';
|
|
break;
|
|
case 'radio':
|
|
MLACore::mla_delete_option( $key, $option_table );
|
|
break;
|
|
case 'select':
|
|
MLACore::mla_delete_option( $key, $option_table );
|
|
break;
|
|
case 'text':
|
|
MLACore::mla_delete_option( $key, $option_table );
|
|
break;
|
|
case 'textarea':
|
|
MLACore::mla_delete_option( $key, $option_table );
|
|
break;
|
|
case 'custom':
|
|
$message = call_user_func( array( 'MLAOptions', $value['delete'] ), 'delete', $key, $value, $_REQUEST );
|
|
break;
|
|
case 'hidden':
|
|
break;
|
|
default:
|
|
/* translators: 1: ERROR tag 2: function name 3: option type, e.g., radio, select, text */
|
|
MLACore::mla_debug_add( sprintf( _x( '%1$s: %2$s unknown type = "%3$s"', 'error_log', 'media-library-assistant' ), __( 'ERROR', 'media-library-assistant' ), '_save_settings(2)', var_export( $value, true ) ), MLACore::MLA_DEBUG_CATEGORY_ANY );
|
|
} // $value['type']
|
|
} // ! isset $key
|
|
|
|
return $message;
|
|
}
|
|
|
|
/**
|
|
* Compose the table row for a single MLA option
|
|
*
|
|
* @since 0.80
|
|
* @uses $page_template_array contains option and option-item templates
|
|
*
|
|
* @param string HTML id/name attribute and option database key (OMIT MLA_OPTION_PREFIX)
|
|
* @param array Option parameters, e.g., 'type', 'std'
|
|
* @param array Custom option definitions
|
|
*
|
|
* @return string HTML markup for the option's table row
|
|
*/
|
|
public static function mla_compose_option_row( $key, $value, $option_table = NULL ) {
|
|
switch ( $value['type'] ) {
|
|
case 'checkbox':
|
|
$option_values = array(
|
|
'key' => MLA_OPTION_PREFIX . $key,
|
|
'checked' => '',
|
|
'value' => $value['name'],
|
|
'help' => $value['help']
|
|
);
|
|
|
|
if ( 'checked' == MLACore::mla_get_option( $key, false, false, $option_table ) ) {
|
|
$option_values['checked'] = 'checked="checked"';
|
|
}
|
|
|
|
return MLAData::mla_parse_template( self::$page_template_array['checkbox'], $option_values );
|
|
case 'header':
|
|
case 'subheader':
|
|
$option_values = array(
|
|
'Go to Top' => __( 'Go to Top', 'media-library-assistant' ),
|
|
'Go to Bottom' => __( 'Go to Bottom', 'media-library-assistant' ),
|
|
'key' => MLA_OPTION_PREFIX . $key,
|
|
'value' => $value['name']
|
|
);
|
|
|
|
return MLAData::mla_parse_template( self::$page_template_array[ $value['type'] ], $option_values );
|
|
case 'radio':
|
|
$radio_options = '';
|
|
foreach ( $value['options'] as $optid => $option ) {
|
|
$option_values = array(
|
|
'key' => MLA_OPTION_PREFIX . $key,
|
|
'option' => $option,
|
|
'checked' => '',
|
|
'value' => $value['texts'][$optid]
|
|
);
|
|
|
|
if ( $option == MLACore::mla_get_option( $key, false, false, $option_table ) ) {
|
|
$option_values['checked'] = 'checked="checked"';
|
|
}
|
|
|
|
$radio_options .= MLAData::mla_parse_template( self::$page_template_array['radio-option'], $option_values );
|
|
}
|
|
|
|
$option_values = array(
|
|
'value' => $value['name'],
|
|
'options' => $radio_options,
|
|
'help' => $value['help']
|
|
);
|
|
|
|
return MLAData::mla_parse_template( self::$page_template_array['radio'], $option_values );
|
|
case 'select':
|
|
$select_options = '';
|
|
foreach ( $value['options'] as $optid => $option ) {
|
|
$option_values = array(
|
|
'selected' => '',
|
|
'value' => $option,
|
|
'text' => $value['texts'][$optid]
|
|
);
|
|
|
|
if ( $option == MLACore::mla_get_option( $key, false, false, $option_table ) ) {
|
|
$option_values['selected'] = 'selected="selected"';
|
|
}
|
|
|
|
$select_options .= MLAData::mla_parse_template( self::$page_template_array['select-option'], $option_values );
|
|
}
|
|
|
|
$option_values = array(
|
|
'key' => MLA_OPTION_PREFIX . $key,
|
|
'value' => $value['name'],
|
|
'options' => $select_options,
|
|
'help' => $value['help']
|
|
);
|
|
|
|
return MLAData::mla_parse_template( self::$page_template_array['select'], $option_values );
|
|
case 'text':
|
|
$option_values = array(
|
|
'key' => MLA_OPTION_PREFIX . $key,
|
|
'value' => $value['name'],
|
|
'help' => $value['help'],
|
|
'size' => '40',
|
|
'text' => ''
|
|
);
|
|
|
|
if ( !empty( $value['size'] ) ) {
|
|
$option_values['size'] = $value['size'];
|
|
}
|
|
|
|
$option_values['text'] = MLACore::mla_get_option( $key, false, false, $option_table );
|
|
|
|
return MLAData::mla_parse_template( self::$page_template_array['text'], $option_values );
|
|
case 'textarea':
|
|
$option_values = array(
|
|
'key' => MLA_OPTION_PREFIX . $key,
|
|
'value' => $value['name'],
|
|
'options' => $select_options,
|
|
'help' => $value['help'],
|
|
'cols' => '90',
|
|
'rows' => '5',
|
|
'text' => ''
|
|
);
|
|
|
|
if ( !empty( $value['cols'] ) ) {
|
|
$option_values['cols'] = $value['cols'];
|
|
}
|
|
|
|
if ( !empty( $value['rows'] ) ) {
|
|
$option_values['rows'] = $value['rows'];
|
|
}
|
|
|
|
$option_values['text'] = stripslashes( MLACore::mla_get_option( $key, false, false, $option_table ) );
|
|
|
|
return MLAData::mla_parse_template( self::$page_template_array['textarea'], $option_values );
|
|
case 'custom':
|
|
if ( isset( $value['render'] ) ) {
|
|
return call_user_func( array( 'MLAOptions', $value['render'] ), 'render', $key, $value );
|
|
}
|
|
|
|
break;
|
|
case 'hidden':
|
|
break;
|
|
default:
|
|
/* translators: 1: ERROR tag 2: function name 3: option type, e.g., radio, select, text */
|
|
MLACore::mla_debug_add( sprintf( _x( '%1$s: %2$s unknown type = "%3$s"', 'error_log', 'media-library-assistant' ), __( 'ERROR', 'media-library-assistant' ), 'mla_render_settings_page', var_export( $value, true ) ), MLACore::MLA_DEBUG_CATEGORY_ANY );
|
|
} //switch
|
|
|
|
return '';
|
|
}
|
|
|
|
/**
|
|
* Template file for the Settings page(s) and parts
|
|
*
|
|
* This array contains all of the template parts for the Settings page(s). The array is built once
|
|
* each page load and cached for subsequent use.
|
|
*
|
|
* @since 0.80
|
|
*
|
|
* @var array
|
|
*/
|
|
public static $page_template_array = NULL;
|
|
|
|
/**
|
|
* Definitions for Settings page tab ids, titles and handlers
|
|
* Each tab is defined by an array with the following elements:
|
|
*
|
|
* array key => HTML id/name attribute and option database key (OMIT MLA_OPTION_PREFIX)
|
|
*
|
|
* title => tab label / heading text
|
|
* render => rendering function for tab messages and content. Usage:
|
|
* $tab_content = ['render']( );
|
|
*
|
|
* The array must be populated at runtime in MLASettings::_localize_tablist();
|
|
* localization calls cannot be placed in the "public static" array definition itself.
|
|
*
|
|
* @since 0.80
|
|
*
|
|
* @var array
|
|
*/
|
|
private static $mla_tablist = array();
|
|
|
|
/**
|
|
* Localize $mla_tablist array
|
|
*
|
|
* Localization must be done at runtime; these calls cannot be placed in the
|
|
* "public static" array definition itself. Called from MLATest::initialize.
|
|
*
|
|
* @since 1.70
|
|
*
|
|
* @return void
|
|
*/
|
|
private static function _localize_tablist() {
|
|
self::$mla_tablist = array(
|
|
'general' => array( 'title' => __ ( 'General', 'media-library-assistant' ), 'render' => array( 'MLASettings', '_compose_general_tab' ) ),
|
|
'view' => array( 'title' => __ ( 'Views', 'media-library-assistant' ), 'render' => array( 'MLASettings_View', 'mla_compose_view_tab' ) ),
|
|
'upload' => array( 'title' => __ ( 'Uploads', 'media-library-assistant' ), 'render' => array( 'MLASettings_Upload', 'mla_compose_upload_tab' ) ),
|
|
'shortcodes' => array( 'title' => __ ( 'Shortcodes', 'media-library-assistant' ), 'render' => array( 'MLASettings_Shortcodes', 'mla_compose_shortcodes_tab' ) ),
|
|
'custom_field' => array( 'title' => __ ( 'Custom Fields', 'media-library-assistant' ), 'render' => array( 'MLASettings_CustomFields', 'mla_compose_custom_field_tab' ) ),
|
|
'iptc_exif' => array( 'title' => __ ( 'IPTC/EXIF', 'media-library-assistant' ), 'render' => array( 'MLASettings_IPTCEXIF', 'mla_compose_iptc_exif_tab' ) ),
|
|
'documentation' => array( 'title' => __ ( 'Documentation', 'media-library-assistant' ), 'render' => array( 'MLASettings_Documentation', 'mla_compose_documentation_tab' ) ),
|
|
'debug' => array( 'title' => __ ( 'Debug', 'media-library-assistant' ), 'render' => array( 'MLASettings', '_compose_debug_tab' ) ),
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Retrieve the list of options tabs or a specific tab value
|
|
*
|
|
* @since 1.82
|
|
*
|
|
* @param string Tab slug, to retrieve a single entry
|
|
*
|
|
* @return array|false The entire tablist ( $tab = NULL ), a single tab entry or false if not found/not allowed
|
|
*/
|
|
private static function _get_options_tablist( $tab = NULL ) {
|
|
if ( is_string( $tab ) ) {
|
|
if ( isset( self::$mla_tablist[ $tab ] ) ) {
|
|
$results = self::$mla_tablist[ $tab ];
|
|
|
|
if ( ( 'debug' == $tab ) && ( 0 == ( MLA_DEBUG_LEVEL & 1 ) ) ) {
|
|
$results = false;
|
|
}
|
|
} else {
|
|
$results = false;
|
|
}
|
|
} else {
|
|
$results = self::$mla_tablist;
|
|
|
|
if ( 0 == ( MLA_DEBUG_LEVEL & 1 ) ) {
|
|
unset ( $results['debug'] );
|
|
}
|
|
}
|
|
|
|
return apply_filters( 'mla_get_options_tablist', $results, self::$mla_tablist, $tab );
|
|
}
|
|
|
|
/**
|
|
* Compose the navigation tabs for the Settings subpage
|
|
*
|
|
* @since 0.80
|
|
* @uses $page_template_array contains tablist and tablist-item templates
|
|
*
|
|
* @param string Optional data-tab-id value for the active tab, default 'general'
|
|
*
|
|
* @return string HTML markup for the Settings subpage navigation tabs
|
|
*/
|
|
private static function _compose_settings_tabs( $active_tab = 'general' ) {
|
|
$tablist_item = self::$page_template_array['tablist-item'];
|
|
$tabs = '';
|
|
foreach ( self::_get_options_tablist() as $key => $item ) {
|
|
$item_values = array(
|
|
'data-tab-id' => $key,
|
|
'nav-tab-active' => ( $active_tab == $key ) ? 'nav-tab-active' : '',
|
|
'settings-page' => MLACoreOptions::MLA_SETTINGS_SLUG . '-' . $key,
|
|
'title' => $item['title']
|
|
);
|
|
|
|
$tabs .= MLAData::mla_parse_template( $tablist_item, $item_values );
|
|
} // foreach $item
|
|
|
|
$tablist_values = array( 'tablist' => $tabs );
|
|
return MLAData::mla_parse_template( self::$page_template_array['tablist'], $tablist_values );
|
|
}
|
|
|
|
/**
|
|
* Compose the General tab content for the Settings subpage
|
|
*
|
|
* @since 0.80
|
|
* @uses $page_template_array contains tab content template(s)
|
|
*
|
|
* @return array 'message' => status/error messages, 'body' => tab content
|
|
*/
|
|
private static function _compose_general_tab( ) {
|
|
/*
|
|
* Check for submit buttons to change or reset settings.
|
|
* Initialize page messages and content.
|
|
*/
|
|
if ( !empty( $_REQUEST['mla-general-options-save'] ) ) {
|
|
check_admin_referer( MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME );
|
|
$page_content = self::_save_general_settings( );
|
|
} elseif ( !empty( $_REQUEST['mla-general-options-export'] ) ) {
|
|
check_admin_referer( MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME );
|
|
$page_content = self::_export_settings( );
|
|
} elseif ( !empty( $_REQUEST['mla-general-options-import'] ) ) {
|
|
check_admin_referer( MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME );
|
|
$page_content = self::_import_settings( );
|
|
} elseif ( !empty( $_REQUEST['mla-general-options-reset'] ) ) {
|
|
check_admin_referer( MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME );
|
|
$page_content = self::_reset_general_settings( );
|
|
} else {
|
|
$page_content = array(
|
|
'message' => '',
|
|
'body' => ''
|
|
);
|
|
}
|
|
|
|
if ( !empty( $page_content['body'] ) ) {
|
|
return $page_content;
|
|
}
|
|
|
|
$page_values = array(
|
|
'General Processing Options' => __( 'General Processing Options', 'media-library-assistant' ),
|
|
/* translators: 1: - 4: page subheader values */
|
|
'In this tab' => sprintf( __( 'In this tab you can find a number of options for controlling the plugin’s operation. Scroll down to find options for %1$s, %2$s, %3$s and %4$s. Be sure to click "Save Changes" at the bottom of the tab to save any changes you make.', 'media-library-assistant' ), '<strong>' . __( 'Where-used Reporting', 'media-library-assistant' ) . '</strong>', '<strong>' . __( 'Taxonomy Support', 'media-library-assistant' ) . '</strong>', '<strong>' . __( 'Media/Assistant Table Defaults', 'media-library-assistant' ) . '</strong>', '<strong>' . __( 'Media Manager Enhancements', 'media-library-assistant' ) . '</strong>' ),
|
|
'Save Changes' => __( 'Save Changes', 'media-library-assistant' ),
|
|
'Export ALL Settings' => __( 'Export ALL Settings', 'media-library-assistant' ),
|
|
'Delete General options' => __( 'Delete General options and restore default settings', 'media-library-assistant' ),
|
|
'_wpnonce' => wp_nonce_field( MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME, true, false ),
|
|
'_wp_http_referer' => wp_referer_field( false ),
|
|
'Go to Top' => __( 'Go to Top', 'media-library-assistant' ),
|
|
'Go to Bottom' => __( 'Go to Bottom', 'media-library-assistant' ),
|
|
'shortcode_list' => '',
|
|
'form_url' => admin_url( 'options-general.php' ) . '?page=mla-settings-menu-general&mla_tab=general',
|
|
'options_list' => '',
|
|
'import_settings' => '',
|
|
);
|
|
|
|
/*
|
|
* $custom_fields documents the name and description of custom fields
|
|
*/
|
|
$custom_fields = array(
|
|
// array("name" => "field_name", "description" => "field description.")
|
|
);
|
|
|
|
/*
|
|
* $shortcodes documents the name and description of plugin shortcodes
|
|
*/
|
|
$shortcodes = array(
|
|
// array("name" => "shortcode", "description" => "This shortcode...")
|
|
array( 'name' => 'mla_gallery', 'description' => __( 'enhanced version of the WordPress [gallery] shortcode.', 'media-library-assistant' ) . sprintf( ' %1$s <a href="%2$s">%3$s</a>.', __( 'For complete documentation', 'media-library-assistant' ), admin_url( 'options-general.php?page=' . MLACoreOptions::MLA_SETTINGS_SLUG . '-documentation&mla_tab=documentation#mla_gallery' ), __( 'click here', 'media-library-assistant' ) ) ),
|
|
array( 'name' => 'mla_tag_cloud', 'description' => __( 'enhanced version of the WordPress Tag Cloud.', 'media-library-assistant' ) . sprintf( ' %1$s <a href="%2$s">%3$s</a>.', __( 'For complete documentation', 'media-library-assistant' ), admin_url( 'options-general.php?page=' . MLACoreOptions::MLA_SETTINGS_SLUG . '-documentation&mla_tab=documentation#mla_tag_cloud' ), __( 'click here', 'media-library-assistant' ) ) ),
|
|
array( 'name' => 'mla_term_list', 'description' => __( 'provides flat or hierarchical lists, dropdown controls and checkbox lists of taxonomy terms.', 'media-library-assistant' ) . sprintf( ' %1$s <a href="%2$s">%3$s</a>.', __( 'For complete documentation', 'media-library-assistant' ), admin_url( 'options-general.php?page=' . MLACoreOptions::MLA_SETTINGS_SLUG . '-documentation&mla_tab=documentation#mla_term_list' ), __( 'click here', 'media-library-assistant' ) ) ),
|
|
);
|
|
|
|
$shortcode_list = '';
|
|
foreach ( $shortcodes as $shortcode ) {
|
|
$shortcode_values = array ( 'name' => $shortcode['name'], 'description' => $shortcode['description'] );
|
|
$shortcode_list .= MLAData::mla_parse_template( self::$page_template_array['shortcode-item'], $shortcode_values );
|
|
}
|
|
|
|
if ( ! empty( $shortcode_list ) ) {
|
|
$shortcode_values = array (
|
|
'shortcode_list' => $shortcode_list,
|
|
'Shortcodes made available' => __( 'Shortcodes made available by this plugin', 'media-library-assistant' )
|
|
);
|
|
$page_values['shortcode_list'] = MLAData::mla_parse_template( self::$page_template_array['shortcode-list'], $shortcode_values );
|
|
}
|
|
|
|
/*
|
|
* Fill in the current list of Media/Assistant table sortable columns, sorted by their labels.
|
|
* Make sure the current choice still exists or revert to default.
|
|
*/
|
|
$columns = array();
|
|
foreach ( MLAQuery::mla_get_sortable_columns( ) as $key => $value ) {
|
|
if ( ! array_key_exists( $value[1], $columns ) ) {
|
|
$columns[ $value[1] ] = $value[0];
|
|
}
|
|
}
|
|
|
|
uksort( $columns, 'strnatcasecmp' );
|
|
$options = array_merge( array('None' => 'none'), $columns );
|
|
$current = MLACore::mla_get_option( MLACoreOptions::MLA_DEFAULT_ORDERBY );
|
|
MLACoreOptions::$mla_option_definitions[ MLACoreOptions::MLA_DEFAULT_ORDERBY ]['options'] = array();
|
|
MLACoreOptions::$mla_option_definitions[ MLACoreOptions::MLA_DEFAULT_ORDERBY ]['texts'] = array();
|
|
$found_current = false;
|
|
foreach ($options as $key => $value ) {
|
|
MLACoreOptions::$mla_option_definitions[ MLACoreOptions::MLA_DEFAULT_ORDERBY ]['options'][] = $value;
|
|
MLACoreOptions::$mla_option_definitions[ MLACoreOptions::MLA_DEFAULT_ORDERBY ]['texts'][] = $key;
|
|
if ( $current == $value ) {
|
|
$found_current = true;
|
|
}
|
|
}
|
|
|
|
if ( ! $found_current ) {
|
|
MLACore::mla_delete_option( MLACoreOptions::MLA_DEFAULT_ORDERBY );
|
|
}
|
|
|
|
/*
|
|
* Validate the Media Manager sort order or revert to default
|
|
*/
|
|
$options = array_merge( array('— ' . __( 'Media Manager Default', 'media-library-assistant' ) . ' —' => 'default', 'None' => 'none'), $columns );
|
|
$current = MLACore::mla_get_option( MLACoreOptions::MLA_MEDIA_MODAL_ORDERBY );
|
|
MLACoreOptions::$mla_option_definitions[ MLACoreOptions::MLA_MEDIA_MODAL_ORDERBY ]['options'] = array();
|
|
MLACoreOptions::$mla_option_definitions[ MLACoreOptions::MLA_MEDIA_MODAL_ORDERBY ]['texts'] = array();
|
|
$found_current = false;
|
|
foreach ($options as $key => $value ) {
|
|
MLACoreOptions::$mla_option_definitions[ MLACoreOptions::MLA_MEDIA_MODAL_ORDERBY ]['options'][] = $value;
|
|
MLACoreOptions::$mla_option_definitions[ MLACoreOptions::MLA_MEDIA_MODAL_ORDERBY ]['texts'][] = $key;
|
|
if ( $current == $value ) {
|
|
$found_current = true;
|
|
}
|
|
}
|
|
|
|
if ( ! $found_current ) {
|
|
MLACore::mla_delete_option( MLACoreOptions::MLA_MEDIA_MODAL_ORDERBY );
|
|
}
|
|
|
|
$options_list = '';
|
|
foreach ( MLACoreOptions::$mla_option_definitions as $key => $value ) {
|
|
if ( 'general' == $value['tab'] ) {
|
|
$options_list .= self::mla_compose_option_row( $key, $value );
|
|
}
|
|
}
|
|
|
|
$page_values['options_list'] = $options_list;
|
|
$page_values['import_settings'] = self::_compose_import_settings();
|
|
$page_content['body'] = MLAData::mla_parse_template( self::$page_template_array['general-tab'], $page_values );
|
|
return $page_content;
|
|
}
|
|
|
|
/**
|
|
* Get the current action selected from the bulk actions dropdown
|
|
*
|
|
* @since 1.40
|
|
*
|
|
* @return string|false The action name or False if no action was selected
|
|
*/
|
|
public static function mla_current_bulk_action( ) {
|
|
$action = false;
|
|
|
|
if ( isset( $_REQUEST['action'] ) ) {
|
|
if ( -1 != $_REQUEST['action'] ) {
|
|
return $_REQUEST['action'];
|
|
}
|
|
|
|
$action = 'none';
|
|
} // isset action
|
|
|
|
if ( isset( $_REQUEST['action2'] ) ) {
|
|
if ( -1 != $_REQUEST['action2'] ) {
|
|
return $_REQUEST['action2'];
|
|
}
|
|
|
|
$action = 'none';
|
|
} // isset action2
|
|
|
|
return $action;
|
|
}
|
|
|
|
/**
|
|
* Save Debug settings to the options table
|
|
*
|
|
* @since 2.10
|
|
*
|
|
* @uses $_REQUEST
|
|
*
|
|
* @return array Message(s) reflecting the results of the operation
|
|
*/
|
|
private static function _save_debug_settings( ) {
|
|
$message_list = '';
|
|
|
|
foreach ( MLACoreOptions::$mla_option_definitions as $key => $value ) {
|
|
if ( 'debug' == $value['tab'] ) {
|
|
$message_list .= self::mla_update_option_row( $key, $value );
|
|
} // view option
|
|
} // foreach mla_options
|
|
|
|
$page_content = array(
|
|
'message' => __( 'Debug settings saved.', 'media-library-assistant' ) . "\r\n",
|
|
'body' => ''
|
|
);
|
|
|
|
/*
|
|
* Uncomment this for debugging.
|
|
*/
|
|
// $page_content['message'] .= $message_list;
|
|
|
|
return $page_content;
|
|
} // _save_debug_settings
|
|
|
|
/**
|
|
* Compose the Debug tab Debug Settings content for one setting
|
|
*
|
|
* @since 2.14
|
|
*
|
|
* @param string $label Display name for the setting
|
|
* @param string $value Current value for the setting
|
|
*
|
|
* @return string HTML table row markup for the label setting pair
|
|
*/
|
|
private static function _compose_settings_row( $label, $value ) {
|
|
$row = '<tr valign="top"><th scope="row" style="text-align:right;">' . "\n";
|
|
$row .= $label . "\n";
|
|
$row .= '</th><td style="text-align:left;">' . "\n";
|
|
$row .= $value . "\n";
|
|
$row .= '</td></tr>' . "\n";
|
|
|
|
return $row;
|
|
} // _compose_settings_row
|
|
|
|
/**
|
|
* Compose the Debug tab content for the Settings subpage
|
|
*
|
|
* @since 2.10
|
|
* @uses $page_template_array contains tab content template(s)
|
|
*
|
|
* @return array 'message' => status/error messages, 'body' => tab content
|
|
*/
|
|
private static function _compose_debug_tab( ) {
|
|
$page_content = array(
|
|
'message' => '',
|
|
'body' => ''
|
|
);
|
|
|
|
$page_values = array();
|
|
|
|
/*
|
|
* Saving the options can change the log file name, so do it first
|
|
*/
|
|
if ( !empty( $_REQUEST['mla-debug-options-save'] ) ) {
|
|
check_admin_referer( MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME );
|
|
$page_content = self::_save_debug_settings();
|
|
}
|
|
|
|
/*
|
|
* Find the appropriate error log file
|
|
*/
|
|
$error_log_name = MLACore::mla_get_option( MLACoreOptions::MLA_DEBUG_FILE );
|
|
if ( empty( $error_log_name ) ) {
|
|
$error_log_name = ini_get( 'error_log' );
|
|
} else {
|
|
$first = substr( $error_log_name, 0, 1 );
|
|
if ( ( '/' != $first ) && ( '\\' != $first ) ) {
|
|
$error_log_name = '/' . $error_log_name;
|
|
}
|
|
|
|
$error_log_name = WP_CONTENT_DIR . $error_log_name;
|
|
}
|
|
|
|
$error_log_exists = file_exists ( $error_log_name );
|
|
|
|
/*
|
|
* Check for other page-level actions
|
|
*/
|
|
if ( isset( $_REQUEST['mla_reset_log'] ) && 'true' == $_REQUEST['mla_reset_log'] ) {
|
|
$file_error = false;
|
|
$file_handle = @fopen( $error_log_name, 'w' );
|
|
|
|
if ( $file_handle ) {
|
|
$file_error = ( false === @ftruncate( $file_handle, 0 ) );
|
|
@fclose( $file_handle );
|
|
} else {
|
|
$file_error = true;
|
|
}
|
|
|
|
if ( $file_error ) {
|
|
$error_info = error_get_last();
|
|
if ( false !== ( $tail = strpos( $error_info['message'], '</a>]: ' ) ) ) {
|
|
$php_errormsg = ':<br>' . substr( $error_info['message'], $tail + 7 );
|
|
} else {
|
|
$php_errormsg = '.';
|
|
}
|
|
|
|
/* translators: 1: ERROR tag 2: file type 3: file name 4: error message*/
|
|
$page_content['message'] = sprintf( __( '%1$s: Reseting the %2$s file ( %3$s ) "%4$s".', 'media-library-assistant' ), __( 'ERROR', 'media-library-assistant' ), __( 'Error Log', 'media-library-assistant' ), $error_log_name, $php_errormsg );
|
|
} else {
|
|
$error_log_exists = file_exists ( $error_log_name );
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Start with any page-level options
|
|
*/
|
|
$options_list = '';
|
|
foreach ( MLACoreOptions::$mla_option_definitions as $key => $value ) {
|
|
if ( 'debug' == $value['tab'] ) {
|
|
$options_list .= self::mla_compose_option_row( $key, $value );
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Gather Debug Settings
|
|
*/
|
|
$display_limit = MLACore::mla_get_option( MLACoreOptions::MLA_DEBUG_DISPLAY_LIMIT );
|
|
$debug_file = MLACore::mla_get_option( MLACoreOptions::MLA_DEBUG_FILE );
|
|
$replace_php = MLACore::mla_get_option( MLACoreOptions::MLA_DEBUG_REPLACE_PHP_LOG );
|
|
$php_reporting = MLACore::mla_get_option( MLACoreOptions::MLA_DEBUG_REPLACE_PHP_REPORTING );
|
|
$mla_reporting = MLACore::mla_get_option( MLACoreOptions::MLA_DEBUG_REPLACE_LEVEL );
|
|
|
|
if ( $error_log_exists ) {
|
|
/*
|
|
* Add debug content
|
|
*/
|
|
$display_limit = absint( MLACore::mla_get_option( MLACoreOptions::MLA_DEBUG_DISPLAY_LIMIT ) );
|
|
$error_log_size = filesize( $error_log_name );
|
|
|
|
if ( 0 < $display_limit ) {
|
|
if ( $display_limit < $error_log_size ) {
|
|
$error_log_contents = @file_get_contents( $error_log_name, false, NULL, ( $error_log_size - $display_limit ), $display_limit );
|
|
} else {
|
|
$error_log_contents = @file_get_contents( $error_log_name, false );
|
|
}
|
|
} else {
|
|
$error_log_contents = @file_get_contents( $error_log_name, false );
|
|
}
|
|
|
|
if ( false === $error_log_contents ) {
|
|
$error_info = error_get_last();
|
|
if ( false !== ( $tail = strpos( $error_info['message'], '</a>]: ' ) ) ) {
|
|
$php_errormsg = ':<br>' . substr( $error_info['message'], $tail + 7 );
|
|
} else {
|
|
$php_errormsg = '.';
|
|
}
|
|
|
|
/* translators: 1: ERROR tag 2: file type 3: file name 4: error message*/
|
|
$page_content['message'] = sprintf( __( '%1$s: Reading the %2$s file ( %3$s ) "%4$s".', 'media-library-assistant' ), __( 'ERROR', 'media-library-assistant' ), __( 'Error Log', 'media-library-assistant' ), $error_log_name, $php_errormsg );
|
|
$error_log_contents = '';
|
|
} else {
|
|
if ( 0 < $display_limit ) {
|
|
$error_log_contents = substr( $error_log_contents, 0 - $display_limit );
|
|
}
|
|
}
|
|
} else {
|
|
if ( empty( $page_content['message'] ) ) {
|
|
/* translators: 1: file name */
|
|
$page_content['message'] = sprintf( __( 'Error log file (%1$s) not found; click Reset to create it.', 'media-library-assistant' ), $error_log_name );
|
|
}
|
|
|
|
$error_log_size = 0;
|
|
$error_log_contents = '';
|
|
} // file_exists
|
|
|
|
if ( current_user_can( 'upload_files' ) ) {
|
|
if ( $error_log_exists ) {
|
|
$args = array(
|
|
'page' => MLACore::ADMIN_PAGE_SLUG,
|
|
'mla_download_error_log' => 'true',
|
|
);
|
|
$download_link = '<a class="button-secondary" href="' . add_query_arg( $args, MLACore::mla_nonce_url( 'upload.php', MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Download', 'media-library-assistant' ) . ' “' . __( 'Error Log', 'media-library-assistant' ) . '”">' . __( 'Download', 'media-library-assistant' ) . '</a>';
|
|
} else {
|
|
$download_link = '';
|
|
}
|
|
|
|
$args = array(
|
|
'page' => 'mla-settings-menu-debug',
|
|
'mla_tab' => 'debug',
|
|
'mla_reset_log' => 'true'
|
|
);
|
|
$reset_link = '<a class="button-secondary" href="' . add_query_arg( $args, MLACore::mla_nonce_url( 'options-general.php', MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME ) ) . '" title="' . __( 'Reset', 'media-library-assistant' ) . ' “' . __( 'Error Log', 'media-library-assistant' ) . '”">' . __( 'Reset', 'media-library-assistant' ) . '</a>';
|
|
}
|
|
|
|
$settings_list = self::_compose_settings_row( 'Display Limit', $display_limit );
|
|
$settings_list .= self::_compose_settings_row( 'Debug File', $debug_file );
|
|
$settings_list .= self::_compose_settings_row( 'Replace PHP log', $replace_php );
|
|
$settings_list .= self::_compose_settings_row( 'PHP Reporting', $php_reporting );
|
|
$settings_list .= self::_compose_settings_row( 'MLA Reporting', $mla_reporting );
|
|
$settings_list .= self::_compose_settings_row( 'MLA_DEBUG_LEVEL', sprintf( '0x%1$04X', MLA_DEBUG_LEVEL ) );
|
|
$settings_list .= self::_compose_settings_row( 'PHP error_reporting', MLACore::$original_php_reporting );
|
|
$settings_list .= self::_compose_settings_row( 'Old PHP error_log', MLACore::$original_php_log );
|
|
$settings_list .= self::_compose_settings_row( 'New PHP error_log', ini_get( 'error_log' ) );
|
|
$settings_list .= self::_compose_settings_row( 'WP_DEBUG', WP_DEBUG ? 'true' : 'false' );
|
|
$settings_list .= self::_compose_settings_row( 'WP_DEBUG_LOG', WP_DEBUG_LOG ? 'true' : 'false' );
|
|
$settings_list .= self::_compose_settings_row( 'WP_DEBUG_DISPLAY', WP_DEBUG_DISPLAY ? 'true' : 'false' );
|
|
$settings_list .= self::_compose_settings_row( 'WP_CONTENT_DIR', WP_CONTENT_DIR );
|
|
|
|
/*
|
|
* Compose tab content
|
|
*/
|
|
$page_values = array (
|
|
'Debug Options' => __( 'Debug Options', 'media-library-assistant' ),
|
|
'form_url' => admin_url( 'options-general.php' ) . '?page=mla-settings-menu-debug&mla_tab=debug',
|
|
'options_list' => $options_list,
|
|
'Debug Settings' => __( 'Debug Settings', 'media-library-assistant' ),
|
|
'settings_list' => $settings_list,
|
|
'Error Log' => __( 'Error Log', 'media-library-assistant' ),
|
|
/* translators: 1: Documentation hyperlink */
|
|
'You can find' => sprintf( __( 'You can find more information about the MLA Reporting/MLA_DEBUG_LEVEL values in the %1$s section of the Documentation tab.', 'media-library-assistant' ), '<a href="[+settingsURL+]?page=mla-settings-menu-documentation&mla_tab=documentation#mla_debug_tab" title="' . __( 'MLA Debug Tab documentation', 'media-library-assistant' ) . '" target="_blank">' . __( 'MLA Debug Tab', 'media-library-assistant' ) . '</a>' ),
|
|
'settingsURL' => admin_url('options-general.php'),
|
|
'Error Log Name' => $error_log_name,
|
|
'Error Log Size' => number_format( (float) $error_log_size ),
|
|
'error_log_text' => $error_log_contents,
|
|
'download_link' => $download_link,
|
|
'reset_link' => $reset_link,
|
|
'Save Changes' => __( 'Save Changes', 'media-library-assistant' ),
|
|
/* translators: 1: "Save Changes" */
|
|
'Click Save Changes' => sprintf( __( 'Click %1$s to update the %2$s.', 'media-library-assistant' ), '<strong>' . __( 'Save Changes', 'media-library-assistant' ) . '</strong>', __( 'Debug Options', 'media-library-assistant' ) ),
|
|
'_wpnonce' => wp_nonce_field( MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME, true, false ),
|
|
'_wp_http_referer' => wp_referer_field( false )
|
|
);
|
|
|
|
$page_content['body'] = MLAData::mla_parse_template( self::$page_template_array['debug-tab'], $page_values );
|
|
return $page_content;
|
|
}
|
|
|
|
/**
|
|
* Render (echo) the "Media Library Assistant" subpage in the Settings section
|
|
*
|
|
* @since 0.1
|
|
*
|
|
* @return void Echoes HTML markup for the Settings subpage
|
|
*/
|
|
public static function mla_render_settings_page( ) {
|
|
if ( !current_user_can( 'manage_options' ) ) {
|
|
echo __( 'Media Library Assistant', 'media-library-assistant' ) . ' - ' . __( 'ERROR', 'media-library-assistant' ) . "</h2>\r\n";
|
|
wp_die( __( 'You do not have permission to manage plugin settings.', 'media-library-assistant' ) );
|
|
}
|
|
|
|
// Load template array and initialize page-level values.
|
|
$development_version = MLA::MLA_DEVELOPMENT_VERSION;
|
|
$development_version = ( ! empty( $development_version ) ) ? ' (' . $development_version . ')' : '';
|
|
self::$page_template_array = MLACore::mla_load_template( 'admin-display-settings-page.tpl' );
|
|
$current_tab_slug = isset( $_REQUEST['mla_tab'] ) ? $_REQUEST['mla_tab']: 'general';
|
|
$current_tab = self::_get_options_tablist( $current_tab_slug );
|
|
$page_values = array(
|
|
'version' => 'v' . MLACore::CURRENT_MLA_VERSION,
|
|
'development' => $development_version,
|
|
'messages' => '',
|
|
'tablist' => self::_compose_settings_tabs( $current_tab_slug ),
|
|
'tab_content' => '',
|
|
'Media Library Assistant' => __( 'Media Library Assistant', 'media-library-assistant' ),
|
|
'Settings' => __( 'Settings', 'media-library-assistant' )
|
|
);
|
|
//error_log( __LINE__ . " mla_render_settings_page( {$current_tab_slug} ) REQUEST = " . var_export( $_REQUEST, true ), 0 );
|
|
|
|
// Compose tab content
|
|
if ( $current_tab ) {
|
|
if ( isset( $current_tab['render'] ) ) {
|
|
$handler = $current_tab['render'];
|
|
$page_content = call_user_func( $handler );
|
|
} else {
|
|
$page_content = array( 'message' => __( 'ERROR', 'media-library-assistant' ) . ': ' . __( 'Cannot render content tab', 'media-library-assistant' ), 'body' => '' );
|
|
}
|
|
} else {
|
|
$page_content = array( 'message' => __( 'ERROR', 'media-library-assistant' ) . ': ' . __( 'Unknown content tab', 'media-library-assistant' ), 'body' => '' );
|
|
}
|
|
|
|
if ( ! empty( $page_content['message'] ) ) {
|
|
if ( false !== strpos( $page_content['message'], __( 'ERROR', 'media-library-assistant' ) ) ) {
|
|
$messages_class = 'updated error';
|
|
$dismiss_button = '';
|
|
} else {
|
|
$messages_class = 'updated notice is-dismissible';
|
|
$dismiss_button = " <button class=\"notice-dismiss\" type=\"button\"><span class=\"screen-reader-text\">[+dismiss_text+].</span></button>\n";
|
|
}
|
|
|
|
$page_values['messages'] = MLAData::mla_parse_template( self::$page_template_array['messages'], array(
|
|
'mla_messages_class' => $messages_class ,
|
|
'messages' => $page_content['message'],
|
|
'dismiss_button' => $dismiss_button,
|
|
'dismiss_text' => __( 'Dismiss this notice', 'media-library-assistant' ),
|
|
) );
|
|
}
|
|
|
|
$page_values['tab_content'] = $page_content['body'];
|
|
echo MLAData::mla_parse_template( self::$page_template_array['page'], $page_values );
|
|
} // mla_render_settings_page
|
|
|
|
/**
|
|
* Delete a custom field from the wp_postmeta table
|
|
*
|
|
* @since 1.10
|
|
*
|
|
* @param array specific custom_field_mapping rule
|
|
*
|
|
* @return array Message(s) reflecting the results of the operation
|
|
*/
|
|
public static function mla_delete_custom_field( $value ) {
|
|
global $wpdb;
|
|
|
|
$post_meta_ids = $wpdb->get_col( $wpdb->prepare( "SELECT meta_id FROM {$wpdb->postmeta} LEFT JOIN {$wpdb->posts} ON ( {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id ) WHERE {$wpdb->postmeta}.meta_key = '%s' AND {$wpdb->posts}.post_type = 'attachment'", $value['name'] ));
|
|
foreach ( $post_meta_ids as $mid )
|
|
delete_metadata_by_mid( 'post', $mid );
|
|
|
|
$count = count( $post_meta_ids );
|
|
if ( $count ) {
|
|
/* translators: 1: number of attachments */
|
|
$count_text = sprintf( _n( '%s attachment', '%s attachments', $count, 'media-library-assistant' ), $count );
|
|
/* translators: 1: singular/plural number of attachments */
|
|
return sprintf( __( 'Deleted custom field value from %1$s.', 'media-library-assistant' ) . '<br>', $count_text );
|
|
}
|
|
|
|
return __( 'No attachments contained this custom field.', 'media-library-assistant' ) . '<br>';
|
|
} // mla_delete_custom_field
|
|
|
|
/**
|
|
* Save General settings to the options table
|
|
*
|
|
* @since 0.1
|
|
*
|
|
* @uses $_REQUEST
|
|
*
|
|
* @return array Message(s) reflecting the results of the operation
|
|
*/
|
|
private static function _save_general_settings( ) {
|
|
$message_list = '';
|
|
|
|
foreach ( MLACoreOptions::$mla_option_definitions as $key => $value ) {
|
|
if ( 'general' == $value['tab'] ) {
|
|
switch ( $key ) {
|
|
case MLACoreOptions::MLA_FEATURED_IN_TUNING:
|
|
MLACore::$process_featured_in = ( 'disabled' != $_REQUEST[ MLA_OPTION_PREFIX . $key ] );
|
|
break;
|
|
case MLACoreOptions::MLA_INSERTED_IN_TUNING:
|
|
MLACore::$process_inserted_in = ( 'disabled' != $_REQUEST[ MLA_OPTION_PREFIX . $key ] );
|
|
break;
|
|
case MLACoreOptions::MLA_GALLERY_IN_TUNING:
|
|
MLACore::$process_gallery_in = ( 'disabled' != $_REQUEST[ MLA_OPTION_PREFIX . $key ] );
|
|
|
|
if ( 'refresh' == $_REQUEST[ MLA_OPTION_PREFIX . $key ] ) {
|
|
MLAQuery::mla_flush_mla_galleries( MLACoreOptions::MLA_GALLERY_IN_TUNING );
|
|
/* translators: 1: reference type, e.g., Gallery in */
|
|
$message_list .= "<br>" . sprintf( _x( '%1$s - references updated.', 'message_list', 'media-library-assistant' ), __( 'Gallery in', 'media-library-assistant' ) ) . "\r\n";
|
|
$_REQUEST[ MLA_OPTION_PREFIX . $key ] = 'cached';
|
|
}
|
|
break;
|
|
case MLACoreOptions::MLA_MLA_GALLERY_IN_TUNING:
|
|
MLACore::$process_mla_gallery_in = ( 'disabled' != $_REQUEST[ MLA_OPTION_PREFIX . $key ] );
|
|
|
|
if ( 'refresh' == $_REQUEST[ MLA_OPTION_PREFIX . $key ] ) {
|
|
MLAQuery::mla_flush_mla_galleries( MLACoreOptions::MLA_MLA_GALLERY_IN_TUNING );
|
|
/* translators: 1: reference type, e.g., Gallery in */
|
|
$message_list .= "<br>" . sprintf( _x( '%1$s - references updated.', 'message_list', 'media-library-assistant' ), __( 'MLA Gallery in', 'media-library-assistant' ) ) . "\r\n";
|
|
$_REQUEST[ MLA_OPTION_PREFIX . $key ] = 'cached';
|
|
}
|
|
break;
|
|
case MLACoreOptions::MLA_TAXONOMY_SUPPORT:
|
|
/*
|
|
* Replace missing "checkbox" arguments with empty arrays,
|
|
* denoting that all of the boxes are unchecked.
|
|
*/
|
|
if ( ! isset( $_REQUEST['tax_support'] ) ) {
|
|
$_REQUEST['tax_support'] = array();
|
|
}
|
|
if ( ! isset( $_REQUEST['tax_quick_edit'] ) ) {
|
|
$_REQUEST['tax_quick_edit'] = array();
|
|
}
|
|
if ( ! isset( $_REQUEST['tax_term_search'] ) ) {
|
|
$_REQUEST['tax_term_search'] = array();
|
|
}
|
|
if ( ! isset( $_REQUEST['tax_flat_checklist'] ) ) {
|
|
$_REQUEST['tax_flat_checklist'] = array();
|
|
}
|
|
if ( ! isset( $_REQUEST['tax_checked_on_top'] ) ) {
|
|
$_REQUEST['tax_checked_on_top'] = array();
|
|
}
|
|
break;
|
|
case MLACoreOptions::MLA_SEARCH_MEDIA_FILTER_DEFAULTS:
|
|
/*
|
|
* Replace missing "checkbox" arguments with empty arrays,
|
|
* denoting that all of the boxes are unchecked.
|
|
*/
|
|
if ( ! isset( $_REQUEST['search_fields'] ) ) {
|
|
$_REQUEST['search_fields'] = array();
|
|
}
|
|
break;
|
|
default:
|
|
// ignore everything else
|
|
} // switch
|
|
|
|
$message_list .= self::mla_update_option_row( $key, $value );
|
|
} // general option
|
|
} // foreach mla_options
|
|
|
|
$page_content = array(
|
|
'message' => __( 'General settings saved.', 'media-library-assistant' ) . "\r\n",
|
|
'body' => ''
|
|
);
|
|
|
|
/*
|
|
* Uncomment this for debugging.
|
|
*/
|
|
//$page_content['message'] .= $message_list;
|
|
|
|
return $page_content;
|
|
} // _save_general_settings
|
|
|
|
/**
|
|
* Delete saved settings, restoring default values
|
|
*
|
|
* @since 0.1
|
|
*
|
|
* @return array Message(s) reflecting the results of the operation
|
|
*/
|
|
private static function _reset_general_settings( ) {
|
|
$message_list = '';
|
|
|
|
foreach ( MLACoreOptions::$mla_option_definitions as $key => $value ) {
|
|
if ( 'general' == $value['tab'] ) {
|
|
if ( 'custom' == $value['type'] && isset( $value['reset'] ) ) {
|
|
$message = call_user_func( array( 'MLAOptions', $value['reset'] ), 'reset', $key, $value, $_REQUEST );
|
|
} elseif ( ('header' == $value['type']) || ('hidden' == $value['type']) ) {
|
|
$message = '';
|
|
} else {
|
|
MLACore::mla_delete_option( $key );
|
|
/* translators: 1: option name */
|
|
$message = '<br>' . sprintf( _x( 'delete_option "%1$s"', 'message_list', 'media-library-assistant'), $key );
|
|
}
|
|
|
|
$message_list .= $message;
|
|
}
|
|
}
|
|
|
|
$page_content = array(
|
|
'message' => __( 'General settings reset to default values.', 'media-library-assistant' ) . "\r\n",
|
|
'body' => ''
|
|
);
|
|
|
|
/*
|
|
* Uncomment this for debugging.
|
|
*/
|
|
// $page_content['message'] .= $message_list;
|
|
|
|
return $page_content;
|
|
} // _reset_general_settings
|
|
|
|
/**
|
|
* Compose HTML markup for the import settings if any settings files exist
|
|
*
|
|
* @since 1.50
|
|
*
|
|
* @return string HTML markup for the Import All Settings button and dropdown list, if any
|
|
*/
|
|
private static function _compose_import_settings( ) {
|
|
if ( ! file_exists( MLA_BACKUP_DIR ) ) {
|
|
return '';
|
|
}
|
|
|
|
$prefix = ( ( defined( MLA_OPTION_PREFIX ) ) ? MLA_OPTION_PREFIX : 'mla_' ) . '_options_';
|
|
$prefix_length = strlen( $prefix );
|
|
$backup_files = array();
|
|
$files = scandir( MLA_BACKUP_DIR, 1 ); // sort descending
|
|
foreach ( $files as $file ) {
|
|
if ( 0 === strpos( $file, $prefix ) ) {
|
|
$tail = substr( $file, $prefix_length, strlen( $file ) - ( $prefix_length + 4 ) );
|
|
$text = sprintf( '%1$s/%2$s/%3$s %4$s', substr( $tail, 0, 4 ), substr( $tail, 4, 2 ), substr( $tail, 6, 2 ), substr( $tail, 9 ) );
|
|
$backup_files [ $text ] = $file;
|
|
}
|
|
}
|
|
|
|
if ( empty( $backup_files ) ) {
|
|
return '';
|
|
}
|
|
|
|
$option_values = array(
|
|
'value' => 'none',
|
|
'text' => '— ' . __( 'select settings', 'media-library-assistant' ) . ' —',
|
|
'selected' => 'selected="selected"'
|
|
);
|
|
|
|
$select_options = MLAData::mla_parse_template( self::$page_template_array['select-option'], $option_values );
|
|
foreach ( $backup_files as $text => $file ) {
|
|
$option_values = array(
|
|
'value' => esc_attr( $file ),
|
|
'text' => esc_html( $text ),
|
|
'selected' => ''
|
|
);
|
|
|
|
$select_options .= MLAData::mla_parse_template( self::$page_template_array['select-option'], $option_values );
|
|
}
|
|
|
|
$option_values = array(
|
|
'key' => 'mla-import-settings-file',
|
|
'options' => $select_options
|
|
);
|
|
|
|
return '<input name="mla-general-options-import" type="submit" class="button-primary" value="' . __( 'Import ALL Settings', 'media-library-assistant' ) . '" />' . MLAData::mla_parse_template( self::$page_template_array['select-only'], $option_values );
|
|
} // _compose_import_settings
|
|
|
|
/**
|
|
* Serialize option settings and write them to a file
|
|
*
|
|
* Options with a default value, i.e., not stored in the database are NOT written to the file.
|
|
*
|
|
* @since 1.50
|
|
*
|
|
* @return array Message(s) reflecting the results of the operation
|
|
*/
|
|
private static function _export_settings( ) {
|
|
$message_list = '';
|
|
$settings = array();
|
|
$stored_count = 0;
|
|
|
|
/*
|
|
* These are WordPress options, not MLA options
|
|
*/
|
|
foreach( array( 'image_default_align', 'image_default_link_type', 'image_default_size' ) as $key ) {
|
|
$stored_value = get_option( $key );
|
|
if ( empty( $stored_value ) ) {
|
|
$stored_value = 'default';
|
|
}
|
|
|
|
if ( 'default' !== $stored_value ) {
|
|
$settings[ $key ] = $stored_value;
|
|
$stored_count++;
|
|
$message = "<br>{$key} " . _x( 'exported', 'message_list', 'media-library-assistant' );
|
|
} else {
|
|
$message = "<br>{$key} " . _x( 'skipped', 'message_list', 'media-library-assistant' );
|
|
}
|
|
|
|
$message_list .= $message;
|
|
}
|
|
|
|
/*
|
|
* Accumulate the settings into an array, then serialize it for writing to the file.
|
|
*/
|
|
foreach ( MLACoreOptions::$mla_option_definitions as $key => $value ) {
|
|
$stored_value = MLACore::mla_get_option( $key, false, true );
|
|
if ( false !== $stored_value ) {
|
|
$settings[ $key ] = $stored_value;
|
|
$stored_count++;
|
|
$message = "<br>{$key} " . _x( 'exported', 'message_list', 'media-library-assistant' );
|
|
} else {
|
|
$message = "<br>{$key} " . _x( 'skipped', 'message_list', 'media-library-assistant' );
|
|
}
|
|
|
|
$message_list .= $message;
|
|
}
|
|
|
|
$settings = serialize( $settings );
|
|
$page_content = array( 'message' => __( 'ALL settings exported.', 'media-library-assistant' ), 'body' => '' );
|
|
|
|
/*
|
|
* Make sure the directory exists and is writable, then create the file
|
|
*/
|
|
$prefix = ( defined( MLA_OPTION_PREFIX ) ) ? MLA_OPTION_PREFIX : 'mla_';
|
|
$date = date("Ymd_B");
|
|
$filename = MLA_BACKUP_DIR . "{$prefix}_options_{$date}.txt";
|
|
|
|
if ( ! file_exists( MLA_BACKUP_DIR ) && ! @mkdir( MLA_BACKUP_DIR ) ) {
|
|
/* translators: 1: ERROR tag 2: backup directory name */
|
|
$page_content['message'] = sprintf( __( '%1$s: The settings directory ( %2$s ) cannot be created.', 'media-library-assistant' ), __( 'ERROR', 'media-library-assistant' ), MLA_BACKUP_DIR );
|
|
return $page_content;
|
|
} elseif ( ! is_writable( MLA_BACKUP_DIR ) && ! @chmod( MLA_BACKUP_DIR , '0777') ) {
|
|
/* translators: 1: ERROR tag 2: backup directory name */
|
|
$page_content['message'] = sprintf( __( '%1$s: The settings directory ( %2$s ) is not writable.', 'media-library-assistant' ), __( 'ERROR', 'media-library-assistant' ), MLA_BACKUP_DIR );
|
|
return $page_content;
|
|
}
|
|
|
|
if ( ! file_exists( MLA_BACKUP_DIR . 'index.php') ) {
|
|
@ touch( MLA_BACKUP_DIR . 'index.php');
|
|
}
|
|
|
|
$file_handle = @fopen( $filename, 'w' );
|
|
if ( ! $file_handle ) {
|
|
/* translators: 1: ERROR tag 2: backup file name */
|
|
$page_content['message'] = sprintf( __( '%1$s: The settings file ( %2$s ) could not be opened.', 'media-library-assistant' ), __( 'ERROR', 'media-library-assistant' ), $filename );
|
|
return $page_content;
|
|
}
|
|
|
|
if (false === @fwrite($file_handle, $settings)) {
|
|
$error_info = error_get_last();
|
|
/* translators: 1: ERROR tag 2: PHP error information */
|
|
MLACore::mla_debug_add( sprintf( _x( '%1$s: _export_settings $error_info = "%2$s".', 'error_log', 'media-library-assistant' ), __( 'ERROR', 'media-library-assistant' ), var_export( $error_info, true ) ), MLACore::MLA_DEBUG_CATEGORY_ANY );
|
|
|
|
if ( false !== ( $tail = strpos( $error_info['message'], '</a>]: ' ) ) ) {
|
|
$php_errormsg = ':<br>' . substr( $error_info['message'], $tail + 7 );
|
|
} else {
|
|
$php_errormsg = '.';
|
|
}
|
|
|
|
/* translators: 1: ERROR tag 2: backup file name 3: error message*/
|
|
$page_content['message'] = sprintf( __( '%1$s: Writing the settings file ( %2$s ) "%3$s".', 'media-library-assistant' ), __( 'ERROR', 'media-library-assistant' ), $filename, $php_errormsg );
|
|
}
|
|
|
|
fclose($file_handle);
|
|
|
|
/* translators: 1: number of option settings */
|
|
$page_content['message'] = sprintf( __( 'Settings exported; %1$s settings recorded.', 'media-library-assistant' ), $stored_count );
|
|
|
|
/*
|
|
* Uncomment this for debugging.
|
|
*/
|
|
//$page_content['message'] .= $message_list;
|
|
|
|
return $page_content;
|
|
} // _export_settings
|
|
|
|
/**
|
|
* Read a serialized file of option settings and write them to the database
|
|
*
|
|
* @since 1.50
|
|
*
|
|
* @return array Message(s) reflecting the results of the operation
|
|
*/
|
|
private static function _import_settings( ) {
|
|
$page_content = array( 'message' => __( 'No settings imported.', 'media-library-assistant' ), 'body' => '' );
|
|
$message_list = '';
|
|
|
|
if ( isset( $_REQUEST['mla-import-settings-file'] ) ) {
|
|
$filename = $_REQUEST['mla-import-settings-file'];
|
|
|
|
if ( 'none' != $filename ) {
|
|
$filename = MLA_BACKUP_DIR . $filename;
|
|
} else {
|
|
$page_content['message'] = __( 'Please select an import settings file from the dropdown list.', 'media-library-assistant' );
|
|
return $page_content;
|
|
}
|
|
} else {
|
|
$page_content['message'] = __( 'ERROR', 'media-library-assistant' ) . ': ' . __( 'The import settings dropdown selection is missing.', 'media-library-assistant' );
|
|
return $page_content;
|
|
}
|
|
|
|
$settings = @file_get_contents( $filename, false );
|
|
if ( false === $settings ) {
|
|
$error_info = error_get_last();
|
|
/* translators: 1: ERROR tag 2: PHP error information */
|
|
MLACore::mla_debug_add( sprintf( _x( '%1$s: _import_settings $error_info = "%2$s".', 'error_log', 'media-library-assistant' ), __( 'ERROR', 'media-library-assistant' ), var_export( $error_info, true ) ), MLACore::MLA_DEBUG_CATEGORY_ANY );
|
|
|
|
if ( false !== ( $tail = strpos( $error_info['message'], '</a>]: ' ) ) ) {
|
|
$php_errormsg = ':<br>' . substr( $error_info['message'], $tail + 7 );
|
|
} else {
|
|
$php_errormsg = '.';
|
|
}
|
|
|
|
/* translators: 1: ERROR tag 2: backup file name 3: error message*/
|
|
$page_content['message'] = sprintf( __( '%1$s: Reading the settings file ( %2$s ) "%3$s".', 'media-library-assistant' ), __( 'ERROR', 'media-library-assistant' ), $filename, $php_errormsg );
|
|
return $page_content;
|
|
}
|
|
|
|
$settings = unserialize( $settings );
|
|
$updated_count = 0;
|
|
$unchanged_count = 0;
|
|
foreach ( $settings as $key => $value ) {
|
|
/*
|
|
* These are WordPress options, not MLA options
|
|
*/
|
|
if ( in_array( $key, array( 'image_default_align', 'image_default_link_type', 'image_default_size' ) ) ) {
|
|
$stored_value = get_option( $key );
|
|
if ( empty( $stored_value ) ) {
|
|
$stored_value = 'default';
|
|
}
|
|
|
|
if ( $stored_value !== $value ) {
|
|
$updated_count++;
|
|
$message_list .= "<br>{$key} " . _x( 'updated', 'message_list', 'media-library-assistant' );
|
|
} else {
|
|
$unchanged_count++;
|
|
$message_list .= "<br>{$key} " . _x( 'unchanged', 'message_list', 'media-library-assistant' );
|
|
}
|
|
|
|
if ( 'default' === $value ) {
|
|
$value = '';
|
|
}
|
|
|
|
update_option( $key, $value );
|
|
continue;
|
|
}
|
|
|
|
if ( MLACore::mla_update_option( $key, $value ) ) {
|
|
$updated_count++;
|
|
$message_list .= "<br>{$key} " . _x( 'updated', 'message_list', 'media-library-assistant' );
|
|
} else {
|
|
$unchanged_count++;
|
|
$message_list .= "<br>{$key} " . _x( 'unchanged', 'message_list', 'media-library-assistant' );
|
|
}
|
|
}
|
|
|
|
/* translators: 1: number of option settings updated 2: number of option settings unchanged */
|
|
$page_content['message'] = sprintf( __( 'Settings imported; %1$s updated, %2$s unchanged.', 'media-library-assistant' ), $updated_count, $unchanged_count );
|
|
|
|
/*
|
|
* Uncomment this for debugging.
|
|
*/
|
|
//$page_content['message'] .= $message_list;
|
|
|
|
return $page_content;
|
|
} // _import_settings
|
|
} // class MLASettings
|
|
?>
|