QList<ServerInfo_Warning> Servatrice_DatabaseInterface::getUserWarnHistory(const QString userName) { QList<ServerInfo_Warning> results; ServerInfo_Warning warnDetails; if (!checkSql()) return results; int userID = getUserIdInDB(userName); QSqlQuery *query = prepareQuery("SELECT user_name, mod_name, reason, time_of FROM {prefix}_warnings WHERE user_id = :user_id"); query->bindValue(":user_id", userID); if (!execSqlQuery(query)) { qDebug("Failed to collect warning history information: SQL Error"); return results; } while (query->next()){ warnDetails.set_user_name(QString(query->value(0).toString()).toStdString()); warnDetails.set_admin_name(QString(query->value(1).toString()).toStdString()); warnDetails.set_reason(QString(query->value(2).toString()).toStdString()); warnDetails.set_time_of(QString(query->value(3).toString()).toStdString()); results << warnDetails; } return results; }
bool Servatrice_DatabaseInterface::isInIgnoreList(const QString &whoseList, const QString &who) { if (server->getAuthenticationMethod() == Servatrice::AuthenticationNone) return false; if (!checkSql()) return false; int id1 = getUserIdInDB(whoseList); int id2 = getUserIdInDB(who); QSqlQuery *query = prepareQuery("select 1 from {prefix}_ignorelist where id_user1 = :id_user1 and id_user2 = :id_user2"); query->bindValue(":id_user1", id1); query->bindValue(":id_user2", id2); if (!execSqlQuery(query)) return false; return query->next(); }
bool Servatrice_DatabaseInterface::isInBuddyList(const QString &whoseList, const QString &who) { if (server->getAuthenticationMethod() == Servatrice::AuthenticationNone) return false; if (!checkSql()) return false; int id1 = getUserIdInDB(whoseList); int id2 = getUserIdInDB(who); QSqlQuery query(sqlDatabase); query.prepare("select 1 from " + server->getDbPrefix() + "_buddylist where id_user1 = :id_user1 and id_user2 = :id_user2"); query.bindValue(":id_user1", id1); query.bindValue(":id_user2", id2); if (!execSqlQuery(query)) return false; return query.next(); }
bool Servatrice_DatabaseInterface::addWarning(const QString userName, const QString adminName, const QString warningReason, const QString clientID) { if (!checkSql()) return false; int userID = getUserIdInDB(userName); QSqlQuery *query = prepareQuery("insert into {prefix}_warnings (user_id,user_name,mod_name,reason,time_of,clientid) values (:user_id,:user_name,:mod_name,:warn_reason,NOW(),:client_id)"); query->bindValue(":user_id", userID); query->bindValue(":user_name", userName); query->bindValue(":mod_name", adminName); query->bindValue(":warn_reason", warningReason); query->bindValue(":client_id", clientID); if (!execSqlQuery(query)) { qDebug("Failed to collect create warning history information: SQL Error"); return false; } return true; }
void Servatrice_DatabaseInterface::storeGameInformation(const QString &roomName, const QStringList &roomGameTypes, const ServerInfo_Game &gameInfo, const QSet<QString> &allPlayersEver, const QSet<QString> &allSpectatorsEver, const QList<GameReplay *> &replayList) { if (!checkSql()) return; QVariantList gameIds1, playerNames, gameIds2, userIds, replayNames; QSetIterator<QString> playerIterator(allPlayersEver); while (playerIterator.hasNext()) { gameIds1.append(gameInfo.game_id()); const QString &playerName = playerIterator.next(); playerNames.append(playerName); } QSet<QString> allUsersInGame = allPlayersEver + allSpectatorsEver; QSetIterator<QString> allUsersIterator(allUsersInGame); while (allUsersIterator.hasNext()) { int id = getUserIdInDB(allUsersIterator.next()); if (id == -1) continue; gameIds2.append(gameInfo.game_id()); userIds.append(id); replayNames.append(QString::fromStdString(gameInfo.description())); } QVariantList replayIds, replayGameIds, replayDurations, replayBlobs; for (int i = 0; i < replayList.size(); ++i) { QByteArray blob; const unsigned int size = replayList[i]->ByteSize(); blob.resize(size); replayList[i]->SerializeToArray(blob.data(), size); replayIds.append(QVariant((qulonglong) replayList[i]->replay_id())); replayGameIds.append(gameInfo.game_id()); replayDurations.append(replayList[i]->duration_seconds()); replayBlobs.append(blob); } { QSqlQuery query(sqlDatabase); query.prepare("update " + server->getDbPrefix() + "_games set room_name=:room_name, descr=:descr, creator_name=:creator_name, password=:password, game_types=:game_types, player_count=:player_count, time_finished=now() where id=:id_game"); query.bindValue(":room_name", roomName); query.bindValue(":id_game", gameInfo.game_id()); query.bindValue(":descr", QString::fromStdString(gameInfo.description())); query.bindValue(":creator_name", QString::fromStdString(gameInfo.creator_info().name())); query.bindValue(":password", gameInfo.with_password() ? 1 : 0); query.bindValue(":game_types", roomGameTypes.isEmpty() ? QString("") : roomGameTypes.join(", ")); query.bindValue(":player_count", gameInfo.max_players()); if (!execSqlQuery(query)) return; } { QSqlQuery query(sqlDatabase); query.prepare("insert into " + server->getDbPrefix() + "_games_players (id_game, player_name) values (:id_game, :player_name)"); query.bindValue(":id_game", gameIds1); query.bindValue(":player_name", playerNames); query.execBatch(); } { QSqlQuery query(sqlDatabase); query.prepare("update " + server->getDbPrefix() + "_replays set id_game=:id_game, duration=:duration, replay=:replay where id=:id_replay"); query.bindValue(":id_replay", replayIds); query.bindValue(":id_game", replayGameIds); query.bindValue(":duration", replayDurations); query.bindValue(":replay", replayBlobs); query.execBatch(); } { QSqlQuery query(sqlDatabase); query.prepare("insert into " + server->getDbPrefix() + "_replays_access (id_game, id_player, replay_name) values (:id_game, :id_player, :replay_name)"); query.bindValue(":id_game", gameIds2); query.bindValue(":id_player", userIds); query.bindValue(":replay_name", replayNames); query.execBatch(); } }