示例#1
0
        public void UpdateStatus(SqlDatabaseClient MySqlClient, ModerationTicketStatus NewStatus)
        {
            mStatus = NewStatus;

            MySqlClient.SetParameter("id", mId);
            MySqlClient.SetParameter("status", (int)NewStatus);
            MySqlClient.ExecuteNonQuery("UPDATE moderation_tickets SET status = @status WHERE id = @id LIMIT 1");
        }
示例#2
0
 public ModerationTicket(uint Id, uint Category, ModerationTicketStatus Status, uint ReportedUserId, uint ReporteeUserId,
     uint ModeratorUserId, uint RoomId, double Timestamp, string Message)
 {
     mId = Id;
     mCategoryId = Category;
     mStatus = Status;
     mReportedUserId = ReportedUserId;
     mReporteeUserId = ReporteeUserId;
     mModeratorUserId = ModeratorUserId;
     mRoomId = RoomId;
     mCreatedTimestamp = Timestamp;
     mTicketMessage = Message;
 }
示例#3
0
 public ModerationTicket(uint Id, uint Category, ModerationTicketStatus Status, uint ReportedUserId, uint ReporteeUserId,
                         uint ModeratorUserId, uint RoomId, double Timestamp, string Message)
 {
     mId               = Id;
     mCategoryId       = Category;
     mStatus           = Status;
     mReportedUserId   = ReportedUserId;
     mReporteeUserId   = ReporteeUserId;
     mModeratorUserId  = ModeratorUserId;
     mRoomId           = RoomId;
     mCreatedTimestamp = Timestamp;
     mTicketMessage    = Message;
 }
示例#4
0
        public void AssignTo(SqlDatabaseClient MySqlClient, uint ModeratorId)
        {
            if (mStatus > ModerationTicketStatus.Assigned)
            {
                return;
            }

            mModeratorUserId = ModeratorId;
            mStatus          = (ModeratorId > 0 ? ModerationTicketStatus.Assigned : ModerationTicketStatus.OpenTicket);

            MySqlClient.SetParameter("id", mId);
            MySqlClient.SetParameter("status", (ModeratorId > 0 ? (int)ModerationTicketStatus.Assigned : (int)ModerationTicketStatus.OpenTicket).ToString());
            MySqlClient.SetParameter("moderatorid", ModeratorId);
            MySqlClient.ExecuteNonQuery("UPDATE moderation_tickets SET status = @status, moderator_user_id = @moderatorid WHERE id = @id LIMIT 1");
        }
示例#5
0
        public void UpdateStatus(SqlDatabaseClient MySqlClient, ModerationTicketStatus NewStatus)
        {
            mStatus = NewStatus;

            MySqlClient.SetParameter("id", mId);
            MySqlClient.SetParameter("status", (int)NewStatus);
            MySqlClient.ExecuteNonQuery("UPDATE moderation_tickets SET status = @status WHERE id = @id LIMIT 1");
        }
示例#6
0
        public void AssignTo(SqlDatabaseClient MySqlClient, uint ModeratorId)
        {
            if (mStatus > ModerationTicketStatus.Assigned)
            {
                return;
            }

            mModeratorUserId = ModeratorId;
            mStatus = (ModeratorId > 0 ? ModerationTicketStatus.Assigned : ModerationTicketStatus.OpenTicket);

            MySqlClient.SetParameter("id", mId);
            MySqlClient.SetParameter("status", (ModeratorId > 0 ? (int)ModerationTicketStatus.Assigned : (int)ModerationTicketStatus.OpenTicket).ToString());
            MySqlClient.SetParameter("moderatorid", ModeratorId);
            MySqlClient.ExecuteNonQuery("UPDATE moderation_tickets SET status = @status, moderator_user_id = @moderatorid WHERE id = @id LIMIT 1");
        }
        private static void CloseTicket(Session Session, ClientMessage Message)
        {
            if (!Session.HasRight("moderation_tickets"))
            {
                return;
            }

            using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient())
            {
                int ResultCode = Message.PopWiredInt32();
                int Unknown1   = Message.PopWiredInt32();

                lock (mSyncRoot)
                {
                    ModerationTicket Ticket = GetTicket(Message.PopWiredUInt32());

                    if (Ticket == null || Ticket.Status != ModerationTicketStatus.Assigned ||
                        Ticket.ModeratorUserId != Session.CharacterId)
                    {
                        return;
                    }

                    ModerationTicketStatus ResultStatus = ModerationTicketStatus.Resolved;
                    Session TargetSession = SessionManager.GetSessionByCharacterId(Ticket.ReporteeUserId);

                    switch (ResultCode)
                    {
                    case 1:

                        ResultStatus = ModerationTicketStatus.ClosedInvalid;
                        break;

                    case 2:

                        ResultStatus = ModerationTicketStatus.ClosedAbusive;
                        break;
                    }

                    Ticket.UpdateStatus(MySqlClient, ResultStatus);

                    SendDataToAllModerators(ModerationTicketComposer.Compose(Ticket));

                    if (TargetSession != null && !Ticket.ModeratorResponded)
                    {
                        TargetSession.SendData(HelpCfhClosedResultComposer.Compose(ResultCode));
                    }

                    if (ResultStatus == ModerationTicketStatus.ClosedAbusive)
                    {
                        CharacterInfo TargetInfo = TargetSession == null?CharacterInfoLoader.GetCharacterInfo(MySqlClient,
                                                                                                              Ticket.ReporteeUserId) : TargetSession.CharacterInfo;

                        if (TargetInfo != null)
                        {
                            TargetInfo.ModerationTicketsCooldownSeconds = 600;
                            TargetInfo.ModerationTicketsAbusive++;

                            // Sync our new statistics manually if this will not happen by session closure
                            if (TargetSession == null)
                            {
                                TargetInfo.SynchronizeStatistics(MySqlClient);
                            }
                        }
                    }
                }
            }
        }