Submit
Path:
~
/
home
/
getwphos
/
www
/
deerguard
/
wp-content
/
plugins
/
wp-security-audit-log
/
classes
/
Helpers
/
settings
/
File Content:
class-settings-builder.php
<?php /** * Class: Determine the context in which the plugin is executed. * * Helper class to build settings. * * @package wsal * * @since 5.0.0 */ // phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped declare(strict_types=1); namespace WSAL\Helpers\Settings; use WSAL\Helpers\WP_Helper; use WSAL\MainWP\MainWP_Addon; use WSAL\MainWP\MainWP_Helper; use WSAL\Controllers\Constants; use WSAL\Controllers\Alert_Manager; use WSAL\Entities\Occurrences_Entity; use WSAL\Views\Notifications; use WSAL\Entities\Custom_Notifications_Entity; use WSAL\Extensions\Helpers\Notification_Helper; // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Upgrade notice class */ if ( ! class_exists( '\WSAL\Helpers\Settings\Settings_Builder' ) ) { /** * Utility class for showing the upgrade notice in the plugins page. * * @package fme * * @since 5.0.0 */ class Settings_Builder { /** * The inner item id of the setting * * @var string * * @since 5.0.0 */ public static $item_id; /** * Additional attributes of the item. * * @var string * * @since 5.0.0 */ public static $item_id_attr; /** * Item wrapper - the id of the setting + '_item' suffix * * @var string * * @since 5.0.0 */ public static $item_id_wrap; /** * The name attribute of the element * * @var string * * @since 5.0.0 */ public static $name_attr; /** * Placeholder for the setting * * @var string * * @since 5.0.0 */ public static $placeholder_attr; /** * Custom class for the setting * * @var string * * @since 5.0.0 */ public static $custom_class; /** * The setting value * * @var mixed * * @since 5.0.0 */ public static $current_value; /** * The type of the setting * * @var string * * @since 5.0.0 */ public static $option_type; /** * The name of the setting * * @var string * * @since 5.0.0 */ public static $option_name; /** * Array with the setting settings * * @var array * * @since 5.0.0 */ public static $settings; /** * Integer - minimum value * * @var int * * @since 5.0.0 */ public static $min; /** * Integer - maximum value * * @var int * * @since 5.0.0 */ public static $max; /** * Integer - step value * * @var int * * @since 5.0.0 */ public static $step; /** * Holds the type of the edit HTML field * * @var string * * @since 5.0.0 */ public static $edit_type; /** * Holds the validation pattern for the text field * * @var string * * @since 5.0.0 */ public static $validate_pattern; /** * Holds the maximum characters for the text field * * @var string * * @since 5.0.0 */ public static $max_chars; /** * Holds the title attribute for the text field * * @var string * * @since 5.3.0 */ public static $title_attr; /** * The given field is required * * @var string * * @since 5.0.0 */ public static $required; /** * Current option to work with * * @var array|bool * * @since 5.0.0 */ private static $current_options = \false; /** * Keeps class status * * @var bool * * @since 5.2.2 */ private static $initiated = \false; /** * Inits the class hooks. Can be avoided if not needed. * * @return void * * @since 5.0.0 */ public static function init() { if ( ! self::$initiated ) { /** * Draws the save button in the settings */ \add_action( 'wsal_settings_save_button', array( __CLASS__, 'save_button' ) ); \add_action( 'wp_ajax_wsal_settings_get_posts_titles', function () { if ( is_user_logged_in() && current_user_can( 'manage_options' ) ) { $query_string = ''; $return = array(); if ( isset( $_GET['q'] ) && ! is_null( $_GET['q'] ) ) { $query_string = \sanitize_text_field( \wp_unslash( $_GET['q'] ) ); } $posts = self::get_posts( $query_string ); if ( $posts ) { foreach ( $posts as $post ) { // shorten the title a little. $title = ( mb_strlen( $post->post_title ) > 50 ) ? mb_substr( $post->post_title, 0, 49 ) . '...' : $post->post_title; $return[] = array( 'id' => $post->ID, 'label' => $title, ); } } echo json_encode( $return ); } else { $error = new \WP_Error( 'error_code', 'ERROR: Wrong credentials.' ); wp_send_json_error( $error ); } wp_die(); } ); \add_action( 'wp_ajax_wsal_settings_get_posts_ids', function () { if ( is_user_logged_in() && current_user_can( 'manage_options' ) ) { $query_string = ''; $return = array(); if ( isset( $_GET['q'] ) && ! is_null( $_GET['q'] ) ) { $query_string = \sanitize_text_field( \wp_unslash( $_GET['q'] ) ); } $posts = self::get_posts( $query_string ); if ( $posts ) { foreach ( $posts as $post ) { $return[] = array( 'id' => $post->ID, 'label' => $post->ID, ); } } echo json_encode( $return ); } else { $error = new \WP_Error( 'error_code', 'ERROR: Wrong credentials.' ); wp_send_json_error( $error ); } wp_die(); } ); \add_action( 'wp_ajax_wsal_settings_get_posts', function () { if ( is_user_logged_in() && current_user_can( 'manage_options' ) ) { // we will pass post IDs and titles to this array. $return = array(); $args = array( 's' => isset( $_GET['q'] ) ? \sanitize_text_field( \wp_unslash( $_GET['q'] ) ) : '', // the search query. 'post_status' => 'publish', // if you don't want drafts to be returned. 'ignore_sticky_posts' => 1, 'posts_per_page' => 50, // how much to show at once. ); // you can use WP_Query, query_posts() or get_posts() here - it doesn't matter. $search_results = new \WP_Query( $args ); if ( $search_results->have_posts() ) { while ( $search_results->have_posts() ) { $search_results->the_post(); // shorten the title a little. $title = ( mb_strlen( $search_results->post->post_title ) > 50 ) ? mb_substr( $search_results->post->post_title, 0, 49 ) . '...' : $search_results->post->post_title; if ( isset( $_GET['type'] ) && 'input' === $_GET['type'] ) { $return[] = array( 'id' => $search_results->post->ID, 'label' => $title, ); } else { $return[] = array( $search_results->post->ID, $title ); // array( Post ID, Post Title ). } } } echo json_encode( $return ); } else { $error = new \WP_Error( 'error_code', 'ERROR: Wrong credentials.' ); wp_send_json_error( $error ); } wp_die(); } ); \add_action( 'wp_ajax_wsal_settings_get_users', function () { if ( is_user_logged_in() && current_user_can( 'manage_options' ) ) { $result = array(); $query_params = array(); if ( isset( $_GET['q'] ) && ! is_null( $_GET['q'] ) ) { $query_params['search'] = '*' . \sanitize_text_field( \wp_unslash( $_GET['q'] ) ) . '*'; $query_params['search_columns'] = array( 'user_login', 'user_email' ); } if ( WP_Helper::is_multisite() ) { $query_params['blog_id'] = 0; } $users = \get_users( $query_params ); if ( MainWP_Addon::check_mainwp_plugin_active() ) { $mainwp_users = MainWP_Helper::find_users_by( $query_params['search_columns'], array( str_replace( '*', '%', $query_params['search'] ) ) ); $users = array_merge( $users, $mainwp_users ); } if ( empty( $users ) ) { return $result; } else { foreach ( $users as $user ) { $return[] = array( 'id' => $user->ID, 'label' => $user->user_login . ' (' . $user->user_email . ')', ); } } echo json_encode( $return ); } else { $error = new \WP_Error( 'error_code', 'ERROR: Wrong credentials.' ); wp_send_json_error( $error ); } wp_die(); } ); \add_action( 'wp_ajax_wsal_settings_get_roles', function () { if ( is_user_logged_in() && current_user_can( 'manage_options' ) ) { $search = ''; if ( isset( $_GET['q'] ) && ! is_null( $_GET['q'] ) ) { $search = \sanitize_text_field( \wp_unslash( $_GET['q'] ) ); } $role_names = WP_Helper::get_translated_roles(); if ( MainWP_Addon::check_mainwp_plugin_active() ) { $mainwp_roles = MainWP_Helper::get_collected_roles(); $role_names = array_merge( $role_names, $mainwp_roles ); } $return = array(); if ( empty( $role_names ) ) { return $return; } else { asort( $role_names ); foreach ( $role_names as $slug => $label ) { if ( ! empty( $search ) ) { if ( false !== \mb_strpos( $slug, $search ) || false !== \mb_strpos( $label, $search ) ) { $return[] = array( 'id' => $slug, 'label' => $label, ); } } else { $return[] = array( 'id' => $slug, 'label' => $label, );} } } echo json_encode( $return ); } else { $error = new \WP_Error( 'error_code', 'ERROR: Wrong credentials.' ); wp_send_json_error( $error ); } wp_die(); } ); \add_action( 'wp_ajax_wsal_settings_get_ips', function () { if ( is_user_logged_in() && current_user_can( 'manage_options' ) ) { $result = array(); $search = ''; if ( isset( $_GET['q'] ) && ! is_null( $_GET['q'] ) ) { $search = \sanitize_text_field( \wp_unslash( $_GET['q'] ) ); } $ips = Occurrences_Entity::get_ips_logged_search( $search ); if ( empty( $ips ) ) { return $result; } else { foreach ( $ips as $ip ) { $return[] = array( 'id' => $ip, 'label' => $ip, ); } } echo json_encode( $return ); } else { $error = new \WP_Error( 'error_code', 'ERROR: Wrong credentials.' ); wp_send_json_error( $error ); } wp_die(); } ); \add_action( 'wp_ajax_wsal_settings_get_sites', function () { if ( \is_user_logged_in() && \current_user_can( 'manage_options' ) ) { $result = array(); $search = ''; if ( isset( $_GET['q'] ) && ! is_null( $_GET['q'] ) ) { $search = \sanitize_text_field( \wp_unslash( $_GET['q'] ) ); } if ( WP_Helper::is_multisite() || MainWP_Addon::check_mainwp_plugin_active() ) { $sites = array(); if ( function_exists( 'get_sites' ) && class_exists( 'WP_Site_Query' ) ) { $sites = \get_sites(); } if ( MainWP_Addon::check_mainwp_plugin_active() ) { $sites = array_merge( $sites, MainWP_Helper::get_all_sites_array() ); } if ( empty( $sites ) ) { return $result; } else { foreach ( $sites as $site ) { if ( property_exists( $site, 'site_name' ) ) { $blogname = $site->site_name; } else { $blogname = \get_blog_option( $site->blog_id, 'blogname' ); } if ( false !== \mb_strpos( \mb_strtolower( $blogname ), \mb_strtolower( $search ) ) ) { $result[] = array( 'id' => $site->blog_id, 'label' => $blogname, ); } } } echo json_encode( $result ); } } else { $error = new \WP_Error( 'error_code', 'ERROR: Wrong credentials.' ); wp_send_json_error( $error ); } wp_die(); } ); self::$initiated = true; } } /** * Builds the element * * @param array $settings - Array with settings. * @param string $option_name - Name of the option. * @param mixed $data - The data to show. * * @return void * * @since 5.0.0 */ public static function create( $settings, $option_name, $data ) { self::$item_id = null; self::$item_id_attr = null; self::$item_id_wrap = null; self::$name_attr = null; self::$placeholder_attr = null; self::$custom_class = null; self::$current_value = null; self::$option_type = null; self::$option_name = null; self::$settings = null; self::$edit_type = null; self::$validate_pattern = null; self::$max_chars = null; self::$min = null; self::$max = null; self::$step = null; self::prepare_data( $settings, $option_name, $data ); if ( empty( self::$option_type ) ) { return; } // Options Without Labels. $with_label = false; switch ( self::$option_type ) { case 'tab-title': self::tab_title(); break; case 'header': self::section_head(); break; case 'message': case 'success': case 'error': self::notice_message(); break; case 'hint': self::hint_message(); break; case 'hidden': self::hidden(); break; case 'html': self::html(); break; default: $with_label = true; break; } // Options With Label. if ( $with_label ) { /** Option Start */ self::option_head(); /** The Option */ switch ( self::$option_type ) { case 'text': self::text(); break; case 'button': self::button(); break; case 'arrayText': self::text_array(); break; case 'number': self::number(); break; case 'radio': self::radio(); break; case 'checkbox': self::checkbox(); break; case 'select-multiple': self::multiple_select(); break; case 'select2-multiple': self::multiple_select2(); break; case 'builder': self::builder(); break; case 'date': self::date(); break; case 'textarea': self::textarea(); break; case 'color': self::color(); break; case 'posts': self::posts(); break; case 'post': self::post(); break; case 'users': self::users(); break; case 'sites': self::sites(); break; case 'roles': self::roles(); break; case 'ips': self::ips(); break; case 'post_titles': self::post_titles(); break; case 'post_ids': self::post_ids(); break; case 'editor': self::editor(); break; case 'fonts': self::fonts(); break; case 'upload': self::upload(); break; case 'upload-font': self::upload_font(); break; case 'typography': self::typography(); break; case 'background': self::background(); break; case 'select': self::select(); break; case 'visual': self::visual(); break; case 'gallery': self::gallery(); break; case 'icon': self::icon(); break; default: break; } /** Option END */ if ( 'upload' !== self::$option_type ) { self::hint(); } echo '</div>'; } } /** * HTML code * * @since 5.0.0 */ private static function html() { if ( ! empty( self::$settings['content'] ) ) { echo self::$settings['content']; } } /** * Setting Description * * @since 5.0.0 */ private static function hint() { if ( ! empty( self::$settings['hint'] ) ) { ?> <span class="extra-text"> <?php echo self::$settings['hint']; ?> </span> <?php } if ( ! empty( self::$settings['info'] ) ) { ?> <span style="line-height: 2;"> <?php echo self::$settings['info']; ?> </span> <?php } } /** * Upload * * @since 5.0.0 */ private static function upload() { $upload_button = ! empty( self::$settings['custom_text'] ) ? self::$settings['custom_text'] : esc_html__( 'Upload', 'wp-security-audit-log' ); $image_preview = ! empty( self::$current_value ) ? self::$current_value : ''; $hide_preview = ! empty( self::$current_value ) ? '' : 'style="display:none"'; ?> <div class="image-preview-wrapper"> <input <?php echo self::$item_id_attr; ?> <?php echo self::$name_attr; ?> class="wsal-img-path" type="text" value="<?php echo esc_attr( self::$current_value ); ?>" <?php echo self::$placeholder_attr; ?>> <input id="<?php echo 'upload_' . self::$item_id . '_button'; ?>" type="button" class="wsal-upload-img button" value="<?php echo $upload_button; ?>"> <?php self::hint(); ?> </div> <div id="<?php echo self::$item_id . '-preview'; ?>" class="img-preview" <?php echo $hide_preview; ?>> <img src="<?php echo $image_preview; ?>" alt=""> <a class="del-img"></a> </div> <div class="clear"></div> <?php } /** * Upload Font * * @since 5.0.0 */ private static function upload_font() { $upload_button = ! empty( self::$settings['custom_text'] ) ? self::$settings['custom_text'] : esc_html__( 'Upload', 'wp-security-audit-log' ); ?> <div class="image-preview-wrapper"> <input <?php echo self::$item_id_attr; ?> <?php echo self::$name_attr; ?> class="wsal-font-path" type="text" value="<?php echo esc_attr( self::$current_value ); ?>" <?php echo self::$placeholder_attr; ?>> <input id="<?php echo 'upload_' . self::$item_id . '_button'; ?>" type="button" class="wsal-upload-font button" value="<?php echo $upload_button; ?>"> <?php self::hint(); ?> </div> <?php } /** * Text * * @since 5.0.0 */ private static function text() { $type_attr = 'type="text"'; $pattern = ''; $step = ''; $max_chars = ''; $title_attr = ''; if ( ! empty( self::$edit_type ) ) { $type_attr = ' type="' . self::$edit_type . '"'; } if ( ! empty( self::$title_attr ) ) { $title_attr = ' title="' . self::$title_attr . '"'; } if ( ! empty( self::$validate_pattern ) ) { $pattern = ' pattern="' . self::$validate_pattern . '"'; } if ( ! empty( self::$step ) ) { $step = ' step="' . self::$step . '"'; } if ( ! empty( self::$max_chars ) ) { $max_chars = ' maxlength="' . self::$max_chars . '"'; } ?> <input <?php echo self::$item_id_attr; ?> <?php echo $title_attr; ?> <?php echo self::$name_attr; ?> <?php echo $type_attr; ?> value="<?php echo esc_attr( self::$current_value ); ?>" <?php echo self::$placeholder_attr; ?><?php echo $pattern; ?><?php echo $max_chars; ?><?php echo ( ( self::$required ) ? ' required' : '' ); ?><?php echo $step; ?>> <?php } /** * Text * * @since 5.0.0 */ private static function button() { $type_attr = 'type="button"'; $pattern = ''; $step = ''; $max_chars = ''; if ( ! empty( self::$edit_type ) ) { $type_attr = ' type="' . self::$edit_type . '"'; } if ( ! empty( self::$validate_pattern ) ) { $pattern = ' pattern="' . self::$validate_pattern . '"'; } if ( ! empty( self::$step ) ) { $step = ' step="' . self::$step . '"'; } if ( ! empty( self::$max_chars ) ) { $max_chars = ' maxlength="' . self::$max_chars . '"'; } ?> <input class="wsal-primary-button button" <?php echo self::$item_id_attr; ?> <?php echo self::$name_attr; ?> <?php echo $type_attr; ?> value="<?php echo esc_attr( self::$current_value ); ?>" <?php echo self::$placeholder_attr; ?><?php echo $pattern; ?><?php echo $max_chars; ?><?php echo ( ( self::$required ) ? ' required' : '' ); ?><?php echo $step; ?>> <?php } /** * Date * * @since 5.0.0 */ private static function date() { $type_attr = 'type="date"'; $pattern = ''; $extra = ''; if ( ! empty( self::$min ) ) { $extra = ' min="' . self::$min . '"'; } if ( ! empty( self::$max ) ) { $extra = ' max="' . self::$max . '"'; } if ( ! empty( self::$validate_pattern ) ) { $pattern = ' pattern="' . self::$validate_pattern . '"'; } $custom_class = self::$custom_class . ' date-range'; ?> <input <?php echo self::$item_id_attr; ?> <?php echo self::$name_attr; ?> <?php echo $type_attr; ?> <?php echo $extra; ?> class="<?php echo $custom_class; ?>" value="<?php echo esc_attr( self::$current_value ); ?>" <?php echo self::$placeholder_attr; ?><?php echo $pattern; ?><?php echo ( ( self::$required ) ? ' required' : '' ); ?>> <?php } /** * Text Array * * @since 5.0.0 */ private static function text_array() { $key = self::$settings['key']; $single_name = self::$option_name . '[' . $key . ']'; $current_value = ! empty( self::$current_value[ $key ] ) ? self::$current_value[ $key ] : ''; ?> <input name="<?php echo $single_name; ?>" type="text" value="<?php echo $current_value; ?>" <?php echo self::$placeholder_attr; ?>> <?php } /** * Checkbox * * @since 5.0.0 */ private static function checkbox() { $checked = checked( self::$current_value, true, false ); $toggle_data = ! empty( self::$settings['toggle'] ) ? 'data-wsal-toggle="' . self::$settings['toggle'] . '"' : ''; $toggle_class = ( ! empty( self::$settings['toggle'] ) || ! empty( self::$settings['untoggle'] ) ) ? 'wsal-toggle-option' : ''; $untoggle_data = ! empty( self::$settings['untoggle'] ) ? 'data-wsal-untoggle="' . self::$settings['untoggle'] . '"' : ''; ?> <input <?php echo self::$item_id_attr; ?> <?php echo self::$name_attr; ?> class="wsal-js-switch <?php echo $toggle_class; ?>" <?php echo $toggle_data; ?> <?php echo $untoggle_data; ?> type="checkbox" value="true" <?php echo $checked; ?>> <?php } /** * Radio * * @since 5.0.0 */ private static function radio() { ?> <div class="option-contents"> <?php $i = 0; foreach ( self::$settings['options'] as $option_key => $option ) { ++$i; $checked = ''; if ( ( ! empty( self::$current_value ) && self::$current_value == $option_key ) || ( empty( self::$current_value ) && 1 === $i ) ) { $checked = 'checked="checked"'; } ?> <label> <input <?php echo self::$name_attr; ?> <?php echo $checked; ?> type="radio" value="<?php echo $option_key; ?>"> <?php echo $option; ?> </label> <?php } ?> </div> <div class="clear"></div> <?php if ( empty( self::$settings['toggle'] ) ) { return; } ?> <script> jQuery(document).ready(function() { jQuery('.<?php echo esc_js( self::$item_id ); ?>-options').hide(); <?php if ( isset( self::$settings['toggle'][ self::$current_value ] ) ) { // For the option that doesn't have sub option such as the Logo > Title option. if ( ! empty( self::$settings['toggle'][ self::$current_value ] ) ) { ?> jQuery('<?php echo esc_js( self::$settings['toggle'][ self::$current_value ] ); ?>').show(); <?php } } elseif ( is_array( self::$settings['toggle'] ) ) { $first_elem = reset( self::$settings['toggle'] ) ?> jQuery('<?php echo esc_js( $first_elem ); ?>').show(); <?php } ?> jQuery("input[name='<?php echo esc_js( self::$option_name ); ?>']").change(function() { selected_val = jQuery(this).val(); jQuery('.<?php echo esc_js( self::$item_id ); ?>-options').slideUp('fast'); <?php foreach ( self::$settings['toggle'] as $tg_item_name => $tg_item_id ) { if ( ! empty( $tg_item_id ) ) { ?> if (selected_val == '<?php echo esc_js( $tg_item_name ); ?>') { jQuery('<?php echo esc_js( $tg_item_id ); ?>').slideDown('fast'); } <?php } } ?> }); }); </script> <?php } /** * Multiple Select * * @since 5.0.0 */ private static function multiple_select() { ?> <select name="<?php echo self::$option_name . '[]'; ?>" <?php echo self::$item_id_attr; ?> multiple="multiple"> <?php $data = maybe_unserialize( self::$current_value ); $i = 0; foreach ( self::$settings['options'] as $option_key => $option ) { $selected = ''; if ( ( ! empty( $data ) && ! is_array( $data ) && $data === $option_key ) || ( ! empty( $data ) && is_array( $data ) && in_array( $option_key, $data, true ) ) || ( empty( $data ) && 1 === $i ) ) { $selected = 'selected="selected"'; } ?> <option value="<?php echo $option_key; ?>" <?php echo $selected; ?>><?php echo $option; ?></option> <?php } ?> </select> <?php } /** * Multiple Select * * @since 5.0.0 */ private static function multiple_select2() { ?> <div class="wsal-custom-select2-selector"> <div style="width:99%;max-width:25em; float:left;"> <select name="<?php echo self::$option_name . '[]'; ?>" <?php echo self::$item_id_attr; ?> multiple="multiple"> <?php $data = maybe_unserialize( self::$current_value ); $i = 0; foreach ( self::$settings['options'] as $option_key => $option ) { $selected = ''; if ( ( ! empty( $data ) && ! is_array( $data ) && $data === $option_key ) || ( ! empty( $data ) && is_array( $data ) && in_array( $option_key, $data ) ) || ( empty( $data ) && 1 === $i ) ) { $selected = 'selected="selected"'; } ?> <option value="<?php echo $option_key; ?>" <?php echo $selected; ?>><?php echo $option; ?></option> <?php } ?> </select> </div> </div> <script> jQuery('#<?php echo self::$item_id; ?>').select2({ width: '100%', containerCssClass: "s24wp-wrapper" }); </script> <?php } // phpcs:disable // phpcs:enable // phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped /** * Textarea * * @since 5.0.0 */ private static function textarea() { ?> <textarea <?php echo self::$item_id_attr; ?> <?php echo self::$name_attr; ?> rows="3"><?php echo \esc_textarea( (string) self::$current_value ); ?></textarea> <?php } /** * Color * * @since 5.0.0 */ private static function color() { $custom_class = ! empty( self::$settings['color_class'] ) ? self::$settings['color_class'] : 'wsalColorSelectortor'; ?> <div class="wsal-custom-color-picker"> <input class="<?php echo $custom_class; ?>" <?php echo self::$item_id_attr; ?> <?php echo self::$name_attr; ?> type="text" value="<?php echo self::$current_value; ?>" data-palette="#000000, #9b59b6, #3498db, #2ecc71, #f1c40f, #34495e, #e74c3c" style="width:80px;"> </div> <?php } /** * Posts selector * * @since 5.0.0 */ private static function posts() { ?> <div class="wsal-custom-posts-selector"> <div style="width:99%;max-width:25em; float:left;"> <select name="<?php echo self::$option_name . '[]'; ?>" <?php echo self::$item_id_attr; ?> multiple="multiple" style="width:100%"> <?php $data = maybe_unserialize( self::$current_value ); if ( ! is_null( $data ) && ! empty( $data ) ) { $args = array( 'post_type' => 'any', 'post__in' => $data, 'orderby' => 'post__in', ); // The Query. $query = new \WP_Query( $args ); $posts = $query->posts; foreach ( $posts as $post ) { ?> <option value="<?php echo $post->ID; ?>" selected="selected"> <?php echo esc_html( $post->post_title ); ?> </option> <?php } } ?> </select> </div> </div> <?php } /** * Post * * @since 5.0.0 */ private static function post() { ?> <div class="wsal-custom-post-selector"> <input type="text" value="<?php echo esc_attr( get_the_title( self::$current_value ) ); ?>" <?php echo self::$placeholder_attr; ?>> <input <?php echo self::$item_id_attr; ?> <?php echo self::$name_attr; ?> type="hidden" value="<?php echo esc_attr( self::$current_value ); ?>" <?php echo self::$placeholder_attr; ?>> </div> <?php } /** * Posts selector * * @since 5.0.0 */ private static function users() { ?> <div class="wsal-custom-users-selector"> <div style="width:99%;max-width:25em; float:left;"> <select name="<?php echo self::$option_name . '[]'; ?>" <?php echo self::$item_id_attr; ?> multiple="multiple" style="width:100%"> <?php $data = maybe_unserialize( self::$current_value ); if ( ! is_null( $data ) && ! empty( $data ) ) { $query_params = array( 'include' => $data, // Get users of these IDs. 'fields' => array( 'ID', 'display_name', 'user_login', 'user_email' ), ); if ( WP_Helper::is_multisite() ) { $query_params['blog_id'] = 0; } $users = \get_users( $query_params ); if ( MainWP_Addon::check_mainwp_plugin_active() ) { $mainwp_users = MainWP_Helper::find_users_by( $query_params['fields'], $data ); $users = array_merge( $users, $mainwp_users ); } if ( ! empty( $users ) ) { foreach ( $users as $user ) { ?> <option value="<?php echo $user->ID; ?>" selected="selected"> <?php echo \esc_html( $user->user_login . ' (' . $user->user_email . ')' ); ?> </option> <?php } } } ?> </select> </div> </div> <?php } /** * Roles selector * * @since 5.0.0 */ private static function roles() { ?> <div class="wsal-custom-roles-selector"> <div style="width:99%;max-width:25em; float:left;"> <select name="<?php echo self::$option_name . '[]'; ?>" <?php echo self::$item_id_attr; ?> multiple="multiple" style="width:100%"> <?php $data = maybe_unserialize( self::$current_value ); if ( ! is_null( $data ) && ! empty( $data ) ) { $roles_data = WP_Helper::get_translated_roles(); if ( MainWP_Addon::check_mainwp_plugin_active() ) { $mainwp_roles = MainWP_Helper::get_collected_roles(); $roles_data = array_merge( $roles_data, $mainwp_roles ); } if ( ! empty( $roles_data ) && ! empty( $data ) ) { foreach ( $data as $role ) { if ( isset( $roles_data[ $role ] ) && ! empty( $roles_data[ $role ] ) ) { ?> <option value="<?php echo $role; ?>" selected="selected"> <?php echo esc_html( $roles_data[ $role ] ); ?> </option> <?php } } } } ?> </select> </div> </div> <?php } /** * Ips selector * * @since 5.0.0 */ private static function ips() { ?> <div class="wsal-custom-ips-selector"> <div style="width:99%;max-width:25em; float:left;"> <select name="<?php echo self::$option_name . '[]'; ?>" <?php echo self::$item_id_attr; ?> multiple="multiple" style="width:100%"> <?php $data = maybe_unserialize( self::$current_value ); if ( ! is_null( $data ) ) { if ( ! empty( $data ) ) { foreach ( $data as $ip ) { ?> <option value="<?php echo $ip; ?>" selected="selected"> <?php echo esc_html( $ip ); ?> </option> <?php } } } ?> </select> </div> </div> <?php } /** * Sites selector * * @since 5.0.0 */ private static function sites() { ?> <div class="wsal-custom-sites-selector"> <div style="width:99%;max-width:25em; float:left;"> <select name="<?php echo self::$option_name . '[]'; ?>" <?php echo self::$item_id_attr; ?> multiple="multiple" style="width:100%"> <?php $data = maybe_unserialize( self::$current_value ); if ( ! is_null( $data ) && ! empty( $data ) ) { $sites = array(); if ( function_exists( '\get_sites' ) ) { $query_params = array( 'site__in' => $data, ); $sites = \get_sites( $query_params ); } if ( MainWP_Addon::check_mainwp_plugin_active() ) { $mainwp_sites = MainWP_Helper::get_all_sites_array(); $found_mainwp_sites = array(); foreach ( $data as $site_id ) { $search_site = false; if ( 0 === $site_id ) { $search_site = true; } if ( 0 < ( (int) $site_id - MainWP_Helper::SET_SITE_ID_NUMBER ) ) { $search_site = true; } if ( $search_site ) { foreach ( $mainwp_sites as $site_mainwp ) { if ( $site_id === $site_mainwp->blog_id ) { $found_mainwp_sites[] = $site_mainwp; break; } } } } $sites = array_merge( $sites, $found_mainwp_sites ); } if ( ! empty( $sites ) ) { foreach ( $sites as $site ) { ?> <option value="<?php echo $site->blog_id; ?>" selected="selected"> <?php if ( property_exists( $site, 'site_name' ) ) { echo \esc_html( $site->site_name ); } else { echo \esc_html( \get_blog_option( $site->blog_id, 'blogname' ) ); } ?> </option> <?php } } } ?> </select> </div> </div> <?php } /** * Post titles selector * * @since 5.0.0 */ private static function post_titles() { ?> <div class="wsal-custom-post-titles-selector"> <div style="width:99%;max-width:25em; float:left;"> <select name="<?php echo self::$option_name . '[]'; ?>" <?php echo self::$item_id_attr; ?> multiple="multiple" style="width:100%"> <?php $data = maybe_unserialize( self::$current_value ); if ( ! is_null( $data ) ) { if ( ! empty( $data ) ) { foreach ( $data as $post_title ) { $title = \get_the_title( $post_title ); $title = ( mb_strlen( $title ) > 50 ) ? mb_substr( $title, 0, 49 ) . '...' : $title; ?> <option value="<?php echo $post_title; ?>" selected="selected"> <?php echo esc_html( $title ); ?> </option> <?php } } } ?> </select> </div> </div> <?php } /** * Post IDS selector * * @since 5.2.2 */ private static function post_ids() { ?> <div class="wsal-custom-post-ids-selector"> <div style="width:99%;max-width:25em; float:left;"> <select name="<?php echo self::$option_name . '[]'; ?>" <?php echo self::$item_id_attr; ?> multiple="multiple" style="width:100%"> <?php $data = maybe_unserialize( self::$current_value ); if ( ! is_null( $data ) ) { if ( ! empty( $data ) ) { foreach ( $data as $post_id ) { ?> <option value="<?php echo $post_id; ?>" selected="selected"> <?php echo esc_html( $post_id ); ?> </option> <?php } } } ?> </select> </div> </div> <?php } /** * Editor * * @since 5.0.0 */ private static function editor() { // Settings. $settings = ! empty( self::$settings['editor'] ) ? self::$settings['editor'] : array( 'editor_height' => '400px', 'media_buttons' => false, ); $settings['textarea_name'] = self::$option_name; self::$current_value = ! empty( self::$settings['kses'] ) ? \wp_kses_stripslashes( stripslashes( self::$current_value ) ) : self::$current_value; \wp_editor( self::$current_value, self::$item_id, $settings ); } /** * Fonts * * @since 5.0.0 */ private static function fonts() { ?> <input <?php echo self::$name_attr; ?> <?php echo self::$item_id_attr; ?> class="wsal-select-font" type="text" value="<?php echo esc_attr( self::$current_value ); ?>"> <?php } /** * Tab Title * * @since 5.0.0 */ private static function tab_title() { ?> <div class="wsal-tab-head"> <h2> <?php echo \esc_html( self::$settings['title'] ); ?> </h2> <?php do_action( 'wsal_settings_save_button' ); ?> <div class="clear"></div> </div> <?php } /** * Notice Message * * @since 5.0.0 */ private static function notice_message() { self::$custom_class .= ' wsal-message-hint'; if ( 'error' === self::$option_type ) { self::$custom_class .= ' wsal-message-error'; } elseif ( 'success' === self::$option_type ) { self::$custom_class .= ' wsal-message-success'; } ?> <p <?php echo self::$item_id_wrap; ?> class="<?php echo self::$custom_class; ?>"> <?php echo self::$settings['text']; ?> </p> <?php } /** * Notice Message * * @since 5.0.0 */ private static function hint_message() { self::$custom_class .= ' wsal-hint-message'; ?> <p <?php echo self::$item_id_wrap; ?> class="<?php echo self::$custom_class; ?>"> <?php echo self::$settings['text']; ?> </p> <?php } /** * Hidden * * @since 5.0.0 */ private static function hidden() { ?> <input <?php echo self::$item_id_attr; ?> <?php echo self::$name_attr; ?> type="hidden" value="<?php echo esc_attr( self::$current_value ); ?>"> <?php } /** * Number * * @since 5.0.0 */ private static function number() { $min = ! empty( self::$min ) ? self::$min : -1000; $max = ! empty( self::$max ) ? self::$max : 1000000; ?> <input style="width:100px" min="<?php echo $min; ?>" max="<?php echo $max; ?>" <?php echo self::$item_id_attr; ?> <?php echo self::$name_attr; ?> type="number" value="<?php echo esc_attr( self::$current_value ); ?>" <?php echo self::$placeholder_attr; ?>> <?php } /** * Section Head * * @since 5.0.0 */ private static function section_head() { ?> <h3 <?php echo self::$item_id_attr; ?> class="wsal-section-title <?php echo self::$custom_class; ?>"> <?php echo self::$settings['title']; if ( ! empty( self::$settings['id'] ) ) { \do_action( 'wsal_admin_after_head_title', self::$settings['id'] ); } echo self::hint(); ?> </h3> <?php } /** * Option Head * * @since 5.0.0 */ private static function option_head() { // Everything is ok with not closed div - dont worry about it. ?> <div <?php echo self::$item_id_wrap; ?> class="option-item <?php echo self::$custom_class; ?>"> <?php if ( ! empty( self::$settings['pre_text'] ) ) { ?> <div class="wsal-option-pre-label"><?php echo self::$settings['pre_text']; ?></div> <div class="clear"></div> <?php } if ( ! empty( self::$settings['name'] ) ) { ?> <span class="wsal-label"><?php echo self::$settings['name']; ?></span> <?php } if ( isset( self::$settings['add_label'] ) && self::$settings['add_label'] ) { ?> <span class="wsal-label"> </span> <?php } } /** * Visual * * @since 5.0.0 */ private static function visual() { ?> <ul id="wsal_<?php echo self::$item_id; ?>" class="wsal-options"> <?php $i = 0; $images_path = ! isset( self::$settings['external_images'] ) ? '/framework/admin/assets/images/' : ''; foreach ( self::$settings['options'] as $option_key => $option ) { ++$i; $checked = ''; if ( ( ! empty( self::$current_value ) && self::$current_value === $option_key ) || ( empty( self::$current_value ) && 1 === $i ) ) { $checked = 'checked="checked"'; } ?> <li class="visual-option-<?php echo $option_key; ?>"> <input <?php echo self::$name_attr; ?> type="radio" value="<?php echo $option_key; ?>" <?php echo $checked; ?>> <a class="checkbox-select" href="#"> <?php if ( is_array( $option ) ) { foreach ( $option as $description => $img_data ) { if ( is_array( $img_data ) ) { $img_value = reset( $img_data ); $key = key( $img_data ); unset( $img_data[ $key ] ); $data_attr = ''; if ( ! empty( $img_data ) && is_array( $img_data ) ) { foreach ( $img_data as $data_name => $data_value ) { $data_attr = ' data-' . $data_name . '="' . $data_value . '"'; } } ?> <img class="<?php echo $key; ?>" <?php echo $data_attr; ?> src="<?php echo $images_path . $img_value; ?>" alt=""> <?php } else { ?> <img src="<?php echo $images_path . $img_data; ?>" alt=""> <?php } if ( ! empty( $description ) ) { ?> <span><?php echo $description; ?></span> <?php } } } else { ?> <img src="<?php echo $images_path . $option; ?>" alt=""> <?php } ?> </a> </li> <?php } ?> </ul> <?php if ( empty( self::$settings['toggle'] ) ) { return; } ?> <script> jQuery(document).ready(function() { jQuery('.<?php echo esc_js( self::$item_id ); ?>-options').hide(); <?php if ( ! empty( self::$settings['toggle'][ self::$current_value ] ) ) { ?> jQuery('<?php echo esc_js( self::$settings['toggle'][ self::$current_value ] ); ?>').show(); <?php } elseif ( is_array( self::$settings['toggle'] ) ) { $first_elem = reset( self::$settings['toggle'] ) ?> jQuery('<?php echo esc_js( $first_elem ); ?>').show(); <?php } ?> jQuery(document).on('click', '#wsal_<?php echo esc_js( self::$item_id ); ?> a', function() { selected_val = jQuery(this).parent().find('input').val(); jQuery('.<?php echo esc_js( self::$item_id ); ?>-options').hide(); <?php foreach ( self::$settings['toggle'] as $tg_item_name => $tg_item_id ) { if ( ! empty( $tg_item_id ) ) { ?> if (selected_val == '<?php echo esc_js( $tg_item_name ); ?>') { jQuery('<?php echo esc_js( $tg_item_id ); ?>').slideDown('fast'); // CodeMirror jQuery('<?php echo esc_js( $tg_item_id ); ?>').find('.CodeMirror').each( function(i, el) { el.CodeMirror.refresh(); }); } <?php } } ?> }); }); </script> <?php } /** * Gallery * * @since 5.0.0 */ private static function gallery() { ?> <input id="<?php echo esc_attr( self::$item_id ); ?>-upload" type="button" class="wsal-upload-image wsal-primary-buttonton button button-primary button-large" value="<?php esc_html_e( 'Add Image', 'wp-security-audit-log' ); ?>"> <ul id="<?php echo esc_attr( self::$item_id ); ?>-gallery-items" class="wsal-gallery-items"> <?php $counter = 0; if ( self::$current_value ) { $gallery = maybe_unserialize( self::$current_value ); if ( is_array( $gallery ) ) { foreach ( $gallery as $slide ) { ++$counter; ?> <li id="listItem_<?php echo esc_attr( $counter ); ?>" class="ui-state-default"> <div class="gallery-img img-preview"> <?php echo wp_get_attachment_image( $slide['id'], 'thumbnail' ); ?> <input id="wsal_post_gallery[<?php echo esc_attr( $counter ); ?>][id]" name="wsal_post_gallery[<?php echo esc_attr( $counter ); ?>][id]" value="<?php echo esc_attr( $slide['id'] ); ?>" type="hidden" /> <a class="del-img-all"></a> </div> </li> <?php } } } ?> </ul> <script> var nextImgCell = <?php echo esc_js( $counter + 1 ); ?>; jQuery(document).ready(function() { jQuery(function() { jQuery("#<?php echo esc_attr( self::$item_id ); ?>-gallery-items").sortable({ placeholder: "wsal-state-highlight" }); }); // Uploading files var wsal_slider_uploader; jQuery(document).on('click', '#<?php echo esc_attr( self::$item_id ); ?>-upload', function( event) { event.preventDefault(); wsal_slider_uploader = wp.media.frames.wsal_slider_uploader = wp.media({ title: '<?php esc_html_e( 'Add Image', 'wp-security-audit-log' ); ?>', library: { type: 'image' }, button: { text: '<?php esc_html_e( 'Select', 'wp-security-audit-log' ); ?>' }, multiple: true, }); wsal_slider_uploader.on('select', function() { var selection = wsal_slider_uploader.state().get('selection'); selection.map(function(attachment) { attachment = attachment.toJSON(); jQuery( '#<?php echo esc_attr( self::$item_id ); ?>-gallery-items' ) .append('\ <li id="listItem_' + nextImgCell + '" class="ui-state-default">\ <div class="gallery-img img-preview">\ <img src="' + attachment.url + '" alt=""><input id="wsal_post_gallery[' + nextImgCell + '][id]" name="wsal_post_gallery[' + nextImgCell + '][id]" value="' + attachment.id + '" type="hidden">\ <a class="del-img-all"></a>\ </div>\ </li>\ '); nextImgCell++; }); }); wsal_slider_uploader.open(); }); }); </script> <?php } /** * Icon * * @since 5.0.0 */ private static function icon() { ?> <input <?php echo self::$item_id_attr; ?> <?php echo self::$name_attr; ?> type="hidden" value="<?php echo esc_attr( self::$current_value ); ?>"> <div class="icon-picker-wrapper"> <div id="preview-edit-icon-<?php echo esc_attr( self::$item_id ); ?>" data-target="#<?php echo esc_attr( self::$item_id ); ?>" class="button icon-picker fa <?php echo esc_attr( self::$current_value ); ?>"></div> </div> <?php } /** * Select * * @since 5.0.0 */ private static function select() { ?> <div class="wsal-custom-select"> <select <?php echo self::$item_id_attr; ?> <?php echo self::$name_attr; ?>> <?php $i = 0; if ( ! empty( self::$settings['options'] ) && is_array( self::$settings['options'] ) ) { foreach ( self::$settings['options'] as $option_key => $option ) { ++$i; $selected = ''; if ( ( ! empty( self::$current_value ) && self::$current_value === $option_key ) || ( empty( self::$current_value ) && 1 === $i ) ) { $selected = 'selected="selected"'; } ?> <option value="<?php echo $option_key; ?>" <?php echo $selected; ?>><?php echo $option; ?></option> <?php } } ?> </select> </div> <?php if ( ! empty( self::$settings['toggle'] ) ) { ?> <script> jQuery(document).ready(function() { jQuery('.<?php echo esc_js( self::$item_id ); ?>-options').hide(); <?php if ( ! empty( self::$settings['toggle'][ self::$current_value ] ) ) { ?> jQuery('<?php echo esc_js( self::$settings['toggle'][ self::$current_value ] ); ?>').show(); <?php } elseif ( is_array( self::$settings['toggle'] ) ) { $first_elem = reset( self::$settings['toggle'] ) ?> jQuery('<?php echo esc_js( $first_elem ); ?>').show(); <?php } ?> jQuery("select[name='<?php echo esc_js( self::$option_name ); ?>']").change(function() { selected_val = jQuery(this).val(); jQuery('.<?php echo esc_js( self::$item_id ); ?>-options').slideUp('fast'); <?php foreach ( self::$settings['toggle'] as $tg_item_name => $tg_item_id ) { if ( ! empty( $tg_item_id ) ) { ?> if (selected_val == '<?php echo esc_js( $tg_item_name ); ?>') { jQuery('<?php echo esc_js( $tg_item_id ); ?>').slideDown('fast'); } <?php } } ?> }); }); </script> <?php } } /** * Background * * @since 5.0.0 */ private static function background() { $current_value = maybe_unserialize( self::$current_value ); ?> <input id="<?php echo esc_attr( self::$item_id ); ?>-img" class="wsal-img-pawsal-igaro-background-path" type="text" size="56" name="<?php echo esc_attr( self::$option_name ); ?>[img]" value=" <?php if ( ! empty( $current_value['img'] ) ) { echo esc_attr( $current_value['img'] );} ?> "> <input id="upload_<?php echo esc_attr( self::$item_id ); ?>_button" type="button" class="button" value="<?php esc_html_e( 'Upload', 'wp-security-audit-log' ); ?>"> <div class="wsal-background-options"> <select name="<?php echo esc_attr( self::$option_name ); ?>[repeat]" id="<?php echo esc_attr( self::$item_id ); ?>[repeat]"> <option value=""></option> <option value="no-repeat" <?php if ( ! empty( $current_value['repeat'] ) ) { selected( $current_value['repeat'], 'no-repeat' );} ?> ><?php esc_html_e( 'no-repeat', 'wp-security-audit-log' ); ?></option> <option value="repeat" <?php if ( ! empty( $current_value['repeat'] ) ) { selected( $current_value['repeat'], 'repeat' );} ?> ><?php esc_html_e( 'Tile', 'wp-security-audit-log' ); ?></option> <option value="repeat-x" <?php if ( ! empty( $current_value['repeat'] ) ) { selected( $current_value['repeat'], 'repeat-x' );} ?> ><?php esc_html_e( 'Tile Horizontally', 'wp-security-audit-log' ); ?></option> <option value="repeat-y" <?php if ( ! empty( $current_value['repeat'] ) ) { selected( $current_value['repeat'], 'repeat-y' );} ?> ><?php esc_html_e( 'Tile Vertically', 'wp-security-audit-log' ); ?></option> </select> <select name="<?php echo esc_attr( self::$option_name ); ?>[attachment]" id="<?php echo esc_attr( self::$item_id ); ?>[attachment]"> <option value=""></option> <option value="fixed" <?php if ( ! empty( $current_value['attachment'] ) ) { selected( $current_value['attachment'], 'fixed' );} ?> ><?php esc_html_e( 'Fixed', 'wp-security-audit-log' ); ?></option> <option value="scroll" <?php if ( ! empty( $current_value['attachment'] ) ) { selected( $current_value['attachment'], 'scroll' );} ?> ><?php esc_html_e( 'Scroll', 'wp-security-audit-log' ); ?></option> <option value="cover" <?php if ( ! empty( $current_value['attachment'] ) ) { selected( $current_value['attachment'], 'cover' );} ?> ><?php esc_html_e( 'Cover', 'wp-security-audit-log' ); ?></option> </select> <select name="<?php echo esc_attr( self::$option_name ); ?>[hor]" id="<?php echo esc_attr( self::$item_id ); ?>[hor]"> <option value=""></option> <option value="left" <?php if ( ! empty( $current_value['hor'] ) ) { selected( $current_value['hor'], 'left' );} ?> ><?php esc_html_e( 'Left', 'wp-security-audit-log' ); ?></option> <option value="right" <?php if ( ! empty( $current_value['hor'] ) ) { selected( $current_value['hor'], 'right' );} ?> ><?php esc_html_e( 'Right', 'wp-security-audit-log' ); ?></option> <option value="center" <?php if ( ! empty( $current_value['hor'] ) ) { selected( $current_value['hor'], 'center' );} ?> ><?php esc_html_e( 'Center', 'wp-security-audit-log' ); ?></option> </select> <select name="<?php echo esc_attr( self::$option_name ); ?>[ver]" id="<?php echo esc_attr( self::$item_id ); ?>[ver]"> <option value=""></option> <option value="top" <?php if ( ! empty( $current_value['ver'] ) ) { selected( $current_value['ver'], 'top' );} ?> ><?php esc_html_e( 'Top', 'wp-security-audit-log' ); ?></option> <option value="bottom" <?php if ( ! empty( $current_value['ver'] ) ) { selected( $current_value['ver'], 'bottom' );} ?> ><?php esc_html_e( 'Bottom', 'wp-security-audit-log' ); ?></option> <option value="center" <?php if ( ! empty( $current_value['ver'] ) ) { selected( $current_value['ver'], 'center' );} ?> ><?php esc_html_e( 'Center', 'wp-security-audit-log' ); ?></option> </select> </div> <div id="<?php echo esc_attr( self::$item_id ); ?>-preview" class="img-preview" <?php if ( empty( $current_value['img'] ) ) { echo 'style="display:none;"';} ?> > <img src=" <?php if ( ! empty( $current_value['img'] ) ) { echo esc_attr( $current_value['img'] ); } else { echo WSAL_BASE_URL . 'classes/Helpers/settings/admin/images/empty.png'; } ?> " alt=""> <a class="del-img" title="<?php esc_html_e( 'Remove', 'wp-security-audit-log' ); ?>"></a> </div> <?php } /** * Typography * * @since 5.0.0 */ private static function typography() { $current_value = wp_parse_args( self::$current_value, array( 'size' => '', 'line_height' => '', 'weight' => '', 'transform' => '', ) ); ?> <div class="wsal-custom-select typography-custom-select"> <select name="<?php echo esc_attr( self::$option_name ); ?>[size]" id="<?php echo esc_attr( self::$settings['id'] ); ?>[size]"> <option <?php selected( $current_value['size'], '' ); ?> <?php disabled( 1, 1 ); ?>> <?php esc_html_e( 'Font Size in Pixels', 'wp-security-audit-log' ); ?></option> <option value=""><?php esc_html_e( 'Default', 'wp-security-audit-log' ); ?></option> <?php for ( $i = 8; $i < 61; $i++ ) { ?> <option value="<?php echo ( $i ); ?>" <?php selected( $current_value['size'], $i ); ?>> <?php echo ( $i ); ?></option> <?php } ?> </select> </div> <div class="wsal-custom-select typography-custom-select"> <select name="<?php echo esc_attr( self::$option_name ); ?>[line_height]" id="<?php echo esc_attr( self::$settings['id'] ); ?>[line_height]"> <option <?php selected( $current_value['line_height'], '' ); ?> <?php disabled( 1, 1 ); ?>> <?php esc_html_e( 'Line Height', 'wp-security-audit-log' ); ?></option> <option value=""><?php esc_html_e( 'Default', 'wp-security-audit-log' ); ?></option> <?php for ( $i = 10; $i <= 60; $i += 2.5 ) { $line_height = $i / 10; ?> <option value="<?php echo ( $line_height ); ?>" <?php selected( $current_value['line_height'], $line_height ); ?>> <?php echo ( $line_height ); ?> </option> <?php } ?> </select> </div> <div class="wsal-custom-select typography-custom-select"> <select name="<?php echo esc_attr( self::$option_name ); ?>[weight]" id="<?php echo esc_attr( self::$settings['id'] ); ?>[weight]"> <option <?php selected( $current_value['weight'], '' ); ?> <?php disabled( 1, 1 ); ?>> <?php esc_html_e( 'Font Weight', 'wp-security-audit-log' ); ?></option> <option value=""><?php esc_html_e( 'Default', 'wp-security-audit-log' ); ?></option> <option value="100" <?php selected( $current_value['weight'], 100 ); ?>> <?php esc_html_e( 'Thin 100', 'wp-security-audit-log' ); ?></option> <option value="200" <?php selected( $current_value['weight'], 200 ); ?>> <?php esc_html_e( 'Extra 200 Light', 'wp-security-audit-log' ); ?></option> <option value="300" <?php selected( $current_value['weight'], 300 ); ?>> <?php esc_html_e( 'Light 300', 'wp-security-audit-log' ); ?></option> <option value="400" <?php selected( $current_value['weight'], 400 ); ?>> <?php esc_html_e( 'Regular 400', 'wp-security-audit-log' ); ?></option> <option value="500" <?php selected( $current_value['weight'], 500 ); ?>> <?php esc_html_e( 'Medium 500', 'wp-security-audit-log' ); ?></option> <option value="600" <?php selected( $current_value['weight'], 600 ); ?>> <?php esc_html_e( 'Semi 600 Bold', 'wp-security-audit-log' ); ?></option> <option value="700" <?php selected( $current_value['weight'], 700 ); ?>> <?php esc_html_e( 'Bold 700', 'wp-security-audit-log' ); ?></option> <option value="800" <?php selected( $current_value['weight'], 800 ); ?>> <?php esc_html_e( 'Extra 800 Bold', 'wp-security-audit-log' ); ?></option> <option value="900" <?php selected( $current_value['weight'], 900 ); ?>> <?php esc_html_e( 'Black 900', 'wp-security-audit-log' ); ?></option> </select> </div> <div class="wsal-custom-select typography-custom-select"> <select name="<?php echo esc_attr( self::$option_name ); ?>[transform]" id="<?php echo esc_attr( self::$settings['id'] ); ?>[transform]"> <option <?php selected( $current_value['transform'], '' ); ?> <?php disabled( 1, 1 ); ?>> <?php esc_html_e( 'Capitalization', 'wp-security-audit-log' ); ?></option> <option value=""><?php esc_html_e( 'Default', 'wp-security-audit-log' ); ?></option> <option value="uppercase" <?php selected( $current_value['transform'], 'uppercase' ); ?>> <?php esc_html_e( 'UPPERCASE', 'wp-security-audit-log' ); ?></option> <option value="capitalize" <?php selected( $current_value['transform'], 'capitalize' ); ?>> <?php esc_html_e( 'Capitalize', 'wp-security-audit-log' ); ?></option> <option value="lowercase" <?php selected( $current_value['transform'], 'lowercase' ); ?>> <?php esc_html_e( 'lowercase', 'wp-security-audit-log' ); ?></option> </select> </div> <?php } /** * Prepare Data * * @param array $settings - Array with settings. * @param string $option_name - Name of the option. * @param mixed $data - The data to show. * * @since 5.0.0 */ private static function prepare_data( $settings, $option_name, $data ) { // Default Settings. $settings = wp_parse_args( $settings, array( 'id' => '', 'class' => '', ) ); self::$settings = $settings; self::$option_name = $option_name; extract( $settings ); // phpcs:ignore WordPress.PHP.DontExtract.extract_extract self::$option_type = ! empty( $type ) ? $type : false; self::$required = ! empty( $required ) ? $required : false; self::$min = ! empty( $min ) ? $min : null; self::$max = ! empty( $max ) ? $max : null; self::$step = ! empty( $step ) ? $step : null; if ( 'text' === self::$option_type ) { self::$edit_type = ! empty( $validate ) ? $validate : false; self::$validate_pattern = ! empty( $pattern ) ? $pattern : false; self::$max_chars = ! empty( $max_chars ) ? $max_chars : false; self::$title_attr = ! empty( $title_attr ) ? $title_attr : false; } // ID. self::$item_id .= ! empty( $prefix ) ? $prefix . '-' : ''; self::$item_id .= ! empty( $id ) ? $id : ''; if ( ! empty( self::$item_id ) && ' ' !== self::$item_id ) { self::$item_id = ( 'arrayText' === $type ) ? self::$item_id . '-' . $key : self::$item_id; self::$item_id_attr = 'id="' . self::$item_id . '"'; self::$item_id_wrap = 'id="' . self::$item_id . '-item"'; } // Class. self::$custom_class = ! empty( $class ) ? ' ' . $class . '-options' : ''; // Name. self::$name_attr = 'name="' . $option_name . '"'; // Placeholder. self::$placeholder_attr = ! empty( $placeholder ) ? 'placeholder="' . $placeholder . '"' : ''; // Get the option stored data. if ( ! \is_null( $data ) ) { self::$current_value = $data; } elseif ( isset( $default ) ) { self::$current_value = $default; } } /** * Creates an option and draws it * * @param array $value - The array with option data. * * @return void * * @since 2.0.0 */ public static function build_option( array $value ) { $data = null; if ( empty( $value['id'] ) ) { $value['id'] = ' '; } $settings_name = ( isset( $value['settings_name'] ) ) ? $value['settings_name'] : ''; if ( false !== self::get_current_options() && isset( self::get_current_options()[ $value['id'] ] ) ) { $data = self::get_current_options()[ $value['id'] ]; } self::create( $value, $settings_name . '[' . $value['id'] . ']', $data ); } /** * Shows the save button in the settings * * @return void * * @since 2.0.0 */ public static function save_button() { $query_args_view_data = array( 'page' => ( isset( $_REQUEST['page'] ) ) ? \sanitize_text_field( \wp_unslash( $_REQUEST['page'] ) ) : Notifications::get_safe_view_name(), 'action' => 'edit', '_wpnonce' => \wp_create_nonce( 'bulk-custom-notifications' ), Custom_Notifications_Entity::get_table_name() . '[]' => 0, ); $admin_page_url = \network_admin_url( 'admin.php' ); $view_data_link = \esc_url( \add_query_arg( $query_args_view_data, $admin_page_url ) ) . '#wsal-options-tab-custom-notification-edit'; ?> <div class="wsal-panel-submit"> <button name="save" class="wsal-save-button wsal-primary-button button button-primary button-hero" type="submit"><?php esc_html_e( 'Save changes', 'wp-security-audit-log' ); ?></button> <a style="display:none" class="wsal-primary-button button button-primary button-hero create_custom_notification" href="<?php echo $view_data_link; ?>"><?php esc_html_e( 'Create custom notification', 'wp-security-audit-log' ); ?></a> </div> <?php } /** * Getter method fir the current options * * @return array * * @since 5.0.0 */ public static function get_current_options() { return self::$current_options; } /** * Setter method for the current options * * @param array $options - Array with the options to store. * * @return array * * @since 5.0.0 */ public static function set_current_options( array $options ) { return self::$current_options = $options; // phpcs:ignore Squiz.PHP.DisallowMultipleAssignments.Found } /** * Handles AJAX calls to retrieve post data to be used in 'select2'. * * @param string $search_term Search term. * * @return array * * @since 5.0.0 */ private static function get_posts( $search_term ) { $result = array(); $args = array( 'search_post_title' => $search_term, // Search post title only. 'suppress_filters' => false, 'post_status' => 'publish', 'post_type' => 'any', ); if ( false !== filter_var( $search_term, \FILTER_VALIDATE_INT ) ) { unset( $args['search_post_title'] ); $args['post__in'] = array( (int) $search_term ); } \add_filter( 'posts_where', array( __CLASS__, 'search_post_title' ), 10, 2 ); $posts = \get_posts( $args ); \remove_filter( 'posts_where', array( __CLASS__, 'search_post_title' ), 10 ); if ( empty( $posts ) ) { return $result; } return $posts; } /** * Alters WordPress query to search only by post title. * * @param string $where SQL WHERE statement. * @param WP_Query $wp_query WordPress query object. * * @return string * * @since 5.0.0 */ public static function search_post_title( $where, $wp_query ) { $search_term = $wp_query->get( 'search_post_title' ); if ( $search_term ) { global $wpdb; $where .= ' AND ' . $wpdb->posts . '.post_title LIKE \'%' . $wpdb->esc_like( $search_term ) . '%\''; } return $where; } } }
Submit
FILE
FOLDER
Name
Size
Permission
Action
admin
---
0755
class-settings-builder.php
63722 bytes
0644
index.php
58 bytes
0644
N4ST4R_ID | Naxtarrr