BP_Messages_Notices_Admin
Description
Source
File: bp-messages/classes/class-bp-messages-notices-admin.php
class BP_Messages_Notices_Admin { /** * The ID returned by `add_users_page()`. * * @since BuddyPress 3.0.0 * @var string */ public $screen_id = ''; /** * The URL of the admin screen. * * @since BuddyPress 3.0.0 * @var string */ public $url = ''; /** * The current instance of the BP_Messages_Notices_List_Table class. * * @since BuddyPress 3.0.0 * @var object */ public $list_table = ''; /** * Create a new instance or access the current instance of this class. * * @since BuddyPress 3.0.0 */ public static function register_notices_admin() { if ( ! is_admin() || ! bp_is_active( 'messages' ) || ! bp_current_user_can( 'bp_moderate' ) ) { return; } $bp = buddypress(); if ( empty( $bp->messages->admin ) ) { $bp->messages->admin = new self; } return $bp->messages->admin; } /** * Constructor method. * * @since BuddyPress 3.0.0 */ public function __construct() { $this->setup_globals(); $this->setup_actions(); } /** * Populate the classs variables. * * @since BuddyPress 3.0.0 */ protected function setup_globals() { $this->url = add_query_arg( array( 'page' => 'bp-notices' ), bp_get_admin_url( 'admin.php' ) ); } /** * Add action hooks. * * @since BuddyPress 3.0.0 */ protected function setup_actions() { add_action( bp_core_admin_hook(), array( $this, 'admin_menu' ), 70 ); } /** * Add the 'Site Notices' admin menu item. * * @since BuddyPress 3.0.0 */ public function admin_menu() { // Bail if current user cannot moderate community. if ( ! bp_current_user_can( 'bp_moderate' ) || ! bp_is_active( 'messages' ) ) { return false; } $this->screen_id = add_submenu_page( 'buddyboss-platform', __( 'Notices', 'buddyboss' ), __( 'Notices', 'buddyboss' ), 'manage_options', 'bp-notices', array( $this, 'admin_index' ) ); add_action( 'load-' . $this->screen_id, array( $this, 'admin_load' ) ); } /** * Catch save/update requests or load the screen. * * @since BuddyPress 3.0.0 */ public function admin_load() { $redirect_to = false; // Catch new notice saves. if ( ! empty( $_POST['bp_notice']['send'] ) ) { check_admin_referer( 'new-notice', 'ns-nonce' ); $notice = wp_parse_args( $_POST['bp_notice'], array( 'subject' => '', 'content' => '' ) ); if ( messages_send_notice( $notice['subject'], $notice['content'] ) ) { $redirect_to = add_query_arg( 'success', 'create', $this->url ); // Notice could not be sent. } else { $redirect_to = add_query_arg( 'error', 'create', $this->url ); } } // Catch activation/deactivation/delete requests if ( ! empty( $_GET['notice_id'] ) && ! empty( $_GET['notice_action'] ) ) { $notice_id = absint( $_GET['notice_id'] ); check_admin_referer( 'messages-' . $_GET['notice_action'] . '-notice-' . $notice_id ); $success = false; switch ( $_GET['notice_action'] ) { case 'activate': $notice = new BP_Messages_Notice( $notice_id ); $success = $notice->activate(); break; case 'deactivate': $notice = new BP_Messages_Notice( $notice_id ); $success = $notice->deactivate(); break; case 'delete': $notice = new BP_Messages_Notice( $notice_id ); $success = $notice->delete(); break; } if ( $success ) { $redirect_to = add_query_arg( 'success', 'update', $this->url ); // Notice could not be updated. } else { $redirect_to = add_query_arg( 'error', 'update', $this->url ); } } if ( $redirect_to ) { wp_safe_redirect( $redirect_to ); exit(); } $this->list_table = new BP_Messages_Notices_List_Table( array( 'screen' => get_current_screen()->id ) ); } /** * Generate content for the bp-notices admin screen. * * @since BuddyPress 3.0.0 */ public function admin_index() { $this->list_table->prepare_items(); ?> <div class="wrap"> <?php if ( version_compare( $GLOBALS['wp_version'], '4.8', '>=' ) ) : ?> <h1 class="wp-heading-inline"><?php echo esc_html__( 'Site Notices', 'buddyboss' ); ?></h1> <hr class="wp-header-end"> <?php else : ?> <h1><?php echo esc_html__( 'Site Notices', 'buddyboss' ); ?></h1> <?php endif; ?> <p class="bp-notice-about"><?php esc_html_e( 'Manage notices shown on the front end of your site to all logged-in members. Use this to quickly notify all members.', 'buddyboss' ); ?></p> <div class="bp-new-notice-panel"> <h2 class="bp-new-notice"><?php esc_html_e( 'Add New Notice', 'buddyboss' ); ?></h2> <form action="<?php echo esc_url( wp_nonce_url( $this->url, 'new-notice', 'ns-nonce' ) ); ?>" method="post"> <div> <label for="bp_notice_subject"><?php esc_html_e( 'Subject', 'buddyboss' ); ?></label> <input type="text" class="bp-panel-input" id="bp_notice_subject" name="bp_notice[subject]"/> <label for="bp_notice_content"><?php esc_html_e( 'Content', 'buddyboss' ); ?></label> <textarea class="bp-panel-textarea" id="bp_notice_content" name="bp_notice[content]"></textarea> </div> <input type="submit" value="<?php esc_attr_e( 'Publish Notice', 'buddyboss' ); ?>" name="bp_notice[send]" class="button button-primary save alignleft"> </form> </div> <?php if ( isset( $_GET['success'] ) || isset( $_GET['error'] ) ) : ?> <div id="message" class="<?php echo isset( $_GET['success'] ) ? 'updated' : 'error'; ?>"> <p> <?php if ( isset( $_GET['error'] ) ) { if ( 'create' === $_GET['error'] ) { esc_html_e( 'Notice was not created. Please try again.', 'buddyboss' ); } else { esc_html_e( 'Notice was not updated. Please try again.', 'buddyboss' ); } } else { if ( 'create' === $_GET['success'] ) { esc_html_e( 'Notice successfully created.', 'buddyboss' ); } else { esc_html_e( 'Notice successfully updated.', 'buddyboss' ); } } ?> </p> </div> <?php endif; ?> <h2 class="bp-notices-list"><?php esc_html_e( 'Notices List', 'buddyboss' ); ?></h2> <?php $this->list_table->display(); ?> </div> <?php } }
Methods
- __construct — Constructor method.
- admin_index — Generate content for the bp-notices admin screen.
- admin_load — Catch save/update requests or load the screen.
- admin_menu — Add the 'Site Notices' admin menu item.
- register_notices_admin — Create a new instance or access the current instance of this class.
- setup_actions — Add action hooks.
- setup_globals — Populate the classs variables.
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.