function rcl_can_user_edit_post_group($post_id) { global $user_ID; $group_id = rcl_get_group_id_by_post($post_id); if (!$group_id) { return false; } if (current_user_can('edit_post', $post_id)) { return true; } $rcl_group = rcl_get_group($group_id); if ($rcl_group->admin_id == $user_ID) { return true; } if (rcl_get_group_user_status($user_ID, $group_id) == 'moderator') { return true; } return false; }
function rcl_apply_group_request() { global $rcl_group, $user_ID; $user_id = intval($_POST['user_id']); $apply = intval($_POST['apply']); $group_id = intval($_POST['group_id']); $rcl_group = rcl_get_group($group_id); if ($rcl_group->admin_id != $user_ID) { return false; } $requests = rcl_get_group_option($group_id, 'requests_group_access'); $key = array_search($user_id, $requests); if (!$requests || false === $key) { return false; } unset($requests[$key]); if ($apply) { $subject = __('Request access to the group approved!', 'wp-recall'); $textmail = ' <h3>Добро пожаловать в группу "' . $rcl_group->name . '"!</h3> <p>Поздравляем, ваш запрос на доступ к приватной группе на сайте "' . get_bloginfo('name') . '" был одобрен.</p> <p>Теперь вы можете принимать участие в жизни этой группы как полноценный ее участник.</p> <p>Вы можете перейти в группу прямо сейчас, перейдя по ссылке:</p> <p>' . get_term_link((int) $group_id, 'groups') . '</p>'; rcl_group_add_user($user_id, $group_id); $log['result'] = '<span class="success">' . __('The request was accepted', 'wp-recall') . '</span>'; } else { $log['result'] = '<span class="error">' . __('Request rejected', 'wp-recall') . '</span>'; $subject = __('The request to access the group rejected.', 'wp-recall'); $textmail = ' <p>Сожалеем, но ваш запрос на доступ к приватной группе "' . $rcl_group->name . '" на сайте "' . get_bloginfo('name') . '" был отклонен ее админом.</p>'; } $user_email = get_the_author_meta('user_email', $user_id); rcl_mail($user_email, $subject, $textmail); rcl_update_group_option($group_id, 'requests_group_access', $requests); $log['user_id'] = $user_id; echo json_encode($log); exit; }
function rcl_edit_group_pre_get_posts($query) { global $wpdb, $user_ID, $post, $rcl_group; if (!$query->is_main_query()) { return $query; } /*if($query->is_search){ }*/ if ($query->is_tax && isset($query->query['groups'])) { $rcl_group = rcl_group_init(); } if ($query->is_single && $query->query['post_type'] == 'post-group' && $query->query['name']) { if (!$post) { $post_id = $wpdb->get_var($wpdb->prepare("SELECT ID FROM " . $wpdb->prefix . "posts WHERE post_name='%s'", $query->query['name'])); } else { $post_id = $post->ID; } $cur_terms = get_the_terms($post_id, 'groups'); foreach ((array) $cur_terms as $cur_term) { if ($cur_term->parent != 0) { continue; } $term_id = $cur_term->term_id; break; } $rcl_group = rcl_get_group($term_id); } if ($rcl_group) { if (isset($_GET['group-tag']) && $_GET['group-tag'] != '') { if (!$_GET['search-p']) { $query->set('groups', $_GET['group-tag']); return $query; } else { wp_redirect(get_term_link((int) $_GET['search-p'], 'groups') . '/?group-tag=' . $_GET['group-tag']); exit; } } if (isset($_GET['group-page']) && $_GET['group-page'] != '') { $query->set('posts_per_page', 1); } if ($rcl_group->admin_id == $user_ID) { return $query; } if (!$rcl_group->current_user && $user_ID) { $in_group = rcl_get_group_user_status($user_ID, $rcl_group->term_id); } else { $in_group = $rcl_group->current_user; } if ($rcl_group->group_status == 'closed') { if (!$in_group || $in_group == 'banned') { if ($query->is_single) { global $comments_array; add_filter('the_content', 'rcl_close_group_post_content'); add_filter('the_content', 'rcl_get_link_group_tag', 80); add_filter('the_content', 'rcl_add_namegroup', 80); add_filter('comments_array', 'rcl_close_group_comments_content'); add_filter('comments_open', 'rcl_close_group_comments', 10); remove_filter('rating_block_content', 'rcl_add_buttons_rating', 10); } else { add_filter('the_content', 'rcl_close_group_post_content'); } } else { } } else { if ($in_group == 'banned') { if ($query->is_single) { add_filter('comments_open', 'rcl_close_group_comments', 10); remove_filter('rating_block_content', 'rcl_add_buttons_rating', 10); } } } } return $query; }