version = BOARDIT_VERSION; $this->loader = new Boardit_Loader(); $this->set_locale(); $this->define_admin_hooks(); $this->define_public_hooks(); } /** * Vertalingen. */ private function set_locale() { $i18n = new Boardit_I18n(); $this->loader->add_filter( 'lang_dir_for_domain', $i18n, 'lang_dir_for_domain', 10, 3 ); } /** * Hooks voor het beheer en de AJAX-acties van beheerders. */ private function define_admin_hooks() { $admin = new Boardit_Admin( $this->version ); $this->loader->add_action( 'admin_enqueue_scripts', $admin, 'enqueue_styles' ); $this->loader->add_action( 'admin_enqueue_scripts', $admin, 'enqueue_scripts' ); $this->loader->add_action( 'admin_menu', $admin, 'add_admin_menus' ); $this->loader->add_action( 'admin_init', $admin, 'register_settings' ); // Run dbDelta on every request (front + admin) so schema stays current without plugin re-activation. add_action( 'init', array( 'Boardit_DB', 'maybe_upgrade' ) ); add_action( 'admin_init', array( 'Boardit_Activator', 'remove_legacy_license' ) ); $this->loader->add_action( 'wp_ajax_boardit_save_court', $admin, 'ajax_save_court' ); $this->loader->add_action( 'wp_ajax_boardit_delete_court', $admin, 'ajax_delete_court' ); $this->loader->add_action( 'wp_ajax_boardit_reorder_courts', $admin, 'ajax_reorder_courts' ); $this->loader->add_action( 'wp_ajax_boardit_admin_cancel', $admin, 'ajax_admin_cancel' ); $this->loader->add_action( 'wp_ajax_boardit_block_member', $admin, 'ajax_block_member' ); $this->loader->add_action( 'wp_ajax_boardit_seed_members', $admin, 'ajax_seed_members' ); $this->loader->add_action( 'wp_ajax_boardit_delete_test_members', $admin, 'ajax_delete_test_members' ); $this->loader->add_action( 'wp_ajax_boardit_save_email_settings', $admin, 'ajax_save_email_settings' ); $this->loader->add_action( 'wp_ajax_boardit_test_email', $admin, 'ajax_test_email' ); } /** * Hooks voor de voorkant, de mailer en de shortcodes. */ private function define_public_hooks() { // WordPress admin bar verbergen voor gewone leden. add_filter( 'show_admin_bar', array( $this, 'filter_admin_bar' ) ); // Niet-beheerders omleiden weg van het WP-dashboard. add_action( 'admin_init', array( $this, 'redirect_members_from_admin' ) ); // Mailer-hooks: luisteren op WordPress-actions die Boardit_Reservation afvuurt. $this->loader->add_action( 'boardit_reservation_created', 'Boardit_Mailer', 'on_reservation_created', 10, 2 ); $this->loader->add_action( 'boardit_reservation_cancelled', 'Boardit_Mailer', 'on_reservation_cancelled', 10, 2 ); $this->loader->add_action( 'boardit_reservation_moved', 'Boardit_Mailer', 'on_reservation_moved', 10, 3 ); $public = new Boardit_Public( $this->version ); $this->loader->add_action( 'wp_enqueue_scripts', $public, 'maybe_enqueue_assets' ); $this->loader->add_action( 'wp_ajax_boardit_make_reservation', $public, 'ajax_make_reservation' ); $this->loader->add_action( 'wp_ajax_boardit_move_reservation', $public, 'ajax_move_reservation' ); $this->loader->add_action( 'wp_ajax_boardit_cancel_reservation', $public, 'ajax_cancel_reservation' ); $this->loader->add_action( 'wp_ajax_boardit_get_board', $public, 'ajax_get_board' ); $this->loader->add_action( 'wp_ajax_nopriv_boardit_get_board', $public, 'ajax_get_board' ); $this->loader->add_action( 'wp_ajax_nopriv_boardit_member_login', $public, 'ajax_member_login' ); $this->loader->add_action( 'wp_ajax_boardit_member_login', $public, 'ajax_member_login' ); $this->loader->add_action( 'wp_ajax_boardit_search_members', $public, 'ajax_search_members' ); $this->loader->add_action( 'wp_ajax_boardit_get_suggested_players', $public, 'ajax_get_suggested_players' ); add_shortcode( 'boardit_board', array( $public, 'render_board_shortcode' ) ); add_shortcode( 'boardit_my_reservations', array( $public, 'render_my_reservations_shortcode' ) ); } /** * Verberg de WordPress-beheerdersbalk voor gewone leden. * Admins en redacteuren behouden de balk. * * @param bool $show Huidige waarde. * @return bool */ public function filter_admin_bar( $show ) { if ( ! current_user_can( 'manage_options' ) && ! current_user_can( 'edit_posts' ) ) { return false; } return $show; } /** * Stuur gewone leden (tennisclub_member / subscriber) weg van het WP-dashboard. * AJAX-verzoeken worden altijd doorgelaten. */ public function redirect_members_from_admin() { if ( wp_doing_ajax() ) { return; } if ( is_user_logged_in() && ! current_user_can( 'manage_options' ) && ! current_user_can( 'edit_posts' ) ) { $redirect_to = get_option( 'boardit_member_redirect_url', home_url() ); wp_safe_redirect( $redirect_to ); exit; } } /** * Meldt de hooks aan bij WordPress. */ public function run() { $this->loader->run(); } /** * Pluginversie. * * @return string */ public function get_version() { return $this->version; } }