|
@@ -53,21 +53,10 @@ from func import *
|
|
|
|
|
|
|
|
BaseRequest.MEMFILE_MAX = 1000 ** 4
|
|
BaseRequest.MEMFILE_MAX = 1000 ** 4
|
|
|
|
|
|
|
|
-r_ver = '2.4.1c'
|
|
|
|
|
|
|
+r_ver = '2.4.3'
|
|
|
|
|
|
|
|
# 스킨 불러오기 부분
|
|
# 스킨 불러오기 부분
|
|
|
-try:
|
|
|
|
|
- curs.execute('select data from other where name = "skin"')
|
|
|
|
|
- skin_exist = curs.fetchall()
|
|
|
|
|
- if(skin_exist):
|
|
|
|
|
- if(os.path.exists(os.path.abspath('./views/' + skin_exist[0][0] + '/index.tpl')) == 1):
|
|
|
|
|
- TEMPLATE_PATH.insert(0, './views/' + skin_exist[0][0] + '/')
|
|
|
|
|
- else:
|
|
|
|
|
- TEMPLATE_PATH.insert(0, './views/acme/')
|
|
|
|
|
- else:
|
|
|
|
|
- TEMPLATE_PATH.insert(0, './views/acme/')
|
|
|
|
|
-except:
|
|
|
|
|
- TEMPLATE_PATH.insert(0, './views/acme/')
|
|
|
|
|
|
|
+TEMPLATE_PATH.insert(0, skin_check())
|
|
|
|
|
|
|
|
# 테이블 생성 부분
|
|
# 테이블 생성 부분
|
|
|
try:
|
|
try:
|
|
@@ -377,6 +366,7 @@ def edit_set(num = 0):
|
|
|
curs.execute("update other set data = ? where name = 'back_up'", [request.forms.back_up])
|
|
curs.execute("update other set data = ? where name = 'back_up'", [request.forms.back_up])
|
|
|
conn.commit()
|
|
conn.commit()
|
|
|
|
|
|
|
|
|
|
+ TEMPLATE_PATH.insert(0, skin_check())
|
|
|
return(redirect('/edit_set/1'))
|
|
return(redirect('/edit_set/1'))
|
|
|
else:
|
|
else:
|
|
|
i_list = ['name', 'logo', 'frontpage', 'license', 'upload', 'skin', 'edit', 'reg', 'ip_view', 'back_up']
|
|
i_list = ['name', 'logo', 'frontpage', 'license', 'upload', 'skin', 'edit', 'reg', 'ip_view', 'back_up']
|
|
@@ -455,7 +445,7 @@ def edit_set(num = 0):
|
|
|
<input placeholder="파일 용량 한도" type="text" name="upload" value="' + html.escape(d_list[4]) + '"> \
|
|
<input placeholder="파일 용량 한도" type="text" name="upload" value="' + html.escape(d_list[4]) + '"> \
|
|
|
<br> \
|
|
<br> \
|
|
|
<br> \
|
|
<br> \
|
|
|
- <span>스킨 (재시작 필요)</span> \
|
|
|
|
|
|
|
+ <span>스킨</span> \
|
|
|
<br> \
|
|
<br> \
|
|
|
<br> \
|
|
<br> \
|
|
|
<input placeholder="스킨" type="text" name="skin" value="' + html.escape(d_list[5]) + '"> \
|
|
<input placeholder="스킨" type="text" name="skin" value="' + html.escape(d_list[5]) + '"> \
|
|
@@ -611,7 +601,6 @@ def edit_set(num = 0):
|
|
|
@route('/not_close_topic')
|
|
@route('/not_close_topic')
|
|
|
def not_close_topic():
|
|
def not_close_topic():
|
|
|
div = '<ul>'
|
|
div = '<ul>'
|
|
|
- i = 1
|
|
|
|
|
|
|
|
|
|
curs.execute('select title, sub from rd order by date desc')
|
|
curs.execute('select title, sub from rd order by date desc')
|
|
|
n_list = curs.fetchall()
|
|
n_list = curs.fetchall()
|
|
@@ -619,8 +608,7 @@ def not_close_topic():
|
|
|
curs.execute('select * from stop where title = ? and sub = ? and close = "O"', [data[0], data[1]])
|
|
curs.execute('select * from stop where title = ? and sub = ? and close = "O"', [data[0], data[1]])
|
|
|
is_close = curs.fetchall()
|
|
is_close = curs.fetchall()
|
|
|
if(not is_close):
|
|
if(not is_close):
|
|
|
- div += '<li>' + str(i) + '. <a href="/topic/' + url_pas(data[0]) + '/sub/' + url_pas(data[1]) + '">' + data[0] + ' (' + data[1] + ')</a></li>'
|
|
|
|
|
- i += 1
|
|
|
|
|
|
|
+ div += '<li><a href="/topic/' + url_pas(data[0]) + '/sub/' + url_pas(data[1]) + '">' + data[0] + ' (' + data[1] + ')</a></li>'
|
|
|
|
|
|
|
|
div += '</ul>'
|
|
div += '</ul>'
|
|
|
|
|
|
|
@@ -644,20 +632,17 @@ def static(name = None):
|
|
|
@route('/acl_list')
|
|
@route('/acl_list')
|
|
|
def acl_list():
|
|
def acl_list():
|
|
|
div = '<ul>'
|
|
div = '<ul>'
|
|
|
- i = 0
|
|
|
|
|
|
|
|
|
|
curs.execute("select title, acl from data where acl = 'admin' or acl = 'user' order by acl desc")
|
|
curs.execute("select title, acl from data where acl = 'admin' or acl = 'user' order by acl desc")
|
|
|
list_data = curs.fetchall()
|
|
list_data = curs.fetchall()
|
|
|
for data in list_data:
|
|
for data in list_data:
|
|
|
- if(not re.search('^사용자:', data[0])):
|
|
|
|
|
|
|
+ if(not re.search('^사용자:', data[0]) and not re.search('^파일:', data[0])):
|
|
|
if(data[1] == 'admin'):
|
|
if(data[1] == 'admin'):
|
|
|
acl = '관리자'
|
|
acl = '관리자'
|
|
|
else:
|
|
else:
|
|
|
acl = '가입자'
|
|
acl = '가입자'
|
|
|
|
|
|
|
|
- div += '<li>' + str(i + 1) + '. <a href="/w/' + url_pas(data[0]) + '">' + data[0] + '</a> (' + acl + ')</li>'
|
|
|
|
|
-
|
|
|
|
|
- i += 1
|
|
|
|
|
|
|
+ div += '<li><a href="/w/' + url_pas(data[0]) + '">' + data[0] + '</a> (' + acl + ')</li>'
|
|
|
|
|
|
|
|
div += '</ul>'
|
|
div += '</ul>'
|
|
|
|
|
|
|
@@ -670,52 +655,13 @@ def acl_list():
|
|
|
)
|
|
)
|
|
|
)
|
|
)
|
|
|
)
|
|
)
|
|
|
-
|
|
|
|
|
-@route('/list_acl')
|
|
|
|
|
-def list_acl():
|
|
|
|
|
- div = '<ul>'
|
|
|
|
|
- i = 0
|
|
|
|
|
-
|
|
|
|
|
- curs.execute("select name, acl from alist order by name desc")
|
|
|
|
|
- list_data = curs.fetchall()
|
|
|
|
|
- for data in list_data:
|
|
|
|
|
- if(data[1] == 'ban'):
|
|
|
|
|
- acl = '차단'
|
|
|
|
|
- elif(data[1] == 'mdel'):
|
|
|
|
|
- acl = '많은 문서 삭제'
|
|
|
|
|
- elif(data[1] == 'toron'):
|
|
|
|
|
- acl = '토론 관리'
|
|
|
|
|
- elif(data[1] == 'check'):
|
|
|
|
|
- acl = '사용자 검사'
|
|
|
|
|
- elif(data[1] == 'acl'):
|
|
|
|
|
- acl = '문서 ACL'
|
|
|
|
|
- elif(data[1] == 'hidel'):
|
|
|
|
|
- acl = '역사 숨김'
|
|
|
|
|
- elif(data[1] == 'owner'):
|
|
|
|
|
- acl = '소유자'
|
|
|
|
|
-
|
|
|
|
|
- div += '<li>' + str(i + 1) + '. <a href="/admin_plus/' + url_pas(data[0]) + '">' + data[0] + '</a> (' + acl + ')</li>'
|
|
|
|
|
-
|
|
|
|
|
- i += 1
|
|
|
|
|
-
|
|
|
|
|
- div += '</ul><br><a href="/manager/8">(생성)</a>'
|
|
|
|
|
-
|
|
|
|
|
- return(
|
|
|
|
|
- html_minify(
|
|
|
|
|
- template('index',
|
|
|
|
|
- imp = ['ACL 목록', wiki_set(1), custom(), other2([0, 0])],
|
|
|
|
|
- data = re.sub('^<ul></ul><br>', '', div),
|
|
|
|
|
- menu = [['manager', '관리자']]
|
|
|
|
|
- )
|
|
|
|
|
- )
|
|
|
|
|
- )
|
|
|
|
|
|
|
|
|
|
@route('/admin_plus/<name:path>', method=['POST', 'GET'])
|
|
@route('/admin_plus/<name:path>', method=['POST', 'GET'])
|
|
|
def admin_plus(name = None):
|
|
def admin_plus(name = None):
|
|
|
- if(admin_check(None, 'admin_plus (' + name + ')') != 1):
|
|
|
|
|
- return(re_error('/error/3'))
|
|
|
|
|
-
|
|
|
|
|
if(request.method == 'POST'):
|
|
if(request.method == 'POST'):
|
|
|
|
|
+ if(admin_check(None, 'admin_plus (' + name + ')') != 1):
|
|
|
|
|
+ return(re_error('/error/3'))
|
|
|
|
|
+
|
|
|
curs.execute("delete from alist where name = ?", [name])
|
|
curs.execute("delete from alist where name = ?", [name])
|
|
|
|
|
|
|
|
if(request.forms.ban):
|
|
if(request.forms.ban):
|
|
@@ -736,6 +682,9 @@ def admin_plus(name = None):
|
|
|
if(request.forms.hidel):
|
|
if(request.forms.hidel):
|
|
|
curs.execute("insert into alist (name, acl) values (?, 'hidel')", [name])
|
|
curs.execute("insert into alist (name, acl) values (?, 'hidel')", [name])
|
|
|
|
|
|
|
|
|
|
+ if(request.forms.give):
|
|
|
|
|
+ curs.execute("insert into alist (name, acl) values (?, 'give')", [name])
|
|
|
|
|
+
|
|
|
if(request.forms.owner):
|
|
if(request.forms.owner):
|
|
|
curs.execute("insert into alist (name, acl) values (?, 'owner')", [name])
|
|
curs.execute("insert into alist (name, acl) values (?, 'owner')", [name])
|
|
|
|
|
|
|
@@ -744,12 +693,12 @@ def admin_plus(name = None):
|
|
|
return(redirect('/admin_plus/' + url_pas(name)))
|
|
return(redirect('/admin_plus/' + url_pas(name)))
|
|
|
else:
|
|
else:
|
|
|
curs.execute('select acl from alist where name = ?', [name])
|
|
curs.execute('select acl from alist where name = ?', [name])
|
|
|
- test = curs.fetchall()
|
|
|
|
|
|
|
+ acl_list = curs.fetchall()
|
|
|
|
|
|
|
|
data = '<ul>'
|
|
data = '<ul>'
|
|
|
- exist_list = ['', '', '', '', '', '', '']
|
|
|
|
|
|
|
+ exist_list = ['', '', '', '', '', '', '', '']
|
|
|
|
|
|
|
|
- for go in test:
|
|
|
|
|
|
|
+ for go in acl_list:
|
|
|
if(go[0] == 'ban'):
|
|
if(go[0] == 'ban'):
|
|
|
exist_list[0] = 'checked="checked"'
|
|
exist_list[0] = 'checked="checked"'
|
|
|
elif(go[0] == 'mdel'):
|
|
elif(go[0] == 'mdel'):
|
|
@@ -762,16 +711,24 @@ def admin_plus(name = None):
|
|
|
exist_list[4] = 'checked="checked"'
|
|
exist_list[4] = 'checked="checked"'
|
|
|
elif(go[0] == 'hidel'):
|
|
elif(go[0] == 'hidel'):
|
|
|
exist_list[5] = 'checked="checked"'
|
|
exist_list[5] = 'checked="checked"'
|
|
|
- elif(go[0] == 'owner'):
|
|
|
|
|
|
|
+ elif(go[0] == 'give'):
|
|
|
exist_list[6] = 'checked="checked"'
|
|
exist_list[6] = 'checked="checked"'
|
|
|
|
|
+ elif(go[0] == 'owner'):
|
|
|
|
|
+ exist_list[7] = 'checked="checked"'
|
|
|
|
|
+
|
|
|
|
|
+ if(admin_check(None, None) != 1):
|
|
|
|
|
+ state = 'disabled'
|
|
|
|
|
+ else:
|
|
|
|
|
+ state = ''
|
|
|
|
|
|
|
|
- data += '<li><input type="checkbox" name="ban" ' + exist_list[0] + '> 차단</li>'
|
|
|
|
|
- data += '<li><input type="checkbox" name="mdel" ' + exist_list[1] + '> 많은 문서 삭제</li>'
|
|
|
|
|
- data += '<li><input type="checkbox" name="toron" ' + exist_list[2] + '> 토론 관리</li>'
|
|
|
|
|
- data += '<li><input type="checkbox" name="check" ' + exist_list[3] + '> 사용자 검사</li>'
|
|
|
|
|
- data += '<li><input type="checkbox" name="acl" ' + exist_list[4] + '> 문서 ACL</li>'
|
|
|
|
|
- data += '<li><input type="checkbox" name="hidel" ' + exist_list[5] + '> 역사 숨김</li>'
|
|
|
|
|
- data += '<li><input type="checkbox" name="owner" ' + exist_list[6] + '> 소유자</li></ul>'
|
|
|
|
|
|
|
+ data += '<li><input type="checkbox" ' + state + ' name="ban" ' + exist_list[0] + '> 차단</li>'
|
|
|
|
|
+ data += '<li><input type="checkbox" ' + state + ' name="mdel" ' + exist_list[1] + '> 많은 문서 삭제</li>'
|
|
|
|
|
+ data += '<li><input type="checkbox" ' + state + ' name="toron" ' + exist_list[2] + '> 토론 관리</li>'
|
|
|
|
|
+ data += '<li><input type="checkbox" ' + state + ' name="check" ' + exist_list[3] + '> 사용자 검사</li>'
|
|
|
|
|
+ data += '<li><input type="checkbox" ' + state + ' name="acl" ' + exist_list[4] + '> 문서 ACL</li>'
|
|
|
|
|
+ data += '<li><input type="checkbox" ' + state + ' name="hidel" ' + exist_list[5] + '> 역사 숨김</li>'
|
|
|
|
|
+ data += '<li><input type="checkbox" ' + state + ' name="give" ' + exist_list[6] + '> 권한 부여</li>'
|
|
|
|
|
+ data += '<li><input type="checkbox" ' + state + ' name="owner" ' + exist_list[7] + '> 소유자</li></ul>'
|
|
|
|
|
|
|
|
return(
|
|
return(
|
|
|
html_minify(
|
|
html_minify(
|
|
@@ -780,7 +737,7 @@ def admin_plus(name = None):
|
|
|
data = '<form method="post">' \
|
|
data = '<form method="post">' \
|
|
|
+ data + \
|
|
+ data + \
|
|
|
'<div class="form-actions"> \
|
|
'<div class="form-actions"> \
|
|
|
- <button class="btn btn-primary" type="submit">저장</button> \
|
|
|
|
|
|
|
+ <button ' + state + ' class="btn btn-primary" type="submit">저장</button> \
|
|
|
</div> \
|
|
</div> \
|
|
|
</form>',
|
|
</form>',
|
|
|
menu = [['manager', '관리자']]
|
|
menu = [['manager', '관리자']]
|
|
@@ -790,18 +747,14 @@ def admin_plus(name = None):
|
|
|
|
|
|
|
|
@route('/admin_list')
|
|
@route('/admin_list')
|
|
|
def admin_list():
|
|
def admin_list():
|
|
|
- i = 1
|
|
|
|
|
div = '<ul>'
|
|
div = '<ul>'
|
|
|
|
|
|
|
|
curs.execute("select id, acl from user where not acl = 'user'")
|
|
curs.execute("select id, acl from user where not acl = 'user'")
|
|
|
user_data = curs.fetchall()
|
|
user_data = curs.fetchall()
|
|
|
|
|
|
|
|
for data in user_data:
|
|
for data in user_data:
|
|
|
- name = ip_pas(data[0]) + ' (' + data[1] + ')'
|
|
|
|
|
-
|
|
|
|
|
- div += '<li>' + str(i) + '. ' + name + '</li>'
|
|
|
|
|
-
|
|
|
|
|
- i += 1
|
|
|
|
|
|
|
+ name = ip_pas(data[0]) + ' (<a href="/admin_plus/' + url_pas(data[1]) + '">' + data[1] + '</a>)'
|
|
|
|
|
+ div += '<li>' + name + '</li>'
|
|
|
|
|
|
|
|
div += '</ul>'
|
|
div += '</ul>'
|
|
|
|
|
|
|
@@ -832,16 +785,14 @@ def recent_changes(name = None, num = 1):
|
|
|
</tr>'
|
|
</tr>'
|
|
|
|
|
|
|
|
if(name):
|
|
if(name):
|
|
|
- if(num * 50 <= 0):
|
|
|
|
|
- v = 50
|
|
|
|
|
|
|
+ if(num * 50 > 0):
|
|
|
|
|
+ sql_num = num * 50 - 50
|
|
|
else:
|
|
else:
|
|
|
- v = num * 50
|
|
|
|
|
-
|
|
|
|
|
- i = v - 50
|
|
|
|
|
|
|
+ sql_num = 0
|
|
|
|
|
|
|
|
div = '<a href="/user/' + url_pas(name) + '/topic">(토론 기록)</a><br><br>' + div
|
|
div = '<a href="/user/' + url_pas(name) + '/topic">(토론 기록)</a><br><br>' + div
|
|
|
|
|
|
|
|
- curs.execute("select id, title, date, ip, send, leng from history where ip = ? order by date desc limit ?, ?", [name, str(i), str(v)])
|
|
|
|
|
|
|
+ curs.execute("select id, title, date, ip, send, leng from history where ip = ? order by date desc limit ?, '50'", [name, str(sql_num)])
|
|
|
else:
|
|
else:
|
|
|
curs.execute("select id, title, date, ip, send, leng from history where not date = 'Dump' order by date desc limit 50")
|
|
curs.execute("select id, title, date, ip, send, leng from history where not date = 'Dump' order by date desc limit 50")
|
|
|
|
|
|
|
@@ -949,19 +900,18 @@ def history_hidden(name = None, num = None):
|
|
|
@route('/user_log')
|
|
@route('/user_log')
|
|
|
@route('/user_log/n/<num:int>')
|
|
@route('/user_log/n/<num:int>')
|
|
|
def user_log(num = 1):
|
|
def user_log(num = 1):
|
|
|
- if(num * 50 <= 0):
|
|
|
|
|
- i = 50
|
|
|
|
|
|
|
+ if(num * 50 > 0):
|
|
|
|
|
+ sql_num = num * 50 - 50
|
|
|
else:
|
|
else:
|
|
|
- i = num * 50
|
|
|
|
|
|
|
+ sql_num = 0
|
|
|
|
|
|
|
|
- j = i - 50
|
|
|
|
|
list_data = '<ul>'
|
|
list_data = '<ul>'
|
|
|
- ydmin = admin_check(1, None)
|
|
|
|
|
|
|
+ admin_one = admin_check(1, None)
|
|
|
|
|
|
|
|
- curs.execute("select id from user limit ?, ?", [str(j), str(i)])
|
|
|
|
|
|
|
+ curs.execute("select id from user limit ?, '50'", [str(sql_num)])
|
|
|
user_list = curs.fetchall()
|
|
user_list = curs.fetchall()
|
|
|
for data in user_list:
|
|
for data in user_list:
|
|
|
- if(ydmin == 1):
|
|
|
|
|
|
|
+ if(admin_one == 1):
|
|
|
curs.execute("select block from ban where block = ?", [data[0]])
|
|
curs.execute("select block from ban where block = ?", [data[0]])
|
|
|
ban_exist = curs.fetchall()
|
|
ban_exist = curs.fetchall()
|
|
|
if(ban_exist):
|
|
if(ban_exist):
|
|
@@ -972,10 +922,7 @@ def user_log(num = 1):
|
|
|
ban_button = ''
|
|
ban_button = ''
|
|
|
|
|
|
|
|
ip = ip_pas(data[0])
|
|
ip = ip_pas(data[0])
|
|
|
-
|
|
|
|
|
- list_data += '<li>' + str(j + 1) + '. ' + ip + ban_button + '</li>'
|
|
|
|
|
-
|
|
|
|
|
- j += 1
|
|
|
|
|
|
|
+ list_data += '<li>' + ip + ban_button + '</li>'
|
|
|
else:
|
|
else:
|
|
|
list_data += '</ul><br><a href="/user_log/n/' + str(num - 1) + '">(이전)</a> <a href="/user_log/n/' + str(num + 1) + '">(이후)</a>'
|
|
list_data += '</ul><br><a href="/user_log/n/' + str(num - 1) + '">(이전)</a> <a href="/user_log/n/' + str(num + 1) + '">(이후)</a>'
|
|
|
|
|
|
|
@@ -992,28 +939,21 @@ def user_log(num = 1):
|
|
|
@route('/admin_log')
|
|
@route('/admin_log')
|
|
|
@route('/admin_log/n/<num:int>')
|
|
@route('/admin_log/n/<num:int>')
|
|
|
def user_log(num = 1):
|
|
def user_log(num = 1):
|
|
|
- if(num * 50 <= 0):
|
|
|
|
|
- i = 50
|
|
|
|
|
|
|
+ if(num * 50 > 0):
|
|
|
|
|
+ sql_num = num * 50 - 50
|
|
|
else:
|
|
else:
|
|
|
- i = num * 50
|
|
|
|
|
-
|
|
|
|
|
- j = i - 50
|
|
|
|
|
|
|
+ sql_num = 0
|
|
|
|
|
+
|
|
|
list_data = '<ul>'
|
|
list_data = '<ul>'
|
|
|
|
|
|
|
|
- curs.execute("select who, what, time from re_admin order by time desc limit ?, ?", [str(j), str(i)])
|
|
|
|
|
|
|
+ curs.execute("select who, what, time from re_admin order by time desc limit ?, '50'", [str(sql_num)])
|
|
|
get_list = curs.fetchall()
|
|
get_list = curs.fetchall()
|
|
|
for data in get_list:
|
|
for data in get_list:
|
|
|
ip = ip_pas(data[0])
|
|
ip = ip_pas(data[0])
|
|
|
-
|
|
|
|
|
- list_data += '<li>' + str(j + 1) + '. ' + ip + ' / ' + data[1] + ' / ' + data[2] + '</li>'
|
|
|
|
|
-
|
|
|
|
|
- j += 1
|
|
|
|
|
- else:
|
|
|
|
|
- list_data += '</ul><br> \
|
|
|
|
|
- <span>주의 : 권한 사용 안하고 열람만 해도 기록되는 경우도 있습니다.</span> \
|
|
|
|
|
- <br> \
|
|
|
|
|
- <br> \
|
|
|
|
|
- <a href="/admin_log/n/' + str(num - 1) + '">(이전)</a> <a href="/admin_log/n/' + str(num + 1) + '">(이후)</a>'
|
|
|
|
|
|
|
+ list_data += '<li>' + ip + ' / ' + data[1] + ' / ' + data[2] + '</li>'
|
|
|
|
|
+
|
|
|
|
|
+ list_data += '</ul><br><span>주의 : 권한 사용 안하고 열람만 해도 기록되는 경우도 있습니다.</span><br><br>'
|
|
|
|
|
+ list_data += '<a href="/admin_log/n/' + str(num - 1) + '">(이전)</a> <a href="/admin_log/n/' + str(num + 1) + '">(이후)</a>'
|
|
|
|
|
|
|
|
return(
|
|
return(
|
|
|
html_minify(
|
|
html_minify(
|
|
@@ -1028,42 +968,24 @@ def user_log(num = 1):
|
|
|
@route('/give_log')
|
|
@route('/give_log')
|
|
|
@route('/give_log/n/<num:int>')
|
|
@route('/give_log/n/<num:int>')
|
|
|
def give_log(num = 1):
|
|
def give_log(num = 1):
|
|
|
- if(num * 50 <= 0):
|
|
|
|
|
- i = 50
|
|
|
|
|
|
|
+ if(num * 50 > 0):
|
|
|
|
|
+ sql_num = num * 50 - 50
|
|
|
else:
|
|
else:
|
|
|
- i = num * 50
|
|
|
|
|
|
|
+ sql_num = 0
|
|
|
|
|
|
|
|
- j = i - 50
|
|
|
|
|
list_data = '<ul>'
|
|
list_data = '<ul>'
|
|
|
back = ''
|
|
back = ''
|
|
|
|
|
|
|
|
- curs.execute("select name, acl from alist order by name asc limit ?, ?", [str(j), str(i)])
|
|
|
|
|
|
|
+ curs.execute("select distinct name from alist order by name asc limit ?, '50'", [str(sql_num)])
|
|
|
get_list = curs.fetchall()
|
|
get_list = curs.fetchall()
|
|
|
for data in get_list:
|
|
for data in get_list:
|
|
|
if(back != data[0]):
|
|
if(back != data[0]):
|
|
|
back = data[0]
|
|
back = data[0]
|
|
|
- j += 1
|
|
|
|
|
-
|
|
|
|
|
- list_data += '<li>' + str(j) + '. ' + data[0] + ' ('
|
|
|
|
|
-
|
|
|
|
|
- if(data[1] == 'ban'):
|
|
|
|
|
- d = '차단'
|
|
|
|
|
- elif(data[1] == 'mdel'):
|
|
|
|
|
- d = '많은 문서 삭제'
|
|
|
|
|
- elif(data[1] == 'toron'):
|
|
|
|
|
- d = '토론'
|
|
|
|
|
- elif(data[1] == 'check'):
|
|
|
|
|
- d = '사용자 검사'
|
|
|
|
|
- elif(data[1] == 'acl'):
|
|
|
|
|
- d = 'ACL'
|
|
|
|
|
- elif(data[1] == 'hidel'):
|
|
|
|
|
- d = '역사 가리기'
|
|
|
|
|
- else:
|
|
|
|
|
- d = '소유자'
|
|
|
|
|
-
|
|
|
|
|
- list_data += d + ')</li>'
|
|
|
|
|
- else:
|
|
|
|
|
- list_data += '</ul><br><a href="/give_log/n/' + str(num - 1) + '">(이전)</a> <a href="/give_log/n/' + str(num + 1) + '">(이후)</a>'
|
|
|
|
|
|
|
+
|
|
|
|
|
+ list_data += '<li><a href="/admin_plus/' + url_pas(data[0]) + '">' + data[0] + '</a></li>'
|
|
|
|
|
+
|
|
|
|
|
+ list_data += '</ul><a href="/manager/8">(생성)</a>'
|
|
|
|
|
+ list_data += '<br><br><a href="/give_log/n/' + str(num - 1) + '">(이전)</a> <a href="/give_log/n/' + str(num + 1) + '">(이후)</a>'
|
|
|
|
|
|
|
|
return(
|
|
return(
|
|
|
html_minify(
|
|
html_minify(
|
|
@@ -1100,27 +1022,26 @@ def indexing():
|
|
|
@route('/xref/<name:path>')
|
|
@route('/xref/<name:path>')
|
|
|
@route('/xref/<name:path>/n/<num:int>')
|
|
@route('/xref/<name:path>/n/<num:int>')
|
|
|
def xref(name = None, num = 1):
|
|
def xref(name = None, num = 1):
|
|
|
- if(num * 50 <= 0):
|
|
|
|
|
- v = 50
|
|
|
|
|
|
|
+ if(num * 50 > 0):
|
|
|
|
|
+ sql_num = num * 50 - 50
|
|
|
else:
|
|
else:
|
|
|
- v = num * 50
|
|
|
|
|
|
|
+ sql_num = 0
|
|
|
|
|
|
|
|
- i = v - 50
|
|
|
|
|
div = '<ul>'
|
|
div = '<ul>'
|
|
|
|
|
|
|
|
- curs.execute("select link, type from back where title = ? and not type = 'cat' and not type = 'no' order by link asc limit ?, ?", [name, str(i), str(v)])
|
|
|
|
|
|
|
+ curs.execute("select link, type from back where title = ? and not type = 'cat' and not type = 'no' order by link asc limit ?, '50'", [name, str(sql_num)])
|
|
|
for data in curs.fetchall():
|
|
for data in curs.fetchall():
|
|
|
div += '<li><a href="/w/' + url_pas(data[0]) + '">' + data[0] + '</a>'
|
|
div += '<li><a href="/w/' + url_pas(data[0]) + '">' + data[0] + '</a>'
|
|
|
|
|
|
|
|
if(data[1]):
|
|
if(data[1]):
|
|
|
if(data[1] == 'include'):
|
|
if(data[1] == 'include'):
|
|
|
- d = '포함'
|
|
|
|
|
|
|
+ side = '포함'
|
|
|
elif(data[1] == 'file'):
|
|
elif(data[1] == 'file'):
|
|
|
- d = '파일'
|
|
|
|
|
|
|
+ side = '파일'
|
|
|
else:
|
|
else:
|
|
|
- d = '넘겨주기'
|
|
|
|
|
|
|
+ side = '넘겨주기'
|
|
|
|
|
|
|
|
- div += ' (' + d + ')'
|
|
|
|
|
|
|
+ div += ' (' + side + ')'
|
|
|
|
|
|
|
|
div += '</li>'
|
|
div += '</li>'
|
|
|
|
|
|
|
@@ -1142,21 +1063,18 @@ def xref(name = None, num = 1):
|
|
|
@route('/please')
|
|
@route('/please')
|
|
|
@route('/please/<num:int>')
|
|
@route('/please/<num:int>')
|
|
|
def please(num = 1):
|
|
def please(num = 1):
|
|
|
- if(num * 50 <= 0):
|
|
|
|
|
- v = 50
|
|
|
|
|
|
|
+ if(num * 50 > 0):
|
|
|
|
|
+ sql_num = num * 50 - 50
|
|
|
else:
|
|
else:
|
|
|
- v = num * 50
|
|
|
|
|
|
|
+ sql_num = 0
|
|
|
|
|
|
|
|
- i = v - 50
|
|
|
|
|
div = '<ul>'
|
|
div = '<ul>'
|
|
|
var = ''
|
|
var = ''
|
|
|
|
|
|
|
|
- i += 1
|
|
|
|
|
- curs.execute("select distinct title from back where type = 'no' order by title asc limit ?, ?", [str(i), str(v)])
|
|
|
|
|
|
|
+ curs.execute("select distinct title from back where type = 'no' order by title asc limit ?, '50'", [str(sql_num)])
|
|
|
for data in curs.fetchall():
|
|
for data in curs.fetchall():
|
|
|
if(var != data[0]):
|
|
if(var != data[0]):
|
|
|
- div += '<li>' + str(i) + '. <a class="not_thing" href="/w/' + url_pas(data[0]) + '">' + data[0] + '</a></li>'
|
|
|
|
|
- i += 1
|
|
|
|
|
|
|
+ div += '<li><a class="not_thing" href="/w/' + url_pas(data[0]) + '">' + data[0] + '</a></li>'
|
|
|
var = data[0]
|
|
var = data[0]
|
|
|
|
|
|
|
|
div += '</ul><br><a href="/please/' + str(num - 1) + '">(이전)</a> <a href="/please/' + str(num + 1) + '">(이후)</a>'
|
|
div += '</ul><br><a href="/please/' + str(num - 1) + '">(이전)</a> <a href="/please/' + str(num + 1) + '">(이후)</a>'
|
|
@@ -1234,12 +1152,11 @@ def recent_discuss(tools = 'normal'):
|
|
|
@route('/block_log')
|
|
@route('/block_log')
|
|
|
@route('/block_log/n/<num:int>')
|
|
@route('/block_log/n/<num:int>')
|
|
|
def block_log(num = 1):
|
|
def block_log(num = 1):
|
|
|
- if(num * 50 <= 0):
|
|
|
|
|
- v = 50
|
|
|
|
|
|
|
+ if(num * 50 > 0):
|
|
|
|
|
+ sql_num = num * 50 - 50
|
|
|
else:
|
|
else:
|
|
|
- v = num * 50
|
|
|
|
|
|
|
+ sql_num = 0
|
|
|
|
|
|
|
|
- i = v - 50
|
|
|
|
|
div = '<table style="width: 100%; text-align: center;"> \
|
|
div = '<table style="width: 100%; text-align: center;"> \
|
|
|
<tbody> \
|
|
<tbody> \
|
|
|
<tr> \
|
|
<tr> \
|
|
@@ -1252,7 +1169,7 @@ def block_log(num = 1):
|
|
|
<td>시간</td> \
|
|
<td>시간</td> \
|
|
|
</tr>'
|
|
</tr>'
|
|
|
|
|
|
|
|
- curs.execute("select why, block, blocker, end, today from rb order by today desc limit ?, ?", [str(i), str(v)])
|
|
|
|
|
|
|
+ curs.execute("select why, block, blocker, end, today from rb order by today desc limit ?, '50'", [str(sql_num)])
|
|
|
for data in curs.fetchall():
|
|
for data in curs.fetchall():
|
|
|
why = html.escape(data[0])
|
|
why = html.escape(data[0])
|
|
|
|
|
|
|
@@ -1299,12 +1216,10 @@ def history_view(name = None, num = 1):
|
|
|
return(redirect('/w/' + url_pas(name) + '/r/' + request.forms.b + '/diff/' + request.forms.a))
|
|
return(redirect('/w/' + url_pas(name) + '/r/' + request.forms.b + '/diff/' + request.forms.a))
|
|
|
else:
|
|
else:
|
|
|
select = ''
|
|
select = ''
|
|
|
- if(num * 50 <= 0):
|
|
|
|
|
- i = 50
|
|
|
|
|
|
|
+ if(num * 50 > 0):
|
|
|
|
|
+ sql_num = num * 50 - 50
|
|
|
else:
|
|
else:
|
|
|
- i = num * 50
|
|
|
|
|
-
|
|
|
|
|
- j = i - 50
|
|
|
|
|
|
|
+ sql_num = 0
|
|
|
|
|
|
|
|
admin1 = admin_check(1, None)
|
|
admin1 = admin_check(1, None)
|
|
|
admin2 = admin_check(6, None)
|
|
admin2 = admin_check(6, None)
|
|
@@ -1317,7 +1232,7 @@ def history_view(name = None, num = 1):
|
|
|
<td style="width: 33.3%;">시간</td> \
|
|
<td style="width: 33.3%;">시간</td> \
|
|
|
</tr>'
|
|
</tr>'
|
|
|
|
|
|
|
|
- curs.execute("select send, leng, ip, date, title, id from history where title = ? order by id + 0 desc limit ?, ?", [name, str(j), str(i)])
|
|
|
|
|
|
|
+ curs.execute("select send, leng, ip, date, title, id from history where title = ? order by id + 0 desc limit ?, '50'", [name, str(sql_num)])
|
|
|
all_data = curs.fetchall()
|
|
all_data = curs.fetchall()
|
|
|
for data in all_data:
|
|
for data in all_data:
|
|
|
select += '<option value="' + data[5] + '">' + data[5] + '</option>'
|
|
select += '<option value="' + data[5] + '">' + data[5] + '</option>'
|
|
@@ -1396,7 +1311,7 @@ def history_view(name = None, num = 1):
|
|
|
' + select + ' \
|
|
' + select + ' \
|
|
|
</select> \
|
|
</select> \
|
|
|
<button class="btn btn-primary" type="submit">비교</button> \
|
|
<button class="btn btn-primary" type="submit">비교</button> \
|
|
|
- </form>' + div
|
|
|
|
|
|
|
+ </form><br>' + div
|
|
|
|
|
|
|
|
return(
|
|
return(
|
|
|
html_minify(
|
|
html_minify(
|
|
@@ -1424,22 +1339,17 @@ def goto():
|
|
|
@route('/search/<name:path>')
|
|
@route('/search/<name:path>')
|
|
|
@route('/search/<name:path>/n/<num:int>')
|
|
@route('/search/<name:path>/n/<num:int>')
|
|
|
def deep_search(name = None, num = 1):
|
|
def deep_search(name = None, num = 1):
|
|
|
- if(num * 50 <= 0):
|
|
|
|
|
- v = num * 50
|
|
|
|
|
|
|
+ if(num * 50 > 0):
|
|
|
|
|
+ sql_num = num * 50 - 50
|
|
|
else:
|
|
else:
|
|
|
- v = 50
|
|
|
|
|
-
|
|
|
|
|
- i = v - 50
|
|
|
|
|
|
|
+ sql_num = 0
|
|
|
|
|
|
|
|
div = '<ul>'
|
|
div = '<ul>'
|
|
|
div_plus = ''
|
|
div_plus = ''
|
|
|
- end = ''
|
|
|
|
|
|
|
+ no = 0
|
|
|
|
|
|
|
|
- curs.execute("select title from data where title like ?", ['%' + name + '%'])
|
|
|
|
|
- title_list = curs.fetchall()
|
|
|
|
|
-
|
|
|
|
|
- curs.execute("select title from data where data like ?", ['%' + name + '%'])
|
|
|
|
|
- data_list = curs.fetchall()
|
|
|
|
|
|
|
+ curs.execute("select distinct title from data where title like ? or data like ? order by case when title like ? then 1 else 2 end limit ?, '50'", ['%' + name + '%', '%' + name + '%', '%' + name + '%', str(sql_num)])
|
|
|
|
|
+ all_list = curs.fetchall()
|
|
|
|
|
|
|
|
curs.execute("select title from data where title = ?", [name])
|
|
curs.execute("select title from data where title = ?", [name])
|
|
|
exist = curs.fetchall()
|
|
exist = curs.fetchall()
|
|
@@ -1447,24 +1357,9 @@ def deep_search(name = None, num = 1):
|
|
|
div = '<ul><li>문서로 <a href="/w/' + url_pas(name) + '">바로가기</a></li><br><br>'
|
|
div = '<ul><li>문서로 <a href="/w/' + url_pas(name) + '">바로가기</a></li><br><br>'
|
|
|
else:
|
|
else:
|
|
|
div = '<ul><li>문서가 없습니다. <a class="not_thing" href="/w/' + url_pas(name) + '">바로가기</a></li><br><br>'
|
|
div = '<ul><li>문서가 없습니다. <a class="not_thing" href="/w/' + url_pas(name) + '">바로가기</a></li><br><br>'
|
|
|
-
|
|
|
|
|
- if(title_list):
|
|
|
|
|
- no = 0
|
|
|
|
|
-
|
|
|
|
|
- if(data_list):
|
|
|
|
|
- all_list = title_list + data_list
|
|
|
|
|
- else:
|
|
|
|
|
- all_list = title_list
|
|
|
|
|
- else:
|
|
|
|
|
- if(data_list):
|
|
|
|
|
- no = 1
|
|
|
|
|
-
|
|
|
|
|
- all_list = data_list
|
|
|
|
|
- else:
|
|
|
|
|
- all_list = ''
|
|
|
|
|
|
|
|
|
|
- start = 0
|
|
|
|
|
- if(all_list != ''):
|
|
|
|
|
|
|
+ start = 2
|
|
|
|
|
+ if(all_list):
|
|
|
for data in all_list:
|
|
for data in all_list:
|
|
|
try:
|
|
try:
|
|
|
var_re = re.search(name, data[0])
|
|
var_re = re.search(name, data[0])
|
|
@@ -1473,25 +1368,23 @@ def deep_search(name = None, num = 1):
|
|
|
|
|
|
|
|
if(var_re):
|
|
if(var_re):
|
|
|
if(no == 0):
|
|
if(no == 0):
|
|
|
- div += '<li><a href="/w/' + url_pas(data[0]) + '">' + data[0] + '</a> (제목)</li>'
|
|
|
|
|
|
|
+ div_plus += '<li><a href="/w/' + url_pas(data[0]) + '">' + data[0] + '</a> (제목)</li>'
|
|
|
|
|
+ start = 0
|
|
|
else:
|
|
else:
|
|
|
- if(start == 0):
|
|
|
|
|
|
|
+ if(start == 0 and div_plus != ''):
|
|
|
start = 1
|
|
start = 1
|
|
|
div_plus += '<hr>'
|
|
div_plus += '<hr>'
|
|
|
div_plus += '<li><a href="/w/' + url_pas(data[0]) + '">' + data[0] + '</a> (내용)</li>'
|
|
div_plus += '<li><a href="/w/' + url_pas(data[0]) + '">' + data[0] + '</a> (내용)</li>'
|
|
|
else:
|
|
else:
|
|
|
no = 1
|
|
no = 1
|
|
|
- if(start == 0):
|
|
|
|
|
|
|
+ if(start == 0 and div_plus != ''):
|
|
|
start = 1
|
|
start = 1
|
|
|
div_plus += '<hr>'
|
|
div_plus += '<hr>'
|
|
|
div_plus += '<li><a href="/w/' + url_pas(data[0]) + '">' + data[0] + '</a> (내용)</li>'
|
|
div_plus += '<li><a href="/w/' + url_pas(data[0]) + '">' + data[0] + '</a> (내용)</li>'
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
else:
|
|
else:
|
|
|
div += '<li>검색 결과 없음</li>'
|
|
div += '<li>검색 결과 없음</li>'
|
|
|
|
|
|
|
|
- div += div_plus + end
|
|
|
|
|
-
|
|
|
|
|
|
|
+ div += div_plus
|
|
|
div += '</ul><br><a href="/search/' + url_pas(name) + '/n/' + str(num - 1) + '">(이전)</a> <a href="/search/' + url_pas(name) + '/n/' + str(num + 1) + '">(이후)</a>'
|
|
div += '</ul><br><a href="/search/' + url_pas(name) + '/n/' + str(num - 1) + '">(이전)</a> <a href="/search/' + url_pas(name) + '/n/' + str(num + 1) + '">(이후)</a>'
|
|
|
|
|
|
|
|
return(
|
|
return(
|
|
@@ -1895,30 +1788,32 @@ def delete(name = None):
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
@route('/move_data/<name:path>')
|
|
@route('/move_data/<name:path>')
|
|
|
-@route('/move_data/<name:path>/<n:int>')
|
|
|
|
|
-def move_data(name = None, n = 1):
|
|
|
|
|
- if(n > 0):
|
|
|
|
|
- i = n
|
|
|
|
|
- else:
|
|
|
|
|
- i = 1
|
|
|
|
|
-
|
|
|
|
|
- j = i * 50
|
|
|
|
|
- da = '<ul>'
|
|
|
|
|
|
|
+@route('/move_data/<name:path>/<num:int>')
|
|
|
|
|
+def move_data(name = None, num = 1):
|
|
|
|
|
+ if(num * 50 > 0):
|
|
|
|
|
+ sql_num = num * 50 - 50
|
|
|
|
|
+ else:
|
|
|
|
|
+ sql_num = 0
|
|
|
|
|
+
|
|
|
|
|
+ data = '<ul>'
|
|
|
|
|
|
|
|
- curs.execute("select origin, new, date, who, send from move where origin = ? or new = ? order by date desc limit ?, ?", [name, name, j - 50, j])
|
|
|
|
|
- for d in curs.fetchall():
|
|
|
|
|
- if(d[4] == ''):
|
|
|
|
|
- sn = '(없음)'
|
|
|
|
|
|
|
+ curs.execute("select origin, new, date, who, send from move where origin = ? or new = ? order by date desc limit ?, '50'", [name, name, str(sql_num)])
|
|
|
|
|
+ for for_data in curs.fetchall():
|
|
|
|
|
+ if(for_data[4] == ''):
|
|
|
|
|
+ side = '(없음)'
|
|
|
else:
|
|
else:
|
|
|
- sn = d[4]
|
|
|
|
|
- da += '<li><a href="/move_data/' + url_pas(d[0]) + '">' + d[0] + '</a> - <a href="/move_data/' + url_pas(d[1]) + '">' + d[1] + '</a> / ' + d[2] + ' / ' + d[3] + ' / ' + sn + '</li>'
|
|
|
|
|
- da += '</ul><br><a href="/move_data/' + name + '/' + str(n - 1) + '">(이전)</a> <a href="/move_data/' + name + '/' + str(n + 1) + '">(이후)</a>'
|
|
|
|
|
|
|
+ side = for_data[4]
|
|
|
|
|
+
|
|
|
|
|
+ data += '<li><a href="/move_data/' + url_pas(for_data[0]) + '">' + for_data[0] + '</a> - <a href="/move_data/' + url_pas(for_data[1]) + '">' + for_data[1] + '</a>'
|
|
|
|
|
+ data += '/ ' + for_data[2] + ' / ' + for_data[3] + ' / ' + side + '</li>'
|
|
|
|
|
+
|
|
|
|
|
+ data += '</ul><br><a href="/move_data/' + url_pas(name) + '/' + str(num - 1) + '">(이전)</a> <a href="/move_data/' + url_pas(name) + '/' + str(num + 1) + '">(이후)</a>'
|
|
|
|
|
|
|
|
return(
|
|
return(
|
|
|
html_minify(
|
|
html_minify(
|
|
|
template('index',
|
|
template('index',
|
|
|
imp = [name, wiki_set(1), custom(), other2([' (이동)', 0])],
|
|
imp = [name, wiki_set(1), custom(), other2([' (이동)', 0])],
|
|
|
- data = da,
|
|
|
|
|
|
|
+ data = data,
|
|
|
menu = [['w/' + url_pas(name), '문서']]
|
|
menu = [['w/' + url_pas(name), '문서']]
|
|
|
)
|
|
)
|
|
|
)
|
|
)
|
|
@@ -2271,22 +2166,22 @@ def json_in():
|
|
|
@route('/title_index')
|
|
@route('/title_index')
|
|
|
@route('/title_index/<num:int>/<page:int>')
|
|
@route('/title_index/<num:int>/<page:int>')
|
|
|
def title_index(num = 1000, page = 1):
|
|
def title_index(num = 1000, page = 1):
|
|
|
- if(page > 0):
|
|
|
|
|
- v_page = page * num
|
|
|
|
|
|
|
+ if(page * num > 0):
|
|
|
|
|
+ sql_num = page * num - page
|
|
|
else:
|
|
else:
|
|
|
- v_page = 1 * num
|
|
|
|
|
|
|
+ sql_num = 1 * num - page
|
|
|
|
|
|
|
|
if(num != 0):
|
|
if(num != 0):
|
|
|
- i = [v_page - num + 1]
|
|
|
|
|
|
|
+ all_list = [sql_num + 1, 0, 0, 0, 0, 0]
|
|
|
else:
|
|
else:
|
|
|
- i = [1, 0, 0, 0, 0, 0]
|
|
|
|
|
|
|
+ all_list = [1, 0, 0, 0, 0, 0]
|
|
|
|
|
|
|
|
data = '<ul><a href="/title_index/0/1">(전체)</a> <a href="/title_index/500/1">(500)</a> <a href="/title_index/5000/1">(5000개)</a> <a href="/title_index/10000/1">(10000개)</a> <a href="/title_index/50000/1">(50000개)</a><br><br>'
|
|
data = '<ul><a href="/title_index/0/1">(전체)</a> <a href="/title_index/500/1">(500)</a> <a href="/title_index/5000/1">(5000개)</a> <a href="/title_index/10000/1">(10000개)</a> <a href="/title_index/50000/1">(50000개)</a><br><br>'
|
|
|
|
|
|
|
|
if(num == 0):
|
|
if(num == 0):
|
|
|
curs.execute("select title from data order by title asc")
|
|
curs.execute("select title from data order by title asc")
|
|
|
else:
|
|
else:
|
|
|
- curs.execute("select title from data order by title asc limit ?, ?", [str(v_page - num), str(num)])
|
|
|
|
|
|
|
+ curs.execute("select title from data order by title asc limit ?, '50'", [str(sql_num)])
|
|
|
title_list = curs.fetchall()
|
|
title_list = curs.fetchall()
|
|
|
|
|
|
|
|
for list_data in title_list:
|
|
for list_data in title_list:
|
|
@@ -2294,26 +2189,26 @@ def title_index(num = 1000, page = 1):
|
|
|
|
|
|
|
|
if(num == 0):
|
|
if(num == 0):
|
|
|
if(re.search('^분류:', list_data[0])):
|
|
if(re.search('^분류:', list_data[0])):
|
|
|
- i[1] += 1
|
|
|
|
|
|
|
+ all_list[1] += 1
|
|
|
elif(re.search('^사용자:', list_data[0])):
|
|
elif(re.search('^사용자:', list_data[0])):
|
|
|
- i[2] += 1
|
|
|
|
|
|
|
+ all_list[2] += 1
|
|
|
elif(re.search('^틀:', list_data[0])):
|
|
elif(re.search('^틀:', list_data[0])):
|
|
|
- i[3] += 1
|
|
|
|
|
|
|
+ all_list[3] += 1
|
|
|
elif(re.search('^파일:', list_data[0])):
|
|
elif(re.search('^파일:', list_data[0])):
|
|
|
- i[4] += 1
|
|
|
|
|
|
|
+ all_list[4] += 1
|
|
|
else:
|
|
else:
|
|
|
- i[5] += 1
|
|
|
|
|
|
|
+ all_list[5] += 1
|
|
|
|
|
|
|
|
- i[0] += 1
|
|
|
|
|
|
|
+ all_list[0] += 1
|
|
|
|
|
|
|
|
if(num == 0):
|
|
if(num == 0):
|
|
|
if(title_list):
|
|
if(title_list):
|
|
|
- data += '<br><br><li>이 위키에는 총 ' + str(i[0]) + '개의 문서가 있습니다.</li><br><br> \
|
|
|
|
|
- <li>틀 문서는 총 ' + str(i[3]) + '개의 문서가 있습니다.</li> \
|
|
|
|
|
- <li>분류 문서는 총 ' + str(i[1]) + '개의 문서가 있습니다.</li> \
|
|
|
|
|
- <li>사용자 문서는 총 ' + str(i[2]) + '개의 문서가 있습니다.</li> \
|
|
|
|
|
- <li>파일 문서는 총 ' + str(i[4]) + '개의 문서가 있습니다.</li> \
|
|
|
|
|
- <li>나머지 문서는 총 ' + str(i[5]) + '개의 문서가 있습니다.</li>'
|
|
|
|
|
|
|
+ data += '<br><br><li>이 위키에는 총 ' + str(all_list[0]) + '개의 문서가 있습니다.</li><br><br> \
|
|
|
|
|
+ <li>틀 문서는 총 ' + str(all_list[3]) + '개의 문서가 있습니다.</li> \
|
|
|
|
|
+ <li>분류 문서는 총 ' + str(all_list[1]) + '개의 문서가 있습니다.</li> \
|
|
|
|
|
+ <li>사용자 문서는 총 ' + str(all_list[2]) + '개의 문서가 있습니다.</li> \
|
|
|
|
|
+ <li>파일 문서는 총 ' + str(all_list[4]) + '개의 문서가 있습니다.</li> \
|
|
|
|
|
+ <li>나머지 문서는 총 ' + str(all_list[5]) + '개의 문서가 있습니다.</li>'
|
|
|
else:
|
|
else:
|
|
|
data += '</ul><br><a href="/title_index/' + str(num) + '/' + str(page - 1) + '">(이전)</a> <a href="/title_index/' + str(num) + '/' + str(page + 1) + '">(이후)</a>'
|
|
data += '</ul><br><a href="/title_index/' + str(num) + '/' + str(page - 1) + '">(이전)</a> <a href="/title_index/' + str(num) + '/' + str(page + 1) + '">(이후)</a>'
|
|
|
|
|
|
|
@@ -3281,10 +3176,29 @@ def acl(name = None):
|
|
|
|
|
|
|
|
@route('/admin/<name:path>', method=['POST', 'GET'])
|
|
@route('/admin/<name:path>', method=['POST', 'GET'])
|
|
|
def user_admin(name = None):
|
|
def user_admin(name = None):
|
|
|
|
|
+ owner = admin_check(None, None)
|
|
|
|
|
+
|
|
|
|
|
+ curs.execute("select acl from user where id = ?", [name])
|
|
|
|
|
+ user = curs.fetchall()
|
|
|
|
|
+ if(not user):
|
|
|
|
|
+ return(re_error('/error/5'))
|
|
|
|
|
+ else:
|
|
|
|
|
+ if(owner != 1):
|
|
|
|
|
+ curs.execute('select name from alist where name = ? and acl = "owner"', [user[0][0]])
|
|
|
|
|
+ if(curs.fetchall()):
|
|
|
|
|
+ return(re_error('/error/3'))
|
|
|
|
|
+
|
|
|
|
|
+ if(ip_check() == name):
|
|
|
|
|
+ return(re_error('/error/3'))
|
|
|
|
|
+
|
|
|
if(request.method == 'POST'):
|
|
if(request.method == 'POST'):
|
|
|
- if(admin_check(None, 'admin (' + name + ')') != 1):
|
|
|
|
|
|
|
+ if(admin_check(7, 'admin (' + name + ')') != 1):
|
|
|
return(re_error('/error/3'))
|
|
return(re_error('/error/3'))
|
|
|
|
|
|
|
|
|
|
+ curs.execute('select name from alist where name = ? and acl = "owner"', [request.forms.select])
|
|
|
|
|
+ if(curs.fetchall()):
|
|
|
|
|
+ return(re_error('/error/3'))
|
|
|
|
|
+
|
|
|
if(request.forms.select == 'X'):
|
|
if(request.forms.select == 'X'):
|
|
|
curs.execute("update user set acl = 'user' where id = ?", [name])
|
|
curs.execute("update user set acl = 'user' where id = ?", [name])
|
|
|
else:
|
|
else:
|
|
@@ -3293,26 +3207,24 @@ def user_admin(name = None):
|
|
|
|
|
|
|
|
return(redirect('/admin/' + url_pas(name)))
|
|
return(redirect('/admin/' + url_pas(name)))
|
|
|
else:
|
|
else:
|
|
|
- if(admin_check(None, None) != 1):
|
|
|
|
|
- return(re_error('/error/3'))
|
|
|
|
|
-
|
|
|
|
|
- curs.execute("select acl from user where id = ?", [name])
|
|
|
|
|
- user = curs.fetchall()
|
|
|
|
|
- if(not user):
|
|
|
|
|
- return(re_error('/error/5'))
|
|
|
|
|
|
|
+ if(admin_check(7, None) != 1):
|
|
|
|
|
+ return(re_error('/error/3'))
|
|
|
|
|
|
|
|
div = '<option value="X">X</option>'
|
|
div = '<option value="X">X</option>'
|
|
|
|
|
|
|
|
- curs.execute('select name from alist order by name asc')
|
|
|
|
|
|
|
+ curs.execute('select distinct name from alist order by name asc')
|
|
|
get_alist = curs.fetchall()
|
|
get_alist = curs.fetchall()
|
|
|
if(get_alist):
|
|
if(get_alist):
|
|
|
i = 0
|
|
i = 0
|
|
|
name_rem = ''
|
|
name_rem = ''
|
|
|
for data in get_alist:
|
|
for data in get_alist:
|
|
|
- if(name_rem != data[0]):
|
|
|
|
|
- name_rem = data[0]
|
|
|
|
|
- if(user[0][0] == data[0]):
|
|
|
|
|
- div += '<option value="' + data[0] + '" selected="selected">' + data[0] + '</option>'
|
|
|
|
|
|
|
+ if(user[0][0] == data[0]):
|
|
|
|
|
+ div += '<option value="' + data[0] + '" selected="selected">' + data[0] + '</option>'
|
|
|
|
|
+ else:
|
|
|
|
|
+ if(owner != 1):
|
|
|
|
|
+ curs.execute('select name from alist where name = ? and acl = "owner"', [data[0]])
|
|
|
|
|
+ if(not curs.fetchall()):
|
|
|
|
|
+ div += '<option value="' + data[0] + '">' + data[0] + '</option>'
|
|
|
else:
|
|
else:
|
|
|
div += '<option value="' + data[0] + '">' + data[0] + '</option>'
|
|
div += '<option value="' + data[0] + '">' + data[0] + '</option>'
|
|
|
|
|
|
|
@@ -3376,11 +3288,9 @@ def down(name = None):
|
|
|
under = curs.fetchall()
|
|
under = curs.fetchall()
|
|
|
|
|
|
|
|
div = '<ul>'
|
|
div = '<ul>'
|
|
|
- i = 0
|
|
|
|
|
|
|
|
|
|
for data in under:
|
|
for data in under:
|
|
|
- div += '<li>' + str(i + 1) + '. <a href="/w/' + url_pas(data[0]) + '">' + data[0] + '</a></li>'
|
|
|
|
|
- i += 1
|
|
|
|
|
|
|
+ div += '<li><a href="/w/' + url_pas(data[0]) + '">' + data[0] + '</a></li>'
|
|
|
|
|
|
|
|
div += '</ul>'
|
|
div += '</ul>'
|
|
|
|
|
|
|
@@ -3563,12 +3473,11 @@ def read_view(name = None, num = None, redirect = None):
|
|
|
@route('/user/<name:path>/topic')
|
|
@route('/user/<name:path>/topic')
|
|
|
@route('/user/<name:path>/topic/<num:int>')
|
|
@route('/user/<name:path>/topic/<num:int>')
|
|
|
def user_topic_list(name = None, num = 1):
|
|
def user_topic_list(name = None, num = 1):
|
|
|
- if(num * 50 <= 0):
|
|
|
|
|
- v = 50
|
|
|
|
|
|
|
+ if(num * 50 > 0):
|
|
|
|
|
+ sql_num = num * 50 - 50
|
|
|
else:
|
|
else:
|
|
|
- v = num * 50
|
|
|
|
|
|
|
+ sql_num = 0
|
|
|
|
|
|
|
|
- i = v - 50
|
|
|
|
|
ydmin = admin_check(1, None)
|
|
ydmin = admin_check(1, None)
|
|
|
div = '<table style="width: 100%; text-align: center;"> \
|
|
div = '<table style="width: 100%; text-align: center;"> \
|
|
|
<tbody> \
|
|
<tbody> \
|
|
@@ -3580,7 +3489,7 @@ def user_topic_list(name = None, num = 1):
|
|
|
|
|
|
|
|
div = '<a href="/record/' + url_pas(name) + '">(기여 기록)</a><br><br>' + div
|
|
div = '<a href="/record/' + url_pas(name) + '">(기여 기록)</a><br><br>' + div
|
|
|
|
|
|
|
|
- curs.execute("select title, id, sub, ip, date from topic where ip = ? order by date desc limit ?, ?", [name, str(i), str(v)])
|
|
|
|
|
|
|
+ curs.execute("select title, id, sub, ip, date from topic where ip = ? order by date desc limit ?, '50'", [name, str(sql_num)])
|
|
|
for data in curs.fetchall():
|
|
for data in curs.fetchall():
|
|
|
title = html.escape(data[0])
|
|
title = html.escape(data[0])
|
|
|
sub = html.escape(data[2])
|
|
sub = html.escape(data[2])
|