Current File : /home/aventura/www/site/wp-content/themes/kleo/lib/plugin-buddypress/menu-notifications.php
<?php

/* Buddypress Notifications in menu item */
add_filter('kleo_nav_menu_items', 'kleo_add_notifications_nav_item' );
function kleo_add_notifications_nav_item( $menu_items ) {
  $menu_items[] = array(
    'name' => __( 'Live Notifications', 'kleo_framework' ),
    'slug' => 'notifications',
    'link' => '#',
  );

  return $menu_items;
}


add_filter('kleo_setup_nav_item_notifications' , 'kleo_setup_notifications_nav');
function kleo_setup_notifications_nav( $menu_item ) {
    $menu_item->classes[] = 'kleo-toggle-menu';
    $menu_item->classes[] = 'dropdown-submenu';
    if ( ! is_user_logged_in() ) {
        $menu_item->_invalid = true;
    } else {
        add_filter( 'walker_nav_menu_start_el_notifications', 'kleo_menu_notifications', 10, 4 );
    }

    return $menu_item;
}

function kleo_bp_mobile_notify() {
    global $kleo_config;

    $output = '';
    $url = bp_loggedin_user_domain() . BP_NOTIFICATIONS_SLUG;
    $notifications = bp_notifications_get_notifications_for_user( bp_loggedin_user_id(), 'object' );
    $count         = ! empty( $notifications ) ? count( $notifications ) : 0;

    if ($count > 0 ) {
        $alert = 'new-alert';
    } else {
        $alert = 'no-alert';
    }

    if ( isset( $kleo_config['mobile_notify_icon'] ) ) {
        $icon = $kleo_config['mobile_notify_icon'];
    } else {
        $icon = 'bell';
    }

    $title = '<span class="notify-items sq-notify-mobile">' .
                '<i class="icon-' . $icon . '"></i> <span class="kleo-notifications ' . $alert . '">' . $count . '</span>' .
             '</span>';
    $output .= '<a title="' . __( 'View Notifications', 'kleo_framework' ) . '" class="notify-contents" href="' . $url .'">' . $title . '</a>';
    echo $output;
}

if (! function_exists( 'kleo_menu_notifications' )) {
    function kleo_menu_notifications( $item_output, $item, $depth, $args ) {
        global $kleo_config;

        $output        = '';
        $url           = bp_loggedin_user_domain() . BP_NOTIFICATIONS_SLUG;
        $notifications = bp_notifications_get_notifications_for_user( bp_loggedin_user_id(), 'object' );
        $count         = ! empty( $notifications ) ? count( $notifications ) : 0;

        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 != '' ) {

            $kleo_config['mobile_notify_icon'] = $item->icon;

            $title_icon = '<i class="icon-' . $item->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_notify', 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 . '">';

        if ( ! empty( $notifications ) ) {
            foreach ( (array) $notifications as $notification ) {
                $output .= '<li class="kleo-submenu-item" id="kleo-notification-' . $notification->id . '">';
                $output .= '<a href="' . $notification->href . '">' . $notification->content . '</a>';
                //$output .= '<a data-id="' . $notification->id . '" title="' . __( 'Mark as read', 'kleo_framework' ) . '" class="remove" href="#">×</a>';
                $output .= '</li>';
            }
        } else {
            $output .= '<li class="kleo-submenu-item">' . __( 'No new notifications', 'kleo_framework' ) . '</li>';
        }

        $output .= '</ul>';
        if ( ! empty( $notifications ) ) {
            $style = '';
        } else {
            $style = ' style="display: none;"';
        }
        $output .= '<div class="minicart-buttons text-center"' . $style . '><a class="btn btn-default mark-as-read" href="#">' . __( 'Mark all as read', 'kleo_framework' ) . '</a></div>';

        $output .= '</div>';

        return $output;
    }
}


/* Mark notfications as read by AJAX */
add_action('wp_ajax_kleo_bp_notification_mark_read', 'kleo_bp_notification_mark_read');

function kleo_bp_notification_mark_read() {
  $response = array();

  if ( BP_Notifications_Notification::mark_all_for_user( bp_loggedin_user_id() ) ) {
    $response['status'] = 'success';
  }
  else {
    $response['status'] = 'failure';
  }

  $notifications = bp_notifications_get_notifications_for_user( bp_loggedin_user_id(), 'object' );
  $count         = ! empty( $notifications ) ? count( $notifications ) : 0;
  $response['count']  = $count;
  $response['empty']  = '<li class="kleo-submenu-item">' . __( 'No new notifications' , 'kleo_framework' ) . '</li>';

  echo json_encode( $response );
  exit;
}


/* Refresh notifications by AJAX */
add_filter( 'kleo_bp_ajax_call','kleo_bp_notifications_refresh' );
function kleo_bp_notifications_refresh( $response ) {
	
	if ( ! isset( $_GET['current_notifications'] ) ) {
		$response['statusNotif'] = 'failure';
		return $response;
	}
	
	$old_count = (int) $_GET['current_notifications'];
	
	$notifications = bp_notifications_get_notifications_for_user( bp_loggedin_user_id(), 'object' );
	$count         = ! empty( $notifications ) ? count( $notifications ) : 0;
	
	if ( $count == $old_count ) {
		$response['statusNotif'] = 'no_change';
		return $response;
	}
	
	$output = '';
	
	if ( !empty( $notifications ) ) {
		foreach ( (array)$notifications as $notification ) {
			$output .='<li class="kleo-submenu-item" id="kleo-notification-' . $notification->id . '">';
			$output .='<a href="' . $notification->href . '">' . $notification->content . '</a>';
			$output .='</li>';
		}
	} else {
		$output .= '<li class="kleo-submenu-item">' . esc_html__( 'No new notifications' , 'kleo_framework' ) . '</li>';
	}
	$response['dataNotif'] = $output;
	$response['countNotif']  = $count;
	$response['statusNotif']  = 'success';
	
	return $response;
}