2
0

bbs_w_post.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  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_comment(conn, user_id, sub_code, comment_num, bbs_num_str, post_num_str):
  7. comment_data = ''
  8. comment_select = ''
  9. comment_count = 0
  10. comment_add_count = 0
  11. thread_data = await api_bbs_w_comment(sub_code)
  12. for temp_dict in thread_data:
  13. if temp_dict['comment_user_id'] != '':
  14. color = 'default'
  15. if user_id == temp_dict['comment_user_id']:
  16. color = 'green'
  17. sub_code_check = re.sub(r'^[0-9]+-[0-9]+-', '', temp_dict['id'] + '-' + temp_dict['code'])
  18. margin_count = sub_code_check.count('-')
  19. if margin_count == 0:
  20. comment_count += 1
  21. else:
  22. comment_add_count += 1
  23. date = ''
  24. date += '<a href="javascript:opennamu_change_comment(\'' + sub_code_check + '\');">(' + await get_lang('comment') + ')</a> '
  25. date += '<a href="/bbs/tool/' + bbs_num_str + '/' + post_num_str + '/' + sub_code_check + '">(' + await get_lang('tool') + ')</a> '
  26. date += temp_dict['comment_date']
  27. comment_data += '<span style="padding-left: 20px;"></span>' * margin_count
  28. comment_data += api_topic_thread_make(
  29. await ip_pas(temp_dict['comment_user_id']),
  30. date,
  31. await render_set(conn, doc_data = temp_dict['comment']),
  32. sub_code_check,
  33. color = color,
  34. add_style = 'width: calc(100% - ' + str(margin_count * 20) + 'px);'
  35. )
  36. comment_default = ''
  37. if comment_num == sub_code_check:
  38. comment_default = 'selected'
  39. comment_select += '<option value="' + sub_code_check + '" ' + comment_default + '>' + sub_code_check + '</option>'
  40. return (comment_data, comment_select, comment_count, comment_add_count)
  41. async def bbs_w_post(bbs_num = '', post_num = ''):
  42. with get_db_connect() as conn:
  43. curs = conn.cursor()
  44. curs.execute(db_change('select set_data from bbs_set where set_id = ? and set_name = "bbs_name"'), [bbs_num])
  45. db_data_3 = curs.fetchall()
  46. if not db_data_3:
  47. return redirect(conn, '/bbs/main')
  48. bbs_name = db_data_3[0][0]
  49. bbs_num_str = str(bbs_num)
  50. post_num_str = str(post_num)
  51. bbs_comment_acl = await acl_check(bbs_num_str, 'bbs_comment')
  52. ip = ip_check()
  53. temp_dict = await api_bbs_w(bbs_num_str + '-' + post_num_str)
  54. if temp_dict == {}:
  55. return redirect(conn, '/bbs/main')
  56. curs.execute(db_change('select set_data from bbs_set where set_id = ? and set_name = "bbs_type"'), [bbs_num])
  57. db_data_2 = curs.fetchall()
  58. if not db_data_2:
  59. return redirect(conn, '/bbs/main')
  60. else:
  61. if flask.request.method == 'POST':
  62. if db_data_2[0][0] == 'thread':
  63. if bbs_comment_acl == 1:
  64. return redirect(conn, '/bbs/set/' + bbs_num_str)
  65. if await captcha_post(conn, flask.request.form.get('g-recaptcha-response', flask.request.form.get('g-recaptcha', ''))) == 1:
  66. return await re_error(conn, 13)
  67. set_id = bbs_num_str + '-' + post_num_str
  68. 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])
  69. db_data_4 = curs.fetchall()
  70. id_data = str(int(db_data_4[0][0]) + 1) if db_data_4 else '1'
  71. data = flask.request.form.get('content', '')
  72. if data == '':
  73. # re_error로 대체 예정
  74. return redirect(conn, '/bbs/w/' + bbs_num_str + '/' + post_num_str)
  75. data = data.replace('\r', '')
  76. data = await api_topic_thread_pre_render(conn, data, id_data, ip, set_id, bbs_name, temp_dict['title'], 'post')
  77. date = get_time()
  78. curs.execute(db_change("insert into bbs_data (set_name, set_code, set_id, set_data) values ('comment', ?, ?, ?)"), [id_data, set_id, data])
  79. curs.execute(db_change("insert into bbs_data (set_name, set_code, set_id, set_data) values ('comment_date', ?, ?, ?)"), [id_data, set_id, date])
  80. 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])
  81. 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>')
  82. return redirect(conn, '/bbs/w/' + bbs_num_str + '/' + post_num_str + '#' + id_data)
  83. else:
  84. if bbs_comment_acl == 1:
  85. return redirect(conn, '/bbs/set/' + bbs_num_str)
  86. if await captcha_post(conn, flask.request.form.get('g-recaptcha-response', flask.request.form.get('g-recaptcha', ''))) == 1:
  87. return await re_error(conn, 13)
  88. select = flask.request.form.get('comment_select', '0')
  89. select = '' if select == '0' else select
  90. comment_user_name = ''
  91. if select != '':
  92. select_split = select.split('-')
  93. if len(select_split) < 2:
  94. 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]])
  95. db_data_6 = curs.fetchall()
  96. if not db_data_6:
  97. # re_error로 변경 예정
  98. return redirect(conn, '/bbs/w/' + bbs_num_str + '/' + post_num_str)
  99. else:
  100. set_id = bbs_num_str + '-' + post_num_str + '-' + select_split[0]
  101. comment_user_name = db_data_6[0][0]
  102. else:
  103. 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]])
  104. db_data_7 = curs.fetchall()
  105. if not db_data_7:
  106. return redirect(conn, '/bbs/w/' + bbs_num_str + '/' + post_num_str)
  107. else:
  108. set_id = bbs_num_str + '-' + post_num_str + '-' + '-'.join(select_split)
  109. comment_user_name = db_data_7[0][0]
  110. else:
  111. set_id = bbs_num_str + '-' + post_num_str
  112. 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])
  113. db_data_5 = curs.fetchall()
  114. id_data = str(int(db_data_5[0][0]) + 1) if db_data_5 else '1'
  115. data = flask.request.form.get('content', '')
  116. if data == '':
  117. # re_error로 대체 예정
  118. return redirect(conn, '/bbs/w/' + bbs_num_str + '/' + post_num_str)
  119. date = get_time()
  120. curs.execute(db_change("insert into bbs_data (set_name, set_code, set_id, set_data) values ('comment', ?, ?, ?)"), [id_data, set_id, data])
  121. curs.execute(db_change("insert into bbs_data (set_name, set_code, set_id, set_data) values ('comment_date', ?, ?, ?)"), [id_data, set_id, date])
  122. 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])
  123. if set_id == '':
  124. end_id = id_data
  125. else:
  126. set_id = re.sub(r'^[0-9]+-[0-9]+-?', '', set_id)
  127. set_id += '-' if set_id != '' else ''
  128. end_id = set_id + id_data
  129. 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>')
  130. if comment_user_name != '':
  131. 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>')
  132. return redirect(conn, '/bbs/w/' + bbs_num_str + '/' + post_num_str + '#' + end_id)
  133. else:
  134. if await acl_check(bbs_num_str, 'bbs_view') == 1:
  135. return await re_error(conn, 0)
  136. date = ''
  137. date += '<a href="javascript:opennamu_change_comment(\'0\');">(' + await get_lang('comment') + ')</a> '
  138. date += temp_dict['date']
  139. data = ''
  140. data += '<h2>' + html.escape(temp_dict['title']) + '</h2>'
  141. data += api_topic_thread_make(
  142. await ip_pas(temp_dict['user_id']),
  143. date,
  144. await render_set(conn, doc_data = temp_dict['data']),
  145. '0',
  146. color = 'red'
  147. )
  148. data += '' + \
  149. '<div id="opennamu_bbs_w_post"></div>' + \
  150. '<script defer src="/views/main_css/js/route/topic.js' + cache_v() + '"></script>' + \
  151. '<script defer src="/views/main_css/js/route/bbs_w_post.js' + cache_v() + '"></script>' + \
  152. '<script>window.addEventListener("DOMContentLoaded", function() { opennamu_load_comment(); });</script>' + \
  153. ''
  154. bbs_comment_form = ''
  155. if bbs_comment_acl == 0:
  156. bbs_comment_form += '''
  157. <div id="opennamu_bbs_w_post_tabom"></div>
  158. <div id="opennamu_bbs_w_post_select"></div>
  159. ''' + await edit_editor(conn, ip, '', 'bbs_comment') + '''
  160. '''
  161. data += '''
  162. <form method="post">
  163. ''' + bbs_comment_form + '''
  164. </form>
  165. '''
  166. return easy_minify(flask.render_template(await skin_check(),
  167. imp = [bbs_name, await wiki_set(), await wiki_custom(), wiki_css(['(' + await get_lang('bbs') + ')', 0])],
  168. data = data,
  169. menu = [['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')]]
  170. ))