2
0

bbs_w_edit.py 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. from .tool.func import *
  2. from .api_bbs_w_post import api_bbs_w_post
  3. from .edit import edit_editor
  4. def bbs_w_edit(bbs_num = '', post_num = '', do_type = ''):
  5. with get_db_connect() as conn:
  6. curs = conn.cursor()
  7. bbs_num_str = str(bbs_num)
  8. post_num_str = str(post_num)
  9. ip = ip_check()
  10. curs.execute(db_change('select set_id from bbs_set where set_id = ? and set_name = "bbs_name"'), [bbs_num_str])
  11. if not curs.fetchall():
  12. return redirect('/bbs/main')
  13. if post_num != '':
  14. curs.execute(db_change('select set_data from bbs_data where set_name = "user_id" and set_id = ? and set_code = ?'), [bbs_num, post_num])
  15. db_data = curs.fetchall()
  16. if not db_data:
  17. return redirect('/bbs/main')
  18. else:
  19. if not db_data[0][0] == ip and admin_check() != 1:
  20. return re_error('/ban')
  21. if acl_check(bbs_num_str, 'bbs_edit') == 1:
  22. return redirect('/bbs/set/' + bbs_num_str)
  23. i_list = ['post_view_acl', 'post_comment_acl']
  24. if flask.request.method == 'POST' and do_type != 'preview':
  25. if captcha_post(flask.request.form.get('g-recaptcha-response', flask.request.form.get('g-recaptcha', ''))) == 1:
  26. return re_error('/error/13')
  27. else:
  28. captcha_post('', 0)
  29. if post_num == '':
  30. curs.execute(db_change('select set_code from bbs_data where set_name = "title" and set_id = ? order by set_code + 0 desc'), [bbs_num_str])
  31. db_data = curs.fetchall()
  32. id_data = str(int(db_data[0][0]) + 1) if db_data else '1'
  33. else:
  34. id_data = post_num_str
  35. title = flask.request.form.get('title', 'test')
  36. title = 'test' if title == '' else title
  37. data = flask.request.form.get('content', '')
  38. if data == '':
  39. # re_error로 대체 예정
  40. return redirect('/bbs/w/' + bbs_num_str)
  41. date = get_time()
  42. if post_num == '':
  43. curs.execute(db_change("insert into bbs_data (set_name, set_code, set_id, set_data) values ('title', ?, ?, ?)"), [id_data, bbs_num_str, title])
  44. curs.execute(db_change("insert into bbs_data (set_name, set_code, set_id, set_data) values ('data', ?, ?, ?)"), [id_data, bbs_num_str, data])
  45. curs.execute(db_change("insert into bbs_data (set_name, set_code, set_id, set_data) values ('date', ?, ?, ?)"), [id_data, bbs_num_str, date])
  46. curs.execute(db_change("insert into bbs_data (set_name, set_code, set_id, set_data) values ('user_id', ?, ?, ?)"), [id_data, bbs_num_str, ip])
  47. else:
  48. curs.execute(db_change("update bbs_data set set_data = ? where set_name = 'title' and set_code = ? and set_id = ?"), [title, post_num, bbs_num_str])
  49. curs.execute(db_change("update bbs_data set set_data = ? where set_name = 'data' and set_code = ? and set_id = ?"), [data, id_data, bbs_num_str])
  50. curs.execute(db_change("update bbs_data set set_data = ? where set_name = 'date' and set_code = ? and set_id = ?"), [date, id_data, bbs_num_str])
  51. return redirect('/bbs/w/' + bbs_num_str + '/' + id_data)
  52. else:
  53. d_list = ['' for _ in range(0, len(i_list))]
  54. if do_type == 'preview':
  55. title = flask.request.form.get('title', '')
  56. data = flask.request.form.get('content', '')
  57. data = data.replace('\r', '')
  58. data_preview = render_set(
  59. doc_data = data,
  60. data_type = 'thread',
  61. data_in = 'bbs'
  62. ) + '<hr>'
  63. for for_a in range(0, len(i_list)):
  64. d_list[for_a] = flask.request.form.get(i_list[for_a], 'normal')
  65. else:
  66. if post_num == '':
  67. title = ''
  68. data = ''
  69. data_preview = ''
  70. else:
  71. curs.execute(db_change('select set_name, set_data, set_code from bbs_data where set_id = ? and set_code = ?'), [bbs_num, post_num])
  72. db_data = curs.fetchall()
  73. db_data = list(db_data) if db_data else []
  74. temp_dict = json.loads(api_bbs_w_post(bbs_num_str + '-' + post_num_str).data)
  75. title = temp_dict['title']
  76. data = temp_dict['data']
  77. data_preview = ''
  78. acl_div = ['' for _ in range(0, len(i_list))]
  79. acl_list = get_acl_list()
  80. for for_a in range(0, len(i_list)):
  81. for data_list in acl_list:
  82. if data_list == d_list[for_a]:
  83. check = 'selected="selected"'
  84. else:
  85. check = ''
  86. acl_div[for_a] += '<option value="' + data_list + '" ' + check + '>' + (data_list if data_list != '' else 'normal') + '</option>'
  87. if post_num == '':
  88. form_action = 'formaction="/bbs/edit/' + bbs_num_str + '"'
  89. form_action_preview = 'formaction="/bbs/edit/preview/' + bbs_num_str + '"'
  90. else:
  91. form_action = 'formaction="/bbs/edit/' + bbs_num_str + '/' + post_num_str + '"'
  92. form_action_preview = 'formaction="/bbs/edit/preview/' + bbs_num_str + '/' + post_num_str + '"'
  93. editor_top_text = '<a href="/edit_filter">(' + load_lang('edit_filter_rule') + ')</a>'
  94. if editor_top_text != '':
  95. editor_top_text += '<hr class="main_hr">'
  96. if post_num == '':
  97. bbs_title = load_lang('post_add')
  98. else:
  99. bbs_title = load_lang('post_edit')
  100. return easy_minify(flask.render_template(skin_check(),
  101. imp = [bbs_title, wiki_set(), wiki_custom(), wiki_css([0, 0])],
  102. data = editor_top_text + '''
  103. <form method="post">
  104. <input placeholder="''' + load_lang('title') + '''" name="title" value="''' + html.escape(title) + '''">
  105. <hr class="main_hr">
  106. ''' + edit_editor(curs, ip, data) + '''
  107. <hr class="main_hr">
  108. ''' + captcha_get() + ip_warning() + '''
  109. <button id="opennamu_save_button" type="submit" ''' + form_action + ''' onclick="do_monaco_to_textarea(); do_stop_exit_release();">''' + load_lang('save') + '''</button>
  110. <button id="opennamu_preview_button" type="submit" ''' + form_action_preview + ''' onclick="do_monaco_to_textarea(); do_stop_exit_release();">''' + load_lang('preview') + '''</button>
  111. <hr class="main_hr">
  112. <div id="opennamu_preview_area">''' + data_preview + '''</div>
  113. ''' + render_simple_set('''
  114. <hr class="main_hr">
  115. <a href="/acl/TEST#exp">(''' + load_lang('reference') + ''')</a>
  116. <h2>''' + load_lang('acl') + '''</h2>
  117. <h3>''' + load_lang('post_view_acl') + '''</h3>
  118. <select name="post_view_acl">''' + acl_div[0] + '''</select>
  119. <h4>''' + load_lang('post_comment_acl') + '''</h4>
  120. <select name="post_comment_acl">''' + acl_div[1] + '''</select>
  121. <h2>''' + load_lang('markup') + '''</h2>
  122. ''' + load_lang('not_working') + '''
  123. ''') + '''
  124. </form>
  125. ''',
  126. menu = [['bbs/w/' + bbs_num_str, load_lang('return')]]
  127. ))