view_set.py 13 KB

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