HEX
Server: Apache/2.4.59 (Debian)
System: Linux keymana 4.19.0-21-cloud-amd64 #1 SMP Debian 4.19.249-2 (2022-06-30) x86_64
User: lijunjie (1003)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/uileague/wp-content/themes/uileague/helper/invite_referee.php
<?php
class InviteRefereeHelper
{
    public static $pb_table = "orm_invite_referee";
    public static $pb_table_position = "orm_referee_position";

    public static function getPositionList()
    {
        global $wpdb;
        $rows = $wpdb->get_results("select * from `" . self::$pb_table_position . "`");
        return $rows;
    }

    public static function get_position_by_id($id)
    {
        if (empty($id)) return null;
        global $wpdb;
        $row = $wpdb->get_row($wpdb->prepare("select * from `" . self::$pb_table_position . "` where `deleted` is null AND id = %d", $id));
        return $row;
    }

    public static function getList($args)
    {
        global $wpdb;
        $keyword = htmlspecialchars($args['keyword']);
        $keyword = empty($keyword) ? '' : trim($keyword);
        $page = intval($args['cpage']) > 1 ? intval($args['cpage']) : 1;
        $all = intval($args['pageLimit']) == -1;
        $pageLimit = intval($args['pageLimit']) > 1 ? intval($args['pageLimit']) : 10;
        $filterTmUid = trim($args['tm_uid']);
        $filterMatchId = trim($args['match_id']);
        $filterSql = "";
        $orderby = "id desc";
        if ($filterTmUid != "" && is_numeric($filterTmUid)) {
            $filterSql .= $wpdb->prepare(" AND `tm_uid` = %d ", $filterTmUid);
        }
        if ($filterMatchId != "" && is_numeric($filterMatchId)) {
            $filterSql .= $wpdb->prepare(" AND `match_id` = %d ", $filterMatchId);
            $orderby = "id asc";
        }
        $table = self::$pb_table;
        $total = intval($wpdb->get_var("SELECT count(id) FROM `{$table}` WHERE `deleted` is null AND (`referee_name` Like '%" . $keyword . "%' ) " . $filterSql));
        if ($all) {
            $results = $wpdb->get_results("SELECT * FROM `{$table}` WHERE `deleted` is null AND (`referee_name` Like '%" . $keyword . "%' ) " . $filterSql . " order by {$orderby} ");
        } else {
            $results = $wpdb->get_results("SELECT * FROM `{$table}` WHERE `deleted` is null AND (`referee_name` Like '%" . $keyword . "%' ) " . $filterSql . " order by {$orderby} " . $wpdb->prepare(" LIMIT %d,%d ", ($page - 1) * $pageLimit, $pageLimit));
        }
        $dataList = array_map(function ($item) {
            return InviteRefereeHelper::map_item($item);
        }, $results);
        $result = new stdClass();
        $result->rc = ApiStatus::SUCCESS[0];
        $result->msg = ApiStatus::SUCCESS[1];
        $result->currentPage = $page;
        $result->total = $total;
        $result->data = $dataList;
        return $result;
    }

    public static function get_by_id($id)
    {
        if (empty($id)) return null;
        global $wpdb;
        $row = $wpdb->get_row($wpdb->prepare("select * from `" . self::$pb_table . "` where `deleted` is null AND id = %d", $id));
        return self::map_item($row);
    }

    public static function invite($args, $uid = 0, $wpuid = 0)
    {
        global $wpdb;
        $tm_uid = intval($args['tm_uid']);
        $match_id = intval($args['match_id']);
        $referee_name = trim($args['referee_name']);
        $referee_position = intval($args['referee_position']);
        $result = new stdClass();
        if (empty($referee_name)) {
            $result->rc = ApiStatus::ERR_PARAMS[0];
            $result->msg = ApiStatus::ERR_PARAMS[1];
        } else {
            $row = InviteRefereeHelper::get_by_match_id($match_id, $referee_name);
            if ($row == null) {
                $role = RoleHelper::get_by_key("referee");
                $args['role'] = empty($role) ? 0 : $role->id;
                $args['user_name'] = $referee_name;
                $args['user_login'] = "R-{$match_id}-" . time();
                $args['user_pass'] = "";
                $args['status'] = 1;
                $addReferee = UserHelper::add($args, $uid, $wpuid);
                if ($addReferee->rc == ApiStatus::SUCCESS[0]) {
                    $new_data = array(
                        'uid' => $addReferee->data,
                        'tm_uid' => $tm_uid,
                        'match_id' => $match_id,
                        'referee_name' => $referee_name,
                        'referee_position' => $referee_position,
                        'created' => current_time('mysql'),
                        'updated' => current_time('mysql'),
                    );
                    $res = $wpdb->insert(
                        self::$pb_table,
                        $new_data,
                        array('%d', '%d', '%d', '%s', '%d', '%s', '%s')
                    );
                    if ($res === false) {
                        $result->rc = ApiStatus::ERR_INVITE_REFEREE_ADD[0];
                        $result->msg = ApiStatus::ERR_INVITE_REFEREE_ADD[1];
                    } else {
                        $insert_id = $wpdb->insert_id;
                        Logger::log("邀請了球證", self::$pb_table, $insert_id, null, $new_data, $uid, $wpuid);
                        uileague_sock_push(array(
                            'type' =>  WebSocketHelper::TYPE_GET_REFEREES,
                        ));
                        $result->rc = ApiStatus::SUCCESS[0];
                        $result->msg = ApiStatus::SUCCESS[1];
                        $result->data = InviteRefereeHelper::get_by_id($insert_id);
                    }
                } else {
                    $result = $addReferee;
                }
            } else {
                $result->rc = ApiStatus::ERR_INVITE_REFEREE_EXISTS[0];
                $result->msg = ApiStatus::ERR_INVITE_REFEREE_EXISTS[1];
            }
        }
        return $result;
    }

    public static function update($args, $uid = 0, $wpuid = 0)
    {
        global $wpdb;
        $id = intval($args['id']);
        $referee_name = trim($args['referee_name']);
        $referee_position = intval($args['referee_position']);
        $result = new stdClass();
        if (empty($referee_name)) {
            $result->rc = ApiStatus::ERR_PARAMS[0];
            $result->msg = ApiStatus::ERR_PARAMS[1];
        } else {
            $row = InviteRefereeHelper::get_by_id($id);
            if ($row != null) {
                if (!InviteRefereeHelper::invite_exists($row->match_id, $referee_name, $id)) {
                    $u = UserHelper::get_by_id($row->uid);
                    if ($u == null) {
                        $role = RoleHelper::get_by_key("referee");
                        $args['role'] = empty($role) ? 0 : $role->id;
                        $args['user_name'] = $referee_name;
                        $args['user_login'] = "R-{$row->match_id}-" . time();
                        $args['user_pass'] = "";
                        $args['status'] = 1;
                        $addReferee = UserHelper::add($args, $uid, $wpuid);
                        $user_id = ($addReferee->rc == ApiStatus::SUCCESS[0]) ? $addReferee->data : 0;
                    } else {
                        $args['id'] = $u->id;
                        $args['role'] = $u->role;
                        $args['user_name'] = $referee_name;
                        $args['user_login'] = $u->user_login;
                        $args['user_pass'] = "";
                        $args['status'] = 1;
                        $addReferee = UserHelper::update($args, $uid, $wpuid);
                        $user_id = $u->id;
                    }
                    if ($addReferee->rc == ApiStatus::SUCCESS[0]) {
                        $new_data = array(
                            'uid' => $user_id,
                            'referee_name' => $referee_name,
                            'referee_position' => $referee_position,
                            'created' => current_time('mysql'),
                            'updated' => current_time('mysql'),
                        );
                        $res = $wpdb->update(
                            self::$pb_table,
                            $new_data,
                            array('id' => $id),
                            array('%d', '%s', '%d', '%s', '%s')
                        );
                        if ($res === false) {
                            $result->rc = ApiStatus::ERR_INVITE_REFEREE_UPDATE[0];
                            $result->msg = ApiStatus::ERR_INVITE_REFEREE_UPDATE[1];
                        } else {
                            Logger::log("更新了球證", self::$pb_table, $id, $row, $new_data, $uid, $wpuid);
                            uileague_sock_push(array(
                                'type' =>  WebSocketHelper::TYPE_GET_REFEREES,
                            ));
                            $result->rc = ApiStatus::SUCCESS[0];
                            $result->msg = ApiStatus::SUCCESS[1];
                            $result->data = InviteRefereeHelper::get_by_id($id);
                        }
                    } else {
                        $result = $addReferee;
                    }
                } else {
                    $result->rc = ApiStatus::ERR_INVITE_REFEREE_EXISTS[0];
                    $result->msg = ApiStatus::ERR_INVITE_REFEREE_EXISTS[1];
                }
            } else {
                $result->rc = ApiStatus::ERR_INVITE_REFEREE_NONE[0];
                $result->msg = ApiStatus::ERR_INVITE_REFEREE_NONE[1];
            }
        }
        return $result;
    }

    public static function delete($args, $uid = 0, $wpuid = 0)
    {
        $id = intval($args['id']);
        $row = InviteRefereeHelper::get_by_id($id);

        $result = new stdClass();

        if ($row == null) {
            $result->rc = ApiStatus::ERR_INVITE_REFEREE_NONE[0];
            $result->msg = ApiStatus::ERR_INVITE_REFEREE_NONE[1];
        } else {
            global $wpdb;
            $res = $wpdb->update(
                self::$pb_table,
                array('deleted' => current_time('mysql')),
                array('id' => $id),
                array('%s'),
                array('%d')
            );
            if ($res === false) {
                $result->rc = ApiStatus::ERR_INVITE_REFEREE_DELETE[0];
                $result->msg = ApiStatus::ERR_INVITE_REFEREE_DELETE[1];
            } else {
                UserHelper::delete(array('id' => $row->uid));
                Logger::log("刪除了球證", self::$pb_table, $id, $row, null, $uid, $wpuid);
                uileague_sock_push(array(
                    'type' =>  WebSocketHelper::TYPE_GET_REFEREES,
                ));
                $result->rc = ApiStatus::SUCCESS[0];
                $result->msg = ApiStatus::SUCCESS[1];
            }
        }
        return $result;
    }


    public static function get_by_match_id($match_id, $referee_name)
    {
        if (empty($match_id)) return null;
        global $wpdb;
        $row = $wpdb->get_row($wpdb->prepare("select * from `" . self::$pb_table . "` where `deleted` is null AND match_id = %d AND referee_name = %s", $match_id, $referee_name));
        return self::map_item($row);
    }

    public static function get_by_uid($uid)
    {
        if (empty($uid)) return null;
        global $wpdb;
        $row = $wpdb->get_row($wpdb->prepare("select * from `" . self::$pb_table . "` where `deleted` is null AND uid = %d", $uid));
        return self::map_item($row);
    }

    public static function map_item($row)
    {
        if ($row == null) return null;
        $row->qrcode = encrypt($row->id);
        $row->position_obj = InviteRefereeHelper::get_position_by_id($row->referee_position);
        $row->show_qrcode = ($row->position_obj != null && $row->position_obj->position_name == "R") ? "1" : "0";
        $row->match_obj = MatchesHelper::get_by_id($row->match_id);
        return $row;
    }

    public static function invite_exists($match_id, $referee_name, $excludeId = 0)
    {
        global $wpdb;
        if ($excludeId > 0) {
            $var = $wpdb->get_var($wpdb->prepare("select id from `" . self::$pb_table . "` where `deleted` is null AND match_id = %d and referee_name = %s and id <> %d", $match_id, $referee_name, $excludeId));
        } else {
            $var = $wpdb->get_var($wpdb->prepare("select id from `" . self::$pb_table . "` where `deleted` is null AND match_id = %d and referee_name = %s", $match_id, $referee_name));
        }
        return !empty($var);
    }
}