Пример #1
0
        public LookupReportPage(RespLookupReport lookup)
        {
            InitializeComponent();

            m_viewModel    = new ViewModel(lookup);
            BindingContext = m_viewModel;
        }
Пример #2
0
            public ViewModel(RespLookupReport lookup)
            {
                pageStatus = string.Format("{0}/{1}", lookup.currentPage + 1, lookup.totalPage);

                canGoPrev = lookup.currentPage > 0;
                canGoNext = (lookup.currentPage + 1) < lookup.totalPage;

                items = new ObservableCollection <Item>();
                foreach (var entry in lookup.entries)
                {
                    items.Add(new Item(entry));
                }
            }
Пример #3
0
            public RespLookupReport SendLookupReport()
            {
                RespLookupReport result = null;

                m_reptPP.DoRequest <ReqLookupReport, RespLookupReport>("ReqLookupReport",
                                                                       (send) =>
                {
                    send.SetParameter(new ReqLookupReport
                    {
                        page       = 0,
                        rowPerPage = 20,
                    });
                },
                                                                       (recv) =>
                {
                    result = recv.param;
                });

                return(result);
            }
Пример #4
0
            public RespLookupReport LookupReport(int page = 0)
            {
                RespLookupReport result = null;

                DoRequest <ReqLookupReport, RespLookupReport>(
                    (send) =>
                {
                    send.SetParameter(new ReqLookupReport
                    {
                        page       = page,
                        rowPerPage = 20,
                    });
                },
                    (recv) =>
                {
                    result = recv.param;
                });

                return(result);
            }
Пример #5
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);
                });
            });
        }
Пример #6
0
        private void InitActions()
        {
            AddAsyncAction("recentPostings", async() =>
            {
                RespLookupPosting result = null;
                await App.RunLongTask(() =>
                {
                    result = App.instance.core.post.LookupPosting(null);
                });

                if (result == null)
                {
                    await DisplayAlert("오류", "포스팅을 읽어올 수 없습니다.", "확인");
                }
                else
                {
                    Detail = new NavigationPage(new PostingListPage(null, result));
                }
            });

            AddAsyncAction("notice", async() =>
            {
                RespLookupNotice result = null;
                await App.RunLongTask(() =>
                {
                    result = App.instance.core.notice.LookupNotice();
                });

                if (result == null)
                {
                    await DisplayAlert("오류", "포스팅을 읽어올 수 없습니다.", "확인");
                }
                else
                {
                    Detail = new NavigationPage(new NoticeListPage(result));
                }
            });

            AddAsyncAction("myinfo", async() =>
            {
                RespUserInfo result = null;
                await App.RunLongTask(() =>
                {
                    result = App.instance.core.user.ShowUserInfo((string)App.Current.Properties["username"]);
                });

                if (result != null)
                {
                    Detail = new NavigationPage(new UserInfoPage(result));
                }
            });

            AddAsyncAction("recentReports", async() =>
            {
                RespLookupReport result = null;

                await App.RunLongTask(() =>
                {
                    result = App.instance.core.report.LookupReport();
                });

                if (result != null)
                {
                    Detail = new NavigationPage(new LookupReportPage(result));
                }
            });

            AddAsyncAction("logout", async() =>
            {
                await Task.Run(() =>
                {
                    App.instance.core.auth.ClearAuth();
                });
                await DisplayAlert("로그아웃", "로그아웃하였습니다.", "확인");
                App.GetLoginPage();
            });
        }