: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
if ( ! class_exists( 'BWS_Admin_Tooltip' ) ) {
class BWS_Admin_Tooltip {
* @param array $tooltip_args Args for tooltip.
public function __construct( $tooltip_args ) {
global $bstwbsftwppdtplgns_tooltip_script_add;
$tooltip_args_default = array(
'text' => esc_html__( 'Close', 'bestwebsoft' ),
$tooltip_args = array_merge( $tooltip_args_default, $tooltip_args );
/* Check that our merged array has default values */
foreach ( $tooltip_args_default as $arg_key => $arg_value ) {
if ( is_array( $arg_value ) ) {
foreach ( $arg_value as $key => $value ) {
if ( ! isset( $tooltip_args[ $arg_key ][ $key ] ) ) {
$tooltip_args[ $arg_key ][ $key ] = $tooltip_args_default[ $arg_key ][ $key ];
/* Check if tooltip is dismissed */
if ( true === $tooltip_args['actions']['onload'] ) {
if ( in_array( $tooltip_args['tooltip_id'], array_filter( explode( ',', (string) get_user_meta( get_current_user_id(), 'dismissed_wp_pointers', true ) ) ) ) ) {
$tooltip_args['actions']['onload'] = false;
if ( false === $tooltip_args['tooltip_id'] || false === $tooltip_args['css_selector'] || ( false === $tooltip_args['actions']['click'] && false === $tooltip_args['actions']['onload'] ) ) {
/* if not enough data to output a tooltip or both actions (click, onload) are false */
if ( ! in_array( $tooltip_args['position']['edge'], array( 'left', 'right', 'top', 'bottom' ) ) ) {
$tooltip_args['position']['edge'] = 'top';
if ( ! in_array( $tooltip_args['position']['align'], array( 'top', 'bottom', 'left', 'right', 'center' ) ) ) {
$tooltip_args['position']['align'] = 'center';
switch ( $tooltip_args['position']['edge'] ) {
switch ( $tooltip_args['position']['align'] ) {
$tooltip_args['position']['align'] = 'center';
if ( 'left' === $tooltip_args['position']['align'] ) {
$tooltip_args['position']['pos-left'] -= 65;
$this->tooltip_args = $tooltip_args;
/* add styles and scripts */
wp_enqueue_style( 'wp-pointer' );
wp_enqueue_script( 'wp-pointer' );
/* add script that displays our tooltip */
if ( ! isset( $bstwbsftwppdtplgns_tooltip_script_add ) ) {
wp_enqueue_script( 'bws-tooltip-script', bws_menu_url( 'js/bws_tooltip.js' ), array(), '2.4.2' );
$bstwbsftwppdtplgns_tooltip_script_add = true;
$tooltip_args = $this->tooltip_args;
$script = '(function($) {
$(document).ready( function() {
$.bwsTooltip( ' . wp_json_encode( $tooltip_args ) . ' );
wp_register_script( 'bws-tooltip-script-single-' . $this->tooltip_args['tooltip_id'], '' );
wp_enqueue_script( 'bws-tooltip-script-single-' . $this->tooltip_args['tooltip_id'] );
wp_add_inline_script( 'bws-tooltip-script-single-' . $this->tooltip_args['tooltip_id'], sprintf( $script ) );
if ( ! function_exists( 'bws_form_restore_default_confirm' ) ) {
* Function display confirm
* @param string $plugin_basename Plugin basename.
function bws_form_restore_default_confirm( $plugin_basename ) {
<p><?php esc_html_e( 'Are you sure you want to restore default settings?', 'bestwebsoft' ); ?></p>
<form method="post" action="">
<button class="button button-primary" name="bws_restore_confirm"><?php esc_html_e( 'Yes, restore all settings', 'bestwebsoft' ); ?></button>
<button class="button" name="bws_restore_deny"><?php esc_html_e( 'No, go back to the settings page', 'bestwebsoft' ); ?></button>
<?php wp_nonce_field( $plugin_basename, 'bws_settings_nonce_name' ); ?>
if ( ! function_exists( 'bws_add_editor_buttons' ) ) {
function bws_add_editor_buttons() {
global $bws_shortcode_list;
if ( ! empty( $bws_shortcode_list ) && current_user_can( 'edit_posts' ) && current_user_can( 'edit_pages' ) ) {
add_filter( 'mce_external_plugins', 'bws_add_buttons' );
add_filter( 'mce_buttons', 'bws_register_buttons' );
if ( ! function_exists( 'bws_add_buttons' ) ) {
* Function add button for editor
* @param array $plugin_array Editor scripts.
function bws_add_buttons( $plugin_array ) {
$plugin_array['add_bws_shortcode'] = bws_menu_url( 'js/shortcode-button.js' );
if ( ! function_exists( 'bws_register_buttons' ) ) {
* Function register button for editor
* @param array $buttons Editor buttons.
function bws_register_buttons( $buttons ) {
array_push( $buttons, 'add_bws_shortcode' ); /* dropcap', 'recentposts */
if ( ! function_exists( 'bws_shortcode_media_button_popup' ) ) {
* Function Generate inline content for the popup window when the "bws shortcode" button is clicked
function bws_shortcode_media_button_popup() {
global $bws_shortcode_list;
if ( ! empty( $bws_shortcode_list ) ) {
<div id="bws_shortcode_popup" style="display:none;">
<div id="bws_shortcode_popup_block">
<div id="bws_shortcode_select_plugin">
<h4><?php esc_html_e( 'Plugin', 'bestwebsoft' ); ?></h4>
<select name="bws_shortcode_select" id="bws_shortcode_select">
<?php foreach ( $bws_shortcode_list as $key => $value ) { ?>
<option value="<?php echo esc_attr( $key ); ?>"><?php echo esc_html( $value['name'] ); ?></option>
<div class="clear"></div>
<div id="bws_shortcode_content">
<h4><?php esc_html_e( 'Shortcode settings', 'bestwebsoft' ); ?></h4>
$ws_shortcode_button_content = apply_filters( 'bws_shortcode_button_content', '' );
if ( ! empty( $ws_shortcode_button_content ) ) {
echo wp_kses_post( $ws_shortcode_button_content );
<div class="clear"></div>
<div id="bws_shortcode_content_bottom">
<p><?php esc_html_e( 'The shortcode will be inserted', 'bestwebsoft' ); ?></p>
<div id="bws_shortcode_block"><div id="bws_shortcode_display"></div></div>
if ( ! function_exists( 'bws_shortcode_output' ) ) {
* Output shortcode in a special block
* @param string $shortcode Shortcode string.
function bws_shortcode_output( $shortcode ) {
<span class="bws_shortcode_output"><input type="text" onfocus="this.select();" readonly="readonly" value="<?php echo esc_attr( $shortcode ); ?>" class="large-text bws_no_bind_notice"></span>
if ( ! function_exists( 'bws_add_help_box' ) ) {
* @param string $content HTML content for the tooltip.
* @param string $class Can be standart "bws-hide-for-mobile" (tooltip will be hidden in 782px) and "bws-auto-width" (need for img) or some custom class.
function bws_add_help_box( $content, $class = '' ) {
return '<span class="bws_help_box dashicons dashicons-editor-help ' . $class . ' hide-if-no-js">
<span class="bws_hidden_help_text">' . $content . '</span>
if ( ! function_exists( 'bws_help_tab' ) ) {
* @param string $screen Screen name.
* @param array $args Args for screen.
function bws_help_tab( $screen, $args ) {
$url = ( ! empty( $args['section'] ) ) ? 'https://support.bestwebsoft.com/hc/en-us/sections/' . $args['section'] : 'https://support.bestwebsoft.com/';
$content = '<p><a href="' . esc_url( $url ) . '" target="_blank">' . __( 'Visit Help Center', 'bestwebsoft' ) . '</a></p>';
'id' => $args['id'] . '_help_tab',
'title' => esc_html__( 'FAQ', 'bestwebsoft' ),
'content' => wp_kses_post( $content ),
$screen->set_help_sidebar(
'<p><strong>' . esc_html__( 'For more information:', 'bestwebsoft' ) . '</strong></p>' .
'<p><a href="https://bestwebsoft.com/documentation/" target="_blank">' . esc_html__( 'Documentation', 'bestwebsoft' ) . '</a></p>' .
'<p><a href="https://www.youtube.com/user/bestwebsoft/playlists?flow=grid&sort=da&view=1" target="_blank">' . esc_html__( 'Video Instructions', 'bestwebsoft' ) . '</a></p>' .
'<p><a href="https://support.bestwebsoft.com/hc/en-us/requests/new" target="_blank">' . esc_html__( 'Submit a Request', 'bestwebsoft' ) . '</a></p>'
if ( ! function_exists( 'bws_enqueue_custom_code_css_js' ) ) {
* Function add css and js
function bws_enqueue_custom_code_css_js() {
global $bstwbsftwppdtplgns_options;
if ( ! isset( $bstwbsftwppdtplgns_options ) ) {
$bstwbsftwppdtplgns_options = ( function_exists( 'is_multisite' ) && is_multisite() ) ? get_site_option( 'bstwbsftwppdtplgns_options' ) : get_option( 'bstwbsftwppdtplgns_options' );
if ( ! empty( $bstwbsftwppdtplgns_options['custom_code'] ) ) {
$is_multisite = is_multisite();
$blog_id = get_current_blog_id();
if ( ! $is_multisite && ! empty( $bstwbsftwppdtplgns_options['custom_code']['bws-custom-code.css'] ) ) {
wp_enqueue_style( 'bws-custom-style', $bstwbsftwppdtplgns_options['custom_code']['bws-custom-code.css'], array(), '2.4.2' );
} elseif ( $is_multisite && ! empty( $bstwbsftwppdtplgns_options['custom_code'][ $blog_id ]['bws-custom-code.css'] ) ) {
wp_enqueue_style( 'bws-custom-style', $bstwbsftwppdtplgns_options['custom_code'][ $blog_id ]['bws-custom-code.css'], array(), '2.4.2' );
if ( ! $is_multisite && ! empty( $bstwbsftwppdtplgns_options['custom_code']['bws-custom-code.js'] ) ) {
wp_enqueue_script( 'bws-custom-style', $bstwbsftwppdtplgns_options['custom_code']['bws-custom-code.js'], array(), '2.4.2' );
} elseif ( $is_multisite && ! empty( $bstwbsftwppdtplgns_options['custom_code'][ $blog_id ]['bws-custom-code.js'] ) ) {
wp_enqueue_script( 'bws-custom-style', $bstwbsftwppdtplgns_options['custom_code'][ $blog_id ]['bws-custom-code.js'], array(), '2.4.2' );
if ( ! function_exists( 'bws_enqueue_custom_code_php' ) ) {
* Function add custom php code
function bws_enqueue_custom_code_php() {
global $bstwbsftwppdtplgns_options;
if ( ! isset( $bstwbsftwppdtplgns_options ) ) {
$bstwbsftwppdtplgns_options = ( function_exists( 'is_multisite' ) && is_multisite() ) ? get_site_option( 'bstwbsftwppdtplgns_options' ) : get_option( 'bstwbsftwppdtplgns_options' );
if ( ! empty( $bstwbsftwppdtplgns_options['custom_code'] ) ) {
$is_multisite = is_multisite();
$blog_id = get_current_blog_id();
if ( ! $is_multisite && ! empty( $bstwbsftwppdtplgns_options['custom_code']['bws-custom-code.php'] ) ) {
if ( file_exists( $bstwbsftwppdtplgns_options['custom_code']['bws-custom-code.php'] ) ) {
if ( ! defined( 'BWS_GLOBAL' ) ) {
define( 'BWS_GLOBAL', true );
require_once $bstwbsftwppdtplgns_options['custom_code']['bws-custom-code.php'];
unset( $bstwbsftwppdtplgns_options['custom_code']['bws-custom-code.php'] );
update_site_option( 'bstwbsftwppdtplgns_options', $bstwbsftwppdtplgns_options );
update_option( 'bstwbsftwppdtplgns_options', $bstwbsftwppdtplgns_options );
} elseif ( $is_multisite && ! empty( $bstwbsftwppdtplgns_options['custom_code'][ $blog_id ]['bws-custom-code.php'] ) ) {
if ( file_exists( $bstwbsftwppdtplgns_options['custom_code'][ $blog_id ]['bws-custom-code.php'] ) ) {
if ( ! defined( 'BWS_GLOBAL' ) ) {
define( 'BWS_GLOBAL', true );
require_once $bstwbsftwppdtplgns_options['custom_code'][ $blog_id ]['bws-custom-code.php'];
unset( $bstwbsftwppdtplgns_options['custom_code'][ $blog_id ]['bws-custom-code.php'] );
update_site_option( 'bstwbsftwppdtplgns_options', $bstwbsftwppdtplgns_options );
update_option( 'bstwbsftwppdtplgns_options', $bstwbsftwppdtplgns_options );
if ( ! function_exists( 'bws_delete_plugin' ) ) {
* @param string $basename Plugin basename.
function bws_delete_plugin( $basename ) {
global $bstwbsftwppdtplgns_options;
$is_multisite = is_multisite();
$blog_id = get_current_blog_id();
if ( ! isset( $bstwbsftwppdtplgns_options ) ) {
$bstwbsftwppdtplgns_options = ( $is_multisite ) ? get_site_option( 'bstwbsftwppdtplgns_options' ) : get_option( 'bstwbsftwppdtplgns_options' );
/* remove bws_menu versions */
unset( $bstwbsftwppdtplgns_options['bws_menu']['version'][ $basename ] );
/* remove track usage data */
if ( isset( $bstwbsftwppdtplgns_options['bws_menu']['track_usage']['products'][ $basename ] ) ) {
unset( $bstwbsftwppdtplgns_options['bws_menu']['track_usage']['products'][ $basename ] );
/* if empty ['bws_menu']['version'] - there is no other bws plugins - delete all */
if ( empty( $bstwbsftwppdtplgns_options['bws_menu']['version'] ) ) {
delete_site_option( 'bstwbsftwppdtplgns_options' );
delete_option( 'bstwbsftwppdtplgns_options' );
$old_blog = $wpdb->blogid;
$blogids = $wpdb->get_col( "SELECT `blog_id` FROM $wpdb->blogs" );
foreach ( $blogids as $blog_id ) {
switch_to_blog( $blog_id );
$upload_dir = wp_upload_dir();
$folder = $upload_dir['basedir'] . '/bws-custom-code';
if ( file_exists( $folder ) && is_dir( $folder ) ) {
array_map( 'unlink', glob( "$folder/*" ) );
switch_to_blog( $old_blog );
$upload_dir = wp_upload_dir();
$folder = $upload_dir['basedir'] . '/bws-custom-code';
if ( file_exists( $folder ) && is_dir( $folder ) ) {
array_map( 'unlink', glob( "$folder/*" ) );
add_action( 'admin_init', 'bws_plugins_admin_init' );
add_action( 'admin_enqueue_scripts', 'bws_admin_enqueue_scripts' );
add_action( 'admin_head', 'bws_plugins_admin_head' );
add_action( 'admin_footer', 'bws_plugins_admin_footer' );
add_action( 'admin_notices', 'bws_admin_notices', 30 );
add_action( 'wp_enqueue_scripts', 'bws_enqueue_custom_code_css_js', 20 );
bws_enqueue_custom_code_php();