<?php
/**
* The main giglogadmin plugin code.
*
* @package giglogadmin
*
* SPDX-FileCopyrightText: 2021 Andrea Chirulescu <andrea.chirulescu@gmail.com>
* SPDX-FileCopyrightText: 2021 Harald Eilertsen <haraldei@anduin.net>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
if ( ! class_exists( 'GiglogAdmin_Plugin' ) ) {
/**
* The Main GiglogAdmin plugin class.
*
* Handles initialization and loads the rest of the plugin as needed.
*/
class GiglogAdmin_Plugin {
/**
* Initialize the plugin.
*
* Loads the required modules, and registers classbacks for
* adding the admin pages and filters.
*/
public static function init(): void {
if ( ! defined( 'GIGLOGADMIN_UNIT_TEST' ) ) {
require_once __DIR__ . '/giglogadmin-register-db-tables.php';
giglog_register_db_tables();
}
require_once __DIR__ . '/class-giglogadmin-venue.php';
require_once __DIR__ . '/class-giglogadmin-concert.php';
require_once __DIR__ . '/class-giglogadmin-icalexport.php';
require_once __DIR__ . '/view-helpers/select-field-helper.php';
if ( is_admin() ) {
require_once __DIR__ . '/admin/views/class-giglogadmin-adminpage.php';
require_once __DIR__ . '/admin/views/class-giglogadmin-importgigspage.php';
require_once __DIR__ . '/admin/helpfiles/instrunctions.php';
require_once __DIR__ . '/admin/helpfiles/instr_reviewers.php';
require_once __DIR__ . '/admin/helpfiles/instr_photog.php';
add_action( 'admin_menu', array( 'GiglogAdmin_Plugin', 'add_admin_pages' ) );
add_action( 'admin_menu', array( 'GiglogAdmin_Plugin', 'add_help_pages' ) );
add_filter( 'wp_nav_menu_args', array( 'GiglogAdmin_Plugin', 'nav_menu_args' ) );
} else {
require_once __DIR__ . '/view-helpers/class-giglogadmin-concertstable.php';
require_once __DIR__ . '/giglogadmin-shortcodes.php';
}
}
/**
* Adds the 'Giglog' top level menu to the left side WordPress admin
* menu. Other subpages will come later.
*
* @return void
*/
private static function add_admin_pages(): void {
if ( ! current_user_can( 'manage_options' ) ) {
return;
}
$top = add_menu_page(
'Giglog admin', // Page title
'Giglog', // Menu title
'upload_files', // Will show for users with this capability
'giglog', // menu slug
array( 'GiglogAdmin_AdminPage', 'render_html' ), // callable
'dashicons-tickets-alt', // Icon url
11 // Position, just below 'Media'
);
add_action( 'load-' . $top, array( 'GiglogAdmin_AdminPage', 'update' ) );
$import_hook = add_submenu_page(
'giglog', // parent slug
'Import gigs', // page title
'Import gigs', // menu title
'upload_files', // required capability
'giglog_import', // menu slug
array( 'GiglogAdmin_ImportGigsPage', 'render_html' ) // callable
);
if ( $import_hook !== false ) {
add_action(
'load-' . $import_hook,
array( 'GiglogAdmin_ImportGigsPage', 'submit_form' )
);
}
wp_register_style( 'css_style', plugins_url( '/css/main.css', __FILE__ ), array(), '1' );
wp_enqueue_style( 'css_style' );
}
/**
* Adds the "help" pages in the WordPress admin menu.
*/
private static function add_help_pages(): void {
if ( ! current_user_can( 'manage_options' ) ) {
return;
}
add_menu_page(
'Help for ET users', // Page title
'Help for ET users', // Menu title
'upload_files', // Will show for users with this capability
'helpfiles', // menu slug
array( 'Instructions_Page', 'render_instr_html' ), // callable
'dashicons-tickets-alt', // Icon url
10 // Position, just below 'Media'
);
add_submenu_page(
'helpfiles', // parent slug
'Reviewer help files', // page title
'Reviewer help files', // menu title
'upload_files', // required capability
'reviewer_help', // menu slug
array( 'Instructions_Reviewers', 'render_instr_rev_html' ) // callable
);
add_submenu_page(
'helpfiles', // parent slug
'Photogalleries help files', // page title
'Photogalleries help files', // menu title
'upload_files', // required capability
'photog_help', // menu slug
array( 'Instructions_Photogs', 'render_instr_photo_html' ) // callable
);
}
/**
* Show menus based on whether user is logged in or not.
*
* Giglog admin pages should only be visible for logged in users/can eventually
* be customized by role if needed
*
* @param array $args The menu array to filter.
*/
private static function nav_menu_args( array $args = array() ) : array {
if ( is_user_logged_in() ) {
$args['menu'] = 'Loggedusers';
} else {
$args['menu'] = 'Notloggedusers';
}
return $args;
}
}
register_activation_hook( __FILE__, array( 'GiglogAdmin_Plugin', 'activate' ) );
register_deactivation_hook( __FILE__, array( 'GiglogAdmin_Plugin', 'deactivate' ) );
GiglogAdmin_Plugin::init();
}