view_set.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. from .tool.func import *
  2. def view_set(name = 'Test'):
  3. with get_db_connect() as conn:
  4. curs = conn.cursor()
  5. check_ok = ''
  6. ip = ip_check()
  7. time = get_time()
  8. if flask.request.method == 'POST':
  9. check_data = 'document_set (' + name + ')'
  10. else:
  11. check_data = None
  12. user_data = re.search(r'^user:(.+)$', name)
  13. if user_data:
  14. if check_data and ip_or_user(ip) != 0:
  15. return redirect(conn, '/login')
  16. if user_data.group(1) != ip:
  17. if admin_check(conn, 5) != 1:
  18. if check_data:
  19. return re_error(conn, '/error/3')
  20. else:
  21. check_ok = 'disabled'
  22. else:
  23. if admin_check(conn, 5) != 1:
  24. if check_data:
  25. return re_error(conn, '/error/3')
  26. else:
  27. check_ok = 'disabled'
  28. if flask.request.method == 'POST':
  29. acl_data = ['decu', 'document_edit_acl', 'document_edit_request_acl', 'document_move_acl', 'document_delete_acl', 'dis', 'view', 'why']
  30. acl_result = []
  31. acl_text = ''
  32. for i in acl_data:
  33. form_data = flask.request.form.get(i, '')
  34. acl_result += [form_data]
  35. acl_text += i + '\n'
  36. acl_text += form_data + '\n'
  37. curs.execute(db_change("delete from acl where title = ? and type = ?"), [name, i])
  38. curs.execute(db_change("insert into acl (title, data, type) values (?, ?, ?)"), [name, form_data, i])
  39. curs.execute(db_change("delete from data_set where doc_name = ? and doc_rev = ? and set_name = 'acl_date'"), [name, i])
  40. time_limit = flask.request.form.get(i + '_date', '')
  41. if re.search(r'^[0-9]{4}-[0-9]{2}-[0-9]{2}$', time_limit):
  42. curs.execute(db_change("insert into data_set (doc_name, doc_rev, set_name, set_data) values (?, ?, 'acl_date', ?)"), [name, i, time_limit])
  43. acl_text += time_limit + '\n'
  44. acl_text += '\n\n'
  45. markup_data = flask.request.form.get('document_markup', '')
  46. acl_text += 'document_markup\n'
  47. acl_text += markup_data + '\n\n'
  48. curs.execute(db_change("select set_data from data_set where doc_name = ? and set_name = 'document_markup'"), [name])
  49. db_data = curs.fetchall()
  50. curs.execute(db_change("delete from data_set where doc_name = ? and set_name = 'document_markup'"), [name])
  51. curs.execute(db_change("insert into data_set (doc_name, doc_rev, set_name, set_data) values (?, '', 'document_markup', ?)"), [name, markup_data])
  52. if not db_data or db_data[0][0] != markup_data:
  53. curs.execute(db_change("select data from data where title = ?"), [name])
  54. db_data_2 = curs.fetchall()
  55. if db_data_2:
  56. render_set(conn,
  57. doc_name = name,
  58. doc_data = db_data_2[0][0],
  59. data_type = 'backlink'
  60. )
  61. markup_data = markup_data if markup_data != '' else 'normal'
  62. if admin_check(conn) == 1:
  63. document_top = flask.request.form.get('document_top', '')
  64. acl_text += 'document_top\n'
  65. acl_text += document_top + '\n\n'
  66. curs.execute(db_change("delete from data_set where doc_name = ? and set_name = 'document_top'"), [name])
  67. curs.execute(db_change("insert into data_set (doc_name, doc_rev, set_name, set_data) values (?, '', 'document_top', ?)"), [name, document_top])
  68. document_editor_top = flask.request.form.get('document_editor_top', '')
  69. acl_text += 'document_editor_top\n'
  70. acl_text += document_editor_top + '\n\n'
  71. curs.execute(db_change("delete from data_set where doc_name = ? and set_name = 'document_editor_top'"), [name])
  72. curs.execute(db_change("insert into data_set (doc_name, doc_rev, set_name, set_data) values (?, '', 'document_editor_top', ?)"), [name, document_editor_top])
  73. admin_check(conn, 5, check_data)
  74. history_plus(conn,
  75. name,
  76. acl_text,
  77. time,
  78. ip,
  79. acl_result[7],
  80. '0',
  81. mode = 'setting'
  82. )
  83. return redirect(conn, '/acl/' + url_pas(name))
  84. else:
  85. data = '<h2>' + get_lang(conn, 'acl') + '</h2>'
  86. acl_list = get_acl_list('user') if re.search(r'^user:', name) else get_acl_list()
  87. if not re.search(r'^user:', name):
  88. acl_get_list = [
  89. [get_lang(conn, 'view_acl'), 'view', '3'],
  90. [get_lang(conn, 'document_acl'), 'decu', '4'],
  91. [get_lang(conn, 'document_edit_acl'), 'document_edit_acl', '5'],
  92. [get_lang(conn, 'document_edit_request_acl'), 'document_edit_request_acl', '5'],
  93. [get_lang(conn, 'document_move_acl'), 'document_move_acl', '5'],
  94. [get_lang(conn, 'document_delete_acl'), 'document_delete_acl', '5'],
  95. [get_lang(conn, 'discussion_acl'), 'dis', '3'],
  96. ]
  97. else:
  98. acl_get_list = [
  99. [get_lang(conn, 'document_acl'), 'decu', '2']
  100. ]
  101. for i in acl_get_list:
  102. data += '' + \
  103. '<h' + i[2] + '>' + i[0] + '</h' + i[2] + '>' + \
  104. '<select name="' + i[1] + '" ' + check_ok + '>' + \
  105. ''
  106. curs.execute(db_change("select data from acl where title = ? and type = ?"), [name, i[1]])
  107. acl_data = curs.fetchall()
  108. for data_list in acl_list:
  109. check = 'selected="selected"' if acl_data and acl_data[0][0] == data_list else ''
  110. data += '<option value="' + data_list + '" ' + check + '>' + (data_list if data_list != '' else 'normal') + '</option>'
  111. data += '</select>'
  112. data += '<hr class="main_hr">'
  113. date_value = ''
  114. curs.execute(db_change("select set_data from data_set where doc_name = ? and doc_rev = ? and set_name = 'acl_date'"), [name, i[1]])
  115. db_data = curs.fetchall()
  116. if db_data:
  117. date_value = db_data[0][0]
  118. data += '<input type="date" ' + check_ok + ' value="' + date_value + '" name="' + i[1] + '_date" pattern="\\d{4}-\\d{2}-\\d{2}">'
  119. data += '<hr class="main_hr">'
  120. curs.execute(db_change("select data from acl where title = ? and type = ?"), [name, 'why'])
  121. acl_data = curs.fetchall()
  122. acl_why = html.escape(acl_data[0][0]) if acl_data else ''
  123. data += '' + \
  124. '<h3>' + get_lang(conn, 'why') + '</h3>' + \
  125. '<input value="' + acl_why + '" ' + check_ok + ' placeholder="' + get_lang(conn, 'why') + '" name="why" ' + check_ok + '>' + \
  126. '<hr class="main_hr">' + \
  127. ''
  128. data += '''
  129. <h3>''' + get_lang(conn, 'explanation') + '''</h3>
  130. <span id="exp"></span>
  131. <ul class="opennamu_ul">
  132. <li>normal : ''' + get_lang(conn, 'unset') + '''</li>
  133. <li>admin : ''' + get_lang(conn, 'admin_acl') + '''</li>
  134. <li>user : ''' + get_lang(conn, 'member_acl') + '''</li>
  135. <li>50_edit : ''' + get_lang(conn, '50_edit_acl') + '''</li>
  136. <li>all : ''' + get_lang(conn, 'all_acl') + '''</li>
  137. <li>email : ''' + get_lang(conn, 'email_acl') + '''</li>
  138. <li>owner : ''' + get_lang(conn, 'owner_acl') + '''</li>
  139. <li>ban : ''' + get_lang(conn, 'ban_acl') + '''</li>
  140. <li>before : ''' + get_lang(conn, 'before_acl') + '''</li>
  141. <li>30_day : ''' + get_lang(conn, '30_day_acl') + '''</li>
  142. <li>ban_admin : ''' + get_lang(conn, 'ban_admin_acl') + '''</li>
  143. <li>not_all : ''' + get_lang(conn, 'not_all_acl') + '''</li>
  144. <li>90_day : ''' + get_lang(conn, '90_day_acl') + '''</li>
  145. <li>up_to_level_3 : ''' + get_lang(conn, 'up_to_level_3') + '''</li>
  146. <li>up_to_level_10 : ''' + get_lang(conn, 'up_to_level_10') + '''</li>
  147. </ul>
  148. <h2>''' + get_lang(conn, 'markup') + '''</h2>
  149. '''
  150. curs.execute(db_change("select set_data from data_set where doc_name = ? and set_name = 'document_markup'"), [name])
  151. db_data = curs.fetchall()
  152. markup_load = db_data[0][0] if db_data and db_data[0][0] != '' else ''
  153. markup_list = ['normal'] + get_init_set_list('markup')['list']
  154. markup_html = ''
  155. for for_a in markup_list:
  156. if markup_load == for_a:
  157. markup_html = '<option value="' + (for_a if for_a != 'normal' else '') + '">' + for_a + '</option>' + markup_html
  158. else:
  159. markup_html += '<option value="' + (for_a if for_a != 'normal' else '') + '">' + for_a + '</option>'
  160. markup_html = '<select name="document_markup" ' + check_ok + '>' + markup_html + '</select>'
  161. data += markup_html
  162. save_button = '<button type="submit" ' + check_ok + '>' + get_lang(conn, 'save') + '</button>'
  163. if admin_check(conn) != 1:
  164. check_ok = 'disabled'
  165. curs.execute(db_change("select set_data from data_set where doc_name = ? and set_name = 'document_top'"), [name])
  166. db_data = curs.fetchall()
  167. document_top = db_data[0][0] if db_data and db_data[0][0] != '' else ''
  168. curs.execute(db_change("select set_data from data_set where doc_name = ? and set_name = 'document_editor_top'"), [name])
  169. db_data = curs.fetchall()
  170. document_editor_top = db_data[0][0] if db_data and db_data[0][0] != '' else ''
  171. data += '''
  172. <h2>''' + get_lang(conn, 'document_top') + ''' (HTML)</h2>
  173. <textarea ''' + check_ok + ''' class="opennamu_textarea_100" name="document_top">''' + html.escape(document_top) + '''</textarea>
  174. <h2>''' + get_lang(conn, 'document_editor_top') + ''' (HTML)</h2>
  175. <textarea ''' + check_ok + ''' class="opennamu_textarea_100" name="document_editor_top">''' + html.escape(document_editor_top) + '''</textarea>
  176. '''
  177. data += '<hr class="main_hr">'
  178. save_button += ' <button type="button" onclick="w_set_reset();" ' + check_ok + '>' + get_lang(conn, 'reset') + '</button>'
  179. return easy_minify(conn, flask.render_template(skin_check(conn),
  180. imp = [name, wiki_set(conn), wiki_custom(conn), wiki_css(['(' + get_lang(conn, 'setting') + ')', 0])],
  181. data = '''
  182. <form method="post">
  183. <script defer src="/views/main_css/js/route/w_set.js''' + cache_v() + '''"></script>
  184. <a href="/setting/acl">(''' + get_lang(conn, 'main_acl_setting') + ''')</a>
  185. <hr class="main_hr">
  186. ''' + render_simple_set(conn, data) + '''
  187. ''' + save_button + '''
  188. </form>
  189. ''',
  190. menu = [
  191. ['w/' + url_pas(name), get_lang(conn, 'return')],
  192. ['manager', get_lang(conn, 'admin')]
  193. ]
  194. ))