public BugReportDetailPage(int reportID, RespShowReport report)
 {
     InitializeComponent();
     m_reportID     = reportID;
     m_viewModel    = new ViewModel(report);
     BindingContext = m_viewModel;
 }
 public ViewModel(RespShowReport report)
 {
     title    = report.shortdesc;
     desc     = report.longdesc;
     reporter = report.reporterID;
     reported = report.repUserID;
 }
 public ViewModel(RespShowReport report)
 {
     title         = report.shortdesc;
     desc          = report.longdesc;
     reporter      = report.reporterID;
     reportedTitle = report.repPostingTitle;
     reportedID    = report.repPostingID;
 }
示例#4
0
            public RespShowReport SendShowReport(int reportid)
            {
                RespShowReport result = null;

                m_reptPP.DoRequest <ReqShowReport, RespShowReport>("ReqShowReport",
                                                                   (send) =>
                {
                    send.SetParameter(new ReqShowReport {
                        reportID = reportid
                    });
                },
                                                                   (recv) =>
                {
                    result = recv.param;
                });

                return(result);
            }
示例#5
0
        private async void Handle_ItemTapped(object sender, ItemTappedEventArgs e)
        {
            if (e.Item != null)
            {
                var data = postList.SelectedItem as ViewModel.Item;
                postList.SelectedItem = null;

                RespShowReport result = null;
                await App.RunLongTask(() =>
                {
                    result = App.instance.core.report.ShowReport(data.reportid);
                });

                if (result == null)
                {
                }
                else
                {
                    switch (result.type)
                    {
                    case ReqFileReport.Type.Bug:
                        await Navigation.PushAsync(new BugReportDetailPage(data.reportid, result));

                        break;

                    case ReqFileReport.Type.Posting:
                        await Navigation.PushAsync(new PostingReportDetailPage(data.reportid, result));

                        break;

                    case ReqFileReport.Type.User:
                        await Navigation.PushAsync(new UserReportDetailPage(data.reportid, result));

                        break;
                    }
                }
            }
        }
示例#6
0
        protected override void Initialize()
        {
            // 리폿하기
            procedurePool.AddProcedure <ReqFileReport, RespFileReport>("ReqFileReport", "RespFileReport", UserType.Registered,
                                                                       (recv, send) =>
            {
                var reporterID = authServer.GetUserIDFromAuthKey(recv.header.authKey);
                var typestr    = ReqFileReport.ReportTypeToString(recv.param.type);

                sqlHelper.RunSqlSessionWithTransaction((sql) =>
                {
                    var cmd         = sql.CreateCommand();
                    cmd.CommandText = @"insert into report(reporterid, report_type, shortdesc, longdesc) 
													values(@reporterid, @report_type, @shortdesc, @longdesc)"                                                    ;
                    cmd.Parameters.AddWithValue("@reporterid", reporterID);
                    cmd.Parameters.AddWithValue("@report_type", typestr);
                    cmd.Parameters.AddWithValue("@shortdesc", recv.param.shortdesc);
                    cmd.Parameters.AddWithValue("@longdesc", recv.param.longdesc);
                    cmd.ExecuteNonQuery();

                    if (recv.param.type == ReqFileReport.Type.Posting)                                                                  // 포스팅 리폿인 경우, 추가 정보
                    {
                        var postcmd         = sql.CreateCommand();
                        postcmd.CommandText = @"insert into report_reason_posting(reportid, reasoncode, postingid)
															values(last_insert_id(), @code, @postid)"                                                            ;
                        postcmd.Parameters.AddWithValue("@code", recv.param.postReportReason);
                        postcmd.Parameters.AddWithValue("@postid", recv.param.reportingPostID);
                        postcmd.ExecuteNonQuery();
                    }
                    else if (recv.param.type == ReqFileReport.Type.User)                                                        // 유저 리폿인 경우, 추가 정보
                    {
                        var usercmd         = sql.CreateCommand();
                        usercmd.CommandText = @"insert into report_reason_user(reportid, reasoncode, userid)
															values(last_insert_id(), @code, @userid)"                                                            ;
                        usercmd.Parameters.AddWithValue("@code", recv.param.userReportReason);
                        usercmd.Parameters.AddWithValue("@userid", recv.param.reportingUserID);
                        usercmd.ExecuteNonQuery();
                    }

                    // 응답
                    send.header.code = BakjeProtocol.Packet.Header.Code.OK;
                    send.SetParameter(new RespFileReport {
                        status = RespFileReport.Status.OK
                    });

                    return(true);
                });
            });

            // 리포트 목록
            procedurePool.AddProcedure <ReqLookupReport, RespLookupReport>("ReqLookupReport", "RespLookupReport", UserType.Administrator,
                                                                           (recv, send) =>
            {
                var rowperpage = recv.param.rowPerPage;
                var rowstart   = rowperpage * recv.param.page;

                sqlHelper.RunSqlSession((sql) =>
                {
                    var result = new RespLookupReport();

                    var cmd         = sql.CreateCommand();
                    cmd.CommandText = @"select SQL_CALC_FOUND_ROWS idreport, reporterid, report_type, shortdesc
												from report
												order by idreport asc
												limit "                                                 + string.Format("{0}, {1}", rowstart, rowperpage);

                    using (var reader = cmd.ExecuteReader())
                    {
                        var entries = new List <RespLookupReport.Entry>();

                        while (reader.Read())
                        {
                            var reportType = ReqFileReport.ReportTypeFromString(reader.GetString("report_type"));

                            entries.Add(new RespLookupReport.Entry
                            {
                                reportID   = reader.GetInt32("idreport"),
                                type       = reportType,
                                shortdesc  = reader.GetString("shortdesc"),
                                reporterID = reader.GetString("reporterid"),
                            });
                        }
                        result.entries = entries.ToArray();
                        reader.Close();
                    }

                    // 전체 리포트 갯수
                    var countcmd         = sql.CreateCommand();
                    countcmd.CommandText = "select FOUND_ROWS()";
                    var totalCount       = (int)(long)countcmd.ExecuteScalar();

                    // 페이지 갯수 등 기록
                    result.currentPage = recv.param.page;
                    result.totalPage   = totalCount / rowperpage + (totalCount % rowperpage == 0 ? 0 : 1);

                    // 응답
                    send.header.code = BakjeProtocol.Packet.Header.Code.OK;
                    send.SetParameter(result);
                });
            });

            // 리포트 열기
            procedurePool.AddProcedure <ReqShowReport, RespShowReport>("ReqShowReport", "RespShowReport", UserType.Administrator,
                                                                       (recv, send) =>
            {
                sqlHelper.RunSqlSession((sql) =>
                {
                    var result = new RespShowReport();

                    var cmd         = sql.CreateCommand();
                    cmd.CommandText = @"select reporterid, report_type, shortdesc, longdesc, postingid, userid, 
												(case report_type
													when 'posting' then rp.reasoncode
													when 'user' then ru.reasoncode
													else null
												end) as reason
											from report left outer join report_reason_posting as rp on idreport = rp.reportid
														left outer join report_reason_user as ru on idreport = ru.reportid
											where idreport = @id"                                            ;
                    cmd.Parameters.AddWithValue("@id", recv.param.reportID);

                    using (var reader = cmd.ExecuteReader())
                    {
                        reader.Read();

                        result.reporterID = reader.GetString("reporterid");
                        result.type       = ReqFileReport.ReportTypeFromString(reader.GetString("report_type"));
                        result.shortdesc  = reader.GetString("shortdesc");
                        result.longdesc   = reader.GetString("longdesc");

                        if (result.type == ReqFileReport.Type.Posting)
                        {
                            result.repPostingID     = reader.GetInt32("postingid");
                            result.postingRepReason = (ReqFileReport.PostReportReason)reader.GetInt32("reason");
                        }
                        else if (result.type == ReqFileReport.Type.User)
                        {
                            result.repUserID     = reader.GetString("userid");
                            result.userRepReason = (ReqFileReport.UserReportReason)reader.GetInt32("reason");
                        }

                        reader.Close();
                    }

                    // 포스팅 리폿인 경우 추가로 제목까지 읽어온다
                    if (result.type == ReqFileReport.Type.Posting)
                    {
                        var postcmd         = sql.CreateCommand();
                        postcmd.CommandText = @"select title from postings where idposting = @postid";
                        postcmd.Parameters.AddWithValue("@postid", result.repPostingID);

                        using (var reader = postcmd.ExecuteReader())
                        {
                            reader.Read();

                            result.repPostingTitle = reader.GetString("title");
                        }
                    }

                    // 응답
                    send.header.code = BakjeProtocol.Packet.Header.Code.OK;
                    send.SetParameter(result);
                });
            });

            // 리포트 삭제
            procedurePool.AddProcedure <ReqCloseReport, RespCloseReport>("ReqCloseReport", "RespCloseReport", UserType.Administrator,
                                                                         (recv, send) =>
            {
                sqlHelper.RunSqlSessionWithTransaction((sql) =>
                {
                    var cmd         = sql.CreateCommand();
                    cmd.CommandText = @"delete from report where idreport = @id";
                    cmd.Parameters.AddWithValue("@id", recv.param.postID);
                    cmd.ExecuteNonQuery();

                    // 응답
                    send.header.code = BakjeProtocol.Packet.Header.Code.OK;
                    send.SetParameter(new RespCloseReport {
                        status = RespCloseReport.Status.OK
                    });

                    return(true);
                });
            });
        }