<?php

// We need the ABSPATH
if (!defined('ABSPATH')) exit;

// Ok so we are now ready to go
register_activation_hook(PAGELAYER_PRO_FILE, 'pagelayer_pro_activation');

// Prevent update of pagelayer free
// This also work for auto update
// Use a late priority so we run after the plugin-update-checker library
// injects the Pro update into the transient.
add_filter('site_transient_update_plugins', 'pagelayer_pro_disable_manual_update_for_plugin', 99);
add_filter('pre_site_transient_update_plugins', 'pagelayer_pro_disable_manual_update_for_plugin', 99);
add_filter('transient_update_plugins', 'pagelayer_pro_disable_manual_update_for_plugin', 99);

// Auto update free version after update pro version
add_action('upgrader_process_complete', 'pagelayer_pro_update_free_after_pro', 10, 2);

// Add the action to load the plugin
add_action('plugins_loaded', 'pagelayer_pro_load_plugin');

// The function that will be called when the plugin is loaded
function pagelayer_pro_load_plugin(){

	global $pagelayer;
	
	// Load license
	pagelayer_pro_load_license();
	
	// Check if the installed version is outdated
	pagelayer_pro_update_check();
	
	// Load the language
	load_plugin_textdomain('pagelayer-pro', false, PAGELAYER_PRO_SLUG.'/languages/');
	
	if(!defined('SITEPAD')){
		// Check for updates
		include_once(PAGELAYER_PRO_DIR.'/main/plugin-update-checker.php');
		$pagelayer_updater = Pagelayer_PucFactory::buildUpdateChecker(pagelayer_pro_api_url().'updates.php?version='.PAGELAYER_PRO_VERSION, PAGELAYER_PRO_FILE);
		
		// Add the license key to query arguments
		$pagelayer_updater->addQueryArgFilter('pagelayer_pro_updater_filter_args');
		
		// Show the text to install the license key
		add_filter('puc_manual_final_check_link-pagelayer-pro', 'pagelayer_pro_updater_check_link', 10, 1);
	}
	
	// Load the template builder
	include_once(PAGELAYER_PRO_DIR.'/main/template-builder.php');
	
	$pagelayer->allowed_mime_type = array(
		'otf' => 'font/otf',
		'ttf' => 'font/ttf',
		'woff' => 'font/woff|application/font-woff|application/x-font-woff',
		'woff2' => 'font/woff2|font/x-woff2'
	);
	
	// Load the pagelayer custom fonts
	include_once(PAGELAYER_PRO_DIR.'/main/custom_fonts.php');
	
	// Are we to disable the notice
	if(current_user_can('activate_plugins')){
		if(isset($_GET['pagelayer-pro-version-notice']) && (int)$_GET['pagelayer-pro-version-notice'] == 0){
			check_ajax_referer('pagelayer_pro_version_nonce', 'pagelayer_nonce');
			
			if(!empty($_REQUEST['type'])){
				// Notice dismiss for 7 days
				update_option('pagelayer_pro_'.$_REQUEST['type'].'_version_nag', time() + (7 * 86400));
			}
			die('DONE');
		}
		
		// Show the version notice
		add_action('admin_notices', 'pagelayer_pro_free_version_nag');

		if(!empty($pagelayer->license) && empty($pagelayer->license['active']) && strpos($pagelayer->license['license'], 'SOFTWP') !== FALSE){
			add_action('admin_notices', 'pagelayer_pro_expiry_notice');
			add_filter('softaculous_expired_licenses', 'pagelayer_pro_plugins_expired');
		}
	}

	$is_md_upload_enabled = get_option('pagelayer_markdown_upload', false);

	if($is_md_upload_enabled){
		// Adds .md and .markdown to the WordPress list of allowed upload file types
		add_filter('upload_mimes', 'pagelayer_add_markdown_mimes');

		// Bypasses the strict MIME-sniffing security check that blocks .md files.
		add_filter('wp_check_filetype_and_ext', 'pagelayer_allow_markdown_uploads', 10, 4);
	}
}

// Nag when plugins dont have same version.
function pagelayer_pro_free_version_nag(){
	if(!defined('PAGELAYER_VERSION')){
		return;
	}
	
	$sctipt_enqueue = false;
	$older_pro = get_option('pagelayer_pro_older_pro_version_nag');
	$older_free = get_option('pagelayer_pro_older_free_version_nag');
	
	if(version_compare(PAGELAYER_VERSION, PAGELAYER_PRO_VERSION) > 0 && (empty($older_pro) || $older_pro < time())){
		echo '<div class="pagelayer-pro-version-notice notice notice-warning is-dismissible" data-notice="older_pro" onclick="pagelayer_pro_notice_dismiss(event)">
			<p style="font-size:16px;">'.esc_html__('You are using an older version of Pagelayer Pro. We recommend updating to the latest version to ensure seamless and uninterrupted use of the plugin.').'</p>
		</div>';
	
		$sctipt_enqueue = true;
	}elseif(version_compare(PAGELAYER_VERSION, PAGELAYER_PRO_VERSION) < 0 && (empty($older_free) || $older_free < time())){
		echo '<div class="pagelayer-pro-version-notice notice notice-warning is-dismissible" data-notice="older_free" onclick="pagelayer_pro_notice_dismiss(event)">
			<p style="font-size:16px;">'.esc_html__('You are using an older version of Pagelayer. We recommend updating to the latest free version to ensure smooth and uninterrupted use of the plugin.') .'</p>
		</div>';
		
		$sctipt_enqueue = true;
	}
	
	if($sctipt_enqueue){
		echo '
	<script type="application/javascript">
		function pagelayer_pro_notice_dismiss(e){
			
			 e.preventDefault();
			 var target = jQuery(e.target);
			 
			if(!target.hasClass("notice-dismiss")){
				return;
			}
				
			var jEle = target.closest(".pagelayer-pro-version-notice");
			
			var data = {};
			data["type"] = jEle.data("notice");
			
			jEle.hide();
			
			// Save this preference
			jQuery.post("'.admin_url('?pagelayer-pro-version-notice=0&pagelayer_nonce='.wp_create_nonce("pagelayer_pro_version_nonce") ).'", data, function(response) {
			//alert(response);
			});
			return false;
		};
	</script>';
	}
}

// Add filter to load custom widgets functions
add_action('pagelayer_load_shortcode_functions', 'pagelayer_pro_load_shortcode_functions');
function pagelayer_pro_load_shortcode_functions(){
	include_once(PAGELAYER_PRO_DIR.'/main/freemium_functions.php');
	include_once(PAGELAYER_PRO_DIR.'/main/premium_functions.php');
}

// Apply filter to load custom widgets after shortcodes
add_action('pagelayer_after_add_shortcode', 'pagelayer_pro_after_add_shortcode');
function pagelayer_pro_after_add_shortcode(){
	include_once(PAGELAYER_PRO_DIR.'/main/freemium.php');
	include_once(PAGELAYER_PRO_DIR.'/main/premium.php');
}

// Load customizer setting
add_action('pagelayer_after_wc_customization', 'pagelayer_pro_after_wc_customization');
function pagelayer_pro_after_wc_customization(){
	include_once(PAGELAYER_PRO_DIR.'/main/premium-woocommerce.php');
}

// Load Local google fonts
add_action('pagelayer_google_fonts_url', 'pagelayer_pro_google_fonts_url');
function pagelayer_pro_google_fonts_url($fonts_url){
	
	// Is google font serve locally?
	if(get_option('pagelayer_local_gfont') != 1){
		return $fonts_url;
	}
	
	$upload_dir = wp_upload_dir();
	$local_font_md5 = md5($fonts_url);
	$_fonts_url = $upload_dir['baseurl'].'/pl-google-fonts/'.$local_font_md5.'.css';
	$_fonts_path = $upload_dir['basedir'].'/pl-google-fonts/'.$local_font_md5.'.css';
	
	if(!file_exists($_fonts_path) && file_exists(PAGELAYER_PRO_DIR.'/main/download_google_fonts.php')){
		include_once(PAGELAYER_PRO_DIR.'/main/download_google_fonts.php');
		pagelayer_pro_download_google_fonts($fonts_url);
	}
	
	return $_fonts_url;
}

// Load js files for editor
add_action('pagelayer_editor_give_js', 'pagelayer_pro_editor_give_js');
function pagelayer_pro_editor_give_js($js){
	$js.= '&premium=premium.js';
	return $js;
}

// Load js files
add_action('pagelayer_add_give_js', 'pagelayer_pro_add_give_js');
function pagelayer_pro_add_give_js($js){
	$js.= '&premium=chart.min.js,premium-frontend.js,shuffle.min.js';
	return $js;
}

// Load css files
add_action('pagelayer_add_give_css', 'pagelayer_pro_add_give_css');
function pagelayer_pro_add_give_css($css){
	$css.= '&premium=premium-frontend.css';
	return $css;
}

// Load this For audio widget
add_action('pagelayer_load_audio_widget', 'pagelayer_pro_load_audio_widget');
function pagelayer_pro_load_audio_widget($is_audio){
	global $pagelayer;
	
	if($is_audio || pagelayer_is_live_iframe()){
		wp_enqueue_script('wp-mediaelement');
		wp_enqueue_style( 'wp-mediaelement' );
		$pagelayer->sc_audio_enqueued = 1;
	}
}

// Load the langs
add_action('pagelayer_load_languages', 'pagelayer_pro_load_languages');
function pagelayer_pro_load_languages($langs){
	
	$_langs = @file_get_contents(PAGELAYER_PRO_DIR.'/languages/en.json');
	$_langs = @json_decode($_langs, true);
		
	if(!empty($_langs)){
		$langs = array_merge($langs, $_langs);
	}
	
	return $langs;
}
