bbs_edit.py 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. from .tool.func import *
  2. def bbs_edit(bbs_num = '', post_num = '', do_type = ''):
  3. with get_db_connect() as conn:
  4. curs = conn.cursor()
  5. bbs_num_str = str(bbs_num)
  6. post_num_str = str(post_num)
  7. ip = ip_check()
  8. curs.execute(db_change('select set_id from bbs_set where set_id = ? and set_name = "bbs_name"'), [bbs_num_str])
  9. if not curs.fetchall():
  10. return redirect('/bbs/main')
  11. if post_num != '':
  12. 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])
  13. db_data = curs.fetchall()
  14. if not db_data:
  15. return redirect('/bbs/main')
  16. else:
  17. if not db_data[0][0] == ip and admin_check() != 1:
  18. return re_error('/ban')
  19. if acl_check(bbs_num_str, 'bbs_edit') == 1:
  20. return redirect('/bbs/set/' + bbs_num_str)
  21. if flask.request.method == 'POST' and do_type != 'preview':
  22. if captcha_post(flask.request.form.get('g-recaptcha-response', flask.request.form.get('g-recaptcha', ''))) == 1:
  23. return re_error('/error/13')
  24. else:
  25. captcha_post('', 0)
  26. if post_num == '':
  27. 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])
  28. db_data = curs.fetchall()
  29. id_data = str(int(db_data[0][0]) + 1) if db_data else '1'
  30. else:
  31. id_data = post_num_str
  32. title = flask.request.form.get('title', 'test')
  33. title = 'test' if title == '' else title
  34. data = flask.request.form.get('content', '')
  35. if data == '':
  36. # re_error로 대체 예정
  37. return redirect('/bbs/w/' + bbs_num_str)
  38. date = get_time()
  39. if post_num == '':
  40. curs.execute(db_change("insert into bbs_data (set_name, set_code, set_id, set_data) values ('title', ?, ?, ?)"), [id_data, bbs_num_str, title])
  41. curs.execute(db_change("insert into bbs_data (set_name, set_code, set_id, set_data) values ('data', ?, ?, ?)"), [id_data, bbs_num_str, data])
  42. curs.execute(db_change("insert into bbs_data (set_name, set_code, set_id, set_data) values ('date', ?, ?, ?)"), [id_data, bbs_num_str, date])
  43. 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])
  44. else:
  45. 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])
  46. 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])
  47. 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])
  48. return redirect('/bbs/w/' + bbs_num_str + '/' + id_data)
  49. else:
  50. if do_type == 'preview':
  51. title = flask.request.form.get('title', '')
  52. data = flask.request.form.get('content', '')
  53. data = data.replace('\r', '')
  54. data_preview = render_set(
  55. doc_name = '',
  56. doc_data = data,
  57. data_in = 'from'
  58. )
  59. else:
  60. if post_num == '':
  61. title = ''
  62. data = ''
  63. data_preview = ''
  64. else:
  65. curs.execute(db_change('select set_name, set_data, set_code from bbs_data where set_id = ? and set_code = ?'), [bbs_num, post_num])
  66. db_data = curs.fetchall()
  67. db_data = list(db_data) if db_data else []
  68. temp_id = ''
  69. temp_dict = {}
  70. for for_a in db_data + [['', '', '']]:
  71. if temp_id != for_a[2]:
  72. temp_id = for_a[2]
  73. temp_dict['code'] = for_a[2]
  74. temp_dict[for_a[0]] = for_a[1]
  75. title = temp_dict['title']
  76. data = temp_dict['data']
  77. data_preview = ''
  78. if post_num == '':
  79. form_action = 'formaction="/bbs/edit/' + bbs_num_str + '"'
  80. form_action_preview = 'formaction="/bbs/edit/preview/' + bbs_num_str + '"'
  81. else:
  82. form_action = 'formaction="/bbs/edit/' + bbs_num_str + '/' + post_num_str + '"'
  83. form_action_preview = 'formaction="/bbs/edit/preview/' + bbs_num_str + '/' + post_num_str + '"'
  84. editor_top_text = '<a href="/edit_filter">(' + load_lang('edit_filter_rule') + ')</a>'
  85. monaco_on = get_main_skin_set(curs, flask.session, 'main_css_monaco', ip)
  86. if monaco_on == 'use':
  87. editor_display = 'style="display: none;"'
  88. monaco_display = ''
  89. add_get_file = '''
  90. <link rel="stylesheet"
  91. data-name="vs/editor/editor.main"
  92. href="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.37.1/min/vs/editor/editor.main.min.css">
  93. <script src="https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.37.1/min/vs/loader.min.js"></script>
  94. '''
  95. editor_top_text += ' <a href="javascript:opennamu_edit_turn_off_monaco();">(' + load_lang('turn_off_monaco') + ')</a>'
  96. if flask.request.cookies.get('main_css_darkmode', '0') == '1':
  97. monaco_thema = 'vs-dark'
  98. else:
  99. monaco_thema = ''
  100. add_script = 'do_monaco_init("' + monaco_thema + '");'
  101. else:
  102. editor_display = ''
  103. monaco_display = 'style="display: none;"'
  104. add_get_file = ''
  105. add_script = 'opennamu_edit_turn_off_monaco();'
  106. if editor_top_text != '':
  107. editor_top_text += '<hr class="main_hr">'
  108. return easy_minify(flask.render_template(skin_check(),
  109. imp = [load_lang('bbs_edit'), wiki_set(), wiki_custom(), wiki_css([0, 0])],
  110. data = editor_top_text + add_get_file + '''
  111. <form method="post">
  112. <textarea style="display: none;" id="opennamu_edit_origin" name="doc_data_org"></textarea>
  113. <div>''' + edit_button('opennamu_edit_textarea', 'opennamu_monaco_editor') + '''</div>
  114. <input placeholder="''' + load_lang('title') + '''" name="title" value="''' + html.escape(title) + '''">
  115. <hr class="main_hr">
  116. <div id="opennamu_monaco_editor" class="opennamu_textarea_500" ''' + monaco_display + '''></div>
  117. <textarea id="opennamu_edit_textarea" ''' + editor_display + ''' class="opennamu_textarea_500" name="content">''' + html.escape(data) + '''</textarea>
  118. <hr class="main_hr">
  119. ''' + captcha_get() + ip_warning() + '''
  120. <button id="opennamu_save_button" type="submit" ''' + form_action + ''' onclick="do_monaco_to_textarea(); do_stop_exit_release();">''' + load_lang('save') + '''</button>
  121. <button id="opennamu_preview_button" type="submit" ''' + form_action_preview + ''' onclick="do_monaco_to_textarea(); do_stop_exit_release();">''' + load_lang('preview') + '''</button>
  122. </form>
  123. <hr class="main_hr">
  124. <div id="opennamu_preview_area">''' + data_preview + '''</div>
  125. <script>
  126. do_stop_exit();
  127. do_paste_image('opennamu_edit_textarea', 'opennamu_monaco_editor');
  128. ''' + add_script + '''
  129. </script>
  130. ''',
  131. menu = [['bbs/w/' + bbs_num_str, load_lang('return')]]
  132. ))