yf_manage_users admin module

Fileplugins/user/admin_modules/yf_manage_users.class.php
Useadmin URL ?object=manage_users

Public properties

PropertyDefaultDescription
None declared in this class.

Constants

table'user'

Public methods 8

active

public function active()
    public function active()
    {
        if ( ! empty($_GET['id'])) {
            $user_info = user(($_GET['id'] ?? null));
        }
        if ( ! empty($user_info)) {
            db()->update(self::table, ['active' => (int) ! $user_info['active']], $user_info['id']);
        }
        cache_del(self::table);
        if (is_ajax()) {
            no_graphics(true);
            echo $user_info['active'] ? 0 : 1;
        } else {
            return js_redirect(url('/@object'));
        }
    }

add

public function add()
    public function add()
    {
        $a = $_POST;
        $a['redirect_link'] = url('/@object');
        return form($a, ['autocomplete' => 'off'])
            ->validate([
                'login' => 'trim|required|alpha_numeric|is_unique[user.login]',
                'email' => 'trim|required|valid_email|is_unique[user.email]',
            ])
            ->db_insert_if_ok(self::table, ['login', 'email', 'name', 'active'], ['add_date' => time()])
            ->on_after_update(function () {
                common()->admin_wall_add(['user added: ' . ($_POST['login'] ?? null) . '', db()->insert_id()]);
            })
            ->login()
            ->email()
            ->text('name')
            ->active_box()
            ->save_and_back();
    }

delete

public function delete()

Delete all user account information.

    public function delete()
    {
        $user_id = (int) (($_GET['id'] ?? null));
        if ( ! $user_id) {
            return false;
        }
        $hook_func_name = '_on_delete_account';

        $_user_modules = module('user_modules')->_get_modules();
        $_user_modules_methods = module('user_modules')->_get_methods(['private' => 1]);
        $_modules_where_exists = [];
        foreach ((array) $_user_modules_methods as $module_name => $methods) {
            if ( ! in_array($hook_func_name, $methods)) {
                continue;
            }
            $_modules_where_exists[$module_name] = $module_name;
        }
        foreach ((array) $_modules_where_exists as $_module_name) {
            $m = module($_module_name);
            if (method_exists($m, $hook_func_name)) {
                $result = $m->$hook_func_name(['user_id' => $user_id]);
            }
        }

        $user_info = user($user_id);
        $domains = main()->get_data('domains');
        $user_folder_name = null;
        $user_folder_path = null;
        if ($user_info['login'] && $user_info['domain']) {
            $user_folder_name = $user_info['login'] . '.' . $domains[$user_info['domain']];
        }
        if ($user_folder_name) {
            $user_folder_path = INCLUDE_PATH . 'users/' . $user_folder_name . '/';
        }
        if ($user_folder_path && file_exists($user_folder_path)) {
            _class('dir')->delete_dir($user_folder_path, true);
        }
        db()->query('DELETE FROM ' . db(self::table) . ' WHERE id=' . $user_id);
        return js_redirect(($_SERVER['HTTP_REFERER'] ?? null));
    }

edit

public function edit()
    public function edit()
    {
        $func = null;
        $id = (int) (($_GET['id'] ?? null));
        if ( ! $id) {
            return _e('No id');
        }
        $a = db()->query_fetch('SELECT * FROM ' . db(self::table) . ' WHERE id=' . (int) (($_GET['id'] ?? null)));
        $a['back_link'] = url('/@object');
        $a['redirect_link'] = url('/@object');
        return form($a, ['autocomplete' => 'off'])
            ->validate([
                'login' => 'trim|alpha_numeric|is_unique_without[user.login.' . $id . ']',
                'email' => 'trim|required|valid_email|is_unique_without[user.email.' . $id . ']',
            ])
            ->db_update_if_ok(self::table, ['login', 'email', 'name', 'active', 'birthday'], 'id=' . $id)
            ->on_after_update(function () use ($id) {
                common()->admin_wall_add(['user updated: ' . ($_POST['login'] ?? null) . '', $id]);
            })
            ->login()
            ->email()
            ->text('name')
            ->active_box()
            ->row_start()
                ->save_and_back()
                ->link('log auth', './?object=log_user_auth&action=show_for_admin&id=' . $a['id'])
                ->link('login as', './?object=' . $_GET['object'] . '&action=login_as&id=' . $a['id'])
            ->row_end();
    }

filter_save

public function filter_save()
    public function filter_save()
    {
        return _class('admin_methods')->filter_save();
    }

login_as

public function login_as()
    public function login_as()
    {
        $id = (int) (($_GET['id'] ?? null));
        if ( ! $id) {
            return _e('Wrong id');
        }
        return _class('auth_user', 'classes/auth/')->login_as($id);
    }

show

public function show()
    public function show()
    {
        return table('SELECT * FROM ' . db(self::table), [
                'filter' => true,
                'filter_params' => [
                    'login' => 'like',
                    'email' => 'like',
                    'name' => 'like',
                ],
            ])
            ->text('id')
            ->text('login')
            ->text('email')
            ->text('name')
            ->btn_edit(['no_ajax' => 1])
            ->btn_delete()
            ->btn_active()
            ->btn('log_auth', './?object=log_user_auth&action=show_for_user&id=%d')
            ->btn('login', './?object=' . ($_GET['object'] ?? null) . '&action=login_as&id=%d')
            ->footer_add()
            ->footer_link('Failed auth log', './?object=log_user_auth_fails');
        // TODO: editing
    }

Methods starting with _ hooks and helpers; not routable as page actions

_show_filter

public function _show_filter()
    public function _show_filter()
    {
        if ( ! in_array(($_GET['action'] ?? null), ['show'])) {
            return false;
        }
        $order_fields = [];
        foreach (explode('|', 'name|login|email|add_date|last_login|num_logins|active') as $f) {
            $order_fields[$f] = $f;
        }
        $r = null;
        return form($r, [
                'filter' => true,
            ])
            ->number('id')
            ->text('name')
            ->login('login')
            ->email('email')
            ->select_box('group', main()->get_data('user_groups'), ['show_text' => 1])
            ->select_box('order_by', $order_fields, ['show_text' => 1])
            ->order_box()
            ->save_and_clear();
    }