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' ]
);
}
}
}