bbs_w_post.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. from .tool.func import *
  2. from .go_api_bbs_w import api_bbs_w
  3. from .go_api_bbs_w_comment import api_bbs_w_comment
  4. from .go_api_topic import api_topic_thread_make, api_topic_thread_pre_render
  5. from .edit import edit_editor
  6. async def bbs_w_post(bbs_num = '', post_num = ''):
  7. with get_db_connect() as conn:
  8. curs = conn.cursor()
  9. curs.execute(db_change('select set_data from bbs_set where set_id = ? and set_name = "bbs_name"'), [bbs_num])
  10. db_data_3 = curs.fetchall()
  11. if not db_data_3:
  12. return redirect(conn, '/bbs/main')
  13. bbs_name = db_data_3[0][0]
  14. bbs_num_str = str(bbs_num)
  15. post_num_str = str(post_num)
  16. bbs_comment_acl = await acl_check(bbs_num_str, 'bbs_comment')
  17. ip = ip_check()
  18. temp_dict = await api_bbs_w(bbs_num_str + '-' + post_num_str)
  19. if temp_dict == {}:
  20. return redirect(conn, '/bbs/main')
  21. curs.execute(db_change('select set_data from bbs_set where set_id = ? and set_name = "bbs_type"'), [bbs_num])
  22. db_data_2 = curs.fetchall()
  23. if not db_data_2:
  24. return redirect(conn, '/bbs/main')
  25. else:
  26. if flask.request.method == 'POST':
  27. if db_data_2[0][0] == 'thread':
  28. if bbs_comment_acl == 1:
  29. return redirect(conn, '/bbs/set/' + bbs_num_str)
  30. if await captcha_post(conn, flask.request.form.get('g-recaptcha-response', flask.request.form.get('g-recaptcha', ''))) == 1:
  31. return await re_error(conn, 13)
  32. set_id = bbs_num_str + '-' + post_num_str
  33. curs.execute(db_change('select set_code from bbs_data where set_name = "comment" and set_id = ? order by set_code + 0 desc'), [set_id])
  34. db_data_4 = curs.fetchall()
  35. id_data = str(int(db_data_4[0][0]) + 1) if db_data_4 else '1'
  36. data = flask.request.form.get('content', '')
  37. if data == '':
  38. # re_error로 대체 예정
  39. return redirect(conn, '/bbs/w/' + bbs_num_str + '/' + post_num_str)
  40. data = data.replace('\r', '')
  41. data = await api_topic_thread_pre_render(conn, data, id_data, ip, set_id, bbs_name, temp_dict['title'], 'post')
  42. date = get_time()
  43. curs.execute(db_change("insert into bbs_data (set_name, set_code, set_id, set_data) values ('comment', ?, ?, ?)"), [id_data, set_id, data])
  44. curs.execute(db_change("insert into bbs_data (set_name, set_code, set_id, set_data) values ('comment_date', ?, ?, ?)"), [id_data, set_id, date])
  45. curs.execute(db_change("insert into bbs_data (set_name, set_code, set_id, set_data) values ('comment_user_id', ?, ?, ?)"), [id_data, set_id, ip])
  46. await add_alarm(temp_dict['user_id'], ip, 'BBS <a href="/bbs/w/' + bbs_num_str + '/' + post_num_str + '#' + id_data + '">' + html.escape(bbs_name) + ' - ' + html.escape(temp_dict['title']) + '#' + id_data + '</a>')
  47. return redirect(conn, '/bbs/w/' + bbs_num_str + '/' + post_num_str + '#' + id_data)
  48. else:
  49. if bbs_comment_acl == 1:
  50. return redirect(conn, '/bbs/set/' + bbs_num_str)
  51. if await captcha_post(conn, flask.request.form.get('g-recaptcha-response', flask.request.form.get('g-recaptcha', ''))) == 1:
  52. return await re_error(conn, 13)
  53. select = flask.request.form.get('comment_select', '0')
  54. select = '' if select == '0' else select
  55. comment_user_name = ''
  56. if select != '':
  57. select_split = select.split('-')
  58. if len(select_split) < 2:
  59. curs.execute(db_change('select set_data from bbs_data where set_name = "comment_user_id" and set_id = ? and set_code = ? limit 1'), [bbs_num_str + '-' + post_num_str, select_split[0]])
  60. db_data_6 = curs.fetchall()
  61. if not db_data_6:
  62. # re_error로 변경 예정
  63. return redirect(conn, '/bbs/w/' + bbs_num_str + '/' + post_num_str)
  64. else:
  65. set_id = bbs_num_str + '-' + post_num_str + '-' + select_split[0]
  66. comment_user_name = db_data_6[0][0]
  67. else:
  68. curs.execute(db_change('select set_data from bbs_data where set_name = "comment_user_id" and set_id = ? and set_code = ? limit 1'), [bbs_num_str + '-' + post_num_str + '-' + '-'.join(select_split[0:len(select_split) - 1]), select_split[len(select_split) - 1]])
  69. db_data_7 = curs.fetchall()
  70. if not db_data_7:
  71. return redirect(conn, '/bbs/w/' + bbs_num_str + '/' + post_num_str)
  72. else:
  73. set_id = bbs_num_str + '-' + post_num_str + '-' + '-'.join(select_split)
  74. comment_user_name = db_data_7[0][0]
  75. else:
  76. set_id = bbs_num_str + '-' + post_num_str
  77. curs.execute(db_change('select set_code from bbs_data where set_name = "comment" and set_id = ? order by set_code + 0 desc limit 1'), [set_id])
  78. db_data_5 = curs.fetchall()
  79. id_data = str(int(db_data_5[0][0]) + 1) if db_data_5 else '1'
  80. data = flask.request.form.get('content', '')
  81. if data == '':
  82. # re_error로 대체 예정
  83. return redirect(conn, '/bbs/w/' + bbs_num_str + '/' + post_num_str)
  84. date = get_time()
  85. curs.execute(db_change("insert into bbs_data (set_name, set_code, set_id, set_data) values ('comment', ?, ?, ?)"), [id_data, set_id, data])
  86. curs.execute(db_change("insert into bbs_data (set_name, set_code, set_id, set_data) values ('comment_date', ?, ?, ?)"), [id_data, set_id, date])
  87. curs.execute(db_change("insert into bbs_data (set_name, set_code, set_id, set_data) values ('comment_user_id', ?, ?, ?)"), [id_data, set_id, ip])
  88. if set_id == '':
  89. end_id = id_data
  90. else:
  91. set_id = re.sub(r'^[0-9]+-[0-9]+-?', '', set_id)
  92. set_id += '-' if set_id != '' else ''
  93. end_id = set_id + id_data
  94. await add_alarm(temp_dict['user_id'], ip, 'BBS <a href="/bbs/w/' + bbs_num_str + '/' + post_num_str + '#' + end_id + '">' + html.escape(bbs_name) + ' - ' + html.escape(temp_dict['title']) + '#' + end_id + '</a>')
  95. if comment_user_name != '':
  96. await add_alarm(comment_user_name, ip, 'BBS <a href="/bbs/w/' + bbs_num_str + '/' + post_num_str + '#' + end_id + '">' + html.escape(bbs_name) + ' - ' + html.escape(temp_dict['title']) + '#' + end_id + '</a>')
  97. return redirect(conn, '/bbs/w/' + bbs_num_str + '/' + post_num_str + '#' + end_id)
  98. else:
  99. if await acl_check(bbs_num_str, 'bbs_view') == 1:
  100. return await re_error(conn, 0)
  101. date = ''
  102. date += '<a href="javascript:opennamu_change_comment(\'0\');">(' + await get_lang('comment') + ')</a> '
  103. date += temp_dict['date']
  104. data = '<div class="opennamu_bbs_w_post_tab">'
  105. data += '<big><big><big>' + html.escape(temp_dict['title']) + '</big></big></big>'
  106. data += '<hr class="main_hr">'
  107. data += await ip_pas(temp_dict['user_id']) + '<span style="float: right;">' + date + '</span>'
  108. data += '<hr>'
  109. data += '<div class="opennamu_bbs_w_post_tab_content">' + await render_set(conn, doc_data = temp_dict['data']) + '</div>'
  110. data += '</div>'
  111. if bbs_comment_acl == 0:
  112. data += '<hr class="main_hr">'
  113. data += '<div id="opennamu_bbs_w_post_tabom"></div>'
  114. data += '' + \
  115. '<hr>' + \
  116. '<div id="opennamu_bbs_w_post"></div>' + \
  117. '<script defer src="/views/main_css/js/route/topic.js' + cache_v() + '"></script>' + \
  118. '<script defer src="/views/main_css/js/route/bbs_w_post.js' + cache_v() + '"></script>' + \
  119. '<script>window.addEventListener("DOMContentLoaded", function() { opennamu_load_comment(); });</script>' + \
  120. ''
  121. bbs_comment_form = ''
  122. if bbs_comment_acl == 0:
  123. bbs_comment_form += '''
  124. <div id="opennamu_bbs_w_post_select"></div>
  125. ''' + await edit_editor(conn, ip, '', 'bbs_comment') + '''
  126. '''
  127. data += '''
  128. <form method="post">
  129. ''' + bbs_comment_form + '''
  130. </form>
  131. '''
  132. await python_to_golang("get_json", path = "v2/bbs/w/page_view_post/" + url_pas(bbs_num_str) + "/" + url_pas(post_num_str))
  133. view_count_data = await python_to_golang("get_json", path = "v2/bbs/w/page_view/" + url_pas(bbs_num_str) + "/" + url_pas(post_num_str))
  134. view_count = view_count_data['data']
  135. return await render_template(
  136. bbs_name,
  137. data,
  138. '(' + await get_lang('bbs') + ')',
  139. [['bbs/in/' + bbs_num_str, await get_lang('return')], ['bbs/edit/' + bbs_num_str + '/' + post_num_str, await get_lang('edit')], ['bbs/tool/' + bbs_num_str + '/' + post_num_str, await get_lang('tool')]],
  140. [temp_dict['date'], 0, 0, view_count],
  141. )