SUREDONATION_VER, 'apiUrl' => rest_url( 'suredonation/v1' ), 'nonce' => wp_create_nonce( 'wp_rest' ), 'docsURL' => 'https://suredonation.com/docs/', 'plugin_url' => SUREDONATION_URL, 'site_url' => site_url(), 'admin_url' => admin_url(), 'is_first_campaign_created' => $this->has_campaigns(), 'rotating_plugin_banner' => $this->get_rotating_plugin_banner(), ] ); } /** * Register admin menu. * * @return void * @since 0.0.1 */ public function register_menu() { $menu_slug = 'suredonation'; // Main menu page. add_menu_page( __( 'SureDonation', 'suredonation' ), __( 'SureDonation', 'suredonation' ), 'manage_options', $menu_slug, [ $this, 'render_dashboard' ], 'dashicons-money-alt', 25 ); // Register submenus. $this->register_submenus( $menu_slug ); } /** * Render dashboard page. * * @return void * @since 0.0.1 */ public function render_dashboard() { ?>
'suredonation_cmpgn', 'posts_per_page' => 1, 'post_status' => [ 'publish', 'draft', 'private' ], 'fields' => 'ids', ] ); return ! empty( $campaigns ); } /** * Get rotating plugin banner data. * * @return array Plugin banner data or null if not available. * @since 0.0.1 */ private function get_rotating_plugin_banner() { // Get SVG logo as base64. $logo_svg = file_get_contents( SUREDONATION_DIR . 'images/surerank.svg' ); // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents -- Local file read. $logo_data = $logo_svg ? 'data:image/svg+xml;base64,' . base64_encode( $logo_svg ) : ''; // phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.obfuscation_base64_encode // SureRank plugin data. return [ 'slug' => 'flavor', 'title' => 'SureRank', 'singleLineDescription' => __( 'SEO Made Easy for Your Website', 'suredonation' ), 'subtitle' => __( 'Beautiful pages, persuasive content, and custom code in seconds. The possibilities are endless!', 'suredonation' ), 'logo' => $logo_data, 'status' => $this->get_plugin_status( 'flavor/flavor.php' ), ]; } /** * Get plugin installation status. * * @param string $plugin_file Plugin file path (e.g., 'plugin-folder/plugin-file.php'). * @return string Plugin status: 'Activated', 'Installed', or 'Install'. * @since 0.0.1 */ private function get_plugin_status( $plugin_file ) { if ( ! function_exists( 'is_plugin_active' ) ) { include_once ABSPATH . 'wp-admin/includes/plugin.php'; } if ( is_plugin_active( $plugin_file ) ) { return 'Activated'; } $all_plugins = get_plugins(); if ( isset( $all_plugins[ $plugin_file ] ) ) { return 'Installed'; } return 'Install'; } /** * Register submenus. * * @param string $menu_slug Menu slug. * @return void * @since 0.0.1 */ private function register_submenus( $menu_slug ) { $capability = 'manage_options'; $submenus = [ [ 'id' => $menu_slug, 'page_title' => __( 'Dashboard', 'suredonation' ), ], [ 'id' => 'suredonation#/campaigns', 'page_title' => __( 'Campaigns', 'suredonation' ), ], [ 'id' => 'suredonation#/donations', 'page_title' => __( 'Donations', 'suredonation' ), ], [ 'id' => 'suredonation#/settings', 'page_title' => __( 'Settings', 'suredonation' ), ], ]; // Register the submenus. foreach ( $submenus as $submenu ) { add_submenu_page( $menu_slug, $submenu['page_title'], $submenu['page_title'], $capability, $submenu['id'], [ $this, 'render_dashboard' ] ); } } }