Quellcode durchsuchen

아마도 무조건 버그가 있을 것 같은 편집 요청

잉여개발기 (SPDV) vor 6 Jahren
Ursprung
Commit
0ed1ae5dc6
7 geänderte Dateien mit 160 neuen und 95 gelöschten Zeilen
  1. 4 4
      app.py
  2. 2 0
      language/en-US.json
  3. 3 1
      language/ko-KR.json
  4. 109 57
      route/edit.py
  5. 26 26
      route/recent_changes.py
  6. 14 5
      route/tool/func.py
  7. 2 2
      version.json

+ 4 - 4
app.py

@@ -165,7 +165,7 @@ create_data['all_data'] = [
     'acl', 
     'inter', 
     'html_filter',
-    'oauth_conn'
+    'oauth_conn',
 ]
 for i in create_data['all_data']:
     try:
@@ -437,9 +437,9 @@ def view_raw(name = None, topic_num = None, num = None):
 def edit_revert(name = None):
     return edit_revert_2(conn, name)
 
-@app.route('/edit/<everything:name>', methods=['POST', 'GET'])
-def edit(name = None):
-    return edit_2(conn, name)
+@app.route('/<regex("edit|edit_req"):tool>/<everything:name>', methods=['POST', 'GET'])
+def edit(tool = 'edit', name = None):
+    return edit_2(conn, tool, name)
         
 @app.route('/delete/<everything:name>', methods=['POST', 'GET'])
 def edit_delete(name = None):

+ 2 - 0
language/en-US.json

@@ -184,6 +184,8 @@
         "old_page" : "Old decument(s)",
         "skin_set" : "Skin setting(s)",
         "many_delete" : "Bulk delete",
+        "edit_req" : "Edit Request",
+        "edit_req_check" : "Check Edit Request",
         "_comment_2.1_" : "Filter",
             "_comment_2.1.1_" : "List",
                 "interwiki_list" : "Interwiki(s) list",

+ 3 - 1
language/ko-KR.json

@@ -307,5 +307,7 @@
     "content" : "내용",
     "upload_acl" : "업로드 ACL",
     "default_view_acl" : "기본 보기 ACL",
-    "topic_delete" : "토론 삭제"
+    "topic_delete" : "토론 삭제",
+    "edit_req" : "편집 요청",
+    "edit_req_check" : "편집 요청 검사"
 }

+ 109 - 57
route/edit.py

@@ -1,11 +1,34 @@
 from .tool.func import *
 
-def edit_2(conn, name):
+def edit_2(conn, tool, name):
     curs = conn.cursor()
 
     ip = ip_check()
-    if acl_check(name) == 1:
-        return re_error('/ban')
+    ban = acl_check(name)
+    get_ver = flask.request.args.get('r', None)
+
+    if ban == 1:
+        if tool == 'edit':
+            return redirect('/edit_req/' + url_pas(name))
+        elif tool == 'edit_req' and (re.search('^user:', name) or ban_check() == 1 or get_ver):
+            return re_error('/ban')
+    else:
+        if tool == 'edit_req':
+            if not get_ver:
+                return redirect('/edit/' + url_pas(name))
+            else:
+                get_ver = int(number_check(get_ver))
+        
+    if not get_ver:
+        curs.execute(db_change("select data from data where title = ?"), [name])
+        old = curs.fetchall()
+        if tool == 'edit_req' and not old:
+            return redirect('/w/' + url_pas(name))
+    else:
+        curs.execute(db_change("select data, send, ip, date from history where title = ? and id = ? and type = 'req'"), [name, str(get_ver)])
+        old = curs.fetchall()
+        if not old:
+            return redirect('/w/' + url_pas(name))
     
     if flask.request.method == 'POST':
         if captcha_post(flask.request.form.get('g-recaptcha-response', '')) == 1:
@@ -14,7 +37,8 @@ def edit_2(conn, name):
             captcha_post('', 0)
 
         if flask.request.form.get('otent', '') == flask.request.form.get('content', ''):
-            return redirect('/w/' + url_pas(name))
+            if not (tool == 'edit_req' and get_ver):
+                return redirect('/w/' + url_pas(name))
             
         if edit_filter_do(flask.request.form.get('content', '')) == 1:
             return re_error('/error/21')
@@ -22,58 +46,76 @@ def edit_2(conn, name):
         today = get_time()
         content = savemark(flask.request.form.get('content', ''))
         
-        curs.execute(db_change("select data from data where title = ?"), [name])
-        old = curs.fetchall()
         if old:
             leng = leng_check(len(flask.request.form.get('otent', '')), len(content))
             
             if flask.request.args.get('section', None):
                 content = old[0][0].replace(flask.request.form.get('otent', ''), content)
-                
-            curs.execute(db_change("update data set data = ? where title = ?"), [content, name])
         else:
             leng = '+' + str(len(content))
-            
-            curs.execute(db_change("insert into data (title, data) values (?, ?)"), [name, content])
 
-            curs.execute(db_change('select data from other where name = "count_all_title"'))
-            curs.execute(db_change("update other set data = ? where name = 'count_all_title'"), [str(int(curs.fetchall()[0][0]) + 1)])
+        if tool == 'edit' or (tool == 'edit_req' and get_ver):
+            if old:
+                curs.execute(db_change("update data set data = ? where title = ?"), [content, name])
+            else:
+                curs.execute(db_change("insert into data (title, data) values (?, ?)"), [name, content])
 
-        curs.execute(db_change("select user from scan where title = ?"), [name])
-        for _ in curs.fetchall():
-            curs.execute(db_change("insert into alarm (name, data, date) values (?, ?, ?)"), [
-                ip, 
-                ip + ' | <a href="/w/' + url_pas(name) + '">' + name + '</a> | Edit', 
-                today
-            ])
+                curs.execute(db_change('select data from other where name = "count_all_title"'))
+                curs.execute(db_change("update other set data = ? where name = 'count_all_title'"), [str(int(curs.fetchall()[0][0]) + 1)])
 
-        history_plus(
-            name,
-            content,
-            today,
-            ip,
-            flask.request.form.get('send', ''),
-            leng
-        )
-        
-        curs.execute(db_change("delete from back where link = ?"), [name])
-        curs.execute(db_change("delete from back where title = ? and type = 'no'"), [name])
-        
-        render_set(
-            title = name,
-            data = content,
-            num = 1
-        )
+            curs.execute(db_change("select user from scan where title = ?"), [name])
+            for scan_user in curs.fetchall():
+                curs.execute(db_change("insert into alarm (name, data, date) values (?, ?, ?)"), [
+                    scan_user[0],
+                    ip + ' | <a href="/w/' + url_pas(name) + '">' + name + '</a> | Edit', 
+                    today
+                ])
+
+            if tool == 'edit_req':
+                curs.execute(db_change("update history set type = '', send = ? where title = ? and id = ? and ip = ? and date = ? and type = 'req'"), [
+                    old[0][1] + ' (' + ip + ' check)', 
+                    name,
+                    str(get_ver),
+                    old[0][2],
+                    old[0][3]
+                ])
+            else:
+                history_plus(
+                    name,
+                    content,
+                    today,
+                    ip,
+                    flask.request.form.get('send', ''),
+                    leng
+                )
+            
+            curs.execute(db_change("delete from back where link = ?"), [name])
+            curs.execute(db_change("delete from back where title = ? and type = 'no'"), [name])
+            
+            render_set(
+                title = name,
+                data = content,
+                num = 1
+            )
+        else:
+            history_plus(
+                name,
+                content,
+                today,
+                ip,
+                flask.request.form.get('send', ''),
+                leng,
+                '',
+                'req'
+            )
         
         conn.commit()
         
         return redirect('/w/' + url_pas(name))
     else:            
-        curs.execute(db_change("select data from data where title = ?"), [name])
-        new = curs.fetchall()
-        if new:
-            if flask.request.args.get('section', None):
-                data = re.sub('\n(?P<in>={1,6})', '<br>\g<in>', html.escape('\n' + re.sub('\r\n', '\n', new[0][0]) + '\n'))
+        if old:
+            if flask.request.args.get('section', None) and tool == 'edit':
+                data = re.sub('\n(?P<in>={1,6})', '<br>\g<in>', html.escape('\n' + re.sub('\r\n', '\n', old[0][0]) + '\n'))
                 i = 0
 
                 while 1:
@@ -90,26 +132,36 @@ def edit_2(conn, name):
                     else:
                         break
             else:
-                data = new[0][0]
+                data = old[0][0]
         else:
             data = ''
             
         data_old = data
         
-        if not flask.request.args.get('section', None):
-            get_name =  '''
-                <a href="/manager/15?plus=''' + url_pas(name) + '">(' + load_lang('load') + ')</a> <a href="/edit_filter">(' + load_lang('edit_filter_rule') + ''')</a>
-                <hr class=\"main_hr\">
-            '''
+        if tool == 'edit':
+            if not flask.request.args.get('section', None):
+                get_name =  '''
+                    <a href="/manager/15?plus=''' + url_pas(name) + '">(' + load_lang('load') + ')</a> <a href="/edit_filter">(' + load_lang('edit_filter_rule') + ''')</a>
+                    <hr class=\"main_hr\">
+                '''
+            else:
+                get_name = ''
+                
+            if flask.request.args.get('plus', None):
+                curs.execute(db_change("select data from data where title = ?"), [flask.request.args.get('plus', 'test')])
+                get_data = curs.fetchall()
+                if get_data:
+                    data = get_data[0][0]
+                    get_name = ''
+
+            save_button = load_lang('save')
+            menu_plus = [['delete/' + url_pas(name), load_lang('delete')], ['move/' + url_pas(name), load_lang('move')]]
+            sub = load_lang('edit')
         else:
             get_name = ''
-            
-        if flask.request.args.get('plus', None):
-            curs.execute(db_change("select data from data where title = ?"), [flask.request.args.get('plus', 'test')])
-            get_data = curs.fetchall()
-            if get_data:
-                data = get_data[0][0]
-                get_name = ''
+            save_button = load_lang('edit_req') if not get_ver else load_lang('edit_req_check') 
+            menu_plus = [[]]
+            sub = load_lang('edit_req')
 
         curs.execute(db_change('select data from other where name = "edit_bottom_text"'))
         sql_d = curs.fetchall()
@@ -126,7 +178,7 @@ def edit_2(conn, name):
             p_text = load_lang('defalut_edit_help')
 
         return easy_minify(flask.render_template(skin_check(), 
-            imp = [name, wiki_set(), custom(), other2([' (' + load_lang('edit') + ')', 0])],
+            imp = [name, wiki_set(), custom(), other2([' (' + sub + ')', 0])],
             data =  get_name + '''
                 <form method="post">
                     <script>do_stop_exit();</script>
@@ -137,12 +189,12 @@ def edit_2(conn, name):
                     <input placeholder="''' + load_lang('why') + '''" name="send" type="text">
                     <hr class=\"main_hr\">
                     ''' + captcha_get() + ip_warring() + '''
-                    <button id="save" type="submit" onclick="go_save_zone = 1;">''' + load_lang('save') + '''</button>
+                    <button id="save" type="submit" onclick="go_save_zone = 1;">''' + save_button + '''</button>
                     <button id="preview" type="button" onclick="load_preview(\'''' + url_pas(name) + '\')">' + load_lang('preview') + '''</button>
                 </form>
                 ''' + b_text + '''
                 <hr class=\"main_hr\">
                 <div id="see_preview"></div>
             ''',
-            menu = [['w/' + url_pas(name), load_lang('return')], ['delete/' + url_pas(name), load_lang('delete')], ['move/' + url_pas(name), load_lang('move')]]
+            menu = [['w/' + url_pas(name), load_lang('return')]] + menu_plus
         ))

+ 26 - 26
route/recent_changes.py

@@ -37,19 +37,18 @@ def recent_changes_2(conn, name, tool):
                     <td id="main_table_width">''' + load_lang('time') + '''</td></tr>
                 '''
                 
-                # 기본적인 move만 구현
                 tool_select = flask.request.args.get('tool', None)
                 if tool_select and tool_select == 'move':
                     curs.execute(db_change('' + \
                         'select id, title, date, ip, send, leng from history ' + \
-                        'where send like ? or send like ? ' + \
+                        'where (send like ? or send like ?) and type = "" ' + \
                         'order by id + 0 desc ' + \
                         "limit ?, 50" + \
                     ''), ['%(<a>' + name +'</a>%', '%<a>' + name + '</a> move)', sql_num])
                 else:
                     curs.execute(db_change('' + \
                         'select id, title, date, ip, send, leng from history ' + \
-                        'where title = ? ' + \
+                        'where title = ? and type = "" ' + \
                         'order by id + 0 desc ' + \
                         "limit ?, 50" + \
                     ''), [name, sql_num])
@@ -65,7 +64,7 @@ def recent_changes_2(conn, name, tool):
                 
                 curs.execute(db_change('' + \
                     'select id, title, date, ip, send, leng from history ' + \
-                    "where ip = ? order by date desc limit ?, 50" + \
+                    "where ip = ? and type = "" order by date desc limit ?, 50" + \
                 ''), [name, sql_num])
         else:
             num = int(number_check(flask.request.args.get('num', '1')))
@@ -81,16 +80,24 @@ def recent_changes_2(conn, name, tool):
                 </tr>
             '''
 
-            set_user = flask.request.args.get('set', 'normal')
-            if set_user == 'normal':
-                div = '<a href="?set=user">(' + load_lang('user_document') + ')</a>' + div
+            set_type = flask.request.args.get('set', 'normal')
+            if set_type == 'normal':
+                div = '<a href="?set=user">(' + load_lang('user_document') + ')</a> <a href="?set=req">(' + load_lang('edit_req') + ')</a>' + div
 
-            curs.execute(db_change('' + \
-                'select id, title, date, ip, send, leng from history ' + \
-                "where " + ('' if set_user == 'user' else 'not ') + "title like 'user:%' " + \
-                'order by date desc ' + \
-                'limit ?, 50' + \
-            ''), [sql_num])
+            if set_type == 'req':
+                curs.execute(db_change('' + \
+                    'select id, title, date, ip, send, leng from history ' + \
+                    "where type = 'req' " + \
+                    'order by date desc ' + \
+                    'limit ?, 50' + \
+                ''), [sql_num])
+            else:
+                curs.execute(db_change('' + \
+                    'select id, title, date, ip, send, leng from history ' + \
+                    "where " + ('' if set_type == 'user' else 'not ') + "title like 'user:%' and type = '' " + \
+                    'order by date desc ' + \
+                    'limit ?, 50' + \
+                ''), [sql_num])
 
         data_list = curs.fetchall()
         for data in data_list:    
@@ -147,8 +154,11 @@ def recent_changes_2(conn, name, tool):
             if tool == 'history':
                 title = '<a href="/w/' + url_pas(name) + '?num=' + data[0] + '">r' + data[0] + '</a> '
             else:
-                title = '<a href="/w/' + url_pas(data[1]) + '">' + html.escape(data[1]) + '</a> '
-                title += '<a href="/history/' + url_pas(data[1]) + '">(r' + data[0] + ')</a> '
+                if set_type == 'req':
+                    title = '<a href="/edit_req/' + url_pas(data[1]) + '?r=' + data[0] + '">' + html.escape(data[1]) + ' (r' + data[0] + ')</a> '
+                else:
+                    title = '<a href="/w/' + url_pas(data[1]) + '">' + html.escape(data[1]) + '</a> '
+                    title += '<a href="/history/' + url_pas(data[1]) + '">(r' + data[0] + ')</a> '
 
             div +=  '''
                 <tr ''' + style[0] + '''>
@@ -183,29 +193,19 @@ def recent_changes_2(conn, name, tool):
                     <hr class=\"main_hr\">
                 ''' + div
                 title = name
-                
                 sub += ' (' + load_lang('history') + ')'
-                
                 menu = [['w/' + url_pas(name), load_lang('document')], ['raw/' + url_pas(name), load_lang('raw')]]
-                
                 div += next_fix('/history/' + url_pas(name) + '?num=', num, data_list)
             else:
-                curs.execute(db_change("select end from ban where block = ?"), [name])
-                if curs.fetchall():
-                    sub += ' (' + load_lang('blocked') + ')'
-
                 title = load_lang('edit_record')
-                
                 menu = [['other', load_lang('other')], ['user', load_lang('user')], ['count/' + url_pas(name), load_lang('count')]]
-                
                 div += next_fix('/record/' + url_pas(name) + '?num=', num, data_list)
         else:
             menu = 0
             title = load_lang('recent_change')
-                
             div += next_fix('/recent_changes?num=', num, data_list)
 
-            if set_user == 'user':
+            if set_type == 'user':
                 sub = ' (' + load_lang('user') + ')'
                 menu = [['recent_changes', load_lang('return')]]
         

+ 14 - 5
route/tool/func.py

@@ -978,9 +978,17 @@ def rd_plus(title, sub, date):
 
     conn.commit()
 
-def history_plus(title, data, date, ip, send, leng, t_check = ''):
-    curs.execute(db_change("select id from history where title = ? order by id + 0 desc limit 1"), [title])
+def history_plus(title, data, date, ip, send, leng, t_check = '', d_type = ''):
+    curs.execute(db_change("select id from history where title = ? and type = '' order by id + 0 desc limit 1"), [title])
     id_data = curs.fetchall()
+    id_data = str(int(id_data[0][0]) + 1) if id_data else '1'
+
+    curs.execute(db_change("select title from history where title = ? and id = ? and type = 'req'"), [name, id_data])
+    if curs.fetchall():
+        curs.execute(db_change("update history set type = 'req_close' where title = ? and id = ? and type = 'req'"), [
+            name,
+            id_data
+        ])
 
     send = re.sub('\(|\)|<|>', '', send)
 
@@ -990,14 +998,15 @@ def history_plus(title, data, date, ip, send, leng, t_check = ''):
     if t_check != '':
         send += ' (' + t_check + ')'
 
-    curs.execute(db_change("insert into history (id, title, data, date, ip, send, leng, hide) values (?, ?, ?, ?, ?, ?, ?, '')"), [
-        str(int(id_data[0][0]) + 1) if id_data else '1',
+    curs.execute(db_change("insert into history (id, title, data, date, ip, send, leng, hide, type) values (?, ?, ?, ?, ?, ?, ?, '', ?)"), [
+        id_data,
         title,
         data,
         date,
         ip,
         send,
-        leng
+        leng,
+        d_type
     ])
 
 def leng_check(first, second):

+ 2 - 2
version.json

@@ -1,7 +1,7 @@
 {
     "master" : {
-        "r_ver" : "v3.1.5-master-28",
-        "c_ver" : "400006",
+        "r_ver" : "v3.1.5-master-29",
+        "c_ver" : "400007",
         "s_ver" : "6"
     }, "stable" : {
         "r_ver" : "v3.1.4-stable-03",