Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93
/home/sportsfe.../httpdocs/wp-conte.../plugins/embedpre.../vendor/priyomuk.../wp-notic.../src
File: Notice.php
<?php
[0] Fix | Delete
[1] Fix | Delete
namespace PriyoMukul\WPNotice;
[2] Fix | Delete
[3] Fix | Delete
use PriyoMukul\WPNotice\Utils\Base;
[4] Fix | Delete
use PriyoMukul\WPNotice\Utils\Helper;
[5] Fix | Delete
use WP_Screen;
[6] Fix | Delete
use function property_exists;
[7] Fix | Delete
[8] Fix | Delete
#[\AllowDynamicProperties]
[9] Fix | Delete
class Notice extends Base {
[10] Fix | Delete
use Helper;
[11] Fix | Delete
[12] Fix | Delete
private $app = null;
[13] Fix | Delete
[14] Fix | Delete
private $id = null;
[15] Fix | Delete
private $content = null;
[16] Fix | Delete
[17] Fix | Delete
/**
[18] Fix | Delete
* @var Dismiss
[19] Fix | Delete
*/
[20] Fix | Delete
public $dismiss;
[21] Fix | Delete
[22] Fix | Delete
private $queue = [];
[23] Fix | Delete
[24] Fix | Delete
/**
[25] Fix | Delete
* @var int start
[26] Fix | Delete
* @var int expire
[27] Fix | Delete
* @var int recurrence Meaning this notice will appear after 10, 20 days.
[28] Fix | Delete
* @var string scope
[29] Fix | Delete
* @var array screens
[30] Fix | Delete
* @var string type Notice type
[31] Fix | Delete
* @var string capability
[32] Fix | Delete
* @var bool dismissible
[33] Fix | Delete
*/
[34] Fix | Delete
private $options = [
[35] Fix | Delete
// 'start' => 192933, // timestamp
[36] Fix | Delete
// 'expire' => 1029339, // timestamp
[37] Fix | Delete
'classes' => '',
[38] Fix | Delete
'recurrence' => false,
[39] Fix | Delete
'scope' => 'user',
[40] Fix | Delete
'screens' => null,
[41] Fix | Delete
'type' => 'info',
[42] Fix | Delete
'capability' => null,
[43] Fix | Delete
'dismissible' => false,
[44] Fix | Delete
];
[45] Fix | Delete
[46] Fix | Delete
public function __construct( ...$args ) {
[47] Fix | Delete
list( $id, $content, $options, $queue, $app ) = $args;
[48] Fix | Delete
[49] Fix | Delete
$this->app = $app;
[50] Fix | Delete
$this->id = $id;
[51] Fix | Delete
$this->content = $content;
[52] Fix | Delete
$this->queue = $queue;
[53] Fix | Delete
$this->options = wp_parse_args( $options, $this->options );
[54] Fix | Delete
[55] Fix | Delete
$this->dismiss = new Dismiss( $this->id, $this->options, $this->app );
[56] Fix | Delete
[57] Fix | Delete
if ( ! isset( $queue[ $id ] ) || ( ! empty( $this->options['refresh'] ) && ( empty( $queue[ $id ]['refresh'] ) || $queue[ $id ]['refresh'] != $this->options['refresh'] ) ) ) {
[58] Fix | Delete
$queue[ $id ] = [];
[59] Fix | Delete
$_eligible_keys = [ 'start', 'expire', 'recurrence', 'refresh' ];
[60] Fix | Delete
array_walk( $options, function ( $value, $key ) use ( $id, &$queue, $_eligible_keys ) {
[61] Fix | Delete
if ( in_array( $key, $_eligible_keys, true ) ) {
[62] Fix | Delete
$queue[ $id ][ $key ] = $value;
[63] Fix | Delete
}
[64] Fix | Delete
} );
[65] Fix | Delete
[66] Fix | Delete
$this->queue = $queue;
[67] Fix | Delete
$this->app->storage()->save( $queue ); // saved in queue
[68] Fix | Delete
} else {
[69] Fix | Delete
$this->options = wp_parse_args( $queue[ $id ], $this->options );
[70] Fix | Delete
}
[71] Fix | Delete
[72] Fix | Delete
if ( isset( $this->options['do_action'] ) ) {
[73] Fix | Delete
add_action( 'admin_init', [ $this, 'do_action' ] );
[74] Fix | Delete
}
[75] Fix | Delete
}
[76] Fix | Delete
[77] Fix | Delete
public function do_action() {
[78] Fix | Delete
do_action( $this->options['do_action'], $this );
[79] Fix | Delete
}
[80] Fix | Delete
[81] Fix | Delete
private function get_content() {
[82] Fix | Delete
if ( is_callable( $this->content ) ) {
[83] Fix | Delete
ob_start();
[84] Fix | Delete
call_user_func( $this->content );
[85] Fix | Delete
[86] Fix | Delete
return ob_get_clean();
[87] Fix | Delete
}
[88] Fix | Delete
[89] Fix | Delete
return $this->content;
[90] Fix | Delete
}
[91] Fix | Delete
[92] Fix | Delete
public function display( $force = false ) {
[93] Fix | Delete
if ( ! $force && ! $this->show() ) {
[94] Fix | Delete
return;
[95] Fix | Delete
}
[96] Fix | Delete
[97] Fix | Delete
$content = $this->get_content();
[98] Fix | Delete
if ( empty( $content ) ) {
[99] Fix | Delete
return; // Return if notice is empty.
[100] Fix | Delete
}
[101] Fix | Delete
[102] Fix | Delete
$links = $this->get_links();
[103] Fix | Delete
[104] Fix | Delete
// Print the notice.
[105] Fix | Delete
printf( '<div style="display: flex; flex-wrap: nowrap; gap: 15px; align-items: center;" id="%1$s" class="%2$s">%3$s<div class="wpnotice-content-wrapper">%4$s%5$s</div></div>', 'wpnotice-' . esc_attr( $this->app->app ) . '-' . esc_attr( $this->id ), // The ID.
[106] Fix | Delete
esc_attr( $this->get_classes() ), // The classes.
[107] Fix | Delete
! empty( $content['thumbnail'] ) ? $this->get_thumbnail( $content['thumbnail'] ) : '', ! empty( $content['html'] ) ? $content['html'] : $content, ! empty( $links ) ? $this->links( $links ) : '' );
[108] Fix | Delete
}
[109] Fix | Delete
[110] Fix | Delete
public function get_links() {
[111] Fix | Delete
return ! empty( $this->content['links'] ) ? $this->content['links'] : ( ! empty( $this->options['links'] ) ? $this->options['links'] : [] );
[112] Fix | Delete
}
[113] Fix | Delete
[114] Fix | Delete
public function links( $links ) {
[115] Fix | Delete
$_attributes = '';
[116] Fix | Delete
$output = '<ul style="display: flex; width: 100%; align-items: center;" class="notice-links ' . $this->app->id . '-notice-links">';
[117] Fix | Delete
foreach ( $links as $link ) {
[118] Fix | Delete
$class = ! empty( $link['class'] ) ? $link['class'] : '';
[119] Fix | Delete
[120] Fix | Delete
if ( ! empty( $link['attributes'] ) ) {
[121] Fix | Delete
$link['attributes']['target'] = '_top';
[122] Fix | Delete
$_attributes = $this->attributes( $link['attributes'] );
[123] Fix | Delete
$link['link'] = '#';
[124] Fix | Delete
}
[125] Fix | Delete
[126] Fix | Delete
$output .= '<li style="margin: 0 15px 0 0;" class="notice-link-item ' . $class . '">';
[127] Fix | Delete
$output .= ! empty( $link['link'] ) ? '<a href="' . esc_url( $link['link'] ) . '" ' . $_attributes . '>' : '';
[128] Fix | Delete
if ( isset( $link['icon_class'] ) ) {
[129] Fix | Delete
$output .= '<span style="margin-right: 5px" class="' . esc_attr( $link['icon_class'] ) . '"></span>';
[130] Fix | Delete
}
[131] Fix | Delete
$output .= $link['label'];
[132] Fix | Delete
$output .= ! empty( $link['link'] ) ? '</a>' : '';
[133] Fix | Delete
$output .= '</li>';
[134] Fix | Delete
}
[135] Fix | Delete
[136] Fix | Delete
$output .= '</ul>';
[137] Fix | Delete
[138] Fix | Delete
return $output;
[139] Fix | Delete
}
[140] Fix | Delete
[141] Fix | Delete
public function attributes( $params = [] ) {
[142] Fix | Delete
$_attr = [];
[143] Fix | Delete
$classname = 'dismiss-btn ';
[144] Fix | Delete
[145] Fix | Delete
if ( ! empty( $params['class'] ) ) {
[146] Fix | Delete
$classname .= $params['class'];
[147] Fix | Delete
unset( $params['class'] );
[148] Fix | Delete
}
[149] Fix | Delete
[150] Fix | Delete
$_attr[] = 'class="' . esc_attr( $classname ) . '"';
[151] Fix | Delete
[152] Fix | Delete
$_attr[] = 'target="_blank"';
[153] Fix | Delete
if ( ! empty( $params ) ) {
[154] Fix | Delete
foreach ( $params as $key => $value ) {
[155] Fix | Delete
$_attr[] = "$key='$value'";
[156] Fix | Delete
}
[157] Fix | Delete
}
[158] Fix | Delete
[159] Fix | Delete
return \implode( ' ', $_attr );
[160] Fix | Delete
}
[161] Fix | Delete
[162] Fix | Delete
public function url( $params = [] ) {
[163] Fix | Delete
$nonce = wp_create_nonce( 'wpnotice_dismiss_notice_' . $this->id );
[164] Fix | Delete
[165] Fix | Delete
return esc_url( add_query_arg( [
[166] Fix | Delete
'action' => 'wpnotice_dismiss_notice',
[167] Fix | Delete
'id' => $this->id,
[168] Fix | Delete
'nonce' => $nonce,
[169] Fix | Delete
], admin_url( '/' ) ) );
[170] Fix | Delete
}
[171] Fix | Delete
[172] Fix | Delete
/**
[173] Fix | Delete
* Get the notice classes.
[174] Fix | Delete
*
[175] Fix | Delete
* @access public
[176] Fix | Delete
* @return string
[177] Fix | Delete
* @since 1.0
[178] Fix | Delete
*/
[179] Fix | Delete
public function get_classes() {
[180] Fix | Delete
$classes = [ 'wpnotice-wrapper notice', $this->app->id ];
[181] Fix | Delete
[182] Fix | Delete
// Add the class for notice-type.
[183] Fix | Delete
$classes[] = $this->options['classes'];
[184] Fix | Delete
$classes[] = 'notice-' . $this->options['type'];
[185] Fix | Delete
$classes[] = 'notice-' . $this->app->id . '-' . $this->id;
[186] Fix | Delete
[187] Fix | Delete
if ( $this->options['dismissible'] ) {
[188] Fix | Delete
$classes[] = 'is-dismissible';
[189] Fix | Delete
}
[190] Fix | Delete
[191] Fix | Delete
// Combine classes to a string.
[192] Fix | Delete
return implode( ' ', $classes );
[193] Fix | Delete
}
[194] Fix | Delete
[195] Fix | Delete
/**
[196] Fix | Delete
* Determine if the notice should be shown or not.
[197] Fix | Delete
*
[198] Fix | Delete
* @access public
[199] Fix | Delete
* @return bool
[200] Fix | Delete
* @since 1.0
[201] Fix | Delete
*/
[202] Fix | Delete
public function show() {
[203] Fix | Delete
// External Condition Check
[204] Fix | Delete
if ( isset( $this->options['display_if'] ) && ! $this->options['display_if'] ) {
[205] Fix | Delete
return false;
[206] Fix | Delete
}
[207] Fix | Delete
// Don't show if the user doesn't have the required capability.
[208] Fix | Delete
if ( ! is_null( $this->options['capability'] ) && ! current_user_can( $this->options['capability'] ) ) {
[209] Fix | Delete
return false;
[210] Fix | Delete
}
[211] Fix | Delete
[212] Fix | Delete
// Don't show if we're not on the right screen.
[213] Fix | Delete
if ( ! $this->is_screen() ) {
[214] Fix | Delete
return false;
[215] Fix | Delete
}
[216] Fix | Delete
[217] Fix | Delete
// Don't show if notice has been dismissed.
[218] Fix | Delete
if ( $this->dismiss->is_dismissed() ) {
[219] Fix | Delete
return false;
[220] Fix | Delete
}
[221] Fix | Delete
[222] Fix | Delete
// Start and Expiration Check.
[223] Fix | Delete
if ( $this->time() <= $this->options['start'] ) {
[224] Fix | Delete
return false;
[225] Fix | Delete
}
[226] Fix | Delete
[227] Fix | Delete
if ( $this->is_expired() ) {
[228] Fix | Delete
if ( $this->options['recurrence'] ) {
[229] Fix | Delete
$_recurrence = intval( $this->options['recurrence'] );
[230] Fix | Delete
$this->queue[ $this->id ]['start'] = $this->strtotime( "+$_recurrence days" );
[231] Fix | Delete
$this->queue[ $this->id ]['expire'] = $this->strtotime( "+" . ( $_recurrence + 3 ) . " days" );
[232] Fix | Delete
$this->app->storage()->save( $this->queue );
[233] Fix | Delete
}
[234] Fix | Delete
[235] Fix | Delete
return false;
[236] Fix | Delete
}
[237] Fix | Delete
[238] Fix | Delete
return true;
[239] Fix | Delete
}
[240] Fix | Delete
[241] Fix | Delete
/**
[242] Fix | Delete
* Evaluate if we're on the right place depending on the "screens" argument.
[243] Fix | Delete
*
[244] Fix | Delete
* @access private
[245] Fix | Delete
* @return bool
[246] Fix | Delete
* @since 1.0
[247] Fix | Delete
*/
[248] Fix | Delete
private function is_screen() {
[249] Fix | Delete
// Make sure the get_current_screen function exists.
[250] Fix | Delete
if ( ! function_exists( 'get_current_screen' ) ) {
[251] Fix | Delete
require_once ABSPATH . 'wp-admin/includes/screen.php';
[252] Fix | Delete
}
[253] Fix | Delete
[254] Fix | Delete
/** @var WP_Screen $current_screen */
[255] Fix | Delete
$current_screen = get_current_screen();
[256] Fix | Delete
[257] Fix | Delete
if ( $current_screen->id === 'update' ) {
[258] Fix | Delete
return false;
[259] Fix | Delete
}
[260] Fix | Delete
[261] Fix | Delete
// If screen is empty we want this shown on all screens.
[262] Fix | Delete
if ( empty( $this->options['screens'] ) ) {
[263] Fix | Delete
return true;
[264] Fix | Delete
}
[265] Fix | Delete
[266] Fix | Delete
return ( in_array( $current_screen->id, $this->options['screens'], true ) );
[267] Fix | Delete
}
[268] Fix | Delete
[269] Fix | Delete
public function is_expired() {
[270] Fix | Delete
if ( isset( $this->options['expire'] ) && $this->time() >= $this->options['expire'] ) {
[271] Fix | Delete
return true;
[272] Fix | Delete
}
[273] Fix | Delete
[274] Fix | Delete
return false;
[275] Fix | Delete
}
[276] Fix | Delete
[277] Fix | Delete
public function __call( $name, $args ) {
[278] Fix | Delete
if ( property_exists( $this, $name ) ) {
[279] Fix | Delete
return $this->{$name}[ $args[0] ];
[280] Fix | Delete
}
[281] Fix | Delete
[282] Fix | Delete
return null;
[283] Fix | Delete
}
[284] Fix | Delete
[285] Fix | Delete
public function get_thumbnail( $image ) {
[286] Fix | Delete
$output = '<div class="wpnotice-thumbnail-wrapper">';
[287] Fix | Delete
$output .= '<img style="max-width: 100%;" src="' . esc_url( $image ) . '">';
[288] Fix | Delete
$output .= '</div>';
[289] Fix | Delete
[290] Fix | Delete
return wp_kses_post( $output );
[291] Fix | Delete
}
[292] Fix | Delete
}
[293] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function