add_menu([
'id' => 'advset-admin-icon',
'title' => '' . $icon_svg . 'Advanced Settings',
'href' => 'javascript:void(0);',
'meta' => [
'class' => 'advset-admin-icon',
'onclick' => 'advset_open_modal(); return false;'
]
]);
}
function advset_admin_bar_icon_register() {
// Ensure to position the icon right after the wp menu
add_action('admin_bar_menu', 'advset_admin_bar_icon', 10);
}
// Ensure to be the first after core menu registrations
add_action('add_admin_bar_menus', 'advset_admin_bar_icon_register', -PHP_INT_MAX);
/**
* Add plugin action links
*/
if (is_admin()) {
add_filter( 'plugin_action_links', function($links, $file) {
if ( $file === plugin_basename( ADVSET_FILE ) ) {
$links[] = '' . __('Settings') . '';
}
return $links;
}, 10, 2 );
}
/**
* Enqueue admin UI scripts and styles
*/
function advset_admin_ui_scripts() {
// Only load for administrators
if (!current_user_can('manage_options')) {
return;
}
// Register and enqueue CSS
wp_register_style(
'advset-admin-ui',
plugins_url('admin-ui.css', __FILE__),
[],
filemtime(ADVSET_DIR . '/admin-ui/admin-ui.css')
);
wp_enqueue_style('advset-admin-ui');
// Register and enqueue JavaScript
wp_register_script(
'advset-admin-ui',
plugins_url('admin-ui.js', __FILE__),
[],
filemtime(ADVSET_DIR . '/admin-ui/admin-ui.js'),
true
);
// Prepare data for JavaScript
$js_data = [
'ajaxUrl' => admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('advset-admin-ui-nonce'),
'reactAppUrl' => plugins_url('react/app.js', __FILE__),
'reactAppCssUrl' => plugins_url('react/app.css', __FILE__),
'wpReactUrl' => includes_url('js/dist/vendor/react.min.js'),
'wpReactDomUrl' => includes_url('js/dist/vendor/react-dom.min.js'),
'showUserGuide' => get_option('advset_guide_shown') === false,
];
wp_localize_script('advset-admin-ui', 'advsetAdminUI', $js_data);
wp_enqueue_script('advset-admin-ui');
// Load user guide assets if needed
if ($js_data['showUserGuide']) {
wp_register_style(
'advset-user-guide',
plugins_url('user-guide.css', __FILE__),
['advset-admin-ui'],
filemtime(ADVSET_DIR . '/admin-ui/user-guide.css')
);
wp_enqueue_style('advset-user-guide');
wp_register_script(
'advset-user-guide',
plugins_url('user-guide.js', __FILE__),
['advset-admin-ui', 'wp-i18n'],
filemtime(ADVSET_DIR . '/admin-ui/user-guide.js'),
true
);
wp_enqueue_script('advset-user-guide');
}
}
add_action('admin_enqueue_scripts', 'advset_admin_ui_scripts');
add_action('wp_enqueue_scripts', 'advset_admin_ui_scripts');
/**
* Ensure wp-api is available for administrators
*/
function advset_api_settings() {
// Only load for administrators
if (!current_user_can('manage_options')) {
return;
}
wp_enqueue_script('wp-api');
}
add_action('wp_enqueue_scripts', 'advset_api_settings', 1000);
add_action('admin_enqueue_scripts', 'advset_api_settings', 1000);
/**
* Add modal HTML to admin footer
*/
function advset_admin_modal_html() {
// Only show for administrators
if (!current_user_can('manage_options')) {
return;
}
// Get the loading SVG content
$loading_path = ADVSET_DIR . '/admin-ui/images/loading.svg';
$loading_svg = '';
if (file_exists($loading_path)) {
$loading_svg = file_get_contents($loading_path);
}
// Get the close SVG content
$close_path = ADVSET_DIR . '/admin-ui/images/close.svg';
$close_svg = '';
if (file_exists($close_path)) {
$close_svg = file_get_contents($close_path);
}
?>