Current File : /home/n742ef5/.trash/asgaros-forum___/includes/forum-notifications.php |
<?php
// TODO: Maybe use AsgarosForumUserQuery to increase performance.
if (!defined('ABSPATH')) {
exit;
}
class AsgarosForumNotifications {
private $asgarosforum = null;
public $mailing_list = array();
public function __construct($asgarosForumObject) {
$this->asgarosforum = $asgarosForumObject;
add_action('asgarosforum_prepare_subscriptions', array($this, 'set_subscription_level'));
add_action('asgarosforum_bottom_navigation', array($this, 'show_subscription_navigation'), 10, 1);
add_action('asgarosforum_breadcrumbs_subscriptions', array($this, 'add_breadcrumbs'));
}
public function add_breadcrumbs() {
$element_link = $this->asgarosforum->get_link('subscriptions');
$element_title = __('Subscriptions', 'asgaros-forum');
$this->asgarosforum->breadcrumbs->add_breadcrumb($element_link, $element_title);
}
public function show_subscription_navigation($current_view) {
if ($this->asgarosforum->options['allow_subscriptions'] && is_user_logged_in()) {
switch ($current_view) {
case 'topic':
$this->show_topic_subscription_link($this->asgarosforum->current_topic);
break;
case 'forum':
$this->show_forum_subscription_link($this->asgarosforum->current_forum);
break;
}
}
}
// Generates an (un)subscription link based on subscription status for topics.
public function show_topic_subscription_link($topic_id) {
// Dont show the subscription-link when the topic is not approved.
if (!$this->asgarosforum->approval->is_topic_approved($topic_id)) {
return;
}
echo '<span id="topic-subscription" class="fas fa-envelope"></span>';
$link = '';
$text = '';
$subscription_level = $this->get_subscription_level();
if ($subscription_level == 3) {
$link = $this->asgarosforum->get_link('subscriptions');
$text = __('You are subscribed to <b>all</b> topics.', 'asgaros-forum');
} else if ($this->is_subscribed('topic', $topic_id)) {
$link = $this->asgarosforum->get_link('topic', $topic_id, array(
'unsubscribe_topic' => $topic_id,
'_wpnonce' => wp_create_nonce('asgaros_forum_unsubscribe_topic'),
));
$text = __('<b>Unsubscribe</b> from this topic.', 'asgaros-forum');
} else {
$link = $this->asgarosforum->get_link('topic', $topic_id, array(
'subscribe_topic' => $topic_id,
'_wpnonce' => wp_create_nonce('asgaros_forum_subscribe_topic'),
));
$text = __('<b>Subscribe</b> to this topic.', 'asgaros-forum');
}
echo '<a href="'.esc_url($link).'">'.wp_kses_post($text).'</a>';
}
// Generates an (un)subscription link based on subscription status for forums.
public function show_forum_subscription_link($element_id) {
echo '<span id="forum-subscription" class="fas fa-envelope"></span>';
$link = '';
$text = '';
$subscription_level = $this->get_subscription_level();
if ($subscription_level > 1) {
$link = $this->asgarosforum->get_link('subscriptions');
$text = __('You are subscribed to <b>all</b> forums.', 'asgaros-forum');
} else if ($this->is_subscribed('forum', $element_id)) {
$link = $this->asgarosforum->get_link('forum', $element_id, array(
'unsubscribe_forum' => $element_id,
'_wpnonce' => wp_create_nonce('asgaros_forum_unsubscribe_forum'),
));
$text = __('<b>Unsubscribe</b> from this forum.', 'asgaros-forum');
} else {
$link = $this->asgarosforum->get_link('forum', $element_id, array(
'subscribe_forum' => $element_id,
'_wpnonce' => wp_create_nonce('asgaros_forum_subscribe_forum'),
));
$text = __('<b>Subscribe</b> to this forum.', 'asgaros-forum');
}
echo '<a href="'.esc_url($link).'">'.wp_kses_post($text).'</a>';
}
// Generates an subscription option in the editor based on subscription status.
public function show_editor_subscription_option() {
// Dont show this option when this is a new topic and the forum requires approval.
if ($this->asgarosforum->current_topic === false && $this->asgarosforum->approval->forum_requires_approval($this->asgarosforum->current_forum, get_current_user_id())) {
return;
}
// Check if this functionality is enabled and if the user is logged-in.
if ($this->asgarosforum->options['allow_subscriptions'] && is_user_logged_in()) {
echo '<div class="editor-row">';
$subscription_level = $this->get_subscription_level();
if ($subscription_level == 3) {
$link = $this->asgarosforum->get_link('subscriptions');
echo '<a href="'.esc_url($link).'">'.wp_kses_post(__('You are subscribed to <b>all</b> topics.', 'asgaros-forum')).'</a>';
} else {
echo '<label class="checkbox-label">';
echo '<input type="checkbox" name="subscribe_checkbox" '.checked($this->is_subscribed('topic', $this->asgarosforum->current_topic), true, false).'><span>'.wp_kses_post(__('<b>Subscribe</b> to this topic.', 'asgaros-forum')).'</span>';
echo '</label>';
}
echo '</div>';
}
}
// Checks if the current user has a subscription for the current topic/forum.
public function is_subscribed($checkFor, $elementID) {
if ($elementID) {
$status = get_user_meta(get_current_user_id(), 'asgarosforum_subscription_'.$checkFor);
if ($status && in_array($elementID, $status)) {
return true;
}
}
return false;
}
// Subscribes the current user to the current topic.
public function subscribe_topic($topic_id) {
// Check first if this topic exists.
if ($this->asgarosforum->content->topic_exists($topic_id)) {
// Dont subscribe to a topic when it is not approved.
if (!$this->asgarosforum->approval->is_topic_approved($topic_id)) {
return;
}
// Only subscribe user if he is not already subscribed for this topic.
if (!$this->is_subscribed('topic', $topic_id)) {
add_user_meta(get_current_user_id(), 'asgarosforum_subscription_topic', $topic_id);
}
}
}
// Subscribes the current user to the current forum.
public function subscribe_forum($forum_id) {
// Check first if this forum exists.
if ($this->asgarosforum->content->forum_exists($forum_id)) {
// Only subscribe user if he is not already subscribed for this forum.
if (!$this->is_subscribed('forum', $forum_id)) {
add_user_meta(get_current_user_id(), 'asgarosforum_subscription_forum', $forum_id);
}
}
}
// Unsubscribes the current user from the current topic.
public function unsubscribe_topic($topic_id) {
// Check first if this topic exists.
if ($this->asgarosforum->content->topic_exists($topic_id)) {
delete_user_meta(get_current_user_id(), 'asgarosforum_subscription_topic', $topic_id);
}
}
// Unsubscribes the current user from the current forum.
public function unsubscribe_forum($forum_id) {
// Check first if this forum exists.
if ($this->asgarosforum->content->forum_exists($forum_id)) {
delete_user_meta(get_current_user_id(), 'asgarosforum_subscription_forum', $forum_id);
}
}
// Update the subscription-status for a topic based on the editor-checkbox.
public function update_topic_subscription_status($topic_id) {
if (isset($_POST['subscribe_checkbox']) && sanitize_key($_POST['subscribe_checkbox'])) {
$this->subscribe_topic($topic_id);
} else {
$this->unsubscribe_topic($topic_id);
}
}
// Removes all subscriptions for a topic. This is used when a topic gets deleted.
public function remove_all_topic_subscriptions($topic_id) {
delete_metadata('user', 0, 'asgarosforum_subscription_topic', $topic_id, true);
}
// Removes all subscriptions for a forum. This is used when a forum gets deleted.
public function remove_all_forum_subscriptions($forum_id) {
delete_metadata('user', 0, 'asgarosforum_subscription_forum', $forum_id, true);
}
// TODO: This function generates tons of queries (especially the filtering). We need some improvements.
public function notify_about_new_post($post_id, $ignore_list = false) {
// Cancel if this functionality is not enabled.
if (!$this->asgarosforum->options['allow_subscriptions']) {
return false;
}
// Load required data.
$post = $this->asgarosforum->content->get_post($post_id);
$topic = $this->asgarosforum->content->get_topic($post->parent_id);
$forum = $this->asgarosforum->content->get_forum($topic->parent_id);
// Get more data.
$post_link = $this->asgarosforum->rewrite->get_post_link($post_id, $topic->id);
$topic_name = esc_html(stripslashes($topic->name));
$forum_name = esc_html(stripslashes($forum->name));
$author_name = $this->asgarosforum->getUsername($post->author_id);
// Prepare subject.
$notification_subject = $this->asgarosforum->options['mail_template_new_post_subject'];
$notification_subject = str_replace('###TITLE###', wp_specialchars_decode($topic_name, ENT_QUOTES), $notification_subject);
$notification_subject = str_replace('###FORUM###', wp_specialchars_decode($forum_name, ENT_QUOTES), $notification_subject);
// Prepare message-content.
$message_content = wpautop(stripslashes($post->text));
$message_content .= $this->asgarosforum->uploads->show_uploaded_files($post->id, $post->uploads);
// Prepare message-template.
$replacements = array(
'###AUTHOR###' => $author_name,
'###LINK###' => '<a href="'.$post_link.'">'.$post_link.'</a>',
'###TITLE###' => $topic_name,
'###FORUM###' => $forum_name,
'###CONTENT###' => $message_content,
);
$notification_message = $this->asgarosforum->options['mail_template_new_post_message'];
$notification_message = apply_filters('asgarosforum_filter_notify_topic_subscribers_message', $notification_message, $replacements);
// Prepare mailing-list.
$topic_subscribers = array();
// Get topic subscribers.
$topic_subscribers_query = array(
'fields' => array('id', 'user_email'),
'exclude' => array(get_current_user_id()),
'meta_key' => 'asgarosforum_subscription_topic',
'meta_value' => $topic->id,
'meta_compare' => '=',
);
$get_users_result = get_users($topic_subscribers_query);
if (!empty($get_users_result)) {
$topic_subscribers = array_merge($topic_subscribers, $get_users_result);
}
// Get global post subscribers.
$topic_subscribers_query = array(
'fields' => array('id', 'user_email'),
'exclude' => array(get_current_user_id()),
'meta_key' => 'asgarosforum_subscription_global_posts',
'meta_compare' => 'EXISTS',
);
$get_users_result = get_users($topic_subscribers_query);
if (!empty($get_users_result)) {
$topic_subscribers = array_merge($topic_subscribers, $get_users_result);
}
// Remove banned users from mailing list.
foreach ($topic_subscribers as $key => $subscriber) {
if ($this->asgarosforum->permissions->isBanned($subscriber->id)) {
unset($topic_subscribers[$key]);
}
}
// Remove non-moderators from mailing list.
if ($this->asgarosforum->category_access_level == 'moderator') {
foreach ($topic_subscribers as $key => $subscriber) {
if (!$this->asgarosforum->permissions->isModerator($subscriber->id)) {
unset($topic_subscribers[$key]);
}
}
}
// Generate mailing list.
foreach ($topic_subscribers as $subscriber) {
$this->add_to_mailing_list($subscriber->user_email);
}
// Filter mailing list based on usergroups configuration.
$this->mailing_list = AsgarosForumUserGroups::filterSubscriberMails($this->mailing_list, $forum->parent_id);
// Remove receivers which are inside the ignore-list.
if ($ignore_list !== false) {
$this->mailing_list = array_diff($this->mailing_list, $ignore_list);
}
// Apply custom filters before sending.
$this->mailing_list = apply_filters('asgarosforum_subscriber_mails_new_post', $this->mailing_list);
// Send notifications.
$this->send_notifications($this->mailing_list, $notification_subject, $notification_message, $replacements);
}
// TODO: This function generates tons of queries (especially the filtering). We need some improvements.
public function notify_about_new_topic($topic_id, $ignore_list = false) {
// Cancel if this functionality is not enabled.
if (!$this->asgarosforum->options['admin_subscriptions'] && !$this->asgarosforum->options['allow_subscriptions']) {
return false;
}
// Load required data.
$post = $this->asgarosforum->content->get_first_post($topic_id);
$topic = $this->asgarosforum->content->get_topic($post->parent_id);
$forum = $this->asgarosforum->content->get_forum($topic->parent_id);
// Get more data.
$topic_link = $this->asgarosforum->rewrite->get_link('topic', $topic_id);
$topic_name = esc_html(stripslashes($topic->name));
$forum_name = esc_html(stripslashes($forum->name));
$author_name = $this->asgarosforum->getUsername($post->author_id);
// Prepare subject.
$notification_subject = $this->asgarosforum->options['mail_template_new_topic_subject'];
$notification_subject = str_replace('###TITLE###', wp_specialchars_decode($topic_name, ENT_QUOTES), $notification_subject);
$notification_subject = str_replace('###FORUM###', wp_specialchars_decode($forum_name, ENT_QUOTES), $notification_subject);
// Prepare message-content.
$message_content = wpautop(stripslashes($post->text));
$message_content .= $this->asgarosforum->uploads->show_uploaded_files($post->id, $post->uploads);
// Prepare message-template.
$replacements = array(
'###AUTHOR###' => $author_name,
'###LINK###' => '<a href="'.$topic_link.'">'.$topic_link.'</a>',
'###TITLE###' => $topic_name,
'###FORUM###' => $forum_name,
'###CONTENT###' => $message_content,
);
$notification_message = $this->asgarosforum->options['mail_template_new_topic_message'];
$notification_message = apply_filters('asgarosforum_filter_notify_global_topic_subscribers_message', $notification_message, $replacements);
// Prepare mailing-list.
if ($this->asgarosforum->options['allow_subscriptions']) {
$forum_subscribers = array();
// Get forum subscribers.
$forum_subscribers_query = array(
'fields' => array('id', 'user_email'),
'exclude' => array(get_current_user_id()),
'meta_key' => 'asgarosforum_subscription_forum',
'meta_value' => $topic->parent_id,
'meta_compare' => '=',
);
$get_users_result = get_users($forum_subscribers_query);
if (!empty($get_users_result)) {
$forum_subscribers = array_merge($forum_subscribers, $get_users_result);
}
// Get global post subscribers.
$forum_subscribers_query = array(
'fields' => array('id', 'user_email'),
'exclude' => array(get_current_user_id()),
'meta_key' => 'asgarosforum_subscription_global_posts',
'meta_compare' => 'EXISTS',
);
$get_users_result = get_users($forum_subscribers_query);
if (!empty($get_users_result)) {
$forum_subscribers = array_merge($forum_subscribers, $get_users_result);
}
// Get global topic subscribers.
$forum_subscribers_query = array(
'fields' => array('id', 'user_email'),
'exclude' => array(get_current_user_id()),
'meta_key' => 'asgarosforum_subscription_global_topics',
'meta_compare' => 'EXISTS',
);
$get_users_result = get_users($forum_subscribers_query);
if (!empty($get_users_result)) {
$forum_subscribers = array_merge($forum_subscribers, $get_users_result);
}
// Remove banned users from mailing list.
foreach ($forum_subscribers as $key => $subscriber) {
if ($this->asgarosforum->permissions->isBanned($subscriber->id)) {
unset($forum_subscribers[$key]);
}
}
// Remove non-moderators from mailing list.
if ($this->asgarosforum->category_access_level == 'moderator') {
foreach ($forum_subscribers as $key => $subscriber) {
if (!$this->asgarosforum->permissions->isModerator($subscriber->id)) {
unset($forum_subscribers[$key]);
}
}
}
// Generate mailing list.
foreach ($forum_subscribers as $subscriber) {
$this->add_to_mailing_list($subscriber->user_email);
}
// Filter mailing list based on usergroups configuration.
$this->mailing_list = AsgarosForumUserGroups::filterSubscriberMails($this->mailing_list, $forum->parent_id);
}
// Add receivers of administrative notifications to the mailing list when the corresponding option is enabled.
if ($this->asgarosforum->options['admin_subscriptions']) {
// Get receivers of admin-notifications.
$receivers_admin_notifications = explode(',', $this->asgarosforum->options['receivers_admin_notifications']);
// If found some, add them to the mailing-list.
if (!empty($receivers_admin_notifications)) {
foreach ($receivers_admin_notifications as $mail) {
$this->add_to_mailing_list($mail);
}
}
}
// Remove receivers which are inside the ignore-list.
if ($ignore_list !== false) {
$this->mailing_list = array_diff($this->mailing_list, $ignore_list);
}
// Apply custom filters before sending.
$this->mailing_list = apply_filters('asgarosforum_subscriber_mails_new_topic', $this->mailing_list);
// Send notifications.
$this->send_notifications($this->mailing_list, $notification_subject, $notification_message, $replacements);
}
// Adds a mail to a mailing list. Ensures that this mail is not already included.
public function add_to_mailing_list($mail) {
if (!in_array($mail, $this->mailing_list)) {
$this->mailing_list[] = $mail;
}
}
// Apply all replacements in a message-template.
public function apply_replacements($mail, $message_template, $replacements = array()) {
// Replace username first.
$user = get_user_by('email', $mail);
// Only apply username-replacement when the user exists, other use a more general replacement.
if ($user) {
$message_template = str_replace('###USERNAME###', $user->display_name, $message_template);
} else {
$message_template = str_replace('###USERNAME###', __('User', 'asgaros-forum'), $message_template);
}
// Filter for adding custom user-replacements.
$replacements = apply_filters('asgarosforum_user_replacements', $replacements, $user);
// Apply other replacements now.
foreach ($replacements as $key => $value) {
$message_template = str_replace($key, $value, $message_template);
}
return $message_template;
}
public function send_notifications($receivers, $subject, $message_template, $replacements = array()) {
// Create list of mails in array-format.
$mails = array();
if (is_array($receivers)) {
$mails = $receivers;
} else {
$mails[] = $receivers;
}
// Prepare header and send mails.
add_filter('wp_mail_content_type', array($this, 'wpdocs_set_html_mail_content_type'));
$mail_headers = $this->get_mail_headers();
foreach ($mails as $mail) {
$message = $this->apply_replacements($mail, $message_template, $replacements);
wp_mail($mail, $subject, $message, $mail_headers);
}
remove_filter('wp_mail_content_type', array($this, 'wpdocs_set_html_mail_content_type'));
// Clear mailing-list after sending notifications.
$this->mailing_list = array();
}
public function wpdocs_set_html_mail_content_type() {
return 'text/html';
}
public function get_mail_headers() {
$sender_name = wp_specialchars_decode(esc_html(stripslashes($this->asgarosforum->options['notification_sender_name'])), ENT_QUOTES);
$sender_mail = wp_specialchars_decode(esc_html(stripslashes($this->asgarosforum->options['notification_sender_mail'])), ENT_QUOTES);
$header = array();
$header[] = 'From: '.$sender_name.' <'.$sender_mail.'>';
return $header;
}
public function show_subscription_overview_link() {
if ($this->asgarosforum->options['allow_subscriptions'] ) {
$subscription_link = $this->asgarosforum->get_link('subscriptions');
return array(
'menu_class' => 'subscriptions-link',
'menu_link_text' => esc_html__('Subscriptions', 'asgaros-forum'),
'menu_url' => $subscription_link,
'menu_login_status' => 1,
'menu_new_tab' => false,
);
}
}
// Shows all subscriptions of a user (topics/forums).
public function show_subscription_overview() {
$user_id = get_current_user_id();
// When site-owner notifications are enabled and we are the site owner, we need to print a notice.
if ($this->asgarosforum->options['admin_subscriptions']) {
// Get data of current user.
$current_user = wp_get_current_user();
$receivers_admin_notifications = explode(',', $this->asgarosforum->options['receivers_admin_notifications']);
// Check if the user is a receiver of administrative notifications.
if (!empty($receivers_admin_notifications)) {
if (in_array($current_user->user_email, $receivers_admin_notifications)) {
$notice = __('You will automatically get notified about new topics because you are a receiver of administrative notifications.', 'asgaros-forum');
$this->asgarosforum->render_notice($notice, false, false, true);
}
}
}
// Get the subscription level.
$subscription_level = $this->get_subscription_level();
// Render subscription settings.
echo '<div class="title-element title-element-dark">';
echo '<span class="title-element-icon fas fa-envelope"></span>';
echo esc_html__('Subscription Settings', 'asgaros-forum');
echo '</div>';
echo '<div id="subscriptions-panel" class="content-container">';
echo '<form method="post" action="'.esc_url($this->asgarosforum->get_link('subscriptions')).'">';
echo '<div class="action-panel">';
echo '<label class="action-panel-option">';
echo '<input type="radio" name="subscription_level" value="1" '.checked($subscription_level, 1, false).'>'.esc_html__('Individual Subscriptions', 'asgaros-forum');
echo '<span class="action-panel-description">';
esc_html_e('You get notified about activity in forums and topics you are subscribed to.', 'asgaros-forum');
echo '</span>';
echo '</label>';
echo '<label class="action-panel-option">';
echo '<input type="radio" name="subscription_level" value="2" '.checked($subscription_level, 2, false).'>'.esc_html__('New Topics', 'asgaros-forum');
echo '<span class="action-panel-description">';
esc_html_e('You get notified about all new topics.', 'asgaros-forum');
echo '</span>';
echo '</label>';
echo '<label class="action-panel-option">';
echo '<input type="radio" name="subscription_level" value="3" '.checked($subscription_level, 3, false).'>'.esc_html__('New Topics & Posts', 'asgaros-forum');
echo '<span class="action-panel-description">';
esc_html_e('You get notified about all new topics and posts.', 'asgaros-forum');
echo '</span>';
echo '</label>';
echo '</div>';
echo '</form>';
echo '</div>';
// Topic subscriptions list always available when we are not subscribed to everything.
$title = __('Notify about new posts in:', 'asgaros-forum');
$subscribedTopics = get_user_meta($user_id, 'asgarosforum_subscription_topic');
$all = ($subscription_level == 3) ? true : false;
if (!empty($subscribedTopics)) {
$subscribedTopics = $this->asgarosforum->getSpecificTopics($subscribedTopics);
$subscribedTopics = $this->filter_list($subscribedTopics, $user_id);
}
$this->render_subscriptions_list($title, $subscribedTopics, 'topic', $all);
$title = __('Notify about new topics in:', 'asgaros-forum');
$subscribedForums = get_user_meta($user_id, 'asgarosforum_subscription_forum');
$all = ($subscription_level > 1) ? true : false;
if (!empty($subscribedForums)) {
$subscribedForums = $this->asgarosforum->getSpecificForums($subscribedForums);
$subscribedForums = $this->filter_list($subscribedForums, $user_id);
}
$this->render_subscriptions_list($title, $subscribedForums, 'forum', $all);
}
public function set_subscription_level() {
if (isset($_POST['subscription_level'])) {
$user_id = get_current_user_id();
if ($_POST['subscription_level'] == 1) {
delete_user_meta($user_id, 'asgarosforum_subscription_global_posts');
delete_user_meta($user_id, 'asgarosforum_subscription_global_topics');
} else if ($_POST['subscription_level'] == 2) {
delete_user_meta($user_id, 'asgarosforum_subscription_global_posts');
update_user_meta($user_id, 'asgarosforum_subscription_global_topics', 1);
} else if ($_POST['subscription_level'] == 3) {
update_user_meta($user_id, 'asgarosforum_subscription_global_posts', 1);
delete_user_meta($user_id, 'asgarosforum_subscription_global_topics');
}
}
}
public function get_subscription_level() {
$user_id = get_current_user_id();
$subscription_level = 1;
$subscription_level_check = get_user_meta($user_id, 'asgarosforum_subscription_global_topics', true);
if (!empty($subscription_level_check)) {
$subscription_level = 2;
} else {
$subscription_level_check = get_user_meta($user_id, 'asgarosforum_subscription_global_posts', true);
if (!empty($subscription_level_check)) {
$subscription_level = 3;
}
}
return $subscription_level;
}
// Renders a list of a certain subscription type for the current user.
public function render_subscriptions_list($title, $data, $type, $all = false) {
echo '<div class="title-element">'.esc_html($title).'</div>';
echo '<div class="content-container">';
if ($all) {
if ($type == 'forum') {
$this->asgarosforum->render_notice(__('You get notified about <b>all</b> new topics.', 'asgaros-forum'));
} else if ($type == 'topic') {
$this->asgarosforum->render_notice(__('You get notified about <b>all</b> new posts.', 'asgaros-forum'));
}
} else if (empty($data)) {
$this->asgarosforum->render_notice(__('No subscriptions yet!', 'asgaros-forum'));
} else {
foreach ($data as $item) {
echo '<div class="content-element subscription">';
echo '<a href="'.esc_url($this->asgarosforum->get_link($type, absint($item->id))).'" title="'.esc_html($item->name).'">'.esc_html($item->name).'</a>';
echo '<a class="unsubscribe-link" href="'.esc_url($this->asgarosforum->get_link('subscriptions', false, array(
'unsubscribe_'.esc_attr($type) => $item->id,
'_wpnonce' => wp_create_nonce('asgaros_forum_unsubscribe_'.esc_attr($type)),
))).'">'.esc_html__('Unsubscribe', 'asgaros-forum').'</a>';
echo '</div>';
}
}
echo '</div>';
}
public function filter_list($data, $user_id) {
// Filter the list based on category.
foreach ($data as $key => $item) {
$canAccess = AsgarosForumUserGroups::canUserAccessForumCategory($user_id, $item->category_id);
if (!$canAccess) {
unset($data[$key]);
} else {
$canPermAccess = $this->asgarosforum->permissions->canUserAccessForumCategory($user_id, $item->category_id);
if (!$canPermAccess) {
unset($data[$key]);
}
}
}
return $data;
}
}