official page.
* Version: 1.1.39
* Requires at least: 4.9
* Requires PHP: 5.6.20
* Author: DraftPress
* Author URI: https://draftpress.com/
* Disclaimer: Use at your own risk. No warranty expressed or implied is provided.
* Text Domain: header-footer-code-manager
* Domain Path: /languages
*/
/*
* If this file is called directly, abort.
*/
if ( !defined( 'WPINC' ) ) {
die;
}
register_activation_hook( __FILE__, array( 'NNR_HFCM', 'hfcm_options_install' ) );
add_action( 'plugins_loaded', array( 'NNR_HFCM', 'hfcm_db_update_check' ) );
add_action( 'admin_enqueue_scripts', array( 'NNR_HFCM', 'hfcm_enqueue_assets' ) );
add_action( 'plugins_loaded', array( 'NNR_HFCM', 'hfcm_load_translation_files' ) );
add_action( 'admin_menu', array( 'NNR_HFCM', 'hfcm_modifymenu' ) );
add_filter(
'plugin_action_links_' . plugin_basename( __FILE__ ), array(
'NNR_HFCM',
'hfcm_add_plugin_page_settings_link'
)
);
add_action( 'admin_init', array( 'NNR_HFCM', 'hfcm_init' ) );
add_shortcode( 'hfcm', array( 'NNR_HFCM', 'hfcm_shortcode' ) );
add_action( 'wp_head', array( 'NNR_HFCM', 'hfcm_header_scripts' ) );
add_action( 'wp_footer', array( 'NNR_HFCM', 'hfcm_footer_scripts' ) );
add_action( 'the_content', array( 'NNR_HFCM', 'hfcm_content_scripts' ) );
add_action( 'wp_ajax_hfcm-request', array( 'NNR_HFCM', 'hfcm_request_handler' ) );
// Files containing submenu functions
require_once plugin_dir_path( __FILE__ ) . 'includes/class-hfcm-snippets-list.php';
if ( !class_exists( 'NNR_HFCM' ) ) :
class NNR_HFCM
{
public static $nnr_hfcm_db_version = "1.5";
public static $nnr_hfcm_table = "hfcm_scripts";
/*
* hfcm init function
*/
public static function hfcm_init()
{
self::hfcm_check_installation_date();
self::hfcm_plugin_notice_dismissed();
self::hfcm_import_snippets();
self::hfcm_export_snippets();
}
/*
* function to create the DB / Options / Defaults
*/
public static function hfcm_options_install()
{
$hfcm_now = strtotime( "now" );
add_option( 'hfcm_activation_date', $hfcm_now );
update_option( 'hfcm_activation_date', $hfcm_now );
global $wpdb;
$table_name = $wpdb->prefix . self::$nnr_hfcm_table;
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE `{$table_name}` (
`script_id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
`snippet` LONGTEXT,
`snippet_type` enum('html', 'js', 'css') DEFAULT 'html',
`device_type` enum('mobile','desktop', 'both') DEFAULT 'both',
`location` varchar(100) NOT NULL,
`display_on` enum('All','s_pages', 's_posts','s_categories','s_custom_posts','s_tags', 's_is_home', 's_is_search', 's_is_archive','latest_posts','manual') NOT NULL DEFAULT 'All',
`lp_count` int(10) DEFAULT NULL,
`s_pages` MEDIUMTEXT DEFAULT NULL,
`ex_pages` MEDIUMTEXT DEFAULT NULL,
`s_posts` MEDIUMTEXT DEFAULT NULL,
`ex_posts` MEDIUMTEXT DEFAULT NULL,
`s_custom_posts` varchar(300) DEFAULT NULL,
`s_categories` varchar(300) DEFAULT NULL,
`s_tags` varchar(300) DEFAULT NULL,
`status` enum('active','inactive') NOT NULL DEFAULT 'active',
`created_by` varchar(300) DEFAULT NULL,
`last_modified_by` varchar(300) DEFAULT NULL,
`created` datetime DEFAULT NULL,
`last_revision_date` datetime DEFAULT NULL,
PRIMARY KEY (`script_id`)
) $charset_collate";
include_once ABSPATH . 'wp-admin/includes/upgrade.php';
dbDelta( $sql );
add_option( 'hfcm_db_version', self::$nnr_hfcm_db_version );
}
/*
* function to check if plugin is being updated
*/
public static function hfcm_db_update_check()
{
global $wpdb;
$table_name = $wpdb->prefix . self::$nnr_hfcm_table;
if ( get_option( 'hfcm_db_version' ) != self::$nnr_hfcm_db_version ) {
$wpdb->show_errors();
if ( !empty( $wpdb->dbname ) ) {
// Check for Exclude Pages
$nnr_column_ex_pages = 'ex_pages';
$nnr_check_column_ex_pages = $wpdb->get_results(
$wpdb->prepare(
"SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = %s AND TABLE_NAME = %s AND COLUMN_NAME = %s ",
$wpdb->dbname,
$table_name,
$nnr_column_ex_pages
)
);
if ( empty( $nnr_check_column_ex_pages ) ) {
$nnr_alter_sql = "ALTER TABLE `{$table_name}` ADD `ex_pages` varchar(300) DEFAULT 0 AFTER `s_pages`";
$wpdb->query( $nnr_alter_sql );
}
// Check for Exclude Posts
$nnr_column_ex_posts = 'ex_posts';
$nnr_check_column_ex_posts = $wpdb->get_results(
$wpdb->prepare(
"SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = %s AND TABLE_NAME = %s AND COLUMN_NAME = %s ",
$wpdb->dbname,
$table_name,
$nnr_column_ex_posts
)
);
if ( empty( $nnr_check_column_ex_posts ) ) {
$nnr_alter_sql = "ALTER TABLE `{$table_name}` ADD `ex_posts` varchar(300) DEFAULT 0 AFTER `s_posts`";
$wpdb->query( $nnr_alter_sql );
}
// Check for Snippet Type
$nnr_column_snippet_type = 'snippet_type';
$nnr_check_column_snippet_type = $wpdb->get_results(
$wpdb->prepare(
"SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = %s AND TABLE_NAME = %s AND COLUMN_NAME = %s ",
$wpdb->dbname,
$table_name,
$nnr_column_snippet_type
)
);
if ( empty( $nnr_check_column_snippet_type ) ) {
$nnr_alter_sql = "ALTER TABLE `{$table_name}` ADD `snippet_type` enum('html', 'js', 'css') DEFAULT 'html' AFTER `snippet`";
$wpdb->query( $nnr_alter_sql );
}
$nnr_alter_sql = "ALTER TABLE `{$table_name}` CHANGE `snippet` `snippet` LONGTEXT NULL";
$wpdb->query( $nnr_alter_sql );
$nnr_alter_sql = "ALTER TABLE `{$table_name}` CHANGE `display_on` `display_on` ENUM('All','s_pages','s_posts','s_categories','s_custom_posts','s_tags','s_is_home','s_is_archive','s_is_search','latest_posts','manual') DEFAULT 'All' NOT NULL";
$wpdb->query( $nnr_alter_sql );
$nnr_alter_sql = "ALTER TABLE `{$table_name}` CHANGE `s_pages` `s_pages` MEDIUMTEXT NULL, CHANGE `ex_pages` `ex_pages` MEDIUMTEXT NULL, CHANGE `s_posts` `s_posts` MEDIUMTEXT NULL, CHANGE `ex_posts` `ex_posts` MEDIUMTEXT NULL";
$wpdb->query( $nnr_alter_sql );
}
self::hfcm_options_install();
}
update_option( 'hfcm_db_version', self::$nnr_hfcm_db_version );
}
/*
* Enqueue style-file, if it exists.
*/
public static function hfcm_enqueue_assets( $hook )
{
$allowed_pages = array(
'toplevel_page_hfcm-list',
'hfcm_page_hfcm-create',
'admin_page_hfcm-update',
);
wp_register_style( 'hfcm_general_admin_assets', plugins_url( 'css/style-general-admin.css', __FILE__ ) );
wp_enqueue_style( 'hfcm_general_admin_assets' );
if ( in_array( $hook, $allowed_pages ) ) {
// Plugin's CSS
wp_register_style( 'hfcm_assets', plugins_url( 'css/style-admin.css', __FILE__ ) );
wp_enqueue_style( 'hfcm_assets' );
}
// Remove hfcm-list from $allowed_pages
array_shift( $allowed_pages );
if ( in_array( $hook, $allowed_pages ) ) {
// selectize.js plugin CSS and JS files
wp_register_style( 'selectize-css', plugins_url( 'css/selectize.bootstrap3.css', __FILE__ ) );
wp_enqueue_style( 'selectize-css' );
wp_register_script( 'selectize-js', plugins_url( 'js/selectize.min.js', __FILE__ ), array( 'jquery' ) );
wp_enqueue_script( 'selectize-js' );
wp_enqueue_code_editor( array( 'type' => 'text/html' ) );
}
}
/*
* This function loads plugins translation files
*/
public static function hfcm_load_translation_files()
{
load_plugin_textdomain( 'header-footer-code-manager', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
}
/*
* function to create menu page, and submenu pages.
*/
public static function hfcm_modifymenu()
{
// This is the main item for the menu
add_menu_page(
__( 'Header Footer Code Manager', 'header-footer-code-manager' ),
__( 'HFCM', 'header-footer-code-manager' ),
'manage_options',
'hfcm-list',
array( 'NNR_HFCM', 'hfcm_list' ),
'dashicons-hfcm'
);
// This is a submenu
add_submenu_page(
'hfcm-list',
__( 'All Snippets', 'header-footer-code-manager' ),
__( 'All Snippets', 'header-footer-code-manager' ),
'manage_options',
'hfcm-list',
array( 'NNR_HFCM', 'hfcm_list' )
);
// This is a submenu
add_submenu_page(
'hfcm-list',
__( 'Add New Snippet', 'header-footer-code-manager' ),
__( 'Add New', 'header-footer-code-manager' ),
'manage_options',
'hfcm-create',
array( 'NNR_HFCM', 'hfcm_create' )
);
// This is a submenu
add_submenu_page(
'hfcm-list',
__( 'Tools', 'header-footer-code-manager' ),
__( 'Tools', 'header-footer-code-manager' ),
'manage_options',
'hfcm-tools',
array( 'NNR_HFCM', 'hfcm_tools' )
);
// This submenu is HIDDEN, however, we need to add it anyways
add_submenu_page(
'hfcm-update',
__( 'Update Script', 'header-footer-code-manager' ),
__( 'Update', 'header-footer-code-manager' ),
'manage_options',
'hfcm-update',
array( 'NNR_HFCM', 'hfcm_update' )
);
// This submenu is HIDDEN, however, we need to add it anyways
add_submenu_page(
'hfcm-request-handler',
__( 'Request Handler Script', 'header-footer-code-manager' ),
__( 'Request Handler', 'header-footer-code-manager' ),
'manage_options',
'hfcm-request-handler',
array( 'NNR_HFCM', 'hfcm_request_handler' )
);
}
/*
* function to add a settings link for the plugin on the Settings Page
*/
public static function hfcm_add_plugin_page_settings_link( $links )
{
$links = array_merge(
array( '' . __( 'Settings' ) . '' ),
$links
);
return $links;
}
/*
* function to check the plugins installation date
*/
public static function hfcm_check_installation_date()
{
$install_date = get_option( 'hfcm_activation_date' );
$past_date = strtotime( '-7 days' );
if ( $past_date >= $install_date ) {
add_action( 'admin_notices', array( 'NNR_HFCM', 'hfcm_review_push_notice' ) );
}
add_action( 'admin_notices', array( 'NNR_HFCM', 'hfcm_static_notices' ) );
}
/*
* function to create the Admin Notice
*/
public static function hfcm_review_push_notice()
{
$allowed_pages_notices = array(
'toplevel_page_hfcm-list',
'hfcm_page_hfcm-create',
'admin_page_hfcm-update',
);
$screen = get_current_screen()->id;
$user_id = get_current_user_id();
// Check if current user has already dismissed it
$install_date = get_option( 'hfcm_activation_date' );
if ( !get_user_meta( $user_id, 'hfcm_plugin_notice_dismissed' ) && in_array( $screen, $allowed_pages_notices ) ) {
?>
Dismiss
Header Footer Code Manager plugin for a while now. If you like the plugin, please support our awesome development and support team by leaving a rating. Rate it! It’ll mean the world to us and keep this plugin free and constantly updated. Leave A Review', 'header-footer-code-manager' ); ?>
id;
if ( in_array( $screen, $allowed_pages_notices ) ) {
?>
🔥 LIFETIME DEAL ALERT: The PRO version of this plugin is released and and available for a
limited time as a one-time, exclusive lifetime deal.
Want it? Click here to get HFCM Pro for the lowest price ever
script_id ) . ": " . esc_html( $scriptdata->name ) . " -->\n" . html_entity_decode( $scriptdata->snippet ) . "\n\n";
return $output;
}
/*
* function to implement shortcode
*/
public static function hfcm_shortcode( $atts )
{
global $wpdb;
$table_name = $wpdb->prefix . self::$nnr_hfcm_table;
if ( !empty( $atts['id'] ) ) {
$id = absint( $atts['id'] );
$hide_device = wp_is_mobile() ? 'desktop' : 'mobile';
$script = $wpdb->get_results(
$wpdb->prepare(
"SELECT * FROM `{$table_name}` WHERE status='active' AND device_type!=%s AND script_id=%d",
$hide_device,
$id
)
);
if ( !empty( $script ) ) {
return self::hfcm_render_snippet( $script[0] );
}
}
}
/*
* Function to json_decode array and check if empty
*/
public static function hfcm_not_empty( $scriptdata, $prop_name )
{
$data = json_decode( $scriptdata->{$prop_name} );
if ( empty( $data ) ) {
return false;
}
return true;
}
/*
* function to decide which snippets to show - triggered by hooks
*/
public static function hfcm_add_snippets( $location = '', $content = '' )
{
global $wpdb;
$beforecontent = '';
$aftercontent = '';
$table_name = $wpdb->prefix . self::$nnr_hfcm_table;
$hide_device = wp_is_mobile() ? 'desktop' : 'mobile';
$nnr_hfcm_snippets_sql = "SELECT * FROM `{$table_name}` WHERE status='active' AND device_type!=%s";
$nnr_hfcm_snippet_placeholder_args = [ $hide_device ];
if ( $location && in_array( $location, array( 'header', 'footer' ) ) ) {
$nnr_hfcm_snippets_sql .= " AND location=%s";
$nnr_hfcm_snippet_placeholder_args[] = $location;
} else {
$nnr_hfcm_snippets_sql .= " AND location NOT IN ( 'header', 'footer' )";
}
$script = $wpdb->get_results(
$wpdb->prepare(
$nnr_hfcm_snippets_sql,
$nnr_hfcm_snippet_placeholder_args
)
);
if ( !empty( $script ) ) {
foreach ( $script as $key => $scriptdata ) {
$out = '';
switch ( $scriptdata->display_on ) {
case 'All':
$is_not_empty_ex_pages = self::hfcm_not_empty( $scriptdata, 'ex_pages' );
$is_not_empty_ex_posts = self::hfcm_not_empty( $scriptdata, 'ex_posts' );
if ( ($is_not_empty_ex_pages && is_page( json_decode( $scriptdata->ex_pages ) )) || ($is_not_empty_ex_posts && is_single( json_decode( $scriptdata->ex_posts ) )) ) {
$out = '';
} else {
$out = self::hfcm_render_snippet( $scriptdata );
}
break;
case 'latest_posts':
if ( is_single() ) {
if ( !empty( $scriptdata->lp_count ) ) {
$nnr_hfcm_latest_posts = wp_get_recent_posts(
array(
'numberposts' => absint( $scriptdata->lp_count ),
)
);
} else {
$nnr_hfcm_latest_posts = wp_get_recent_posts(
array(
'numberposts' => 5
)
);
}
foreach ( $nnr_hfcm_latest_posts as $key => $lpostdata ) {
if ( get_the_ID() == $lpostdata['ID'] ) {
$out = self::hfcm_render_snippet( $scriptdata );
}
}
}
break;
case 's_categories':
$is_not_empty_s_categories = self::hfcm_not_empty( $scriptdata, 's_categories' );
if ( $is_not_empty_s_categories ) {
if ( class_exists( 'WooCommerce' ) && is_product_category( json_decode( $scriptdata->s_categories ) ) ) {
$out = self::hfcm_render_snippet( $scriptdata );
} else if ( in_category( json_decode( $scriptdata->s_categories ) ) ) {
if ( is_category( json_decode( $scriptdata->s_categories ) ) ) {
$out = self::hfcm_render_snippet( $scriptdata );
}
if ( !is_archive() && !is_home() ) {
$out = self::hfcm_render_snippet( $scriptdata );
}
} else {
if ( class_exists( 'WooCommerce' ) && is_product() ) {
foreach ( json_decode( $scriptdata->s_categories ) as $key_c => $item_c ) {
if ( has_term( $item_c, 'product_cat' ) ) {
$out = self::hfcm_render_snippet( $scriptdata );
break;
}
}
}
}
}
break;
case 's_custom_posts':
$is_not_empty_s_custom_posts = self::hfcm_not_empty( $scriptdata, 's_custom_posts' );
if ( $is_not_empty_s_custom_posts && is_singular( json_decode( $scriptdata->s_custom_posts ) ) ) {
$out = self::hfcm_render_snippet( $scriptdata );
}
break;
case 's_posts':
$is_not_empty_s_posts = self::hfcm_not_empty( $scriptdata, 's_posts' );
if ( $is_not_empty_s_posts && is_single( json_decode( $scriptdata->s_posts ) ) ) {
$out = self::hfcm_render_snippet( $scriptdata );
}
break;
case 's_is_home':
if ( is_home() || is_front_page() ) {
$out = self::hfcm_render_snippet( $scriptdata );
}
break;
case 's_is_archive':
if ( is_archive() ) {
$out = self::hfcm_render_snippet( $scriptdata );
}
break;
case 's_is_search':
if ( is_search() ) {
$out = self::hfcm_render_snippet( $scriptdata );
}
break;
case 's_pages':
$is_not_empty_s_pages = self::hfcm_not_empty( $scriptdata, 's_pages' );
if ( $is_not_empty_s_pages ) {
// Gets the page ID of the blog page
$blog_page = get_option( 'page_for_posts' );
// Checks if the blog page is present in the array of selected pages
if ( in_array( $blog_page, json_decode( $scriptdata->s_pages ) ) ) {
if ( is_page( json_decode( $scriptdata->s_pages ) ) || (!is_front_page() && is_home()) ) {
$out = self::hfcm_render_snippet( $scriptdata );
}
} elseif ( is_page( json_decode( $scriptdata->s_pages ) ) ) {
$out = self::hfcm_render_snippet( $scriptdata );
}
}
break;
case 's_tags':
$is_not_empty_s_tags = self::hfcm_not_empty( $scriptdata, 's_tags' );
if ( $is_not_empty_s_tags ) {
if ( has_tag( json_decode( $scriptdata->s_tags ) ) ) {
if ( is_tag( json_decode( $scriptdata->s_tags ) ) ) {
$out = self::hfcm_render_snippet( $scriptdata );
}
if ( !is_archive() && !is_home() ) {
$out = self::hfcm_render_snippet( $scriptdata );
}
} elseif ( class_exists( 'WooCommerce' ) && is_product_tag( json_decode( $scriptdata->s_tags ) ) ) {
$out = self::hfcm_render_snippet( $scriptdata );
} elseif ( class_exists( 'WooCommerce' ) && is_product() ) {
foreach ( json_decode( $scriptdata->s_tags ) as $key_t => $item_t ) {
if ( has_term( $item_t, 'product_tag' ) ) {
$out = self::hfcm_render_snippet( $scriptdata );
break;
}
}
}
}
}
switch ( $scriptdata->location ) {
case 'before_content':
$beforecontent .= $out;
break;
case 'after_content':
$aftercontent .= $out;
break;
default:
echo $out;
}
}
}
// Return results after the loop finishes
return $beforecontent . $content . $aftercontent;
}
/*
* function to add snippets in the header
*/
public static function hfcm_header_scripts()
{
if ( !is_feed() ) {
self::hfcm_add_snippets( 'header' );
}
}
/*
* function to add snippets in the footer
*/
public static function hfcm_footer_scripts()
{
if ( !is_feed() ) {
self::hfcm_add_snippets( 'footer' );
}
}
/*
* function to add snippets before/after the content
*/
public static function hfcm_content_scripts( $content )
{
if ( !is_feed() && !(defined( 'REST_REQUEST' ) && REST_REQUEST) ) {
return self::hfcm_add_snippets( false, $content );
} else {
return $content;
}
}
/*
* load redirection Javascript code
*/
public static function hfcm_redirect( $url = '' )
{
// Register the script
wp_register_script( 'hfcm_redirection', plugins_url( 'js/location.js', __FILE__ ) );
// Localize the script with new data
$translation_array = array( 'url' => $url );
wp_localize_script( 'hfcm_redirection', 'hfcm_location', $translation_array );
// Enqueued script with localized data.
wp_enqueue_script( 'hfcm_redirection' );
}
/*
* function to sanitize POST data
*/
public static function hfcm_sanitize_text( $key, $is_not_snippet = true )
{
if ( !empty( $_POST['data'][ $key ] ) ) {
$post_data = stripslashes_deep( $_POST['data'][ $key ] );
if ( $is_not_snippet ) {
$post_data = sanitize_text_field( $post_data );
} else {
$post_data = htmlentities( $post_data );
}
return $post_data;
}
return '';
}
/*
* function to sanitize strings within POST data arrays
*/
public static function hfcm_sanitize_array( $key, $type = 'integer' )
{
if ( !empty( $_POST['data'][ $key ] ) ) {
$arr = $_POST['data'][ $key ];
if ( !is_array( $arr ) ) {
return array();
}
if ( 'integer' === $type ) {
return array_map( 'absint', $arr );
} else { // strings
$new_array = array();
foreach ( $arr as $val ) {
$new_array[] = sanitize_text_field( $val );
}
}
return $new_array;
}
return array();
}
/*
* function for submenu "Add snippet" page
*/
public static function hfcm_create()
{
// check user capabilities
$nnr_hfcm_can_edit = current_user_can( 'manage_options' );
if ( !$nnr_hfcm_can_edit ) {
echo 'Sorry, you do not have access to this page.';
return false;
}
// prepare variables for includes/hfcm-add-edit.php
$name = '';
$snippet = '';
$nnr_snippet_type = 'html';
$device_type = '';
$location = '';
$display_on = '';
$status = '';
$lp_count = 5; // Default value
$s_pages = array();
$ex_pages = array();
$s_posts = array();
$ex_posts = array();
$s_custom_posts = array();
$s_categories = array();
$s_tags = array();
// Notify hfcm-add-edit.php NOT to make changes for update
$update = false;
include_once plugin_dir_path( __FILE__ ) . 'includes/hfcm-add-edit.php';
}
/*
* function to handle add/update requests
*/
public static function hfcm_request_handler()
{
// check user capabilities
$nnr_hfcm_can_edit = current_user_can( 'manage_options' );
if ( !$nnr_hfcm_can_edit ) {
echo 'Sorry, you do not have access to this page.';
return false;
}
if ( isset( $_POST['insert'] ) ) {
// Check nonce
check_admin_referer( 'create-snippet' );
} else {
if ( empty( $_REQUEST['id'] ) ) {
die( 'Missing ID parameter.' );
}
$id = absint( $_REQUEST['id'] );
}
if ( isset( $_POST['update'] ) ) {
// Check nonce
check_admin_referer( 'update-snippet_' . $id );
}
// Handle AJAX on/off toggle for snippets
if ( isset( $_REQUEST['toggle'] ) && !empty( $_REQUEST['togvalue'] ) ) {
// Check nonce
check_ajax_referer( 'hfcm-toggle-snippet', 'security' );
if ( 'on' === $_REQUEST['togvalue'] ) {
$status = 'active';
} else {
$status = 'inactive';
}
// Global vars
global $wpdb;
$table_name = $wpdb->prefix . self::$nnr_hfcm_table;
$wpdb->update(
$table_name, //table
array( 'status' => $status ), //data
array( 'script_id' => $id ), //where
array( '%s' ), //data format
array( '%s' ) //where format
);
} elseif ( isset( $_POST['insert'] ) || isset( $_POST['update'] ) ) {
// Create / update snippet
// Sanitize fields
$name = self::hfcm_sanitize_text( 'name' );
$snippet = self::hfcm_sanitize_text( 'snippet', false );
$nnr_snippet_type = self::hfcm_sanitize_text( 'snippet_type' );
$device_type = self::hfcm_sanitize_text( 'device_type' );
$display_on = self::hfcm_sanitize_text( 'display_on' );
$location = self::hfcm_sanitize_text( 'location' );
$lp_count = self::hfcm_sanitize_text( 'lp_count' );
$status = self::hfcm_sanitize_text( 'status' );
$s_pages = self::hfcm_sanitize_array( 's_pages' );
$ex_pages = self::hfcm_sanitize_array( 'ex_pages' );
$s_posts = self::hfcm_sanitize_array( 's_posts' );
$ex_posts = self::hfcm_sanitize_array( 'ex_posts' );
$s_custom_posts = self::hfcm_sanitize_array( 's_custom_posts', 'string' );
$s_categories = self::hfcm_sanitize_array( 's_categories' );
$s_tags = self::hfcm_sanitize_array( 's_tags' );
if ( 'manual' === $display_on ) {
$location = '';
}
$lp_count = max( 1, (int) $lp_count );
// Global vars
global $wpdb;
global $current_user;
$table_name = $wpdb->prefix . self::$nnr_hfcm_table;
// Update snippet
if ( isset( $id ) ) {
$wpdb->update(
$table_name, //table
// Data
array(
'name' => $name,
'snippet' => $snippet,
'snippet_type' => $nnr_snippet_type,
'device_type' => $device_type,
'location' => $location,
'display_on' => $display_on,
'status' => $status,
'lp_count' => $lp_count,
's_pages' => wp_json_encode( $s_pages ),
'ex_pages' => wp_json_encode( $ex_pages ),
's_posts' => wp_json_encode( $s_posts ),
'ex_posts' => wp_json_encode( $ex_posts ),
's_custom_posts' => wp_json_encode( $s_custom_posts ),
's_categories' => wp_json_encode( $s_categories ),
's_tags' => wp_json_encode( $s_tags ),
'last_revision_date' => current_time( 'Y-m-d H:i:s' ),
'last_modified_by' => sanitize_text_field( $current_user->display_name ),
),
// Where
array( 'script_id' => $id ),
// Data format
array(
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
),
// Where format
array( '%s' )
);
self::hfcm_redirect( admin_url( 'admin.php?page=hfcm-update&message=1&id=' . $id ) );
} else {
// Create new snippet
$wpdb->insert(
$table_name, //table
array(
'name' => $name,
'snippet' => $snippet,
'snippet_type' => $nnr_snippet_type,
'device_type' => $device_type,
'location' => $location,
'display_on' => $display_on,
'status' => $status,
'lp_count' => $lp_count,
's_pages' => wp_json_encode( $s_pages ),
'ex_pages' => wp_json_encode( $ex_pages ),
's_posts' => wp_json_encode( $s_posts ),
'ex_posts' => wp_json_encode( $ex_posts ),
's_custom_posts' => wp_json_encode( $s_custom_posts ),
's_categories' => wp_json_encode( $s_categories ),
's_tags' => wp_json_encode( $s_tags ),
'created' => current_time( 'Y-m-d H:i:s' ),
'created_by' => sanitize_text_field( $current_user->display_name ),
), array(
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
'%d',
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
)
);
$lastid = $wpdb->insert_id;
self::hfcm_redirect( admin_url( 'admin.php?page=hfcm-update&message=6&id=' . $lastid ) );
}
} elseif ( isset( $_POST['get_posts'] ) ) {
// JSON return posts for AJAX
// Check nonce
check_ajax_referer( 'hfcm-get-posts', 'security' );
// Global vars
global $wpdb;
$table_name = $wpdb->prefix . self::$nnr_hfcm_table;
// Get all selected posts
if ( -1 === $id ) {
$s_posts = array();
$ex_posts = array();
} else {
// Select value to update
$script = $wpdb->get_results(
$wpdb->prepare( "SELECT s_posts FROM `{$table_name}` WHERE script_id=%s", $id )
);
$s_posts = array();
if ( !empty( $script ) ) {
foreach ( $script as $s ) {
$s_posts = json_decode( $s->s_posts );
if ( !is_array( $s_posts ) ) {
$s_posts = array();
}
}
}
$ex_posts = array();
$script_ex = $wpdb->get_results(
$wpdb->prepare( "SELECT ex_posts FROM `{$table_name}` WHERE script_id=%s", $id )
);
if ( !empty( $script_ex ) ) {
foreach ( $script_ex as $s ) {
$ex_posts = json_decode( $s->ex_posts );
if ( !is_array( $ex_posts ) ) {
$ex_posts = array();
}
}
}
}
// Get all posts
$args = array(
'public' => true,
'_builtin' => false,
);
$output = 'names'; // names or objects, note names is the default
$operator = 'and'; // 'and' or 'or'
$c_posttypes = get_post_types( $args, $output, $operator );
$posttypes = array( 'post' );
foreach ( $c_posttypes as $cpdata ) {
$posttypes[] = $cpdata;
}
$posts = get_posts(
array(
'post_type' => $posttypes,
'posts_per_page' => -1,
'numberposts' => -1,
'orderby' => 'title',
'order' => 'ASC',
)
);
$json_output = array(
'selected' => array(),
'posts' => array(),
'excluded' => array(),
);
if ( !empty( $posts ) ) {
foreach ( $posts as $pdata ) {
$nnr_hfcm_post_title = trim( $pdata->post_title );
if ( empty( $nnr_hfcm_post_title ) ) {
$nnr_hfcm_post_title = "(no title)";
}
if ( !empty( $ex_posts ) && in_array( $pdata->ID, $ex_posts ) ) {
$json_output['excluded'][] = $pdata->ID;
}
if ( !empty( $s_posts ) && in_array( $pdata->ID, $s_posts ) ) {
$json_output['selected'][] = $pdata->ID;
}
$json_output['posts'][] = array(
'text' => sanitize_text_field( $nnr_hfcm_post_title ),
'value' => $pdata->ID,
);
}
}
echo wp_json_encode( $json_output );
wp_die();
}
}
/*
* function for submenu "Update snippet" page
*/
public static function hfcm_update()
{
add_action( 'wp_enqueue_scripts', 'hfcm_selectize_enqueue' );
// check user capabilities
$nnr_hfcm_can_edit = current_user_can( 'manage_options' );
if ( !$nnr_hfcm_can_edit ) {
echo 'Sorry, you do not have access to this page.';
return false;
}
if ( empty( $_GET['id'] ) ) {
die( 'Missing ID parameter.' );
}
$id = absint( $_GET['id'] );
global $wpdb;
$table_name = $wpdb->prefix . self::$nnr_hfcm_table;
//selecting value to update
$nnr_hfcm_snippets = $wpdb->get_results(
$wpdb->prepare( "SELECT * FROM `{$table_name}` WHERE script_id=%s", $id )
);
foreach ( $nnr_hfcm_snippets as $s ) {
$name = $s->name;
$snippet = $s->snippet;
$nnr_snippet_type = $s->snippet_type;
$device_type = $s->device_type;
$location = $s->location;
$display_on = $s->display_on;
$status = $s->status;
$lp_count = $s->lp_count;
if ( empty( $lp_count ) ) {
$lp_count = 5;
}
$s_pages = json_decode( $s->s_pages );
$ex_pages = json_decode( $s->ex_pages );
$ex_posts = json_decode( $s->ex_posts );
if ( !is_array( $s_pages ) ) {
$s_pages = array();
}
if ( !is_array( $ex_pages ) ) {
$ex_pages = array();
}
$s_posts = json_decode( $s->s_posts );
if ( !is_array( $s_posts ) ) {
$s_posts = array();
}
$ex_posts = json_decode( $s->ex_posts );
if ( !is_array( $ex_posts ) ) {
$ex_posts = array();
}
$s_custom_posts = json_decode( $s->s_custom_posts );
if ( !is_array( $s_custom_posts ) ) {
$s_custom_posts = array();
}
$s_categories = json_decode( $s->s_categories );
if ( !is_array( $s_categories ) ) {
$s_categories = array();
}
$s_tags = json_decode( $s->s_tags );
if ( !is_array( $s_tags ) ) {
$s_tags = array();
}
$createdby = esc_html( $s->created_by );
$lastmodifiedby = esc_html( $s->last_modified_by );
$createdon = esc_html( $s->created );
$lastrevisiondate = esc_html( $s->last_revision_date );
}
// escape for html output
$name = esc_textarea( $name );
$snippet = esc_textarea( $snippet );
$nnr_snippet_type = esc_textarea( $nnr_snippet_type );
$device_type = esc_html( $device_type );
$location = esc_html( $location );
$display_on = esc_html( $display_on );
$status = esc_html( $status );
$lp_count = esc_html( $lp_count );
$i = esc_html( $lp_count );
// Notify hfcm-add-edit.php to make necesary changes for update
$update = true;
include_once plugin_dir_path( __FILE__ ) . 'includes/hfcm-add-edit.php';
}
/*
* function to get list of all snippets
*/
public static function hfcm_list()
{
global $wpdb;
$table_name = $wpdb->prefix . self::$nnr_hfcm_table;
$activeclass = '';
$inactiveclass = '';
$allclass = 'current';
$snippet_obj = new Hfcm_Snippets_List();
$is_pro_version_active = self::is_hfcm_pro_active();
if ( $is_pro_version_active ) {
?>
admin_url( 'admin.php' ),
'security' => wp_create_nonce( 'hfcm-toggle-snippet' ),
);
wp_localize_script( 'hfcm_toggle', 'hfcm_ajax', $translation_array );
// Enqueued script with localized data.
wp_enqueue_script( 'hfcm_toggle' );
}
/*
* function to get load tools page
*/
public static function hfcm_tools()
{
global $wpdb;
$nnr_hfcm_table_name = $wpdb->prefix . self::$nnr_hfcm_table;
$nnr_hfcm_snippets = $wpdb->get_results( "SELECT * from `{$nnr_hfcm_table_name}`" );
include_once plugin_dir_path( __FILE__ ) . 'includes/hfcm-tools.php';
}
/*
* function to export snippets
*/
public static function hfcm_export_snippets()
{
global $wpdb;
$nnr_hfcm_table_name = $wpdb->prefix . self::$nnr_hfcm_table;
if ( !empty( $_POST['nnr_hfcm_snippets'] ) && !empty( $_POST['action'] ) && ($_POST['action'] == "download") && check_admin_referer( 'hfcm-nonce' ) ) {
$nnr_hfcm_snippets_comma_separated = "";
foreach ( $_POST['nnr_hfcm_snippets'] as $nnr_hfcm_key => $nnr_hfcm_snippet ) {
$nnr_hfcm_snippet = str_replace( "snippet_", "", sanitize_text_field( $nnr_hfcm_snippet ) );
$nnr_hfcm_snippet = absint( $nnr_hfcm_snippet );
if ( !empty( $nnr_hfcm_snippet ) ) {
if ( empty( $nnr_hfcm_snippets_comma_separated ) ) {
$nnr_hfcm_snippets_comma_separated .= $nnr_hfcm_snippet;
} else {
$nnr_hfcm_snippets_comma_separated .= "," . $nnr_hfcm_snippet;
}
}
}
if ( !empty( $nnr_hfcm_snippets_comma_separated ) ) {
$nnr_hfcm_snippets = $wpdb->get_results(
"SELECT * FROM `{$nnr_hfcm_table_name}` WHERE script_id IN (" . $nnr_hfcm_snippets_comma_separated . ")"
);
if ( !empty( $nnr_hfcm_snippets ) ) {
$nnr_hfcm_export_snippets = array( "title" => "Header Footer Code Manager" );
foreach ( $nnr_hfcm_snippets as $nnr_hfcm_snippet_key => $nnr_hfcm_snippet_item ) {
unset( $nnr_hfcm_snippet_item->script_id );
$nnr_hfcm_export_snippets['snippets'][ $nnr_hfcm_snippet_key ] = $nnr_hfcm_snippet_item;
}
$file_name = 'hfcm-export-' . date( 'Y-m-d' ) . '.json';
header( "Content-Description: File Transfer" );
header( "Content-Disposition: attachment; filename={$file_name}" );
header( "Content-Type: application/json; charset=utf-8" );
echo json_encode( $nnr_hfcm_export_snippets, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE );
}
}
die;
}
}
/*
* function to import snippets
*/
public static function hfcm_import_snippets()
{
if ( !empty( $_FILES['nnr_hfcm_import_file']['tmp_name'] ) && check_admin_referer( 'hfcm-nonce' ) ) {
if ( !empty( $_FILES['nnr_hfcm_pro_import_file']['type'] ) && $_FILES['nnr_hfcm_pro_import_file']['type'] != "application/json" ) {
?>
prefix . self::$nnr_hfcm_table;
$nnr_hfcm_snippets_json = file_get_contents( $_FILES['nnr_hfcm_import_file']['tmp_name'] );
$nnr_hfcm_snippets = json_decode( $nnr_hfcm_snippets_json );
if ( empty( $nnr_hfcm_snippets->title ) || (!empty( $nnr_hfcm_snippets->title ) && $nnr_hfcm_snippets->title != "Header Footer Code Manager") ) {
?>
snippets as $nnr_hfcm_key => $nnr_hfcm_snippet ) {
$nnr_hfcm_snippet = (array) $nnr_hfcm_snippet;
if ( !empty( $nnr_hfcm_snippet['snippet_type'] ) && !in_array(
$nnr_hfcm_snippet['snippet_type'], array( "html", "css", "js" )
)
) {
$nnr_non_script_snippets = 2;
continue;
}
if ( !empty( $nnr_hfcm_snippet['location'] ) && !in_array(
$nnr_hfcm_snippet['location'], array( 'header', 'before_content', 'after_content',
'footer' )
)
) {
$nnr_non_script_snippets = 2;
continue;
}
$nnr_hfcm_sanitizes_snippet = [];
$nnr_hfcm_keys = array(
"name", "snippet", "snippet_type", "device_type", "location",
"display_on", "lp_count", "s_pages", "ex_pages", "s_posts",
"ex_posts", "s_custom_posts", "s_categories", "s_tags", "status",
"created_by", "last_modified_by", "created", "last_revision_date"
);
foreach ( $nnr_hfcm_snippet as $nnr_key => $nnr_item ) {
$nnr_key = sanitize_text_field( $nnr_key );
if ( in_array( $nnr_key, $nnr_hfcm_keys ) ) {
if ( $nnr_key == "lp_count" ) {
$nnr_item = absint( $nnr_item );
} elseif ( $nnr_key != "snippet" ) {
$nnr_item = sanitize_text_field( $nnr_item );
}
$nnr_hfcm_sanitizes_snippet[ $nnr_key ] = $nnr_item;
}
}
$nnr_hfcm_sanitizes_snippet['status'] = 'inactive';
$wpdb->insert(
$nnr_hfcm_table_name, $nnr_hfcm_sanitizes_snippet, array(
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
'%d',
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
'%s',
'%s'
)
);
}
self::hfcm_redirect( admin_url( 'admin.php?page=hfcm-list&import=' . $nnr_non_script_snippets ) );
}
}
/**
* Check if HFCM Pro is activated
*
* @return bool
*/
public static function is_hfcm_pro_active()
{
if ( is_plugin_active( 'header-footer-code-manager-pro/header-footer-code-manager-pro.php' ) ) {
return true;
}
return false;
}
public static function hfcm_get_categories()
{
$args = array(
'public' => true,
'hierarchical' => true
);
$output = 'objects'; // or objects
$operator = 'and'; // 'and' or 'or'
$taxonomies = get_taxonomies( $args, $output, $operator );
$nnr_hfcm_categories = [];
foreach ( $taxonomies as $taxonomy ) {
$nnr_hfcm_taxonomy_categories = get_categories(
[
'taxonomy' => $taxonomy->name,
'hide_empty' => 0
]
);
$nnr_hfcm_taxonomy_categories = [
'name' => $taxonomy->label,
'terms' => $nnr_hfcm_taxonomy_categories
];
$nnr_hfcm_categories[] = $nnr_hfcm_taxonomy_categories;
}
return $nnr_hfcm_categories;
}
public static function hfcm_get_tags()
{
$args = array( 'hide_empty' => 0 );
$args = array(
'public' => true,
'hierarchical' => false
);
$output = 'objects'; // or objects
$operator = 'and'; // 'and' or 'or'
$taxonomies = get_taxonomies( $args, $output, $operator );
$nnr_hfcm_tags = [];
foreach ( $taxonomies as $taxonomy ) {
$nnr_hfcm_taxonomy_tags = get_tags(
[
'taxonomy' => $taxonomy->name,
'hide_empty' => 0
]
);
$nnr_hfcm_taxonomy_tags = [
'name' => $taxonomy->label,
'terms' => $nnr_hfcm_taxonomy_tags
];
$nnr_hfcm_tags[] = $nnr_hfcm_taxonomy_tags;
}
return $nnr_hfcm_tags;
}
}
endif;