HEX
Server: Apache
System: Linux gains.linuxbigapps.com 4.18.0-553.74.1.lve.el8.x86_64 #1 SMP Tue Sep 9 14:25:24 UTC 2025 x86_64
User: mountains (1551)
PHP: 8.0.30
Disabled: allow_url_include, show_source, symlink, system, passthru, exec, popen, pclose, proc_open, proc_terminate,proc_get_status, proc_close, proc_nice, allow_url_fopen, shell-exec, shell_exec, fpassthru, base64_encodem, escapeshellcmd, escapeshellarg, crack_check,crack_closedict, crack_getlastmessage, crack_opendict, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, dl, escap, phpinfo
Upload Files
File: /home/mountains/public_html/wp-content/plugins/fluentform/app/Modules/Acl/Managers.php
<?php

namespace FluentForm\App\Modules\Acl;

use FluentValidator\Validator;
use FluentForm\Framework\Helpers\ArrayHelper;

class Managers
{
    /**
     * @var \FluentForm\Framework\Request\Request $request
     */
    protected $request;

    public function __construct()
    {
        $this->request = wpFluentForm('request');
    }

    public function get()
    {
        $limit = $this->request->get('per_page', 10);
        $page = $this->request->get('page', 1);

        $query = new \WP_User_Query([
            'meta_key'     => '_fluent_forms_has_role',
            'meta_value'   => 1,
            'meta_compare' => '=',
            'number'       => $limit,
            'paged'        => $page
        ]);

        $managers = [];

        foreach ($query->get_results() as $user) {
            $managers[] = [
                'id'          => $user->ID,
                'first_name'  => $user->first_name,
                'last_name'   => $user->last_name,
                'email'       => $user->user_email,
                'permissions' => Acl::getUserPermissions($user)
            ];
        }

        wp_send_json([
            'managers' => [
                'data'  => $managers,
                'total' => $query->get_total()
            ],
            'permissions' => Acl::getReadablePermissions()
        ], 200);
    }

    public function store()
    {
        $manager = $this->request->get('manager');

        $this->validate();

        $permissions = ArrayHelper::get($manager, 'permissions', []);

        $user = get_user_by('email', $manager['email']);

        Acl::attachPermissions($user, $permissions);

        update_user_meta($user->ID, '_fluent_forms_has_role', 1);

        wp_send_json([
            'message' => __('Manager has been saved.', 'fluentform')
        ], 200);
    }

    public function remove()
    {
        $user = get_user_by('ID', $this->request->get('id'));

        if (!$user) {
            return $this->sendError([
                'message' => __('Associate user could not be found', 'fluentcampaign-pro')
            ]);
        }

        Acl::attachPermissions($user, []);

        delete_user_meta($user->ID, '_fluent_forms_has_role');

        wp_send_json([
            'message' => __('Manager has been removed.', 'fluentform')
        ], 200);
    }

    private function validate()
    {
        $manager = $this->request->get('manager');

        $rules = [
            'permissions' => 'required',
            'email'       => 'required|email'
        ];

        $validator = Validator::make($manager, $rules);

        $errors = null;

        if ($validator->validate()->fails()) {
            $errors = $validator->errors();
        }

        if (!isset($errors['email'])) {
            $user = get_user_by('email', $manager['email']);

            if (!$user) {
                $errors['email'] = [
                    'no_user' => __('We could not found any user with this email.', 'fluentform')
                ];
            }
        }

        if (!isset($errors['permissions'])) {
            $message = $this->dependencyValidate($manager['permissions']);

            if ($message) {
                $errors['permissions'] = [
                    'dependency' => $message
                ];
            }
        }

        if ($errors) {
            $this->sendError([
                'errors' => $errors
            ]);
        }

        return true;
    }

    private function sendError($data, $code = 423)
    {
        wp_send_json($data, $code);
    }

    public function dependencyValidate($permissions)
    {
        $allPermissions = Acl::getReadablePermissions();

        foreach ($permissions as $permission) {
            $depends = ArrayHelper::get($allPermissions, $permission . '.depends', []);

            if ($depends && $more = array_values(array_diff($depends, $permissions))) {
                $message = $allPermissions[$permission]['title'] . ' requires permission: ';

                foreach ($more as $i => $p) {
                    $joiner = $i ? ', ' : '';
                    $message = $message . $joiner . $allPermissions[$p]['title'];
                }

                return $message;
            }
        }
    }
}