official page.
* Version: 1.1.44
* 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.6";
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,
`spt_display_on` enum('both','posts','archives') NOT NULL DEFAULT 'both',
`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_column_spt_display_on = 'spt_display_on';
$nnr_check_column_spt_display_on = $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_spt_display_on
)
);
if (empty($nnr_check_column_spt_display_on)) {
$nnr_alter_sql = "ALTER TABLE `{$table_name}` ADD `spt_display_on` enum('both','posts','archives') NOT NULL DEFAULT 'both' AFTER `s_tags`";
$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)
{
$settings_link = '' . __('Settings') . '';
$go_pro_link = 'Go Pro';
$links = array_merge(
$links,
array($settings_link, $go_pro_link)
);
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 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 ($scriptdata->spt_display_on === 'both') {
if ($is_not_empty_s_custom_posts && (is_singular(json_decode($scriptdata->s_custom_posts)) || is_post_type_archive(json_decode($scriptdata->s_custom_posts)))) {
$out = self::hfcm_render_snippet($scriptdata);
}
} else if ($scriptdata->spt_display_on === 'posts') {
if ($is_not_empty_s_custom_posts && is_singular(json_decode($scriptdata->s_custom_posts))) {
$out = self::hfcm_render_snippet($scriptdata);
}
} else if ($scriptdata->spt_display_on === 'archives') {
if ($is_not_empty_s_custom_posts && is_post_type_archive(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 = '';
$spt_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()
{
// Capability check
if (!current_user_can('manage_options')) {
echo 'Sorry, you do not have access to this page.';
return false;
}
global $wpdb, $current_user;
$table_name = $wpdb->prefix . self::$nnr_hfcm_table;
$id = !empty($_REQUEST['id']) ? absint($_REQUEST['id']) : null;
// Nonce checks
if (isset($_POST['insert'])) {
check_admin_referer('create-snippet');
} elseif (isset($_POST['update'])) {
if (empty($id)) {
die('Missing ID parameter.');
}
check_admin_referer('update-snippet_' . $id);
}
// Toggle status
if (isset($_REQUEST['toggle'], $_REQUEST['togvalue'])) {
check_ajax_referer('hfcm-toggle-snippet', 'security');
$status = ($_REQUEST['togvalue'] === 'on') ? 'active' : 'inactive';
$wpdb->update(
$table_name,
['status' => $status],
['script_id' => $id],
['%s'],
['%d']
);
return;
}
// Insert / Update snippet
if (isset($_POST['insert']) || isset($_POST['update'])) {
$fields = [
'name' => self::hfcm_sanitize_text('name'),
'snippet' => self::hfcm_sanitize_text('snippet', false),
'snippet_type' => self::hfcm_sanitize_text('snippet_type'),
'device_type' => self::hfcm_sanitize_text('device_type'),
'location' => self::hfcm_sanitize_text('location'),
'display_on' => self::hfcm_sanitize_text('display_on'),
'spt_display_on' => self::hfcm_sanitize_text('spt_display_on'),
'status' => self::hfcm_sanitize_text('status'),
'lp_count' => max(1, (int)self::hfcm_sanitize_text('lp_count')),
'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 ($fields['display_on'] === 'manual') {
$fields['location'] = '';
}
// Encode array fields
foreach (['s_pages', 'ex_pages', 's_posts', 'ex_posts', 's_custom_posts', 's_categories', 's_tags'] as $key) {
$fields[$key] = wp_json_encode($fields[$key]);
}
if ($id) {
// Update snippet
$fields['last_revision_date'] = current_time('Y-m-d H:i:s');
$fields['last_modified_by'] = sanitize_text_field($current_user->display_name);
$wpdb->update(
$table_name,
$fields,
['script_id' => $id]
);
self::hfcm_redirect(admin_url("admin.php?page=hfcm-update&message=1&id={$id}"));
} else {
// Insert new snippet
$fields['created'] = current_time('Y-m-d H:i:s');
$fields['created_by'] = sanitize_text_field($current_user->display_name);
$wpdb->insert($table_name, $fields);
$lastid = $wpdb->insert_id;
self::hfcm_redirect(admin_url("admin.php?page=hfcm-update&message=6&id={$lastid}"));
}
return;
}
// AJAX get_posts handler
if (isset($_POST['get_posts'])) {
check_ajax_referer('hfcm-get-posts', 'security');
$s_posts = $ex_posts = [];
if ($id && $id !== -1) {
$script = $wpdb->get_var($wpdb->prepare("SELECT s_posts FROM `{$table_name}` WHERE script_id=%d", $id));
$s_posts = is_array($decoded = json_decode($script, true)) ? $decoded : [];
$script_ex = $wpdb->get_var($wpdb->prepare("SELECT ex_posts FROM `{$table_name}` WHERE script_id=%d", $id));
$ex_posts = is_array($decoded = json_decode($script_ex, true)) ? $decoded : [];
}
$posttypes = array_merge(['post'], get_post_types(['public' => true, '_builtin' => false], 'names'));
$posts = get_posts([
'post_type' => $posttypes,
'posts_per_page' => -1,
'orderby' => 'title',
'order' => 'ASC',
]);
$json_output = [
'selected' => [],
'excluded' => [],
'posts' => [],
];
foreach ($posts as $pdata) {
$title = sanitize_text_field(trim($pdata->post_title) ?: '(no title)');
if (in_array($pdata->ID, $ex_posts, true)) {
$json_output['excluded'][] = $pdata->ID;
}
if (in_array($pdata->ID, $s_posts, true)) {
$json_output['selected'][] = $pdata->ID;
}
$json_output['posts'][] = [
'text' => $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;
$spt_display_on = $s->spt_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);
$spt_display_on = esc_html($spt_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",
"spt_display_on"
);
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',
'%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;