|
|
@@ -10,12 +10,13 @@ logging.basicConfig(level = logging.ERROR)
|
|
|
session_opts = { 'session.type' : 'dbm', 'session.data_dir' : './app_session/', 'session.auto' : 1 }
|
|
|
app = beaker.middleware.SessionMiddleware(app(), session_opts)
|
|
|
BaseRequest.MEMFILE_MAX = 1000 ** 4
|
|
|
-r_ver = '2.5.1'
|
|
|
+r_ver = '2.5.2'
|
|
|
|
|
|
from func import *
|
|
|
from set_mark.mid_pas import mid_pas
|
|
|
from set_mark.macro import savemark
|
|
|
|
|
|
+# set.json 설정 확인
|
|
|
try:
|
|
|
json_data = open('set.json').read()
|
|
|
set_data = json.loads(json_data)
|
|
|
@@ -41,12 +42,14 @@ except:
|
|
|
print('모든 값을 입력하세요.')
|
|
|
pass
|
|
|
|
|
|
+# 디비 연결
|
|
|
conn = sqlite3.connect(set_data['db'] + '.db')
|
|
|
curs = conn.cursor()
|
|
|
|
|
|
# 스킨 불러오기 부분
|
|
|
TEMPLATE_PATH.insert(0, skin_check(conn))
|
|
|
|
|
|
+# 호환성 설정
|
|
|
try:
|
|
|
try:
|
|
|
plus_all_data = ''
|
|
|
@@ -121,6 +124,7 @@ if(not os.path.exists('image')):
|
|
|
if(not os.path.exists('views')):
|
|
|
os.makedirs('views')
|
|
|
|
|
|
+# 백업 설정
|
|
|
def back_up():
|
|
|
try:
|
|
|
shutil.copyfile(set_data['db'] + '.db', 'back_' + set_data['db'] + '.db')
|
|
|
@@ -137,6 +141,7 @@ try:
|
|
|
except:
|
|
|
back_time = 0
|
|
|
|
|
|
+# 백업 여부 확인
|
|
|
if(back_time != 0):
|
|
|
print(str(back_time) + '시간 간격으로 백업')
|
|
|
|
|
|
@@ -644,15 +649,9 @@ def user_log(num = 1):
|
|
|
else:
|
|
|
count = 0
|
|
|
|
|
|
- list_data += '</ul><hr><ul><li>이 위키에는 ' + str(count) + '명의 사람이 있습니다.</li>'
|
|
|
-
|
|
|
- if(num == 1):
|
|
|
- if(len(user_list) == 50):
|
|
|
- list_data += '</ul><hr><a href="/user_log/' + str(num + 1) + '">(이후)</a>'
|
|
|
- elif(len(user_list) != 50):
|
|
|
- list_data += '</ul><hr><a href="/user_log/' + str(num - 1) + '">(이전)</a>'
|
|
|
- else:
|
|
|
- list_data += '</ul><hr><a href="/user_log/' + str(num - 1) + '">(이전)</a> <a href="/user_log/' + str(num + 1) + '">(이후)</a>'
|
|
|
+ list_data += '</ul><hr><ul><li>이 위키에는 ' + str(count) + '명의 사람이 있습니다.</li></ul>'
|
|
|
+
|
|
|
+ list_data += next_fix('/user_log/', num, user_list)
|
|
|
|
|
|
return(html_minify(template('index',
|
|
|
imp = ['사용자 가입 기록', wiki_set(conn, 1), custom(conn), other2([0, 0])],
|
|
|
@@ -677,14 +676,7 @@ def user_log(num = 1):
|
|
|
list_data += '<li>' + ip + ' / ' + data[1] + ' / ' + data[2] + '</li>'
|
|
|
|
|
|
list_data += '</ul><hr><ul><li>주의 : 권한 사용 안하고 열람만 해도 기록되는 경우도 있습니다.</li></ul>'
|
|
|
-
|
|
|
- if(num == 1):
|
|
|
- if(len(get_list) == 50):
|
|
|
- list_data += '<hr><a href="/admin_log/' + str(num + 1) + '">(이후)</a>'
|
|
|
- elif(len(get_list) != 50):
|
|
|
- list_data += '<hr><a href="/admin_log/' + str(num - 1) + '">(이전)</a>'
|
|
|
- else:
|
|
|
- list_data += '<hr><a href="/admin_log/' + str(num - 1) + '">(이전)</a> <a href="/admin_log/' + str(num + 1) + '">(이후)</a>'
|
|
|
+ list_data += next_fix('/admin_log/', num, get_list)
|
|
|
|
|
|
return(html_minify(template('index',
|
|
|
imp = ['권한 사용 기록', wiki_set(conn, 1), custom(conn), other2([0, 0])],
|
|
|
@@ -765,13 +757,7 @@ def xref(name = None, num = 1):
|
|
|
if(re.search('^틀:', data[0])):
|
|
|
div += '<li><a id="inside" href="/xref/' + url_pas(data[0]) + '">' + data[0] + '</a> (역링크)</li>'
|
|
|
|
|
|
- if(num == 1):
|
|
|
- if(len(data_list) == 50):
|
|
|
- div += '</ul><hr><a href="/xref/' + url_pas(name) + '/num/' + str(num + 1) + '">(이후)</a>'
|
|
|
- elif(len(data_list) != 50):
|
|
|
- div += '</ul><hr><a href="/xref/' + url_pas(name) + '/num/' + str(num - 1) + '">(이전)</a>'
|
|
|
- else:
|
|
|
- div += '</ul><hr><a href="/xref/' + url_pas(name) + '/num/' + str(num - 1) + '">(이전)</a> <a href="/xref/' + url_pas(name) + '/num/' + str(num + 1) + '">(이후)</a>'
|
|
|
+ div += '</ul>' + next_fix('/xref/' + url_pas(name) + '/num/', num, data_list)
|
|
|
|
|
|
return(html_minify(template('index',
|
|
|
imp = [name, wiki_set(conn, 1), custom(conn), other2([' (역링크)', 0])],
|
|
|
@@ -797,13 +783,7 @@ def please(num = 1):
|
|
|
div += '<li><a class="not_thing" href="/w/' + url_pas(data[0]) + '">' + data[0] + '</a></li>'
|
|
|
var = data[0]
|
|
|
|
|
|
- if(num == 1):
|
|
|
- if(len(data_list) == 50):
|
|
|
- div += '</ul><hr><a href="/please/' + str(num + 1) + '">(이후)</a>'
|
|
|
- elif(len(data_list) != 50):
|
|
|
- div += '</ul><hr><a href="/please/' + str(num - 1) + '">(이전)</a>'
|
|
|
- else:
|
|
|
- div += '</ul><hr><a href="/please/' + str(num - 1) + '">(이전)</a> <a href="/please/' + str(num + 1) + '">(이후)</a>'
|
|
|
+ div += '</ul>' + next_fix('/please/', num, data_list)
|
|
|
|
|
|
return(html_minify(template('index',
|
|
|
imp = ['필요한 문서', wiki_set(conn, 1), custom(conn), other2([0, 0])],
|
|
|
@@ -856,7 +836,8 @@ def recent_discuss(tools = 'normal'):
|
|
|
|
|
|
@route('/block_log')
|
|
|
@route('/block_log/<num:int>')
|
|
|
-@route('/block_log/<num:int>/<tool2:re:ip|user|never_end|can_end|end>')
|
|
|
+@route('/block_log/<tool2:re:ip|user|never_end|can_end|end>')
|
|
|
+@route('/block_log/<tool2:re:ip|user|never_end|can_end|end>/<num:int>')
|
|
|
@route('/<tool:re:block_user|block_admin>/<name:path>')
|
|
|
@route('/<tool:re:block_user|block_admin>/<name:path>/<num:int>')
|
|
|
def block_log(num = 1, name = None, tool = None, tool2 = None):
|
|
|
@@ -869,7 +850,7 @@ def block_log(num = 1, name = None, tool = None, tool2 = None):
|
|
|
|
|
|
if(not name):
|
|
|
if(not tool2):
|
|
|
- div = '<a href="/manager/11">(차단자 검색)</a> <a href="/manager/12">(관리자 검색)</a><hr><a href="/block_log/1/ip">(아이피)</a> <a href="/block_log/1/user">(가입자)</a> <a href="/block_log/1/never_end">(영구)</a> <a href="/block_log/1/can_end">(기간)</a> <a href="/block_log/1/end">(해제)</a><hr>' + div
|
|
|
+ div = '<a href="/manager/11">(차단자)</a> <a href="/manager/12">(관리자)</a><hr><a href="/block_log/ip">(아이피)</a> <a href="/block_log/user">(가입자)</a> <a href="/block_log/never_end">(영구)</a> <a href="/block_log/can_end">(기간)</a> <a href="/block_log/end">(해제)</a><hr>' + div
|
|
|
sub = 0
|
|
|
menu = [['other', '기타']]
|
|
|
|
|
|
@@ -896,7 +877,7 @@ def block_log(num = 1, name = None, tool = None, tool2 = None):
|
|
|
else:
|
|
|
sub = '(기간)'
|
|
|
|
|
|
- curs.execute("select why, block, blocker, end, today from rb where end like ? order by today desc limit ?, '50'", ['%:%', str(sql_num)])
|
|
|
+ curs.execute("select why, block, blocker, end, today from rb where end like ? order by today desc limit ?, '50'", ['%-%', str(sql_num)])
|
|
|
else:
|
|
|
menu = [['block_log', '일반']]
|
|
|
|
|
|
@@ -931,15 +912,15 @@ def block_log(num = 1, name = None, tool = None, tool2 = None):
|
|
|
div += '<tr><td>' + ip + '</td><td>' + ip_pas(conn, data[2]) + '</td><td>시작 : ' + data[4] + '<br>끝 : ' + end + '</td></tr>'
|
|
|
div += '<tr><td colspan="3">' + why + '</td></tr>'
|
|
|
|
|
|
- div += '</tbody></table><hr>'
|
|
|
+ div += '</tbody></table>'
|
|
|
|
|
|
- if(num == 1):
|
|
|
- if(len(data_list) == 50):
|
|
|
- div += '<a href="/block_log/' + str(num + 1) + '">(이후)</a>'
|
|
|
- elif(len(data_list) != 50):
|
|
|
- div += '<a href="/block_log/' + str(num - 1) + '">(이전)</a>'
|
|
|
+ if(not name):
|
|
|
+ if(not tool2):
|
|
|
+ div += next_fix('/block_log/', num, data_list)
|
|
|
+ else:
|
|
|
+ div += next_fix('/block_log/' + url_pas(tool2) + '/', num, data_list)
|
|
|
else:
|
|
|
- div += '<a href="/block_log/' + str(num - 1) + '">(이전)</a> <a href="/block_log/' + str(num + 1) + '">(이후)</a>'
|
|
|
+ div += next_fix('/' + url_pas(tool) + '/' + url_pas(name) + '/', num, data_list)
|
|
|
|
|
|
return(html_minify(template('index',
|
|
|
imp = ['차단 기록', wiki_set(conn, 1), custom(conn), other2([sub, 0])],
|
|
|
@@ -1006,15 +987,8 @@ def deep_search(name = None, num = 1):
|
|
|
else:
|
|
|
div += '<li>검색 결과 없음</li>'
|
|
|
|
|
|
- div += div_plus
|
|
|
-
|
|
|
- if(num == 1):
|
|
|
- if(len(all_list) == 50):
|
|
|
- div += '</ul><hr><a href="/search/' + url_pas(name) + '/' + str(num + 1) + '">(이후)</a>'
|
|
|
- elif(len(all_list) != 50):
|
|
|
- div += '</ul><hr><a href="/search/' + url_pas(name) + '/' + str(num - 1) + '">(이전)</a>'
|
|
|
- else:
|
|
|
- div += '</ul><hr><a href="/search/' + url_pas(name) + '/' + str(num - 1) + '">(이전)</a> <a href="/search/' + url_pas(name) + '/' + str(num + 1) + '">(이후)</a>'
|
|
|
+ div += div_plus + '</ul>'
|
|
|
+ div += next_fix('/search/' + url_pas(name) + '/', num, all_list)
|
|
|
|
|
|
return(html_minify(template('index',
|
|
|
imp = [name, wiki_set(conn, 1), custom(conn), other2([' (검색)', 0])],
|
|
|
@@ -1769,7 +1743,7 @@ def title_index(num = 100, page = 1):
|
|
|
|
|
|
count_end += [count_end[0] - count_end[1] - count_end[2] - count_end[3] - count_end[4]]
|
|
|
|
|
|
- data += '<hr><li>이 위키에는 총 ' + str(count_end[0]) + '개의 문서가 있습니다.</li><hr>'
|
|
|
+ data += '</ul><hr><ul><li>이 위키에는 총 ' + str(count_end[0]) + '개의 문서가 있습니다.</li></ul><hr><ul>'
|
|
|
data += '<li>틀 문서는 총 ' + str(count_end[1]) + '개의 문서가 있습니다.</li>'
|
|
|
data += '<li>분류 문서는 총 ' + str(count_end[2]) + '개의 문서가 있습니다.</li>'
|
|
|
data += '<li>사용자 문서는 총 ' + str(count_end[3]) + '개의 문서가 있습니다.</li>'
|
|
|
@@ -1777,13 +1751,7 @@ def title_index(num = 100, page = 1):
|
|
|
data += '<li>나머지 문서는 총 ' + str(count_end[5]) + '개의 문서가 있습니다.</li>'
|
|
|
|
|
|
if(num != 0):
|
|
|
- if(page == 1):
|
|
|
- if(len(title_list) == num):
|
|
|
- data += '</ul><hr><a href="/title_index/' + str(num) + '/' + str(page + 1) + '">(이후)</a>'
|
|
|
- elif(len(title_list) != num):
|
|
|
- data += '</ul><hr><a href="/title_index/' + str(num) + '/' + str(page - 1) + '">(이전)</a>'
|
|
|
- else:
|
|
|
- data += '</ul><hr><a href="/title_index/' + str(num) + '/' + str(page - 1) + '">(이전)</a> <a href="/title_index/' + str(num) + '/' + str(page + 1) + '">(이후)</a>'
|
|
|
+ data += '</ul>' + next_fix('/title_index/' + str(num) + '/', page, title_list, num)
|
|
|
|
|
|
if(' (' + str(num) + '개)' == ' (0개)'):
|
|
|
sub = 0
|
|
|
@@ -2930,14 +2898,7 @@ def user_topic_list(name = None, num = 1):
|
|
|
div += '<td>' + ip + ban + '</td><td>' + data[4] + '</td></tr>'
|
|
|
|
|
|
div += '</tbody></table>'
|
|
|
-
|
|
|
- if(num == 1):
|
|
|
- if(len(data_list) == 50):
|
|
|
- div += '<hr><a href="/topic_record/' + url_pas(name) + '/' + str(num + 1) + '">(이후)</a>'
|
|
|
- elif(len(data_list) != 50):
|
|
|
- div += '<hr><a href="/topic_record/' + url_pas(name) + '/' + str(num - 1) + '">(이전)</a>'
|
|
|
- else:
|
|
|
- div += '<hr><a href="/topic_record/' + url_pas(name) + '/' + str(num - 1) + '">(이전)</a> <a href="/topic_record/' + url_pas(name) + '/' + str(num + 1) + '">(이후)</a>'
|
|
|
+ div += next_fix('/topic_record/' + url_pas(name) + '/', num, data_list)
|
|
|
|
|
|
curs.execute("select end, why from ban where block = ?", [name])
|
|
|
ban_it = curs.fetchall()
|
|
|
@@ -2953,8 +2914,9 @@ def user_topic_list(name = None, num = 1):
|
|
|
)))
|
|
|
|
|
|
@route('/<tool:re:history|record>/<name:path>', method=['POST', 'GET'])
|
|
|
-@route('/<tool:re:history|record>/<name:path>/num/<num:int>', method=['POST', 'GET'])
|
|
|
-@route('/record/<name:path>/<num:int>/<what:path>')
|
|
|
+@route('/<tool:re:history>/<name:path>/num/<num:int>', method=['POST', 'GET'])
|
|
|
+@route('/<tool:re:record>/<name:path>/<what:path>')
|
|
|
+@route('/<tool:re:record>/<name:path>/<what:path>/<num:int>')
|
|
|
@route('/recent_changes')
|
|
|
@route('/recent_changes/<what:path>')
|
|
|
def recent_changes(name = None, num = 1, what = 'all', tool = 'record'):
|
|
|
@@ -2977,14 +2939,14 @@ def recent_changes(name = None, num = 1, what = 'all', tool = 'record'):
|
|
|
div += '<td style="width: 33.3%;">판</td><td style="width: 33.3%;">편집자</td><td style="width: 33.3%;">시간</td></tr>'
|
|
|
|
|
|
curs.execute("select id, title, date, ip, send, leng from history where title = ? order by id + 0 desc limit ?, '50'", [name, str(sql_num)])
|
|
|
- elif(tool == 'record'):
|
|
|
+ else:
|
|
|
div += '<td style="width: 33.3%;">문서명</td><td style="width: 33.3%;">편집자</td><td style="width: 33.3%;">시간</td></tr>'
|
|
|
|
|
|
if(what == 'all'):
|
|
|
div = '<a href="/topic_record/' + url_pas(name) + '">(토론 기록)</a><hr>' + div
|
|
|
- div = '<a href="/record/' + url_pas(name) + '/' + str(num) + '/revert">(되돌리기)</a> ' + div
|
|
|
- div = '<a href="/record/' + url_pas(name) + '/' + str(num) + '/move">(이동)</a> ' + div
|
|
|
- div = '<a href="/record/' + url_pas(name) + '/' + str(num) + '/delete">(삭제)</a> ' + div
|
|
|
+ div = '<a href="/record/' + url_pas(name) + '/revert">(되돌리기)</a> ' + div
|
|
|
+ div = '<a href="/record/' + url_pas(name) + '/move">(이동)</a> ' + div
|
|
|
+ div = '<a href="/record/' + url_pas(name) + '/delete">(삭제)</a> ' + div
|
|
|
|
|
|
curs.execute("select id, title, date, ip, send, leng from history where ip = ? order by date desc limit ?, '50'", [name, str(sql_num)])
|
|
|
else:
|
|
|
@@ -2998,8 +2960,6 @@ def recent_changes(name = None, num = 1, what = 'all', tool = 'record'):
|
|
|
return(redirect('/'))
|
|
|
|
|
|
curs.execute("select id, title, date, ip, send, leng from history where ip = ? and send like ? order by date desc limit ?, '50'", [name, sql, str(sql_num)])
|
|
|
- else:
|
|
|
- return(redirect('/'))
|
|
|
else:
|
|
|
div += '<td style="width: 33.3%;">문서명</td><td style="width: 33.3%;">편집자</td><td style="width: 33.3%;">시간</td></tr>'
|
|
|
|
|
|
@@ -3098,13 +3058,7 @@ def recent_changes(name = None, num = 1, what = 'all', tool = 'record'):
|
|
|
sub += ' (역사)'
|
|
|
menu = [['w/' + url_pas(name), '문서'], ['move_data/' + url_pas(name), '이동 기록']]
|
|
|
|
|
|
- if(num == 1):
|
|
|
- if(len(data_list) == 50):
|
|
|
- div += '<hr><a href="/history/' + url_pas(name) + '/num/' + str(num + 1) + '">(이후)</a>'
|
|
|
- elif(len(data_list) != 50):
|
|
|
- div += '<hr><a href="/history/' + url_pas(name) + '/num/' + str(num - 1) + '">(이전)</a>'
|
|
|
- else:
|
|
|
- div += '<hr><a href="/history/' + url_pas(name) + '/num/' + str(num - 1) + '">(이전)</a> <a href="/history/' + url_pas(name) + '/num/' + str(num + 1) + '">(이후)</a>'
|
|
|
+ div += next_fix('/history/' + url_pas(name) + '/num/', num, data_list)
|
|
|
else:
|
|
|
curs.execute("select end, why from ban where block = ?", [name])
|
|
|
ban_it = curs.fetchall()
|
|
|
@@ -3113,22 +3067,7 @@ def recent_changes(name = None, num = 1, what = 'all', tool = 'record'):
|
|
|
|
|
|
title = '편집 기록'
|
|
|
menu = [['other', '기타'], ['user', '사용자'], ['count/' + url_pas(name), '횟수']]
|
|
|
- if(what):
|
|
|
- if(num == 1):
|
|
|
- if(len(data_list) == 50):
|
|
|
- div += '<hr><a href="/record/' + url_pas(name) + '/' + str(num + 1) + '/' + url_pas(what) + '">(이후)</a>'
|
|
|
- elif(len(data_list) != 50):
|
|
|
- div += '<hr><a href="/record/' + url_pas(name) + '/' + str(num - 1) + '/' + url_pas(what) + '">(이전)</a>'
|
|
|
- else:
|
|
|
- div += '<hr><a href="/record/' + url_pas(name) + '/' + str(num - 1) + '/' + url_pas(what) + '">(이전)</a> <a href="/record/' + url_pas(name) + '/' + str(num + 1) + '/' + url_pas(what) + '">(이후)</a>'
|
|
|
- else:
|
|
|
- if(num == 1):
|
|
|
- if(len(data_list) == 50):
|
|
|
- div += '<hr><a href="/record/' + url_pas(name) + '/' + str(num + 1) + '">(이후)</a>'
|
|
|
- elif(len(data_list) != 50):
|
|
|
- div += '<hr><a href="/record/' + url_pas(name) + '/' + str(num - 1) + '">(이전)</a>'
|
|
|
- else:
|
|
|
- div += '<hr><a href="/record/' + url_pas(name) + '/' + str(num - 1) + '">(이전)</a> <a href="/record/' + url_pas(name) + '/' + str(num + 1) + '">(이후)</a>'
|
|
|
+ div += next_fix('/record/' + url_pas(name) + '/' + url_pas(what) + '/', num, data_list)
|
|
|
|
|
|
if(what != 'all'):
|
|
|
menu += [['record/' + url_pas(name), '일반']]
|
|
|
@@ -3434,4 +3373,4 @@ def error_500(error):
|
|
|
except:
|
|
|
return('<!-- 아카이 타이요노 도레스데 오도루 와타시노 코토 미츠메테이루노 메오 소라시타이 데모 소라세나이 아아 죠네츠데 야카레타이 도키메키 이죠노 리즈무 코요이 시리타쿠테 이츠모요리 타이탄나 코토바오 츠부야이타 지분노 키모치나노니 젠젠 와카라나쿠 (낫챠이타이나) 리세이카라 시레이가 (토도카나이) 콘토로-루 후카노 손나 코이오 시타놋테 코에가 토도이테시맛타 하즈카시잇테 오모우케도 못토 시리타이노 못토 시리타이노 이케나이 유메다토 키즈키나가라 아카이 타이요노 도레스데 오도루 와타시노 코토 미츠메루 히토미 메오 소라시타이 데모 소라세나이 마나츠와 다레노 모노 아나타토 와타시노 모노니시타이 (닷테네) 코코로가 토마레나이 키세츠니 하지메테 무네노 토비라가 아이테 시마이소오요 You knock knock my heart!! -->' + redirect('/setup'))
|
|
|
|
|
|
-run(app = app, server = 'tornado', host = '0.0.0.0', port = int(set_data['port']), debug = True)
|
|
|
+run(app = app, server = 'tornado', host = '0.0.0.0', port = int(set_data['port']), debug = True)
|