Current File : /home/aventura/www/site/wp-content/themes/kleo/lib/plugin-buddypress/menu-messages.php
<?php
/* Add Live messages to menu */

/* Buddypress Messages in menu item */
add_filter('kleo_nav_menu_items', 'kleo_add_messages_nav_item' );
function kleo_add_messages_nav_item( $menu_items ) {
	$menu_items[] = array(
		'name' => esc_html__( 'Live Messages', 'kleo_framework' ),
		'slug' => 'messages',
		'link' => '#',
	);
	
	return $menu_items;
}



add_filter( 'kleo_setup_nav_item_messages' , 'kleo_setup_messages_nav' );
function kleo_setup_messages_nav( $menu_item ) {
	$menu_item->classes[] = 'kleo-toggle-menu kleo-messages';
	$menu_item->classes[] = 'dropdown-submenu';
	if ( ! is_user_logged_in() ) {
		$menu_item->_invalid = true;
	} else {
		add_filter( 'walker_nav_menu_start_el_messages', 'kleo_menu_messages', 10, 4 );
	}
	
	return $menu_item;
}

function kleo_bp_mobile_messages() {

	$output = '';
	$url = bp_loggedin_user_domain() . bp_get_messages_slug();
	$count = bp_get_total_unread_messages_count();
	
	if ($count > 0 ) {
		$alert = 'new-alert';
	} else {
		$alert = 'no-alert';
	}
	
	if ( sq_kleo()->get_option( 'mobile_messages' ) ) {
		$icon = sq_kleo()->get_option( 'mobile_messages' );
	} else {
		$icon = 'mail';
	}
	
	$title = '<span class="notify-items sq-messages-mobile">' .
	            '<i class="icon-' . $icon . '"></i> <span class="kleo-notifications ' . $alert . '">' . $count . '</span>' .
	         '</span>';
	$output .= '<a title="' . __( 'View Messages', 'kleo_framework' ) . '" class="notify-contents" href="' . $url .'">' . $title . '</a>';
	echo $output;
}

function kleo_menu_messages( $item_output = '', $item = null, $depth = 1, $args = null ) {
	
	if( ! isset( $item ) ) {
		$item = new stdClass();
		$item->title = esc_html__( 'Messages', 'kleo_framework' );
		$item->attr_title = esc_html__( 'Messages', 'kleo_framework' );
		$item->icon = 'messages-line';
	}
	if ( ! isset( $args ) ) {
		$args = new stdClass();
		$args->theme_location = 'primary';
	}
	$output = '';
	$url = bp_loggedin_user_domain() . bp_get_messages_slug();
	$count = bp_get_total_unread_messages_count();
	
	if ( $count > 0 ) {
		$alert = 'new-alert';
		$status = ' has-notif';
	} else {
		$alert = 'no-alert';
		$status = '';
	}
	$attr_title = strip_tags( $item->attr_title );
	
	if ( isset( $item->icon ) && $item->icon != '' ) {
		
		$icon = $item->icon;
		sq_kleo()->set_option('mobile_messages', $icon );
		$title_icon = '<i class="icon-' . $icon . '"></i>';
		
		if ( $item->iconpos == 'after' ) {
			$title = $item->title . ' ' . $title_icon;
		} elseif ( $item->iconpos == 'icon' ) {
			$title = $title_icon;
		} else {
			$title = $title_icon . ' ' . $item->title;
		}
	} else {
		$title = $item->title;
	}

	//If we have the menu item then add it to the mobile menu
	add_action( 'kleo_mobile_header_icons', 'kleo_bp_mobile_messages', 9 );
	
	/* Menu style */
	$atts = array();
	if ( $depth === 0 && isset( $item->istyle ) ) {
		if ( $item->istyle == 'buy' ) {
			$atts['class'] =  (isset($atts['class']) ? $atts['class'] : '' ) . ' btn-buy';
		} elseif( $item->istyle == 'border' ) {
			$atts['class'] =  (isset($atts['class']) ? $atts['class'] : '' ) . ' btn btn-see-through';
		} elseif( $item->istyle == 'highlight' ) {
			$atts['class'] =  (isset($atts['class']) ? $atts['class'] : '' ) . ' btn btn-highlight';
		}
	}
	
	$class = 'notify-contents';
	if ( $depth === 0 ) {
		$class .= ' js-activated';
	}
	$class .= isset($atts['class']) ? ' ' . $atts['class'] : '';
	
	$output .= '<a class="' . $class . '" href="' . $url . '" title="' . $attr_title . '">'
	           . '<span class="notify-items"> ' . $title . ' <span class="kleo-notifications ' . $alert . '">' . $count . '</span></span>'
	           . '</a>';
	
	$output .= '<div class="kleo-toggle-submenu dropdown-menu sub-menu"><ul class="submenu-inner' . $status . '">';
	
	$message_list = kleo_bp_messages_get_list();
	
	if ( $message_list ) {
		$output .= $message_list;
		$style = '';
	} else {
		$output .= '<li class="kleo-submenu-item"><span>' . esc_html__( 'There are no new messages.', 'kleo_framework' ) . '</span></li>';
		$style = ' style="display: none;"';
	}
	
	$output .= '<div class="minicart-buttons text-center"' . $style . '><a class="btn btn-default see-all-messages" href="' . $url . '">' . esc_html__( 'See all', 'kleo_framework' ) . '</a></li>';
	
	$output .= '</ul>';
	
	return $output;
}



add_filter( 'kleo_bp_ajax_call', 'kleo_bp_messages_refresh' );
function kleo_bp_messages_refresh( $response ) {
	
	if ( ! isset( $_GET['current_messages'] ) ) {
		$response['statusMessages'] = 'failure';
		return $response;
	}
	
	$old_count = (int) $_GET['current_messages'];
	$count = bp_get_total_unread_messages_count();
	
	if ( $count == $old_count ) {
		$response['statusMessages'] = 'no_change';
		return $response;
	}
	
	$message_list = kleo_bp_messages_get_list();
	if ( $message_list ) {
		$output = $message_list;
	} else {
		$output = '<li class="kleo-submenu-item">' . esc_html__( 'There are no new messages.', 'kleo_framework' ) . '</li>';
	}
	
	$response['dataMessages'] = $output;
	$response['countMessages']  = $count;
	$response['statusMessages']  = 'success';
	
	return $response;
}


function kleo_bp_messages_get_list() {
	
	$output = '';
	?>
	
	<?php if ( bp_has_message_threads( array('user_id' => bp_loggedin_user_id(), 'type' => 'unread', 'max' => 5, 'per_page ' => 5, 'box' => 'inbox') ) ) : ob_start(); ?>
		
		<?php while ( bp_message_threads() ) : bp_message_thread(); ?>
			
			<li class="kleo-submenu-item <?php echo bp_message_thread_has_unread() ? 'unread' : 'read'; ?>" id="kleo-message-<?php bp_message_thread_id() ?>">
				
				<div class="message-thumb"><?php bp_message_thread_avatar() ?></div>
				<em class="message-from-wrap">
					<em class="message-from"><?php bp_message_thread_from() ?></em>
					<em class="message-date"><?php bp_message_thread_last_post_date() ?></em>
				</em>
				<div class="message-body">
					<a href="<?php bp_message_thread_view_link();?>">
						<?php bp_message_thread_excerpt() ?>
					</a>
				</div>
			</li>
		<?php endwhile; ?>
		
		<?php $output .= ob_get_clean(); ?>
	
	<?php endif; ?>
	
	<?php
	
	return $output;
}