Forráskód Böngészése

https://github.com/openNAMU/openNAMU/issues/1453

잉여개발기 (SPDV) 2 éve
szülő
commit
0090f7e89e

+ 5 - 0
app.py

@@ -311,6 +311,9 @@ app.route('/filter/extension_filter/del/<everything:name>', defaults = { 'tool'
 app.route('/list/document/old')(list_old_page)
 app.route('/list/document/old/<int:num>')(list_old_page)
 
+app.route('/list/document/no_link')(list_no_link)
+app.route('/list/document/no_link/<int:num>')(list_no_link)
+
 app.route('/list/document/acl')(list_acl)
 app.route('/list/document/acl/<int:arg_num>')(list_acl)
 
@@ -397,7 +400,9 @@ app.route('/history_add/<everything:name>', methods = ['POST', 'GET'])(recent_hi
 
 # Func-view
 app.route('/xref/<everything:name>')(view_xref)
+app.route('/xref_page/<int:num>/<everything:name>')(view_xref)
 app.route('/xref_this/<everything:name>', defaults = { 'xref_type' : 2 })(view_xref)
+app.route('/xref_this_page/<int:num>/<everything:name>', defaults = { 'xref_type' : 2 })(view_xref)
 
 app.route('/raw/<everything:name>')(view_raw_2)
 app.route('/raw_acl/<everything:name>', defaults = { 'doc_acl' : 1 })(view_raw_2)

+ 1 - 0
route/__init__.py

@@ -55,6 +55,7 @@ from route.list_admin_group import list_admin_group_2
 from route.list_image_file import list_image_file
 from route.list_long_page import list_long_page
 from route.list_old_page import list_old_page
+from route.list_no_link import list_no_link
 from route.list_please import list_please
 from route.list_title_index import list_title_index
 from route.list_user import list_user

+ 0 - 3
route/edit.py

@@ -204,9 +204,6 @@ def edit(name = 'Test', section = 0, do_type = ''):
                 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(
                 doc_name = name,
                 doc_data = content,

+ 0 - 3
route/edit_backlink_reset.py

@@ -7,9 +7,6 @@ def edit_backlink_reset(name = 'Test'):
         curs.execute(db_change("select data from data where title = ?"), [name])
         old = curs.fetchall()
         if old:
-            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(
                 doc_name = name,
                 doc_data = old[0][0],

+ 1 - 0
route/edit_delete.py

@@ -53,6 +53,7 @@ def edit_delete(name):
 
                 curs.execute(db_change("delete from back where link = ?"), [name])
                 curs.execute(db_change("delete from data where title = ?"), [name])
+                
                 conn.commit()
 
             curs.execute(db_change('select data from other where name = "count_all_title"'))

+ 23 - 26
route/edit_revert.py

@@ -37,34 +37,31 @@ def edit_revert(name, num):
             if do_edit_filter(data[0][0]) == 1:
                 return re_error('/error/21')
 
-            curs.execute(db_change("delete from back where link = ?"), [name])
-
-            if data:
-                curs.execute(db_change("select data from data where title = ?"), [name])
-                data_old = curs.fetchall()
-                if data_old:
-                    leng = leng_check(len(data_old[0][0]), len(data[0][0]))
-                    curs.execute(db_change("update data set data = ? where title = ?"), [data[0][0], name])
-                else:
-                    leng = '+' + str(len(data[0][0]))
-                    curs.execute(db_change("insert into data (title, data) values (?, ?)"), [name, data[0][0]])
+            curs.execute(db_change("select data from data where title = ?"), [name])
+            data_old = curs.fetchall()
+            if data_old:
+                leng = leng_check(len(data_old[0][0]), len(data[0][0]))
+                curs.execute(db_change("update data set data = ? where title = ?"), [data[0][0], name])
+            else:
+                leng = '+' + str(len(data[0][0]))
+                curs.execute(db_change("insert into data (title, data) values (?, ?)"), [name, data[0][0]])
 
-                history_plus(
-                    name,
-                    data[0][0],
-                    get_time(),
-                    ip_check(),
-                    flask.request.form.get('send', ''),
-                    leng,
-                    t_check = 'r' + str(num),
-                    mode = 'revert'
-                )
+            history_plus(
+                name,
+                data[0][0],
+                get_time(),
+                ip_check(),
+                flask.request.form.get('send', ''),
+                leng,
+                t_check = 'r' + str(num),
+                mode = 'revert'
+            )
 
-                render_set(
-                    doc_name = name,
-                    doc_data = data[0][0],
-                    data_type = 'backlink'
-                )
+            render_set(
+                doc_name = name,
+                doc_data = data[0][0],
+                data_type = 'backlink'
+            )
 
             conn.commit()
 

+ 30 - 0
route/list_no_link.py

@@ -0,0 +1,30 @@
+from .tool.func import *
+
+def list_no_link(num = 1):
+    with get_db_connect() as conn:
+        curs = conn.cursor()
+        
+        sql_num = (num * 50 - 50) if num * 50 > 0 else 0
+        
+        div = '<ul class="opennamu_ul">'
+        
+        curs.execute(db_change("select doc_name, set_data from data_set where set_name = 'link_count' and doc_rev = '' and set_data = '0' limit ?, 50"), [sql_num])
+        n_list = curs.fetchall()
+        for data in n_list:
+            div += '<li>'
+            div += data[1] + ' | <a href="/w/' + url_pas(data[0]) + '">' + html.escape(data[0]) + '</a>'
+            
+            curs.execute(db_change("select set_data from data_set where doc_name = ? and set_name = 'doc_type'"), [data[0]])
+            db_data = curs.fetchall()
+            if db_data and db_data[0][0] != '':
+                div += ' | ' + db_data[0][0]
+
+            div += '</li>'
+        
+        div += '</ul>' + next_fix('/list/document/no_link/', num, n_list)
+        
+        return easy_minify(flask.render_template(skin_check(),
+            imp = [load_lang('no_link_document_list'), wiki_set(), wiki_custom(), wiki_css([0, 0])],
+            data = div,
+            menu = [['other', load_lang('return')]]
+        ))

+ 9 - 7
route/list_old_page.py

@@ -4,20 +4,22 @@ def list_old_page(num = 1):
     with get_db_connect() as conn:
         curs = conn.cursor()
         
-        # 리다이렉트 구분도 넣을 예정
-        # 그 전에 로직 개편하고
         sql_num = (num * 50 - 50) if num * 50 > 0 else 0
         
-        curs.execute(db_change('select data from other where name = "count_all_title"'))
-        if int(curs.fetchall()[0][0]) > 30000:
-            return re_error('/error/25')
-        
         div = '<ul class="opennamu_ul">'
         
         curs.execute(db_change("select doc_name, set_data from data_set where set_name = 'last_edit' and doc_rev = '' order by set_data asc limit ?, 50"), [sql_num])
         n_list = curs.fetchall()
         for data in n_list:
-            div += '<li>' + data[1] + ' | <a href="/w/' + url_pas(data[0]) + '">' + html.escape(data[0]) + '</a></li>'
+            div += '<li>'
+            div += data[1] + ' | <a href="/w/' + url_pas(data[0]) + '">' + html.escape(data[0]) + '</a>'
+            
+            curs.execute(db_change("select set_data from data_set where doc_name = ? and set_name = 'doc_type'"), [data[0]])
+            db_data = curs.fetchall()
+            if db_data and db_data[0][0] != '':
+                div += ' | ' + db_data[0][0]
+
+            div += '</li>'
         
         div += '</ul>' + next_fix('/list/document/old/', num, n_list)
         

+ 1 - 0
route/main_tool_other.py

@@ -29,6 +29,7 @@ def main_tool_other():
                     <li><a href="/list/document/long">''' + load_lang('long_page') + '''</a></li>
                     <li><a href="/list/document/short">''' + load_lang('short_page') + '''</a></li>
                     <li><a href="/list/document/old">''' + load_lang('old_page') + '''</a></li>
+                    <li><a href="/list/document/no_link">''' + load_lang('no_link_document_list') + '''</a></li>
                 </ul>
                 <h3>''' + load_lang('user') + '''</h3>
                 <ul class="opennamu_ul">

+ 2 - 4
route/tool/func.py

@@ -2515,15 +2515,13 @@ def history_plus(title, data, date, ip, send, leng, t_check = '', mode = ''):
             data_set_exist = '' if t_check != 'delete' else '1'
 
             curs.execute(db_change("select doc_name from data_set where doc_name = ? and set_name = 'last_edit'"), [title])
-            db_data = curs.fetchall()
-            if db_data:
+            if curs.fetchall():
                 curs.execute(db_change("update data_set set set_data = ?, doc_rev = ? where doc_name = ? and set_name = 'last_edit'"), [date, data_set_exist, title])
             else:
                 curs.execute(db_change("insert into data_set (doc_name, doc_rev, set_name, set_data) values (?, ?, 'last_edit', ?)"), [title, data_set_exist, date])
 
             curs.execute(db_change("select doc_name from data_set where doc_name = ? and set_name = 'length'"), [title])
-            db_data = curs.fetchall()
-            if db_data:
+            if curs.fetchall():
                 curs.execute(db_change("update data_set set set_data = ?, doc_rev = ? where doc_name = ? and set_name = 'length'"), [len(data), data_set_exist, title])
             else:
                 curs.execute(db_change("insert into data_set (doc_name, doc_rev, set_name, set_data) values (?, ?, 'length', ?)"), [title, data_set_exist, len(data)])

+ 23 - 36
route/tool/func_render.py

@@ -40,25 +40,11 @@ class class_do_render:
             rep_data = db_data[0][0] if db_data else 'namumark'
 
         if rep_data == 'namumark' or rep_data == 'namumark_beta':
-            data_end = class_do_render_namumark(
-                curs,
-                doc_name,
-                doc_data,
-                doc_set,
-                self.lang_data
-            )()
+            data_end = class_do_render_namumark(curs, doc_name, doc_data, doc_set, self.lang_data)()
         elif rep_data == 'raw':
-            data_end = [
-                html.escape(doc_data).replace('\n', '<br>'), 
-                '', 
-                {}
-            ]
+            data_end = [html.escape(doc_data).replace('\n', '<br>'), '', {}]
         else:
-            data_end = [
-                doc_data, 
-                '', 
-                {}
-            ]
+            data_end = [doc_data, '', {}]
 
         if data_type == 'thread' or data_type == 'api_thread':
             def do_thread_a_change(match):
@@ -73,31 +59,32 @@ class class_do_render:
                 else:
                     return ''
 
-            data_end[0] = re.sub(
-                r'&lt;(topic_a(?:_post|_thread)?)&gt;((?:(?!&lt;\/topic_a(?:_post|_thread)?&gt;).)+)&lt;\/topic_a(?:_post|_thread)?&gt;',
-                do_thread_a_change,
-                data_end[0]
-            )
-            data_end[0] = re.sub(
-                r'&lt;topic_call&gt;@(?P<in>(?:(?!&lt;\/topic_call&gt;).)+)&lt;\/topic_call&gt;',
-                '<a href="/w/user:\\g<in>">@\\g<in></a>',
-                data_end[0]
-            )
+            data_end[0] = re.sub(r'&lt;(topic_a(?:_post|_thread)?)&gt;((?:(?!&lt;\/topic_a(?:_post|_thread)?&gt;).)+)&lt;\/topic_a(?:_post|_thread)?&gt;', do_thread_a_change, data_end[0])
+            data_end[0] = re.sub(r'&lt;topic_call&gt;@(?P<in>(?:(?!&lt;\/topic_call&gt;).)+)&lt;\/topic_call&gt;', '<a href="/w/user:\\g<in>">@\\g<in></a>', data_end[0])
 
         if data_type == 'backlink':
-            if 'backlink' in data_end[2]:
-                backlink = data_end[2]['backlink']
-            else:
-                backlink = []
+            curs.execute(db_change("delete from back where link = ?"), [doc_name])
+            curs.execute(db_change("delete from back where title = ? and type = 'no'"), [doc_name])
+
+            curs.execute(db_change("delete from data_set where doc_name = ? and set_name = 'link_count'"), [doc_name])
+            curs.execute(db_change("delete from data_set where doc_name = ? and set_name = 'doc_type'"), [doc_name])
 
+            backlink = data_end[2]['backlink'] if 'backlink' in data_end[2] else []
             if backlink != []:
                 curs.executemany(db_change("insert into back (link, title, type, data) values (?, ?, ?, ?)"), data_end[2]['backlink'])
                 curs.execute(db_change("delete from back where title = ? and type = 'no'"), [doc_name])
 
+            link_count = 0
+            if 'link_count' in data_end[2]:
+                link_count = data_end[2]['link_count']
+
+            curs.execute(db_change("insert into data_set (doc_name, doc_rev, set_name, set_data) values (?, '', 'link_count', ?)"), [doc_name, link_count])
+
+            if 'redirect' in data_end[2] and data_end[2]['redirect'] == 1:
+                curs.execute(db_change("insert into data_set (doc_name, doc_rev, set_name, set_data) values (?, '', 'doc_type', 'redirect')"), [doc_name])
+            else:
+                curs.execute(db_change("insert into data_set (doc_name, doc_rev, set_name, set_data) values (?, '', 'doc_type', '')"), [doc_name])
+            
             self.conn.commit()
 
-        return [
-            data_end[0], 
-            data_end[1],
-            data_end[2]
-        ]
+        return [data_end[0], data_end[1], data_end[2]]

+ 9 - 9
route/tool/func_render_namumark.py

@@ -39,6 +39,7 @@ class class_do_render_namumark:
 
         self.data_math_count = 0
         self.data_redirect = 0
+        self.link_count = 0
 
         self.data_toc = ''
         self.data_footnote = {}
@@ -227,14 +228,7 @@ class class_do_render_namumark:
         doc_set = self.doc_set
         doc_set['doc_include'] = doc_include
 
-        data_end = class_do_render_namumark(
-            self.curs,
-            self.doc_name,
-            data,
-            doc_set,
-            self.lang_data,
-            do_type = 'inter'
-        )()
+        data_end = class_do_render_namumark(self.curs, self.doc_name, data, doc_set, self.lang_data, do_type = 'inter')()
 
         self.render_data_js += data_end[1]
         self.data_include += data_end[2]['include']
@@ -242,6 +236,7 @@ class class_do_render_namumark:
         self.data_backlink = dict(self.data_backlink, **data_end[2]['backlink_dict'])
         self.data_temp_storage = dict(self.data_temp_storage, **data_end[2]['temp_storage'][0])
         self.data_temp_storage_count += data_end[2]['temp_storage'][1]
+        self.link_count += data_end[2]['link_count']
 
         return data_end[0]
 
@@ -1197,6 +1192,8 @@ class class_do_render_namumark:
                         link_sub = ''
                         link_sub_storage = link_main_org
 
+                    self.link_count += 1
+
                     data_name = self.get_tool_data_storage('<a class="' + link_exist + ' ' + link_same + '" title="' + link_title + '" href="' + link_main + link_data_sharp + '">' + link_sub_storage, '</a>', link_data_full)
                     self.render_data = re.sub(link_regex, lambda x : ('<' + data_name + '>' + link_sub + '</' + data_name + '>'), self.render_data, 1)
 
@@ -2340,6 +2337,7 @@ class class_do_render_namumark:
         data_backlink_dict = self.data_backlink
         self.data_backlink = [[self.doc_name, for_a, for_b, self.data_backlink[for_a][for_b]] for for_a in self.data_backlink for for_b in self.data_backlink[for_a]]
 
+        # 여기 수정시 do_inter_render도 수정 필요
         return [
             self.render_data, # html
             self.render_data_js, # js
@@ -2349,6 +2347,8 @@ class class_do_render_namumark:
                 'include' : self.data_include, # include data
                 'footnote' : self.data_footnote_all, # footnote
                 'category' : self.data_category_list,
-                'temp_storage' : [self.data_temp_storage, self.data_temp_storage_count]
+                'temp_storage' : [self.data_temp_storage, self.data_temp_storage_count],
+                'link_count' : self.link_count,
+                'redirect' : self.data_redirect
             } # other
         ]

+ 12 - 5
route/view_xref.py

@@ -1,22 +1,19 @@
 from .tool.func import *
 
-def view_xref(name = 'Test', xref_type = 1):
+def view_xref(name = 'Test', xref_type = 1, num = 1):
     with get_db_connect() as conn:
         curs = conn.cursor()
 
         if acl_check(name, 'render') == 1:
             return re_error('/ban')
 
-        num = int(number_check(flask.request.args.get('num', '1')))
         sql_num = (num * 50 - 50) if num * 50 > 0 else 0
 
         if xref_type == 1:
             div = '<a href="/xref_this/' + url_pas(name) + '">(' + load_lang('link_in_this') + ')</a><hr class="main_hr">'
-
             data_sub = '(' + load_lang('backlink') + ')'
         else:
             div = '<a href="/xref/' + url_pas(name) + '">(' + load_lang('normal') + ')</a><hr class="main_hr">'
-
             data_sub = '(' + load_lang('link_in_this') + ')'
 
         div += '<ul class="opennamu_ul">'
@@ -25,6 +22,11 @@ def view_xref(name = 'Test', xref_type = 1):
         db_data = curs.fetchall()
         link_case_insensitive = ' collate nocase' if db_data and db_data[0][0] != '' else ''
 
+        if xref_type == 2:
+            curs.execute(db_change("select set_data from data_set where doc_name = ? and set_name = 'link_count'"), [name])
+            db_data = curs.fetchall()
+            div += '<li>' + load_lang('link_count') + ' : ' +  (db_data[0][0] if db_data else load_lang('data_missing')) + '</li>'
+
         sql_insert = ['link', 'title'] if xref_type == 1 else ['title', 'link']
         curs.execute(db_change("select distinct " + sql_insert[0] + ", type from back where " + sql_insert[1] + " = ?" + link_case_insensitive + " and not type = 'no' and not type = 'nothing' order by type asc, " + sql_insert[0] + " asc limit ?, 50"), [name, sql_num])
         data_list = curs.fetchall()
@@ -41,7 +43,12 @@ def view_xref(name = 'Test', xref_type = 1):
 
             div += '</li>'
 
-        div += '</ul>' + next_fix('/xref/' + url_pas(name) + '?change=' + str(xref_type) + '&num=', num, data_list)
+        div += '</ul>'
+        
+        if xref_type == 2:
+            div += get_next_page_bottom('/xref_this_page/{}/' + url_pas(name), num, data_list)
+        else:
+            div += get_next_page_bottom('/xref_page/{}/' + url_pas(name), num, data_list)
 
         return easy_minify(flask.render_template(skin_check(),
             imp = [name, wiki_set(), wiki_custom(), wiki_css([data_sub, 0])],