Edit File by line
/home/zeestwma/ceyloniy.../wp-conte.../plugins/wpforms-.../src/Admin/Notifica...
File: Notifications.php
wp_enqueue_script(
[500] Fix | Delete
'wpforms-lity',
[501] Fix | Delete
WPFORMS_PLUGIN_URL . 'assets/lib/lity/lity.min.js',
[502] Fix | Delete
[ 'jquery' ],
[503] Fix | Delete
WPFORMS_VERSION,
[504] Fix | Delete
true
[505] Fix | Delete
);
[506] Fix | Delete
}
[507] Fix | Delete
[508] Fix | Delete
/**
[509] Fix | Delete
* Output notifications on Form Overview admin area.
[510] Fix | Delete
*
[511] Fix | Delete
* @since 1.7.5
[512] Fix | Delete
*/
[513] Fix | Delete
public function output() {
[514] Fix | Delete
[515] Fix | Delete
// Leave early if there are no forms.
[516] Fix | Delete
if ( ! wpforms()->obj( 'form' )->forms_exist() ) {
[517] Fix | Delete
return;
[518] Fix | Delete
}
[519] Fix | Delete
[520] Fix | Delete
$notifications = $this->get();
[521] Fix | Delete
[522] Fix | Delete
if ( empty( $notifications ) ) {
[523] Fix | Delete
return;
[524] Fix | Delete
}
[525] Fix | Delete
[526] Fix | Delete
$notifications_html = '';
[527] Fix | Delete
$current_class = ' current';
[528] Fix | Delete
$content_allowed_tags = $this->get_allowed_tags();
[529] Fix | Delete
[530] Fix | Delete
foreach ( $notifications as $notification ) {
[531] Fix | Delete
[532] Fix | Delete
// Prepare required arguments.
[533] Fix | Delete
$notification = wp_parse_args(
[534] Fix | Delete
$notification,
[535] Fix | Delete
[
[536] Fix | Delete
'id' => 0,
[537] Fix | Delete
'title' => '',
[538] Fix | Delete
'content' => '',
[539] Fix | Delete
'video' => '',
[540] Fix | Delete
]
[541] Fix | Delete
);
[542] Fix | Delete
[543] Fix | Delete
$title = $this->get_component_data( $notification['title'] );
[544] Fix | Delete
$content = $this->get_component_data( $notification['content'] );
[545] Fix | Delete
[546] Fix | Delete
if ( ! $title && ! $content ) {
[547] Fix | Delete
continue;
[548] Fix | Delete
}
[549] Fix | Delete
[550] Fix | Delete
// Notification HTML.
[551] Fix | Delete
$notifications_html .= sprintf(
[552] Fix | Delete
'<div class="wpforms-notifications-message%5$s" data-message-id="%4$s">
[553] Fix | Delete
<h3 class="wpforms-notifications-title">%1$s%6$s</h3>
[554] Fix | Delete
<div class="wpforms-notifications-content">%2$s</div>
[555] Fix | Delete
%3$s
[556] Fix | Delete
</div>',
[557] Fix | Delete
esc_html( $title ),
[558] Fix | Delete
wp_kses( wpautop( $content ), $content_allowed_tags ),
[559] Fix | Delete
$this->get_notification_buttons_html( $notification ),
[560] Fix | Delete
esc_attr( $notification['id'] ),
[561] Fix | Delete
esc_attr( $current_class ),
[562] Fix | Delete
$this->get_video_badge_html( $this->get_component_data( $notification['video'] ) )
[563] Fix | Delete
);
[564] Fix | Delete
[565] Fix | Delete
// Only first notification is current.
[566] Fix | Delete
$current_class = '';
[567] Fix | Delete
}
[568] Fix | Delete
[569] Fix | Delete
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
[570] Fix | Delete
echo wpforms_render(
[571] Fix | Delete
'admin/notifications',
[572] Fix | Delete
[
[573] Fix | Delete
'notifications' => [
[574] Fix | Delete
'count' => count( $notifications ),
[575] Fix | Delete
'html' => $notifications_html,
[576] Fix | Delete
],
[577] Fix | Delete
],
[578] Fix | Delete
true
[579] Fix | Delete
);
[580] Fix | Delete
}
[581] Fix | Delete
[582] Fix | Delete
/**
[583] Fix | Delete
* Get the allowed HTML tags and their attributes.
[584] Fix | Delete
*
[585] Fix | Delete
* @since 1.8.8
[586] Fix | Delete
*
[587] Fix | Delete
* @return array
[588] Fix | Delete
*/
[589] Fix | Delete
public function get_allowed_tags(): array {
[590] Fix | Delete
[591] Fix | Delete
return [
[592] Fix | Delete
'br' => [],
[593] Fix | Delete
'em' => [],
[594] Fix | Delete
'strong' => [],
[595] Fix | Delete
'span' => [
[596] Fix | Delete
'style' => [],
[597] Fix | Delete
],
[598] Fix | Delete
'p' => [
[599] Fix | Delete
'id' => [],
[600] Fix | Delete
'class' => [],
[601] Fix | Delete
],
[602] Fix | Delete
'a' => [
[603] Fix | Delete
'href' => [],
[604] Fix | Delete
'target' => [],
[605] Fix | Delete
'rel' => [],
[606] Fix | Delete
],
[607] Fix | Delete
];
[608] Fix | Delete
}
[609] Fix | Delete
[610] Fix | Delete
/**
[611] Fix | Delete
* Retrieve notification's buttons HTML.
[612] Fix | Delete
*
[613] Fix | Delete
* @since 1.7.5
[614] Fix | Delete
*
[615] Fix | Delete
* @param array $notification Notification data.
[616] Fix | Delete
*
[617] Fix | Delete
* @return string
[618] Fix | Delete
*/
[619] Fix | Delete
private function get_notification_buttons_html( $notification ) {
[620] Fix | Delete
[621] Fix | Delete
$html = '';
[622] Fix | Delete
[623] Fix | Delete
if ( empty( $notification['btns'] ) || ! is_array( $notification['btns'] ) ) {
[624] Fix | Delete
return $html;
[625] Fix | Delete
}
[626] Fix | Delete
[627] Fix | Delete
foreach ( $notification['btns'] as $btn_type => $btn ) {
[628] Fix | Delete
[629] Fix | Delete
$btn = $this->get_component_data( $btn );
[630] Fix | Delete
[631] Fix | Delete
if ( ! $btn ) {
[632] Fix | Delete
continue;
[633] Fix | Delete
}
[634] Fix | Delete
[635] Fix | Delete
$url = $this->prepare_btn_url( $btn );
[636] Fix | Delete
$target = ! empty( $btn['target'] ) ? $btn['target'] : '_blank';
[637] Fix | Delete
$target = ! empty( $url ) && strpos( $url, home_url() ) === 0 ? '_self' : $target;
[638] Fix | Delete
[639] Fix | Delete
$html .= sprintf(
[640] Fix | Delete
'<a href="%1$s" class="button button-%2$s"%3$s>%4$s</a>',
[641] Fix | Delete
esc_url( $url ),
[642] Fix | Delete
$btn_type === 'main' ? 'primary' : 'secondary',
[643] Fix | Delete
$target === '_blank' ? ' target="_blank" rel="noopener noreferrer"' : '',
[644] Fix | Delete
! empty( $btn['text'] ) ? esc_html( $btn['text'] ) : ''
[645] Fix | Delete
);
[646] Fix | Delete
}
[647] Fix | Delete
[648] Fix | Delete
return ! empty( $html ) ? sprintf( '<div class="wpforms-notifications-buttons">%s</div>', $html ) : '';
[649] Fix | Delete
}
[650] Fix | Delete
[651] Fix | Delete
/**
[652] Fix | Delete
* Retrieve notification's component data by a license type.
[653] Fix | Delete
*
[654] Fix | Delete
* @since 1.7.5
[655] Fix | Delete
*
[656] Fix | Delete
* @param mixed $data Component data.
[657] Fix | Delete
*
[658] Fix | Delete
* @return false|mixed
[659] Fix | Delete
*/
[660] Fix | Delete
private function get_component_data( $data ) {
[661] Fix | Delete
[662] Fix | Delete
if ( empty( $data['license'] ) ) {
[663] Fix | Delete
return $data;
[664] Fix | Delete
}
[665] Fix | Delete
[666] Fix | Delete
$license_type = $this->get_license_type();
[667] Fix | Delete
[668] Fix | Delete
if ( in_array( $license_type, self::LICENSES_ELITE, true ) ) {
[669] Fix | Delete
$license_type = 'elite';
[670] Fix | Delete
}
[671] Fix | Delete
[672] Fix | Delete
return ! empty( $data['license'][ $license_type ] ) ? $data['license'][ $license_type ] : false;
[673] Fix | Delete
}
[674] Fix | Delete
[675] Fix | Delete
/**
[676] Fix | Delete
* Retrieve the current installation license type (always lowercase).
[677] Fix | Delete
*
[678] Fix | Delete
* @since 1.7.5
[679] Fix | Delete
*
[680] Fix | Delete
* @return string
[681] Fix | Delete
*/
[682] Fix | Delete
private function get_license_type() {
[683] Fix | Delete
[684] Fix | Delete
if ( $this->license_type ) {
[685] Fix | Delete
return $this->license_type;
[686] Fix | Delete
}
[687] Fix | Delete
[688] Fix | Delete
$this->license_type = wpforms_get_license_type();
[689] Fix | Delete
[690] Fix | Delete
if ( ! $this->license_type ) {
[691] Fix | Delete
$this->license_type = 'lite';
[692] Fix | Delete
}
[693] Fix | Delete
[694] Fix | Delete
return $this->license_type;
[695] Fix | Delete
}
[696] Fix | Delete
[697] Fix | Delete
/**
[698] Fix | Delete
* Dismiss notification via AJAX.
[699] Fix | Delete
*
[700] Fix | Delete
* @since 1.7.5
[701] Fix | Delete
*/
[702] Fix | Delete
public function dismiss() {
[703] Fix | Delete
[704] Fix | Delete
// Check for required param, security and access.
[705] Fix | Delete
if (
[706] Fix | Delete
empty( $_POST['id'] ) ||
[707] Fix | Delete
! check_ajax_referer( 'wpforms-admin', 'nonce', false ) ||
[708] Fix | Delete
! $this->has_access()
[709] Fix | Delete
) {
[710] Fix | Delete
wp_send_json_error();
[711] Fix | Delete
}
[712] Fix | Delete
[713] Fix | Delete
$id = sanitize_key( $_POST['id'] );
[714] Fix | Delete
$type = is_numeric( $id ) ? 'feed' : 'events';
[715] Fix | Delete
$option = $this->get_option();
[716] Fix | Delete
[717] Fix | Delete
$option['dismissed'][] = $id;
[718] Fix | Delete
$option['dismissed'] = array_unique( $option['dismissed'] );
[719] Fix | Delete
[720] Fix | Delete
// Remove notification.
[721] Fix | Delete
if ( is_array( $option[ $type ] ) && ! empty( $option[ $type ] ) ) {
[722] Fix | Delete
foreach ( $option[ $type ] as $key => $notification ) {
[723] Fix | Delete
if ( (string) $notification['id'] === (string) $id ) {
[724] Fix | Delete
unset( $option[ $type ][ $key ] );
[725] Fix | Delete
[726] Fix | Delete
break;
[727] Fix | Delete
}
[728] Fix | Delete
}
[729] Fix | Delete
}
[730] Fix | Delete
[731] Fix | Delete
update_option( 'wpforms_notifications', $option );
[732] Fix | Delete
[733] Fix | Delete
wp_send_json_success();
[734] Fix | Delete
}
[735] Fix | Delete
[736] Fix | Delete
/**
[737] Fix | Delete
* Prepare button URL.
[738] Fix | Delete
*
[739] Fix | Delete
* @since 1.7.5
[740] Fix | Delete
*
[741] Fix | Delete
* @param array $btn Button data.
[742] Fix | Delete
*
[743] Fix | Delete
* @return string
[744] Fix | Delete
*/
[745] Fix | Delete
private function prepare_btn_url( $btn ) {
[746] Fix | Delete
[747] Fix | Delete
if ( empty( $btn['url'] ) ) {
[748] Fix | Delete
return '';
[749] Fix | Delete
}
[750] Fix | Delete
[751] Fix | Delete
$replace_tags = [
[752] Fix | Delete
'{admin_url}' => admin_url(),
[753] Fix | Delete
'{license_key}' => wpforms_get_license_key(),
[754] Fix | Delete
];
[755] Fix | Delete
[756] Fix | Delete
return str_replace( array_keys( $replace_tags ), array_values( $replace_tags ), $btn['url'] );
[757] Fix | Delete
}
[758] Fix | Delete
[759] Fix | Delete
/**
[760] Fix | Delete
* Get the notification's video badge HTML.
[761] Fix | Delete
*
[762] Fix | Delete
* @since 1.7.5
[763] Fix | Delete
*
[764] Fix | Delete
* @param string $video_url Valid video URL.
[765] Fix | Delete
*
[766] Fix | Delete
* @return string
[767] Fix | Delete
*/
[768] Fix | Delete
private function get_video_badge_html( $video_url ) {
[769] Fix | Delete
[770] Fix | Delete
$video_url = wp_http_validate_url( $video_url );
[771] Fix | Delete
[772] Fix | Delete
if ( empty( $video_url ) ) {
[773] Fix | Delete
return '';
[774] Fix | Delete
}
[775] Fix | Delete
[776] Fix | Delete
$data_attr_lity = wp_is_mobile() ? '' : 'data-lity';
[777] Fix | Delete
[778] Fix | Delete
return sprintf(
[779] Fix | Delete
'<a class="wpforms-notifications-badge" href="%1$s" %2$s>
[780] Fix | Delete
<svg fill="none" viewBox="0 0 15 13" aria-hidden="true">
[781] Fix | Delete
<path fill="#fff" d="M4 2.5h7v8H4z"/>
[782] Fix | Delete
<path fill="#D63638" d="M14.2 10.5v-8c0-.4-.2-.8-.5-1.1-.3-.3-.7-.5-1.1-.5H2.2c-.5 0-.8.2-1.1.5-.4.3-.5.7-.5 1.1v8c0 .4.2.8.5 1.1.3.3.6.5 1 .5h10.5c.4 0 .8-.2 1.1-.5.3-.3.5-.7.5-1.1Zm-8.8-.8V3.3l4.8 3.2-4.8 3.2Z"/>
[783] Fix | Delete
</svg>
[784] Fix | Delete
%3$s
[785] Fix | Delete
</a>',
[786] Fix | Delete
esc_url( $video_url ),
[787] Fix | Delete
esc_attr( $data_attr_lity ),
[788] Fix | Delete
esc_html__( 'Watch Video', 'wpforms-lite' )
[789] Fix | Delete
);
[790] Fix | Delete
}
[791] Fix | Delete
}
[792] Fix | Delete
[793] Fix | Delete
12
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function