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);
}
}