Skip to:
Content
Pages
Categories
Search
Top
Bottom

Create new subnav with a static link

  • @max-zhubr

    Participant

    Hi there, All!

    How can I make a subnav with a static link in profile?
    I’ve got an Events+ plugin installed, and I’m trying to add a subnav link to the profile tab called “Events” with a static link, that should redirect to page /events/.

    Here is the code of the BP connected part of plugin:

    <?php
    /*
    Plugin Name: BuddyPress: My Events
    Description: Adds an Events tab to your user profiles.
    Plugin URI: http://premium.wpmudev.org/project/events-and-booking
    Version: 1.0
    AddonType: BuddyPress
    Author: WPMU DEV
    */
    
    /*
    Detail: Displays lists of user RSVPs on your users member pages.
    */
    
    class Eab_BuddyPress_MyEvents {
    
    	private $_data;
    
    	private function __construct () {
    		$this->_data = Eab_Options::get_instance();
    	}
    
    	public static function serve () {
    		$me = new Eab_BuddyPress_MyEvents;
    		$me->_add_hooks();
    	}
    
    	private function _add_hooks () {
    		add_action('admin_notices', array($this, 'show_nags'));
    		add_action('eab-settings-after_plugin_settings', array($this, 'show_settings'));
    		add_filter('eab-settings-before_save', array($this, 'save_settings'));
    
    		add_action('bp_init', array($this, 'add_bp_profile_entry'));
    	}
    
    	function show_nags () {
    		if (!defined('BP_VERSION')) {
    			echo '<div class="error"><p>' .
    				__("You'll need BuddyPress installed and activated for My Events add-on to work", Eab_EventsHub::TEXT_DOMAIN) .
    			'</p></div>';
    		}
    	}
    
    	private function _check_permissions () {
    		$post_type = get_post_type_object(Eab_EventModel::POST_TYPE);
    		return current_user_can($post_type->cap->edit_posts);
    	}
    
    	function add_bp_profile_entry () {
    		global $bp;
    		bp_core_new_nav_item(array(
    			'name' => __('Events', Eab_EventsHub::TEXT_DOMAIN),
    			'slug' => 'my-events',
    			'show_for_displayed_user' => true,
    			'default_subnav_slug' => ($this->_check_permissions() ? 'organized' : 'attending'),
    			'screen_function' => '__return_false',
    		));
    		if ($this->_check_permissions()) {
    			bp_core_new_subnav_item(array(
    				'name' => __('Organized', Eab_EventsHub::TEXT_DOMAIN),
    				'slug' => 'organized',
    				'parent_url' => $bp->displayed_user->domain . 'my-events' . '/',
    				'parent_slug' => 'my-events',
    				'screen_function' => array($this, 'bind_bp_organized_page'),
    			));
    		}
    		bp_core_new_subnav_item(array(
    			'name' => __('Attending', Eab_EventsHub::TEXT_DOMAIN),
    			'slug' => 'attending',
    			'parent_url' => $bp->displayed_user->domain . 'my-events' . '/',
    			'parent_slug' => 'my-events',
    			'screen_function' => array($this, 'bind_bp_attending_page'),
    		));
    		bp_core_new_subnav_item(array(
    			'name' => __('Maybe', Eab_EventsHub::TEXT_DOMAIN),
    			'slug' => 'mabe',
    			'parent_url' => $bp->displayed_user->domain . 'my-events' . '/',
    			'parent_slug' => 'my-events',
    			'screen_function' => array($this, 'bind_bp_maybe_page'),
    		));
    		bp_core_new_subnav_item(array(
    			'name' => __('Not Attending', Eab_EventsHub::TEXT_DOMAIN),
    			'slug' => 'not-attending',
    			'parent_url' => $bp->displayed_user->domain . 'my-events' . '/',
    			'parent_slug' => 'my-events',
    			'screen_function' => array($this, 'bind_bp_not_attending_page'),
    		));
    		do_action('eab-events-my_events-set_up_navigation');
    	}
    
    	function bind_bp_organized_page () {
    		add_action('bp_template_title', array($this, 'show_organized_title'));
    		add_action('bp_template_content', array($this, 'show_organized_body'));
    		add_action('bp_head', array($this, 'enqueue_dependencies'));
    		bp_core_load_template(apply_filters('bp_core_template_plugin', 'members/single/plugins'));
    	}
    	function bind_bp_attending_page () {
    		add_action('bp_template_title', array($this, 'show_attending_title'));
    		add_action('bp_template_content', array($this, 'show_attending_body'));
    		add_action('bp_head', array($this, 'enqueue_dependencies'));
    		bp_core_load_template(apply_filters('bp_core_template_plugin', 'members/single/plugins'));
    	}
    	function bind_bp_maybe_page () {
    		add_action('bp_template_title', array($this, 'show_maybe_title'));
    		add_action('bp_template_content', array($this, 'show_maybe_body'));
    		add_action('bp_head', array($this, 'enqueue_dependencies'));
    		bp_core_load_template(apply_filters('bp_core_template_plugin', 'members/single/plugins'));
    	}
    	function bind_bp_not_attending_page () {
    		add_action('bp_template_title', array($this, 'show_not_attending_title'));
    		add_action('bp_template_content', array($this, 'show_not_attending_body'));
    		add_action('bp_head', array($this, 'enqueue_dependencies'));
    		bp_core_load_template(apply_filters('bp_core_template_plugin', 'members/single/plugins'));
    	}
    
    	function enqueue_dependencies () {
    		global $bp;
    		if ('my-events' != $bp->current_component) return false;
    		wp_enqueue_style('eab-bp-my_events', plugins_url('events-and-bookings/css/eab-buddypress-my_events.css'));
    	}
    
    	function show_organized_title () {
    		echo __('Organized Events', Eab_EventsHub::TEXT_DOMAIN);
    	}
    	function show_attending_title () {
    		echo __('Attending Events', Eab_EventsHub::TEXT_DOMAIN);
    	}
    	function show_maybe_title () {
    		echo __('Maybe attending Events', Eab_EventsHub::TEXT_DOMAIN);
    	}
    	function show_not_attending_title () {
    		echo __('Not attending Events', Eab_EventsHub::TEXT_DOMAIN);
    	}
    
    	function show_organized_body () {
    		global $bp;
    		echo '<div id="eab-bp-my_events-wrapper">';
    		echo '<div class="eab-bp-my_events eab-bp-organized">' .
    			Eab_Template::get_user_organized_events($bp->displayed_user->id) .
    		'</div>';
    		echo '</div>';
    	}
    	function show_attending_body () {
    		global $bp;
    		$premium = $this->_data->get_option('bp-my_events-premium_events');
    		if (!empty($premium)) {
    			if ('nag' == $premium) add_filter('eab-event-user_events-before_meta', array($this, 'premium_event_rsvp'), 10, 3);
    			if ('hide' == $premium) add_filter('eab-event-user_events-exclude_event', array($this, 'exclude_premium_event_rsvp'), 10, 2);
    		}
    		echo '<div id="eab-bp-my_events-wrapper">';
    		echo '<div class="eab-bp-my_events eab-bp-rsvp_yes">' .
    			Eab_Template::get_user_events(Eab_EventModel::BOOKING_YES, $bp->displayed_user->id) .
    		'</div>';
    		echo '</div>';
    	}
    	function show_maybe_body () {
    		global $bp;
    		echo '<div id="eab-bp-my_events-wrapper">';
    		echo '<div class="eab-bp-my_events eab-bp-rsvp_maybe">' .
    			Eab_Template::get_user_events(Eab_EventModel::BOOKING_MAYBE, $bp->displayed_user->id) .
    		'</div>';
    		echo '</div>';
    	}
    	function show_not_attending_body () {
    		global $bp;
    		echo '<div id="eab-bp-my_events-wrapper">';
    		echo '<div class="eab-bp-my_events eab-bp-rsvp_no">' .
    			Eab_Template::get_user_events(Eab_EventModel::BOOKING_NO, $bp->displayed_user->id) .
    		'</div>';
    		echo '</div>';
    	}
    
    	function premium_event_rsvp ($content, $event, $status) {
    		if (!$event->is_premium()) return $content;
    
    		global $bp;
    		$user_id = $bp->displayed_user->id;
    		if (Eab_EventModel::BOOKING_YES != $status) return $content;
    		if ($event->user_paid($user_id)) return $content;
    
    		$content .= '<div class="eab-premium_event-unpaid_notice"><b>' . __('Event not paid', Eab_EventsHub::TEXT_DOMAIN) . '</b></div>';
    
    		return $content;
    	}
    
    	function exclude_premium_event_rsvp ($exclude, $event) {
    		if ($exclude) return $exclude;
    
    		global $bp;
    		$user_id = $bp->displayed_user->id;
    
    		if (!$event->is_premium()) return false;
    		return !$event->user_paid($user_id);
    	}
    
    	function show_settings () {
    		$tips = new WpmuDev_HelpTooltips();
    		$tips->set_icon_url(plugins_url('events-and-bookings/img/information.png'));
    		$premium = $this->_data->get_option('bp-my_events-premium_events');
    		$options = array(
    			'' => __('Do nothing special', Eab_EventsHub::TEXT_DOMAIN),
    			'hide' => __('Hide', Eab_EventsHub::TEXT_DOMAIN),
    			'nag' => __('Show nag notice', Eab_EventsHub::TEXT_DOMAIN),
    		);
    ?>
    <div id="eab-settings-my_events" class="eab-metabox postbox">
    	<h3 class="eab-hndle"><?php _e('My Events settings', Eab_EventsHub::TEXT_DOMAIN); ?></h3>
    	<div class="eab-inside">
    		<div class="eab-settings-settings_item" style="line-height:1.8em">
    	    	<label for="eab_event-bp-my_events-premium_events"><?php _e('Non-paid premium events with positive RSPVs', Eab_EventsHub::TEXT_DOMAIN); ?>:</label>
    	    	<?php foreach ($options as $value => $label) { ?>
    	    		<br />
    				<input type="radio" id="eab_event-bp-my_events-premium_events-<?php echo esc_attr($value); ?>" name="event_default[bp-my_events-premium_events]" value="<?php echo esc_attr($value); ?>" <?php checked($value, $premium); ?> />
    	    		<label for="eab_event-bp-my_events-premium_events-<?php echo esc_attr($value); ?>"><?php echo esc_html($label) ?></label>
    	    	<?php } ?>
    			<span><?php echo $tips->add_tip(__('How to deal with non-paid premium events on user events list display.', Eab_EventsHub::TEXT_DOMAIN)); ?></span>
    	    </div>
    	</div>
    </div>
    <?php
    	}
    
    	function save_settings ($options) {
    		$options['bp-my_events-premium_events'] = $_POST['event_default']['bp-my_events-premium_events'];
    		return $options;
    	}
    }
    
    Eab_BuddyPress_MyEvents::serve();
    
    class Eab_MyEvents_Shortcodes extends Eab_Codec {
    
    	protected $_shortcodes = array(
    		'my_events' => 'eab_my_events',
    	);
    
    	public static function serve () {
    		$me = new Eab_MyEvents_Shortcodes;
    		$me->_register();
    	}
    
    	function process_my_events_shortcode ($args=array(), $content=false) {
    		$args = $this->_preparse_arguments($args, array(
    		// Query arguments
    			'user' => false, // User ID or keyword
    		// Appearance arguments
    			'class' => 'eab-my_events',
    			'show_titles' => 'yes',
    			'sections' => 'organized,yes,maybe,no',
    		));
    
    		if (is_numeric($args['user'])) {
    			$args['user'] = $this->_arg_to_int($args['user']);
    		} else {
    			if ('current' == trim($args['user'])) {
    				$user = wp_get_current_user();
    				$args['user'] = $user->ID;
    			} else {
    				$args['user'] = false;
    			}
    		}
    		if (empty($args['user'])) return $content;
    
    		$args['sections'] = $this->_arg_to_str_list($args['sections']);
    		$args['show_titles'] = $this->_arg_to_bool($args['show_titles']);
    
    		$output = '';
    
    		// Check if the user can organize events
    		$post_type = get_post_type_object(Eab_EventModel::POST_TYPE);
    		if (in_array('organized', $args['sections']) && user_can($args['user'], $post_type->cap->edit_posts)) {
    			$output .= '<div class="' . $args['class'] . ' eab-bp-organized">' .
    				($args['show_titles'] ? '<h4>' . __('Organized Events', Eab_EventsHub::TEXT_DOMAIN) . '</h4>' : '') .
    				Eab_Template::get_user_organized_events($args['user']) .
    			'</div>';
    		}
    
    		if (in_array('yes', $args['sections'])) {
    			$output .= '<div class="' . $args['class'] . ' eab-bp-rsvp_yes">' .
    				($args['show_titles'] ? '<h4>' . __('Attending Events', Eab_EventsHub::TEXT_DOMAIN) . '</h4>' : '') .
    				Eab_Template::get_user_events(Eab_EventModel::BOOKING_YES, $args['user']) .
    			'</div>';
    		}
    
    		if (in_array('maybe', $args['sections'])) {
    			$output .= '<div class="' . $args['class'] . ' eab-bp-rsvp_maybe">' .
    				($args['show_titles'] ? '<h4>' . __('Maybe attending Events', Eab_EventsHub::TEXT_DOMAIN) . '</h4>' : '') .
    				Eab_Template::get_user_events(Eab_EventModel::BOOKING_MAYBE, $args['user']) .
    			'</div>';
    		}
    
    		if (in_array('no', $args['sections'])) {
    			$output .= '<div class="' . $args['class'] . ' eab-bp-rsvp_no">' .
    				($args['show_titles'] ? '<h4>' . __('Not attending Events', Eab_EventsHub::TEXT_DOMAIN) . '</h4>' : '') .
    				Eab_Template::get_user_events(Eab_EventModel::BOOKING_NO, $args['user']) .
    			'</div>';
    		}
    
    		$output = $output ? $output : $content;
    
    		return $output;
    	}
    
    	public function add_my_events_shortcode_help ($help) {
    		$help[] = array(
    			'title' => __('My Events archives', Eab_EventsHub::TEXT_DOMAIN),
    			'tag' => 'eab_my_events',
    			'arguments' => array(
    				'user' => array('help' => __('User ID or keyword "current".', Eab_EventsHub::TEXT_DOMAIN), 'type' => 'string:or_integer'),
    				'class' => array('help' => __('Apply this CSS class', Eab_EventsHub::TEXT_DOMAIN), 'type' => 'string'),
    				'show_titles' => array('help' => __('Show section titles', Eab_EventsHub::TEXT_DOMAIN), 'type' => 'boolean'),
    				'sections' => array('help' => __('Show these sections. Possible values: "organized", "yes", "maybe", "no".', Eab_EventsHub::TEXT_DOMAIN), 'type' => 'string:list'),
    			),
    		);
    		return $help;
    	}
    }
    
    Eab_MyEvents_Shortcodes::serve();

    Thanks in advance!

Viewing 2 replies - 1 through 2 (of 2 total)
  • @shanebp

    Moderator

    Support questions for 3rd party plugins should be directed at the creator of those plugins – in this case https://premium.wpmudev.org

    Your posting above of code from one of their premium plugins is probably in violation of the terms of purchase.

    @max-zhubr

    Participant

    Unfortunatly my membership finished long time ago, so I can’t ask support for help.

    Any ideas?

Viewing 2 replies - 1 through 2 (of 2 total)
  • The topic ‘Create new subnav with a static link’ is closed to new replies.
Skip to toolbar