';
}
/*
* Here we run any previously installed code
* OR in if in preview mode - the current code
*
* We run PHP code just after plugins are loaded... thereby supporting all the functionality that would be availianle in a plugin
*
* Installed PHP code should include appropriate add_action(...) statements to determine when it should be run
*
* Any immediately returned value or echo'd content will be ignored.
*
* Any otherwise unhandled Errors/Exceptions will cause installed code to be disabled, such that it wont be run again untill re-installed.
* This is to help avoid bad code "breaking" /"locking-out" word-press functionality, and simply recovery form errors.
*/
function acb_sp_plugins_loaded()
{
$page=isset($_GET['page']) ? $_GET['page'] : null;
if($page && $page=='acb_sp_settings')return;
$preview=isset($_GET['preview']) ? $_GET['preview'] : null;
$en=false;
if($preview=='true'){
$phpCode=get_option('acb_sp_php_code');
} else {
$phpCode=get_option('acb_sp_php_installed');
$en = get_option('acb_sp_php_installed_enable');
if(!$en)return;
update_option('acb_sp_php_installed_enable',False); // if we bomb out for any reason we want to leave this disabled
}
if(!$phpCode)return;
try {
ob_start();
acb_sp_wrapped_eval($phpCode);
} catch(Exception $e) {
$en=False;
} catch(Throwable $e) {
$en=False;
} finally {
if(ob_get_contents())$en=False;
ob_end_clean();
}
if($en)update_option('acb_sp_php_installed_enable',True);
}
/*
* Load scratchpads (not users) scripts/css files for admin pages
*/
function acb_sp_load_admin_scripts()
{
wp_register_script( 'codeMirrorJS', 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.56.0/codemirror.min.js', null, null, true );
wp_enqueue_script('codeMirrorJS');
wp_register_style( 'codeMirrorCSS', 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.56.0/codemirror.min.css', false, 'all' );
wp_enqueue_style('codeMirrorCSS');
wp_register_script( 'codeMirror-javascript', 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.56.0/mode/javascript/javascript.min.js', null, null, true );
wp_enqueue_script('codeMirror-javascript');
wp_register_script( 'codeMirror-css', 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.56.0/mode/css/css.min.js', null, null, true );
wp_enqueue_script('codeMirror-css');
wp_register_script( 'codeMirror-xml', 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.56.0/mode/xml/xml.min.js', null, null, true );
wp_enqueue_script('codeMirror-xml');
wp_register_script( 'codeMirror-html', 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.56.0/mode/htmlmixed/htmlmixed.min.js', null, null, true );
wp_enqueue_script('codeMirror-html');
wp_register_script( 'codeMirror-clike', 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.56.0/mode/clike/clike.min.js', null, null, true );
wp_enqueue_script('codeMirror-clike');
wp_register_script( 'codeMirror-php', 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.56.0/mode/php/php.min.js', null, null, true );
wp_enqueue_script('codeMirror-php');
wp_enqueue_style('acb_sp_admin_styles', plugin_dir_url( __FILE__ ) . 'acb-scratchpad-admin.css',false,'1.1','all');
wp_enqueue_script('acb_admin_scripts', plugin_dir_url( __FILE__ ) . 'acb-scratchpad-admin.js',['jquery'],'1.1');
}
/*
* Load scripts/css files for site content pages
*
* We create JS and CSS vars here based on public global $acb_scratchpad_var
*
* We include any user defined JS / CSS content here.
* This is the "installed" code if any, EXCEPT if we are in preview mode, when we use the "current" version of the code
*
*/
function acb_sp_load_scripts()
{
global $acb_scratchpad_var; // using a global so it can be set/modified in events triggered after initial user PHP is run;
$css_vars = '';
if(is_array($acb_scratchpad_var)) {
wp_enqueue_script('acb_sp_var_script', plugin_dir_url( __FILE__ ) . 'acb-scratchpad-vars.js',['jquery'],'1.1');
wp_localize_script('acb_sp_var_script', 'acb_scratchpad_var', $acb_scratchpad_var);
foreach($acb_scratchpad_var as $key=>$value) {
if(!(substr($key,0,4)=='--'))continue;
$css_vars = $css_vars .$key . ':' . $value . ';' . PHP_EOL;
}
}
if(is_preview()) {
$user_js=get_option('acb_sp_js_code');
if($user_js) {
wp_enqueue_script('acb_sp_user_js_script', plugin_dir_url( __FILE__ ) . 'acb-scratchpad-js.js',['jquery'],'1.1');
wp_add_inline_script('acb_sp_user_js_script', "try{function($) {" . $user_js . "\r\n})(jQuery)}catch(e){}" );
}
$user_css= get_option('acb_sp_css_code');
if($user_css) {
$user_css_type = get_option('acb_sp_css_installed_type');
if($user_css_type=='text/less') {
wp_enqueue_style('acb_sp_user_less_script', plugin_dir_url( __FILE__ ) . 'acb-scratchpad-css.less',[],'1.1');
wp_add_inline_style('acb_sp_user_less_script',$user_css );
} else /* if($user_css_type=='text/css') */ {
wp_enqueue_style('acb_sp_user_css_script', plugin_dir_url( __FILE__ ) . 'acb-scratchpad-css.css',[],'1.1');
wp_add_inline_style('acb_sp_user_css_script',$user_css);
}
}
} else {
if(get_option('acb_sp_js_installed_enable')) {
$user_js= get_option('acb_sp_js_installed');
if($user_js) {
wp_enqueue_script('acb_sp_user_js_script', plugin_dir_url( __FILE__ ) . 'acb-scratchpad-js.js',['jquery'],'1.1');
wp_add_inline_script('acb_sp_user_js_script', "try{(function($) {\r\n" . $user_js . "\r\n})(jQuery)}catch(e){}" );
}
}
if(get_option('acb_sp_css_installed_enable')) {
wp_enqueue_style('acb_sp_user_css_script', plugin_dir_url( __FILE__ ) . 'acb-scratchpad-css.css',[],'1.1');
$user_css= get_option('acb_sp_css_installed');
if($user_css) {
$user_css_type = get_option('acb_sp_css_installed_type');
if($user_css_type=='text/less') {
wp_enqueue_style('acb_sp_user_less_script', plugin_dir_url( __FILE__ ) . 'acb-scratchpad-css.less',[],'1.1');
if($css_vars) {
$css_vars=':root { ' . $css_vars . '}' + PHP_EOL;
}
wp_add_inline_style('acb_sp_user_less_script',$css_vars . $user_css );
} else /* if(user_css_type=='text/css') */ {
wp_enqueue_style('acb_sp_user_css_script', plugin_dir_url( __FILE__ ) . 'acb-scratchpad-css.css',[],'1.1');
wp_add_inline_style('acb_sp_user_css_script',$user_css );
}
}
}
}
}
/**********************************
*
* Here we hook-up the above functions so the are run at the desired time
*
*/
add_action( 'admin_init', 'acb_sp_settings_init' );
add_action( 'admin_menu', 'acb_sp_admin_menu_init' );
add_action( 'plugins_loaded', 'acb_sp_plugins_loaded' );
add_action('admin_enqueue_scripts', 'acb_sp_load_admin_scripts');
add_action('wp_enqueue_scripts','acb_sp_load_scripts');