# fluent-community/1.0.95/app/Http/Controllers/MembersController.php

FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS &amp; Online Courses, version 1.0.95. 143 lines.

- Page: https://pluginprobe.com/plugins/fluent-community/1.0.95/code/app/Http/Controllers/MembersController.php
- Raw: https://pluginprobe.com/plugins/fluent-community/1.0.95/raw/app/Http/Controllers/MembersController.php
- Modified: 2024-11-12T14:48:08+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/fluent-community/1.0.95/code/app/Http/Controllers/MembersController.php#L10-L20`.

```php
<?php

namespace FluentCommunity\App\Http\Controllers;

use FluentCommunity\App\Functions\Utility;
use FluentCommunity\App\Models\BaseSpace;
use FluentCommunity\App\Models\User;
use FluentCommunity\App\Models\XProfile;
use FluentCommunity\App\Services\Helper;
use FluentCommunity\App\Services\ProfileHelper;
use FluentCommunity\Framework\Http\Request\Request;

class MembersController extends Controller
{
    public function getMembers(Request $request)
    {
        $canAccess = Utility::canViewMembersPage();
        $mention = $request->getSafe('mention', 'sanitize_text_field');
        if($mention && !get_current_user_id()) {
            return $this->sendError([
                'message' => __('You must be logged in to mention someone', 'fluent-community'),
            ]);
        }

        $members = XProfile::select(ProfileHelper::getXProfilePublicFields())
            ->whereHas('user');

        if($mention) {
            $spaceSlug = $request->getSafe('space', 'sanitize_text_field');
            $space = null;
            if ($spaceSlug) {
                $space = BaseSpace::where('slug', $spaceSlug)->first();
                if (!$space || !Helper::isUserInSpace(get_current_user_id(), $space->id)) {
                    return $this->sendError([
                        'message' => __('Please join the space first to view the members', 'fluent-community'),
                        'permission_failed' => true
                    ]);
                }
            }
            if (!$space) {
                $spaceId = $request->getSafe('space_id', 'intval');
                if ($spaceId) {
                    $space = BaseSpace::find($spaceId);
                    if (!$space || !Helper::isUserInSpace(get_current_user_id(), $space->id)) {
                        return $this->sendError([
                            'message' => 'Space not found',
                            'permission_failed' => true
                        ]);
                    }
                }
            }

            if ($space) {
                $members = $members->whereHas('spaces', function ($query) use ($space) {
                    $query->where('space_id', $space->id);
                });
            }

            $members = $members->where('status', 'active')
                ->where('user_id', '!=', get_current_user_id())
                ->mentionBy($mention)
                ->limit(10)
                ->get();

            return [
                'members' => [
                    'data' => $members
                ]
            ];
        }

        if(!$canAccess) {
            return $this->sendError([
                'message' => __('You do not have permission to view members', 'fluent-community'),
                'permission_failed' => true
            ]);
        }

        $shortBy = $request->getSafe('sort_by', 'sanitize_text_field', 'last_activity');

        if ($shortBy == 'last_activity') {
            $members = $members->orderBy('last_activity', 'DESC');
        } else {
            $members = $members->orderBy($shortBy, 'ASC');
        }

        $members = $members
            ->searchBy($request->getSafe('search', 'sanitize_text_field'))
            ->orderBy('last_activity', 'DESC');

        if(Helper::isModerator()) {
            $statuses = $request->getSafe('status', 'sanitize_text_field', 'active');
            if ($statuses == 'in_active') {
                $statuses = ['pending', 'blocked'];
            } else {
                $statuses = ['active'];
            }
            $members = $members->whereIn('status', $statuses);
        } else {
            $members = $members->where('status', 'active');
        }

        do_action_ref_array('fluent_community/members_query_ref', [&$members, $request->all()]);

        $members = $members->paginate();

        return [
            'members' => $members
        ];
    }

    public function patchMember(Request $request, $userId)
    {
        $currentUser = $this->getUser(true);
        $currentUser->verifyCommunityPermission('delete_any_feed');

        $newStatus = $request->getSafe('status', 'sanitize_text_field');

        $wpUser = User::findOrFail($userId);

        if ($wpUser->isCommunityAdmin() && $newStatus != 'active') {
            return $this->sendError([
                'message' => 'Sorry, you can not change status of another admin. Remove the user from moderators'
            ]);
        }

        $xProfile = XProfile::findOrFail($userId);

        $newStatus = $request->getSafe('status', 'sanitize_text_field');
        $validStatuses = ['active', 'pending', 'blocked'];

        if (in_array($newStatus, $validStatuses)) {
            $xProfile->status = $newStatus;
            $xProfile->save();
        }

        return [
            'message' => __('Member status has been updated', 'fluent-community'),
            'member'  => $xProfile
        ];
    }
}

```
