prefix."pagelayer_logs`";
foreach($sql as $sk => $sv){
$wpdb->query($sv);
}*/
add_option('pagelayer_version', PAGELAYER_VERSION);
add_option('pagelayer_options', array());
}
// Checks if we are to update ?
function pagelayer_update_check(){
global $wpdb;
$sql = array();
$current_version = get_option('pagelayer_version');
$version = (int) str_replace('.', '', $current_version);
// No update required
if($current_version == PAGELAYER_VERSION){
return true;
}
// Is it first run ?
if(empty($current_version)){
// Reinstall
pagelayer_activation();
// Trick the following if conditions to not run
$version = (int) str_replace('.', '', PAGELAYER_VERSION);
}
// Save the new Version
update_option('pagelayer_version', PAGELAYER_VERSION);
}
// Add the action to load the plugin
add_action('plugins_loaded', 'pagelayer_load_plugin');
// The function that will be called when the plugin is loaded
function pagelayer_load_plugin(){
global $pagelayer;
// Check if the installed version is outdated
pagelayer_update_check();
// Set the array
$pagelayer = new PageLayer();
if(empty($pagelayer->BRAND_TEXT)){
$pagelayer->BRAND_TEXT = 'Pagelayer';
}
if(empty($pagelayer->LOGO)){
$pagelayer->LOGO = PAGELAYER_URL.'/images/pagelayer-logo-40.png';
}
// Load license
pagelayer_load_license();
// Is there any ACTION set ?
$pagelayer->action = pagelayer_optreq('pagelayer-action');
// Load settings
$pagelayer->settings['post_types'] = empty(get_option('pl_support_ept')) ? ['post', 'page'] : get_option('pl_support_ept');
$pagelayer->settings['enable_giver'] = get_option('pagelayer_enable_giver');
$pagelayer->settings['max_width'] = (int) (empty(get_option('pagelayer_content_width')) ? 1170 : get_option('pagelayer_content_width'));
$pagelayer->settings['tablet_breakpoint'] = (int) (empty(get_option('pagelayer_tablet_breakpoint')) ? 768 : get_option('pagelayer_tablet_breakpoint'));
$pagelayer->settings['mobile_breakpoint'] = (int) (empty(get_option('pagelayer_mobile_breakpoint')) ? 360 : get_option('pagelayer_mobile_breakpoint'));
$pagelayer->settings['sidebar'] = get_option('pagelayer_sidebar');
$pagelayer->settings['body_font'] = get_option('pagelayer_body_font');
$pagelayer->settings['color'] = get_option('pagelayer_color');
// Load CSS settings
foreach($pagelayer->css_settings as $k => $params){
foreach($pagelayer->screens as $sk => $sv){
$suffix = (!empty($sv) ? '_'.$sv : '');
$setting = empty($params['key']) ? 'pagelayer_'.$k.'_css' : $params['key'];
$tmp = get_option($setting.$suffix);
if(!empty($tmp)){
$pagelayer->css[$k.$suffix] = $tmp;
}
}
}
// Backward compat for colors
if(!empty($pagelayer->settings['color']['background']) && empty($pagelayer->css['body']['background-color'])){
$pagelayer->css['body']['background-color'] = $pagelayer->settings['color']['background'];
}
if(!empty($pagelayer->settings['color']['text']) && empty($pagelayer->css['body']['color'])){
$pagelayer->css['body']['color'] = $pagelayer->settings['color']['text'];
}
// Link Color
if(!empty($pagelayer->settings['color']['link']) && empty($pagelayer->css['a']['color'])){
$pagelayer->css['a']['color'] = $pagelayer->settings['color']['link'];
}
// Link Hover Color
if(!empty($pagelayer->settings['color']['link-hover']) && empty($pagelayer->css['a-hover']['color'])){
$pagelayer->css['a-hover']['color'] = $pagelayer->settings['color']['link-hover'];
}
// Headings Color
if(!empty($pagelayer->settings['color']['heading'])){
$htmp = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'];
foreach($htmp as $k => $v){
if(empty($pagelayer->css[$v]['color'])){
$pagelayer->css[$v]['color'] = $pagelayer->settings['color']['heading'];
}
}
}
// Backward compat for body font
if(!empty($pagelayer->settings['body_font'])){
$pagelayer->settings['body']['font-family'] = $pagelayer->settings['body_font'];
}
// Load the language
load_plugin_textdomain('pagelayer', false, PAGELAYER_SLUG.'/languages/');
// Load our array for builder
pagelayer_builder_array();
// Its premium
if(defined('PAGELAYER_PREMIUM')){
// Check for updates
include_once(PAGELAYER_DIR.'/main/plugin-update-checker.php');
$pagelayer_updater = Pagelayer_PucFactory::buildUpdateChecker(PAGELAYER_API.'updates.php?version='.PAGELAYER_VERSION, PAGELAYER_FILE);
// Add the license key to query arguments
$pagelayer_updater->addQueryArgFilter('pagelayer_updater_filter_args');
// Show the text to install the license key
add_filter('puc_manual_final_check_link-pagelayer-pro', 'pagelayer_updater_check_link', 10, 1);
// Load the template builder
include_once(PAGELAYER_DIR.'/main/template-builder.php');
}else{
// Show the promo
pagelayer_maybe_promo([
'after' => 1,// In days
'interval' => 30,// In days
'pro_url' => PAGELAYER_PRO_URL,
'rating' => 'https://wordpress.org/plugins/pagelayer/#reviews',
'twitter' => 'https://twitter.com/pagelayer?status='.rawurlencode('I love #Pagelayer Site Builder by @pagelayer team for my #WordPress site - '.home_url()),
'facebook' => 'https://www.facebook.com/pagelayer',
'website' => PAGELAYER_WWW_URL,
'image' => PAGELAYER_URL.'/images/pagelayer-logo-256.png'
]);
}
// Are we to disable the getting started promo
if(isset($_GET['pagelayer-getting-started']) && (int)$_GET['pagelayer-getting-started'] == 0){
update_option('pagelayer_getting_started', time());
die('DONE');
}
// Show the getting started video option
$seen = get_option('pagelayer_getting_started');
if(empty($seen) && !empty($_GET['page']) && $_GET['page'] != 'pagelayer_getting_started'){
add_action('admin_notices', 'pagelayer_getting_started_notice');
}
}
// Add our license key if ANY
function pagelayer_updater_filter_args($queryArgs) {
global $pagelayer;
if ( !empty($pagelayer->license['license']) ) {
$queryArgs['license'] = $pagelayer->license['license'];
}
return $queryArgs;
}
// Handle the Check for update link and ask to install license key
function pagelayer_updater_check_link($final_link){
global $pagelayer;
if(empty($pagelayer->license['license'])){
return 'Install Pagelayer Pro License Key';
}
return $final_link;
}
// This adds the left menu in WordPress Admin page
add_action('admin_menu', 'pagelayer_admin_menu', 5);
// Shows the admin menu of Pagelayer
function pagelayer_admin_menu() {
global $wp_version, $pagelayer;
$capability = 'activate_plugins';// TODO : Capability for accessing this page
// Add the menu page
add_menu_page(__('Pagelayer Editor'), __('Pagelayer'), $capability, 'pagelayer', 'pagelayer_page_handler', PAGELAYER_URL.'/images/pagelayer-logo-19.png');
// Settings Page
add_submenu_page('pagelayer', __('Pagelayer Editor'), __('Settings'), $capability, 'pagelayer', 'pagelayer_page_handler');
// Meta Settings Page
add_submenu_page('admin.php', __('Meta Settings'), __('Meta Settings'), 'edit_posts', 'pagelayer_meta_setting', 'pagelayer_meta_handler');
// UI Settings
add_submenu_page('pagelayer', __('Website Settings'), __('Website Settings'), $capability, 'pagelayer_website_settings', 'pagelayer_website_page');
// Add new template
add_submenu_page('pagelayer', __('Theme Templates'), __('Theme Templates'), $capability, 'edit.php?post_type=pagelayer-template');
// Add new template Link
//add_submenu_page('pagelayer', __('Add New Template'), __('Add New Template'), $capability, 'edit.php?post_type=pagelayer-template#new');
// Add new template
add_submenu_page('pagelayer', __('Add New Template'), __('Add New Template'), $capability, 'pagelayer_template_wizard', 'pagelayer_builder_template_wizard');
// Export Feature
if(defined('PAGELAYER_PREMIUM')){
// Export Theme
add_submenu_page('pagelayer', __('Export Content into a Theme'), __('Export Theme'), $capability, 'pagelayer_template_export', 'pagelayer_builder_export');
// Import Theme
add_submenu_page('pagelayer', __('Import content from a Theme'), __('Import Theme'), $capability, 'pagelayer_import', 'pagelayer_import_page');
}
// Getting Started
add_submenu_page('pagelayer', __('Getting Started'), __('Getting Started'), $capability, 'pagelayer_getting_started', 'pagelayer_getting_started');
// Its Free
if(!defined('PAGELAYER_PREMIUM')){
// Go Pro link
add_submenu_page('pagelayer', __('Pagelayer Go Pro'), __('Go Pro'), $capability, PAGELAYER_PRO_URL);
}
// License Page
add_submenu_page('pagelayer', __('Pagelayer Editor'), __('License'), $capability, 'pagelayer_license', 'pagelayer_license_page');
// Replace Media
add_submenu_page('admin.php', __('Replace media', 'pagelayer'), __('Replace media', 'pagelayer'), 'upload_files', 'pagelayer_replace_media', 'pagelayer_replace_media');
}
// This function will handle the Settings Pages in PageLayer
function pagelayer_website_page(){
global $wp_version, $pagelayer;
include_once(PAGELAYER_DIR.'/main/website.php');
pagelayer_website_settings();
}
// Getting Started
function pagelayer_getting_started(){
global $wp_version, $pagelayer;
update_option('pagelayer_getting_started', time());
include_once(PAGELAYER_DIR.'/main/getting_started.php');
}
// This function will handle the post_metas Pages in PageLayer
function pagelayer_meta_handler(){
global $wp_version, $pagelayer;
include_once(PAGELAYER_DIR.'/main/post_metas.php');
pagelayer_meta_page();
}
// Pagelayer post meta page view handler
add_action('admin_enqueue_scripts', 'pagelayer_post_meta_page');
function pagelayer_post_meta_page() {
// Set Current screen
$screen = get_current_screen();
$meta_id = 'admin_page_pagelayer_meta_setting';
if( !is_admin() || trim($screen->id) != $meta_id ) {
return;
}
if(!isset($_REQUEST['post'])){
return;
}
// Remove all the notice hooks
remove_all_actions('admin_notices');
remove_all_actions('all_admin_notices');
$_REQUEST['post'] = (int) $_REQUEST['post'];
$post = get_post( $_REQUEST['post'] );
// Enqueue Scripts
wp_enqueue_script( 'post' );
// Is support media
$thumbnail_support = current_theme_supports( 'post-thumbnails', $post->post_type ) && post_type_supports( $post->post_type, 'thumbnail' );
if ( ! $thumbnail_support && 'attachment' === $post->post_type && $post->post_mime_type ) {
if ( wp_attachment_is( 'audio', $post ) ) {
$thumbnail_support = post_type_supports( 'attachment:audio', 'thumbnail' ) || current_theme_supports( 'post-thumbnails', 'attachment:audio' );
} elseif ( wp_attachment_is( 'video', $post ) ) {
$thumbnail_support = post_type_supports( 'attachment:video', 'thumbnail' ) || current_theme_supports( 'post-thumbnails', 'attachment:video' );
}
}
if ( $thumbnail_support ) {
add_thickbox();
wp_enqueue_media( array( 'post' => $post->ID ) );
}
$meta_box_url = admin_url( 'post.php' );
$meta_box_url = add_query_arg(
array(
'post' => $post->ID,
'action' => 'editpost',
),
$meta_box_url
);
echo '
';
}
// On post Save handler
add_action('save_post', 'pagelayer_save_post', 10, 3);
function pagelayer_save_post( $post_id, $post, $update ) {
if( !isset($_REQUEST['is_pagelayer_editor']) ){
return;
}
// Save Header and footer code
$header_code = !empty($_REQUEST['pagelayer_header_code']) ? $_REQUEST['pagelayer_header_code'] : '' ;
$footer_code = !empty($_REQUEST['pagelayer_footer_code']) ? $_REQUEST['pagelayer_footer_code'] : '' ;
// Set Custom header footer code
if(!empty($header_code)){
update_post_meta($post_id, 'pagelayer_header_code', $header_code);
}else{
delete_post_meta($post_id, 'pagelayer_header_code');
}
if(!empty($footer_code)){
update_post_meta($post_id, 'pagelayer_footer_code', $footer_code);
}else{
delete_post_meta($post_id, 'pagelayer_footer_code');
}
}
// This function will handle the Settings Pages in PageLayer
function pagelayer_page_handler(){
global $wp_version, $pagelayer;
include_once(PAGELAYER_DIR.'/main/settings.php');
pagelayer_settings_page();
}
// This function will handle the Settings Pages in PageLayer
function pagelayer_license_page(){
global $wp_version, $pagelayer;
include_once(PAGELAYER_DIR.'/main/license.php');
pagelayer_license();
}
// Import Pagelayer Templates
function pagelayer_import_page(){
global $wp_version, $pagelayer;
include_once(PAGELAYER_DIR.'/main/import.php');
pagelayer_import();
}
// Load the Live Body
add_action('template_redirect', 'pagelayer_load_live_body', 4);
function pagelayer_load_live_body(){
global $post;
// If its not live editing then stop
if(!pagelayer_is_live()){
return;
}
// If its the iFRAME then return
if(pagelayer_is_live_iframe()){
return;
}
// Are you allowed to edit ?
if(!pagelayer_user_can_edit($post->ID)){
return;
}
// Load the editor live body
include_once(PAGELAYER_DIR.'/main/live-body.php');
pagelayer_live_body();
}
// Add the JS and CSS for Posts and Pages when being viewed ONLY if there is our content called
add_action('template_redirect', 'pagelayer_enqueue_frontend', 5);
function pagelayer_enqueue_frontend($force = false){
global $post, $pagelayer;
if(!empty($pagelayer->cache['enqueue_frontend'])){
return;
}
if(empty($post->ID) && empty($force)){
return;
}
$is_pagelayer = false;
$is_audio = false;
// This IF is for Archives mainly as $post->ID is only the first post in the archive
// and we need to make sure that other posts are pagelayer or not
if(!empty($GLOBALS['wp_query']->posts) && is_array($GLOBALS['wp_query']->posts)){
foreach($GLOBALS['wp_query']->posts as $v){
if(get_post_meta($v->ID , 'pagelayer-data')){
$is_pagelayer = true;
}
if(preg_match('/(\[pl_audio|pagelayer\/pl_audio)/is', $v->post_content)){
$is_audio = true;
}
}
}
// Enqueue the FRONTEND CSS
if((!empty($post->ID) && get_post_meta($post->ID , 'pagelayer-data')) || $is_pagelayer || $force){
// We dont need the auto
and as they interfere with us
remove_filter('the_content', 'wpautop');
// No need to add curly codes to the content
remove_filter('the_content', 'wptexturize');
pagelayer_load_shortcodes();
$pagelayer->cache['enqueue_frontend'] = true;
// Load the global styles
add_action('wp_head', 'pagelayer_global_js', 2);
$premium_js = '';
$premium_css = '';
if(defined('PAGELAYER_PREMIUM')){
$premium_js = ',chart.min.js,premium-frontend.js,shuffle.min.js';
$premium_css = ',premium-frontend.css';
// Load this For audio widget
if($is_audio || pagelayer_is_live_iframe()){
wp_enqueue_script('wp-mediaelement');
wp_enqueue_style( 'wp-mediaelement' );
}
}
if(pagelayer_enable_giver()){
$write = '';
// Dev mode - Dynamic JS and CSS
if(defined('PAGELAYER_DEV') && !empty(PAGELAYER_DEV)){
$write = '&write=1';
}
// Enqueue our Editor's Frontend JS
wp_register_script('pagelayer-frontend', PAGELAYER_JS.'/givejs.php?give=pagelayer-frontend.js,nivo-lightbox.min.js,wow.min.js,jquery-numerator.js,simpleParallax.min.js,owl.carousel.min.js&premium='.$premium_js.$write, array('jquery'), PAGELAYER_VERSION);
// Get list of enabled icons
$icons_css = '';
$icons = pagelayer_enabled_icons();
foreach($icons as $icon){
$icons_css .= ','.$icon.'.min.css';
}
wp_register_style('pagelayer-frontend', PAGELAYER_CSS.'/givecss.php?give=pagelayer-frontend.css,nivo-lightbox.css,animate.min.css,owl.carousel.min.css,owl.theme.default.min.css'.$icons_css.'&premium='.$premium_css.$write, array(), PAGELAYER_VERSION);
// Static Files
}else{
wp_register_script('pagelayer-frontend', PAGELAYER_JS.'/combined'.(!empty($premium_js) ? '.premium' : '').'.js', array('jquery'), PAGELAYER_VERSION);
wp_register_style('pagelayer-frontend', PAGELAYER_CSS.'/combined'.(!empty($premium_css) ? '.premium' : '').'.css', array(), PAGELAYER_VERSION);
}
wp_enqueue_script('pagelayer-frontend');
wp_enqueue_style('pagelayer-frontend');
// Load the global styles
add_action('wp_head', 'pagelayer_global_styles', 5);
add_filter('body_class', 'pagelayer_body_class', 10, 2);
// Load custom widgets
do_action('pagelayer_custom_frontend_enqueue');
}
}
// Load the google fonts
add_action('wp_footer', 'pagelayer_enqueue_fonts', 5);
function pagelayer_enqueue_fonts($suffix = '-header'){
global $pagelayer;
if(empty($pagelayer->cache['enqueue_frontend'])){
return;
}
$url = [];
foreach($pagelayer->css as $k => $set){
// Fetch body font if given
if(!empty($set['font-family'])){
$val = $set['font-family'];
$font_weight = empty($set['font-weight']) ? 400 : $set['font-weight'];
$font_style = empty($set['font-style']) ? 'normal' : $set['font-style'];
$font_style = in_array($font_style, ['italic', 'oblique']) ? 'i' : '';
$pagelayer->runtime_fonts[$val][$font_weight.$font_style] = $font_weight.$font_style;
}
}
foreach($pagelayer->runtime_fonts as $font => $weights){
$v = $font.':'.implode(',', $weights);
if(!in_array($v, $pagelayer->fonts_sent)){
$url[] = $v;
$pagelayer->fonts_sent[] = $v;
}
}
// If no fonts are to be set, then we dont set
if(empty($url)){
return false;
}
$fonts_url = 'https://fonts.googleapis.com/css?family='.rawurlencode(implode('|', $url));
wp_register_style('pagelayer-google-font'.$suffix, $fonts_url, array(), PAGELAYER_VERSION);
wp_enqueue_style('pagelayer-google-font'.$suffix);
echo '';
}
// Load any header we have
function pagelayer_global_js(){
global $pagelayer;
$pagelayer_recaptch_lang = get_option('pagelayer_google_captcha_lang');
echo '';
}
// We need to handle global styles
function pagelayer_global_styles(){
global $pagelayer;
$styles = '';
// Lets just build a temporary list of fonts so that we can add prefetch !
pagelayer_enqueue_fonts();
if(!empty($pagelayer->runtime_fonts)){
echo '
';
}
echo $styles;
}
function pagelayer_body_class($classes, $class){
$classes[] = 'pagelayer-body';
return $classes;
}
// Load the live editor if needed
add_action('wp_enqueue_scripts', 'pagelayer_load_live', 9999);
function pagelayer_load_live(){
global $post, $pagelayer;
$pagelayer->load_live_errors = array();
// If its not live editing then stop
if(!pagelayer_is_live_iframe($pagelayer->load_live_errors)){
// Is it the live mode then lets throw an error ?
if(pagelayer_optreq('pagelayer-iframe')){
add_action('wp_head', 'pagelayer_load_live_errors', 999);
}
return;
}
// Are you allowed to edit ?
if(!pagelayer_user_can_edit($post->ID)){
return;
}
// Load the editor class
include_once(PAGELAYER_DIR.'/main/live.php');
// Call the constructor
$pl_editor = new PageLayer_LiveEditor();
}
// Show the live errors if any
function pagelayer_load_live_errors(){
global $post, $pagelayer;
// Any errors ?
if(empty($pagelayer->load_live_errors)){
return;
}
echo '';
}
// If we are doing ajax and its a pagelayer ajax
if(wp_doing_ajax()){
include_once(PAGELAYER_DIR.'/main/ajax.php');
}
// Show the backend editor options
add_action('edit_form_after_title', 'pagelayer_after_title', 10);
function pagelayer_after_title(){
global $post;
// Get the current screen
$current_screen = get_current_screen();
// For gutenberg
if(method_exists($current_screen, 'is_block_editor') && $current_screen->is_block_editor()){
// Add the code in the footer
add_action('admin_footer', 'pagelayer_gutenberg_after_title');
return;
}
// Is pagelayer supposed to edit this ?
if(!pagelayer_user_can_edit($post)){
return;
}
$link = pagelayer_shortlink($post->ID).'&pagelayer-live=1';
echo '
';
}
function pagelayer_gutenberg_after_title(){
global $post;
// Is pagelayer supposed to edit this ?
if(!pagelayer_user_can_edit($post)){
return;
}
$link = pagelayer_shortlink($post->ID).'&pagelayer-live=1';
echo '