oont-contents/plugins/webappick-product-feed-for-woocommerce/includes/classes/class-woo-feed-admin-message.php
2025-03-31 21:42:48 +02:00

373 lines
12 KiB
PHP

<?php
/**
* A class definition responsible for processing and mapping product according to feed rules and make the feed
*
* @link https://webappick.com/
* @since 1.0.0
*
* @package Woo_Feed
* @subpackage Woo_Feed/includes
* @author Ohidul Islam <wahid@webappick.com>
*/
final class Woo_Feed_Message {
/**
* @var Woo_Feed_Message
*/
protected static $instance;
/**
* Holds Messages & Notices
*
* @var array
*/
private $messages = array();
/**
* Is Output Sent Flag
*
* @var bool
*/
private $is_displayed = false;
/**
* Get Woo_Feed_Message Singleton Instance
*
* @return Woo_Feed_Message
*/
public static function getInstance() {
if ( is_null( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Woo_Feed_Message constructor.
* Initialize default messages and notices
*
* @return void
*/
private function __construct() {
$this->set_saved_messages();
$this->set_feed_edit_update_messages();
$this->set_schedule_update_messages();
$this->set_settings_messages();
}
/**
* Display Admin Messages & Notices
*
* @return void
*/
public function displayMessages() {
$this->is_displayed = true;
if( isset( $_GET['page'] ) && $_GET['page'] === 'webappick-new-feed' ) {
$this->display_support_links();
}
$this->display_admin_messages();
}
/**
* Set Message/Notice to be displayed in admin area within WooFeed Pages.
*
* @param array $message message data.
* @return void
*/
public function setMessage( $message = array() ) {
if ( true === $this->is_displayed ) {
/* translators: 1: Method Name 2: Method Name */
woo_feed_doing_it_wrong( __METHOD__, sprintf( esc_html__( '%1$s Should be called before %2$s', 'woo-feed' ), __METHOD__, 'Woo_Feed_Message::displayMessages()' ), '3.2.12' );
}
if ( is_array( $message ) && isset( $message['notice'], $message['type'], $message['dismissible'] ) ) {
$this->messages[] = array(
'notice' => $message['notice'],
'type' => $message['type'],
'dismissible' => (bool) $message['dismissible'],
);
}
}
/**
* Display The tob bar (support and documentation links)
*
* @return void
*/
private function display_support_links() {
if ( defined('WOO_FEED_PRO_VERSION') ) {
$utm_links = array(
'utm_source' => 'proPlugin',
'utm_medium' => 'pro_plugin_doc',
'utm_campaign' => 'pro',
'utm_term' => 'wooFeed',
);
}else {
$utm_links = array(
'utm_source' => 'freePlugin',
'utm_medium' => 'free_plugin_doc',
'utm_campaign' => 'free_to_pro',
'utm_term' => 'wooFeed',
);
}
$doc_link = add_query_arg( $utm_links, 'https://webappick.com/docs/' );
$support_link = 'https://wordpress.org/support/plugin/webappick-product-feed-for-woocommerce/';
?>
<table class="wf-info-table widefat fixed">
<tbody>
<tr>
<th>
<div class="woo-feed-top-header">
<?php if ( defined('WOO_FEED_PRO_VERSION') ) { ?>
<div class="woo-feed-logo-wrapper">
<img src="<?php echo esc_url(WOO_FEED_PRO_ADMIN_URL); ?>images/woo-feed-icon.svg" alt="Woo Feed Pro">
<h1 class="woo-feed-logo-label"><?php esc_html_e('CTX Feed', 'woo-feed'); ?></h1>
</div>
<?php }else { ?>
<a class="get-woo-feed-pro" href="https://webappick.com/plugin/woocommerce-product-feed-pro/?utm_source=freePlugin&utm_medium=go_premium&utm_campaign=free_to_pro&utm_term=wooFeed" target="_blank" aria-label="<?php esc_attr_e( 'Get CTX Feed Pro', 'woo-feed' ); ?>">
<img src="<?php echo esc_url( WOO_FEED_PLUGIN_URL ); ?>admin/images/get-woo-feed-pro.svg" alt="<?php esc_attr_e( 'Get CTX Feed Pro', 'woo-feed' ); ?>">
</a>
<?php }?>
<div class="woo-feed-top-buttons">
<a class="woo-feed-doc-link" href="<?php echo esc_url($doc_link); ?>" target="_blank" ><span class="dashicons dashicons-book"></span> <?php esc_html_e( 'Documentation', 'woo-feed' ); ?></a>
<a class="woo-feed-video-link" href="https://youtube.com/playlist?list=PLapCcXJAoEenI-35wc6YnnsAAgoYRxDr7" target="_blank"><span class="dashicons dashicons-youtube"></span> <?php esc_html_e( 'Video Tutorials', 'woo-feed' ); ?></a>
<a class="woo-feed-support-link" href="<?php echo esc_url($support_link); ?>" target="_blank"><span class="dashicons dashicons-sos"></span> <?php esc_html_e( 'Get Support', 'woo-feed' ); ?></a>
</div>
</div>
</th>
</tr>
</tbody>
</table><br>
<?php
}
/**
* Prints Admin Messages & Notices
*
* @return void
*/
private function display_admin_messages() {
if ( ! empty( $this->messages ) ) {
foreach ( $this->messages as $notice ) {
if ( ! isset( $notice['notice'] ) || ! isset( $notice['type'] ) ) {
continue;
}
$isDismissible = isset( $notice['dismissible'] ) && true === $notice['dismissible'] ? ' is-dismissible' : '';
printf(
'<div class="notice notice-%1$s %1$s%3$s"><p>%2$s</p></div>',
esc_attr( $notice['type'] ),
wp_kses_post( $notice['notice'] ),
esc_attr( $isDismissible )
);
}
}
}
/**
* Set Messages From DB
*
* @return void
*/
private function set_saved_messages() {
// phpcs:disable WordPress.Security.NonceVerification.Recommended
if ( isset( $_GET['wpf_message'] ) && ! empty( $_GET['wpf_message'] ) ) {
$message = get_option( 'wpf_message' );
$type = sanitize_text_field( wp_unslash($_GET['wpf_message']) );
delete_option( 'wpf_message' ); // empty message cache.
if ( ! empty( $message ) ) {
if ( is_array( $message ) ) {
foreach ( $message as $m ) {
$m = isset( $m['message'] ) ? $m['message'] : $m;
$t = isset( $m['type'] ) ? $m['type'] : $type;
$this->setMessage(
array(
'notice' => esc_html( $m ),
'type' => $t,
'dismissible' => true,
)
);
}
} else {
$this->setMessage(
array(
'notice' => esc_html( $message ),
'type' => $type,
'dismissible' => true,
)
);
}
}
$dir = get_option( 'WPF_DIRECTORY_PERMISSION_CHECK', false );
if ( $dir ) {
$this->setMessage(
array(
'notice' => esc_html( $dir ),
'type' => 'error',
'dismissible' => true,
)
);
delete_option( 'WPF_DIRECTORY_PERMISSION_CHECK' ); // empty message cache.
}
}
// phpcs:enable
}
/**
* Set Feed Edit/Update Messages
*
* @return void
*/
private function set_feed_edit_update_messages() {
global $plugin_page;
// phpcs:disable WordPress.Security.NonceVerification.Recommended
if ( 'webappick-manage-feeds' == $plugin_page ) {
if ( ( isset( $_GET['feed_created'] ) || isset( $_GET['feed_updated'] ) || isset( $_GET['feed_imported'] ) ) && isset( $_GET['feed_name'] ) ) {
if ( isset( $_GET['feed_created'] ) ) {
$this->setMessage(
array(
'notice' => esc_html__( 'Feed Config Created Successfully.', 'woo-feed' ),
'type' => 'success',
'dismissible' => true,
)
);
}
if ( isset( $_GET['feed_updated'] ) ) {
$this->setMessage(
array(
'notice' => esc_html__( 'Feed Config Updated Successfully.', 'woo-feed' ),
'type' => 'updated',
'dismissible' => true,
)
);
}
if ( isset( $_GET['feed_imported'] ) ) {
$this->setMessage(
array(
'notice' => esc_html__( 'Feed Config Successfully Imported.', 'woo-feed' ),
'type' => 'updated',
'dismissible' => true,
)
);
}
}
// get updated link.
if ( isset( $_GET['link'] ) && ! empty( $_GET['link'] ) ) {
$link = filter_input( INPUT_GET, 'link', FILTER_VALIDATE_URL );
/**
* @TODO use session/cookies/localstorage or transient api for this message
* @see settings_errors()
*/
if ( isset( $link ) && ! empty( $link ) ) {
/** @noinspection HtmlUnknownTarget */
$link = sprintf( '<a href="%1$s" target="_blank">%1$s</a>', esc_url( $link ) );
/* translators: Feed URL */
$notice = sprintf( esc_html__( 'Feed Generated Successfully. Feed URL: %s', 'woo-feed' ), $link );
$notice = '<b style="color: #008779;">' . $notice . '</b>';
if ( isset( $_GET['cat'] ) && 'no' == $_GET['cat'] ) {
$notice .= sprintf( '<br/><br/><b style="color: #f49242;">%s</b>', esc_html__( 'Warning:', 'woo-feed' ) );
$link = 'https://webappick.com/docs/ctx-feed/configuration/how-to-map-store-category-with-merchant-category/';
/** @noinspection HtmlUnknownTarget */
$link = sprintf( '<a href="%s" target="_blank">%s</a>', esc_url( $link ), esc_html__( 'Learn more...', 'woo-feed' ) );
$notice .= sprintf( '<ul><li>%s %s</li></ul>', esc_html__( 'Google Product category is not selected. Your Google Ads CPC rate will be high. Add proper Google Product Category to each product & reduce CPC rate.', 'woo-feed' ), $link );
}
$this->setMessage(
array(
'notice' => $notice,
'type' => 'updated',
'dismissible' => true,
)
);
}
}
}
// phpcs:enable
}
/**
* Set Schedule Update Response Message
*
* @return void
*/
private function set_schedule_update_messages() {
global $plugin_page;
// phpcs:disable WordPress.Security.NonceVerification.Recommended
if ( 'webappick-manage-feeds' == $plugin_page ) {
if ( isset( $_GET['schedule_updated'] ) && ! empty( $_GET['schedule_updated'] ) ) {
if ( 1 == $_GET['schedule_updated'] ) {
$this->setMessage(
array(
'notice' => esc_html__( 'Feed auto update interval updated.', 'woo-feed' ),
'type' => 'updated',
'dismissible' => true,
)
);
}
if ( 2 == $_GET['schedule_updated'] ) {
$this->setMessage(
array(
'notice' => esc_html__( 'Unable to save auto update interval.', 'woo-feed' ),
'type' => 'warning',
'dismissible' => true,
)
);
}
if ( 3 == $_GET['schedule_updated'] ) {
$this->setMessage(
array(
'notice' => esc_html__( 'Invalid interval value.', 'woo-feed' ),
'type' => 'error',
'dismissible' => true,
)
);
}
if ( 4 == $_GET['schedule_updated'] ) {
$this->setMessage(
array(
'notice' => esc_html__( 'Invalid request.', 'woo-feed' ),
'type' => 'error',
'dismissible' => true,
)
);
}
}
}
// phpcs:enable
}
/**
* Set Settings Notices
*
* @return void
*/
private function set_settings_messages() {
global $plugin_page;
// phpcs:disable WordPress.Security.NonceVerification.Recommended
if ( 'webappick-feed-settings' == $plugin_page ) {
if ( isset( $_GET['settings_updated'] ) && '1' == $_GET['settings_updated'] ) {
$this->setMessage(
array(
'notice' => esc_html__( 'Settings Updated.', 'woo-feed' ),
'type' => 'updated',
'dismissible' => true,
)
);
}
}
// phpcs:enable
}
/**
* Define private clone method to disallow cloning
*/
private function __clone() {
// cloning isn't allowed.
}
}
/**
* Get Woo_Feed_message Instance
*
* @return Woo_Feed_Message
*/
function WPFFWMessage() {
return Woo_Feed_Message::getInstance();
}