. */ $agca = new AGCA(); class AGCA{ private $agca_version = "7.2.2"; private $colorizer = ""; private $agca_debug = false; private $admin_capabilities; private $context = ""; private $saveAfterImport = false; const PLACEHOLDER_BLOG = '%BLOG%'; const PLACEHOLDER_PAGE = '%PAGE%'; public function __construct() { add_action( 'plugins_loaded', array(&$this,'my_load_plugin_textdomain') ); add_action('init', array(&$this,'init')); } function init(){ $this->reloadScript(); $this->checkGET(); if(function_exists("add_filter")){ add_filter('admin_title', array(&$this,'change_title'), 10, 2); add_filter('plugin_row_meta', array(&$this,'jk_filter_plugin_links'), 10, 2); } add_action('admin_init', array(&$this,'admin_init')); add_action('login_init', array(&$this,'login_init')); add_action('admin_head', array(&$this,'print_admin_css')); add_action('login_head', array(&$this,'print_login_head')); add_action('admin_menu', array(&$this,'agca_create_menu')); add_action('wp_head', array(&$this,'print_page')); register_deactivation_hook(__FILE__, array(&$this,'agca_deactivate')); add_action( 'customize_controls_enqueue_scripts', array(&$this,'agca_customizer_php') ); add_action( 'admin_bar_menu', array(&$this, 'wp_admin_bar_my_custom_account_menu'), 11 ); add_action( 'updated_option', array(&$this, 'after_update_option'), 10, 3); /*Initialize properties*/ $this->colorizer = $this->jsonMenuArray(get_option('ag_colorizer_json'),'colorizer'); if(!get_option('agca_check_js_notice') && get_option('agca_custom_js')) { add_action( 'admin_notices', array(&$this, 'agca_check_js_notice') ); } //admin bar on front end if(!is_admin() && is_admin_bar_showing()){ add_action('wp_head', array(&$this, 'hide_admin_bar_css')); $this->agca_enqueue_js(); } } function hide_admin_bar_css(){ if(is_user_logged_in() && current_user_can($this->admin_capability()) && get_option('agca_role_allbutadmin')){ return; } ?>
We are enforcing security in AGCA plugin and custom JavaScript code is currently disabled and requires your review. Please go to AGCA plugin settings (Tools > AGCA > Advanced) page and make sure that your JavaScript does not contain any unwanted code. If you are sure that the script looks good to you, please save the settings in AGCA plugin again, to dismiss this notice and re-enable the script again.
Click here to revisit and save AGCA settings again
'; } function isAGCASettingsPage() { if(!is_admin()) { return false; } if(isset($_GET['page']) && $_GET['page'] == 'ag-custom-admin/plugin.php'){ return true; } return false; } function my_load_plugin_textdomain() { load_plugin_textdomain( 'ag-custom-admin'); } // Add donate and support information function jk_filter_plugin_links($links, $file) { if ( $file == plugin_basename(__FILE__) ) { if(!is_network_admin()){ $links[] = '' . __('Settings', 'ag-custom-admin') . ''; } $links[] = '' . __('Support', 'ag-custom-admin') . ''; $links[] = '' . __('Upgrade', 'ag-custom-admin') . ''; $links[] = '' . __('Donate', 'ag-custom-admin') . ''; } return $links; } function filePath($url){ $absPath = ABSPATH; $absPath = rtrim($absPath, '/'); $url = ltrim($url, '/'); return $absPath.'/'.$url; } function change_admin_color(){ return 'default'; } //Prevent non-admin users to update sensitive options //Revert option value to previous function after_update_option( $option, $old_value, $new_value ){ if(( !current_user_can('administrator') || !current_user_can('unfiltered_html') ) && in_array($option, [ 'agca_dashboard_text_paragraph', 'agca_dashboard_text', 'agca_custom_css', 'agca_footer_left', 'agca_footer_right', 'agca_custom_js', 'agca_check_js_notice', ])) { remove_action( 'updated_option', array(&$this,'after_update_option')); update_option($option, $old_value); add_action( 'updated_option', array(&$this,'after_update_option'), 10, 3); } } function is_wp_admin(){ return current_user_can('administrator'); } function can_save_unfiltered_html(){ return current_user_can('unfiltered_html'); } function agca_customizer_php(){ $this->agca_get_includes(); } function admin_init(){ $this->agca_register_settings(); $this->agca_init_session(); $isAdminUser = current_user_can($this->admin_capability()); if(!$isAdminUser || ($isAdminUser && !get_option('agca_role_allbutadmin'))){ if(get_option('agca_profile_color_scheme')){ remove_action( 'admin_color_scheme_picker', 'admin_color_scheme_picker' ); } } $this->enqueue_scripts(); } function login_init(){ $this->agca_enqueue_scripts(); } function enqueue_scripts() { $wpversion = $this->get_wp_version(); if($this->isAGCASettingsPage()) { wp_register_script ( 'agca-farbtastic-script', $this->pluginUrl() . 'script/agca_farbtastic.js', array('farbtastic'), $wpversion ); wp_register_style('agca-farbtastic-style', $this->pluginUrl() . 'style/agca_farbtastic.css', array('farbtastic'), $wpversion); wp_enqueue_script ( 'farbtastic' ); wp_enqueue_style( 'farbtastic' ); wp_enqueue_script ( 'agca-farbtastic-script', array('farbtastic') ); wp_enqueue_style ( 'agca-farbtastic-style', array('farbtastic') ); } if(is_admin()) { $agcaStyleFileName = get_option('agca_no_style') == true ? 'ag_style_simple' : 'ag_style'; wp_register_style('agca-style', $this->pluginUrl() . 'style/' . $agcaStyleFileName . '.css', array('farbtastic'), $this->agca_version); wp_enqueue_style( 'agca-style' ); $this->agca_enqueue_js(); } } function agca_enqueue_js(){ wp_register_script ( 'agca-script', $this->pluginUrl() . 'script/ag_script.js', array('jquery'), $this->agca_version ); add_action('wp_print_scripts', function () { wp_enqueue_script ( 'agca-script' ); }, 2); } function agca_init_session(){ if (!session_id()){ session_start([ 'read_and_close' => true, ]); } } function checkGET(){ if(isset($_GET['agca_debug'])){ if($_GET['agca_debug'] =="true"){ $this->agca_debug = true; }else{ $this->agca_debug = false; } } } function getFieldSecurityProtected(){ if($this->is_wp_admin() && $this->can_save_unfiltered_html()){ return ''; } return "( For security reasons, this field is available for editing only to WordPress Administrators with the allowed capability to save unfiltered HTML )
"; } function verifyPostRequest(){ if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (!is_admin()) { _e('Not allowed. This action is allowed exclusively in admin panel', 'ag-custom-admin'); exit; } //In case of problems with saving AGCA settings on MS disable verification temporary if(get_option('agca_disable_postver')){ return; } if (is_multisite()) { $blog_id = get_current_blog_id(); $user_id = get_current_user_id(); $msError = __('Please try temporary disabling POST verification. Go to Absolutely Glamorous Custom Admin -> Advanced -> Temporary disable POST verification. Do not forget to un-check this option once you are done with customizations.', 'ag-custom-admin'); if (is_user_member_of_blog($user_id, $blog_id)) { if (!current_user_can('manage_options')) { _e('Multi-site: Current user is not recognized as administrator.', 'ag-custom-admin'); echo ' '. $this->sanitize_html($msError); exit; } } else { printf( /*translators: 1: User Id 2: Blog Id*/ __('Multi-site: User (%1$s) does not have access to this blog (%2$s).', 'ag-custom-admin'), $user_id, $blog_id ); echo ' '. $this->sanitize_html($msError); exit; } } else { include_once($this->filePath('wp-includes/pluggable.php')); if (!is_user_logged_in() || !current_user_can('manage_options')) { echo !is_user_logged_in() ? __('User is not logged in.', 'ag-custom-admin').' ' : ''; echo !current_user_can('manage_options') ? __('User can not manage options.', 'ag-custom-admin').' ' : ''; exit; } } if (!wp_verify_nonce($_POST['_agca_token'], 'agca_form')) { echo __('Nonce verification failed.', 'ag-custom-admin'); exit; } } } function isGuest(){ global $user_login; if($user_login) { return false; }else{ return true; } } function change_title($admin_title, $title){ //return get_bloginfo('name').' - '.$title; if(get_option('agca_custom_title')!=""){ $blog = get_bloginfo('name'); $page = $title; $customTitle = get_option('agca_custom_title'); $customTitle = str_replace(self::PLACEHOLDER_BLOG,$blog,$customTitle); $customTitle = str_replace(self::PLACEHOLDER_PAGE,$page,$customTitle); return htmlentities(strip_tags($customTitle)); }else{ return htmlentities(strip_tags($admin_title)); } } function agca_get_includes() { if(!((get_option('agca_role_allbutadmin')==true) and (current_user_can($this->admin_capability())))){ ?> filePath('wp-admin/includes/plugins.php'); if(!file_exists($pluginPhpFilePath)){ return ''; } require_once($pluginPhpFilePath); } if(!$this->isPluginActiveForNetwork($WPSPluginName)){ return ''; } }else{ if(!$this->isPluginActive($WPSPluginName)){ return ''; } } if ( $slug = get_option( 'whl_page' ) ) { return $slug; } else if ( ( is_multisite() && $this->isPluginActiveForNetwork($WPSPluginName) && ( $slug = get_site_option( 'whl_page', 'login' ) ) ) ) { return $slug; } else if ( $slug = 'login' ) { return $slug; } $requestURI = $_SERVER['REQUEST_URI']; return $this->startsWith('/'.$slug.'/', $requestURI); } function reloadScript(){ $isAdmin = false; if(defined('WP_ADMIN') && WP_ADMIN == 1){ $isAdmin = true; } if($isAdmin || $this->WPSPluginIsLoginPage()){ $this->agca_enqueue_scripts(); } } function agca_register_settings() { register_setting( 'agca-options-group', 'agca_role_allbutadmin' ); register_setting( 'agca-options-group', 'agca_no_style' ); register_setting( 'agca-options-group', 'agca_screen_options_menu' ); register_setting( 'agca-options-group', 'agca_help_menu' ); register_setting( 'agca-options-group', 'agca_logout' ); register_setting( 'agca-options-group', 'agca_remove_your_profile' ); register_setting( 'agca-options-group', 'agca_logout_only' ); register_setting( 'agca-options-group', 'agca_custom_title' ); register_setting( 'agca-options-group', 'agca_howdy' ); register_setting( 'agca-options-group', 'agca_header' ); register_setting( 'agca-options-group', 'agca_header_show_logout' ); register_setting( 'agca-options-group', 'agca_footer' ); register_setting( 'agca-options-group', 'agca_privacy_options' ); register_setting( 'agca-options-group', 'agca_header_logo' ); register_setting( 'agca-options-group', 'agca_header_logo_custom' ); register_setting( 'agca-options-group', 'agca_wp_logo_custom' ); register_setting( 'agca-options-group', 'agca_remove_site_link' ); register_setting( 'agca-options-group', 'agca_wp_logo_custom_link' ); register_setting( 'agca-options-group', 'agca_profile_color_scheme' ); register_setting( 'agca-options-group', 'agca_site_heading' ); register_setting( 'agca-options-group', 'agca_custom_site_heading' ); register_setting( 'agca-options-group', 'agca_update_bar' ); register_setting( 'agca-options-group', 'agca_footer_left' ); register_setting( 'agca-options-group', 'agca_footer_left_hide' ); register_setting( 'agca-options-group', 'agca_footer_right' ); register_setting( 'agca-options-group', 'agca_footer_right_hide' ); register_setting( 'agca-options-group', 'agca_check_js_notice' ); register_setting( 'agca-options-group', 'agca_login_banner' ); register_setting( 'agca-options-group', 'agca_login_banner_text' ); register_setting( 'agca-options-group', 'agca_login_photo_remove' ); register_setting( 'agca-options-group', 'agca_login_photo_url' ); register_setting( 'agca-options-group', 'agca_login_photo_href' ); register_setting( 'agca-options-group', 'agca_login_round_box' ); register_setting( 'agca-options-group', 'agca_login_round_box_size' ); register_setting( 'agca-options-group', 'agca_login_round_box_skip_logo' ); register_setting( 'agca-options-group', 'agca_dashboard_icon' ); register_setting( 'agca-options-group', 'agca_dashboard_text' ); register_setting( 'agca-options-group', 'agca_dashboard_text_paragraph' ); register_setting( 'agca-options-group', 'agca_dashboard_widget_welcome' ); register_setting( 'agca-options-group', 'agca_dashboard_widget_health_status' ); register_setting( 'agca-options-group', 'agca_dashboard_widget_activity' ); register_setting( 'agca-options-group', 'agca_dashboard_widget_il' ); register_setting( 'agca-options-group', 'agca_dashboard_widget_plugins' ); register_setting( 'agca-options-group', 'agca_dashboard_widget_qp' ); register_setting( 'agca-options-group', 'agca_dashboard_widget_rn' ); register_setting( 'agca-options-group', 'agca_dashboard_widget_rd' ); register_setting( 'agca-options-group', 'agca_dashboard_widget_primary' ); register_setting( 'agca-options-group', 'agca_dashboard_widget_secondary' ); //WP3.3 register_setting( 'agca-options-group', 'agca_admin_bar_comments' ); register_setting( 'agca-options-group', 'agca_admin_bar_new_content' ); register_setting( 'agca-options-group', 'agca_admin_bar_new_content_post' ); register_setting( 'agca-options-group', 'agca_admin_bar_new_content_link' ); register_setting( 'agca-options-group', 'agca_admin_bar_new_content_page' ); register_setting( 'agca-options-group', 'agca_admin_bar_new_content_user' ); register_setting( 'agca-options-group', 'agca_admin_bar_new_content_media' ); register_setting( 'agca-options-group', 'agca_admin_bar_update_notifications' ); register_setting( 'agca-options-group', 'agca_remove_top_bar_dropdowns' ); register_setting( 'agca-options-group', 'agca_admin_bar_frontend' ); register_setting( 'agca-options-group', 'agca_admin_bar_frontend_hide' ); register_setting( 'agca-options-group', 'agca_login_register_remove' ); register_setting( 'agca-options-group', 'agca_login_register_href' ); register_setting( 'agca-options-group', 'agca_login_lostpassword_remove' ); register_setting( 'agca-options-group', 'agca_admin_capability' ); register_setting( 'agca-options-group', 'agca_disablewarning' ); /*Admin menu*/ register_setting( 'agca-options-group', 'agca_admin_menu_turnonoff' ); register_setting( 'agca-options-group', 'agca_admin_menu_agca_button_only' ); register_setting( 'agca-options-group', 'agca_admin_menu_separators' ); register_setting( 'agca-options-group', 'agca_admin_menu_icons' ); register_setting( 'agca-options-group', 'agca_admin_menu_collapse_button' ); register_setting( 'agca-options-group', 'agca_admin_menu_arrow' ); register_setting( 'agca-options-group', 'agca_admin_menu_submenu_round' ); register_setting( 'agca-options-group', 'agca_admin_menu_submenu_round_size' ); register_setting( 'agca-options-group', 'agca_admin_menu_brand' ); register_setting( 'agca-options-group', 'agca_admin_menu_brand_link' ); register_setting( 'agca-options-group', 'agca_admin_menu_autofold' ); register_setting( 'agca-options-group', 'ag_edit_adminmenu_json' ); register_setting( 'agca-options-group', 'ag_edit_adminmenu_json_new' ); register_setting( 'agca-options-group', 'ag_add_adminmenu_json' ); register_setting( 'agca-options-group', 'ag_colorizer_json' ); register_setting( 'agca-options-group', 'agca_colorizer_turnonoff' ); register_setting( 'agca-options-group', 'agca_custom_js' ); register_setting( 'agca-options-group', 'agca_custom_css' ); register_setting( 'agca-options-group', 'agca_disable_postver' ); register_setting( 'agca-options-group', 'agca_menu_remove_client_profile' ); register_setting( 'agca-options-group', 'agca_menu_remove_customize_button' ); if(!empty($_POST)){ if(isset($_POST['_agca_import_settings']) && $_POST['_agca_import_settings']=="true"){ $this->verifyPostRequest(); if(isset($_FILES) && isset($_FILES['settings_import_file']) ){ if($_FILES["settings_import_file"]["error"] > 0){ }else{ $file = $_FILES['settings_import_file']; if($this->startsWith($file['name'],'AGCA_Settings')){ if (file_exists($file['tmp_name'])) { $fh = fopen($file['tmp_name'], 'r'); $theData = ""; if(filesize($file['tmp_name']) > 0){ $theData = fread($fh,filesize($file['tmp_name'])); } fclose($fh); $this->importSettings($theData); } } } } }else if(isset($_POST['_agca_export_settings']) && $_POST['_agca_export_settings']=="true"){ $this->verifyPostRequest(); $this->exportSettings(); } } if(isset($_GET['agca_action'])){ if($_GET['agca_action'] == "disablewarning"){ update_option('agca_disablewarning', true); } } } function agca_deactivate() { } function getOptions(){ return Array( 'agca_role_allbutadmin', 'agca_no_style', 'agca_admin_bar_frontend', 'agca_admin_bar_frontend_hide', 'agca_login_register_remove', 'agca_login_register_href', 'agca_login_lostpassword_remove', 'agca_admin_capability', 'agca_screen_options_menu', 'agca_help_menu', 'agca_logout', 'agca_remove_your_profile', 'agca_logout_only', 'agca_custom_title', 'agca_howdy', 'agca_header', 'agca_header_show_logout', 'agca_footer', 'agca_privacy_options', 'agca_header_logo', 'agca_header_logo_custom', 'agca_remove_site_link', 'agca_wp_logo_custom', 'agca_wp_logo_custom_link', 'agca_profile_color_scheme', 'agca_site_heading', 'agca_custom_site_heading', 'agca_update_bar', 'agca_footer_left', 'agca_footer_left_hide', 'agca_footer_right', 'agca_footer_right_hide', 'agca_check_js_notice', 'agca_login_banner', 'agca_login_banner_text', 'agca_login_photo_remove', 'agca_login_photo_url', 'agca_login_photo_href', 'agca_login_round_box', 'agca_login_round_box_size', 'agca_login_round_box_skip_logo', 'agca_dashboard_icon', 'agca_dashboard_text', 'agca_dashboard_text_paragraph', 'agca_dashboard_widget_welcome', 'agca_dashboard_widget_health_status', 'agca_dashboard_widget_activity', 'agca_dashboard_widget_il', 'agca_dashboard_widget_plugins', 'agca_dashboard_widget_qp', 'agca_dashboard_widget_rn', 'agca_dashboard_widget_rd', 'agca_dashboard_widget_primary', 'agca_dashboard_widget_secondary', 'agca_admin_bar_comments', 'agca_admin_bar_new_content', 'agca_admin_bar_new_content_post', 'agca_admin_bar_new_content_link', 'agca_admin_bar_new_content_page', 'agca_admin_bar_new_content_user', 'agca_admin_bar_new_content_media', 'agca_admin_bar_update_notifications', 'agca_remove_top_bar_dropdowns', 'agca_admin_menu_turnonoff', 'agca_admin_menu_agca_button_only', 'agca_admin_menu_separators', 'agca_admin_menu_icons', 'agca_admin_menu_arrow', 'agca_admin_menu_submenu_round', 'agca_admin_menu_submenu_round_size', 'agca_admin_menu_brand', 'agca_admin_menu_brand_link', 'agca_admin_menu_autofold', 'agca_admin_menu_collapse_button', 'ag_edit_adminmenu_json', 'ag_edit_adminmenu_json_new', 'ag_add_adminmenu_json', 'ag_colorizer_json', 'agca_colorizer_turnonof', 'agca_custom_js', 'agca_custom_css', 'agca_colorizer_turnonoff', 'agca_disablewarning', 'agca_disable_postver', 'agca_menu_remove_client_profile', 'agca_menu_remove_customize_button', ); } function getTextEditor($name){ $settings = array( 'textarea_name' => $name, 'media_buttons' => true, 'tinymce' => array( 'theme_advanced_buttons1' => 'formatselect,|,bold,italic,underline,|,' . 'bullist,blockquote,|,justifyleft,justifycenter' . ',justifyright,justifyfull,|,link,unlink,|' . ',spellchecker,wp_fullscreen,wp_adv' ) ); wp_editor( get_option($name), $name, $settings ); } function importSettings($settings){ $exploaded = explode("|^|^|", $settings); // $str = "EEE: "; $str = ''; $savedOptions = array(); foreach ($exploaded as $setting){ $key = current(explode(':', $setting)); $value = substr($setting, strlen($key)+1); $cleanedValue = str_replace('|^|^|','',$value); $savedOptions[$key] = $cleanedValue; } // print_r($savedOptions); $optionNames = $this->getOptions(); foreach ($optionNames as $optionName){ $optionValue = $savedOptions[$optionName]; if($optionName == "ag_edit_adminmenu_json" || "ag_edit_adminmenu_json_new"|| $optionName == "ag_add_adminmenu_json" ||$optionName == "ag_colorizer_json"){ $optionValue = str_replace("\\\"", "\"", $optionValue); $optionValue = str_replace("\\\'", "\'", $optionValue); }else if($optionName == "agca_custom_js" || $optionName == "agca_custom_css"){ $optionValue = htmlspecialchars_decode($optionValue); $optionValue = str_replace("\'", '"', $optionValue); $optionValue = str_replace('\"', "'", $optionValue); } update_option($optionName, $optionValue); $str.="/".$optionName."/".$optionValue."\n"; } //Migration from 1.2.6. to 1.2.5.1 - remove in later versions //agca_script_css // // fb($savedOptions); if($savedOptions['agca_script_css'] != null){ $optionValue = ""; $optionValue = str_replace("\'", '"', $savedOptions['agca_script_css']); $optionValue = str_replace('\"', "'", $optionValue); update_option('agca_custom_css', $optionValue); } if($savedOptions['agca_script_js'] != null){ $optionValue = ""; $optionValue = str_replace("\'", '"', $savedOptions['agca_script_js']); $optionValue = str_replace('\"', "'", $optionValue); update_option('agca_custom_js', $optionValue); } //echo $str; //save imported settings $this->saveAfterImport = true; } function exportSettings(){ $str = ""; $include_menu_settings = false; if(isset($_POST['export_settings_include_admin_menu'])){ if($_POST['export_settings_include_admin_menu'] == 'on'){ $include_menu_settings = true; } } foreach ($_POST as $key => $value) { if ($this->startsWith($key,'ag')||$this->startsWith($key,'color')) { if($this->startsWith($key,'ag_edit_adminmenu')){ if($include_menu_settings) $str .=$key. ":".$value."|^|^|"; }else{ $str .=$key. ":".$value."|^|^|"; } } } $filename = __('AGCA_Settings', 'ag-custom-admin').'_'.date("Y-M-d_H-i-s").'.agca'; header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-Disposition: attachment; filename=$filename"); header("Content-Type: text/plain; "); header("Content-Transfer-Encoding: binary"); echo wp_kses_post($str); die(); } function startsWith($haystack, $needle) { $length = strlen($needle); return (substr($haystack, 0, $length) === $needle); } function agca_create_menu() { add_management_page('AGCA', 'AGCA', 'administrator', __FILE__, array(&$this,'agca_admin_page') ); } function filter_url($url = ''){ if (filter_var($url, FILTER_VALIDATE_URL)) { return $url; } return $url; } function filter_target($target = '_self'){ return $target === '_blank' ? '_blank' : '_self'; } function agca_create_admin_button($name,$arr) { $href = $this->filter_url($arr["value"]); $target = $this->filter_target($arr["target"]); $button ="$val){ $strAttributes.=' '.$this->sanitize_html($key).'="'.$this->sanitize_html($val).'"'; } } if(isset($data['input-class'])){ $strInputClass = $this->sanitize_html($data['input-class']); } if(isset($data['hide'])){ $strInputClass .= " visibility"; } if(isset($data['input-attributes'])){ $strInputAttributes = $data['input-attributes']; } if(isset($data['onchange'])){ $strOnchange = $this->sanitize_html($data['onchange']); } if(!isset($data['title'])){ $data['title'] = $this->sanitize_html($data['label']); } if(isset($data['checked'])){ $isChecked = (bool) $data['checked']; }else{ //use default check with the option $isChecked = get_option($data['name'])==true; } ?>