Просмотр исходного кода

Merge pull request #249 from 2DU/master

Master
ect (or 2du) 8 лет назад
Родитель
Сommit
872a2f6907
5 измененных файлов с 124 добавлено и 148 удалено
  1. 78 92
      app.py
  2. 27 34
      func.py
  3. 1 1
      version.md
  4. 10 13
      views/acme/css/bootstrap-reset.css
  5. 8 8
      views/acme/index.tpl

+ 78 - 92
app.py

@@ -15,9 +15,8 @@ session_opts = {
 
 
 app = beaker.middleware.SessionMiddleware(app(), session_opts)
 app = beaker.middleware.SessionMiddleware(app(), session_opts)
 BaseRequest.MEMFILE_MAX = 1000 ** 4
 BaseRequest.MEMFILE_MAX = 1000 ** 4
-r_ver = '2.4.6'
+r_ver = '2.4.7'
 
 
-from set_mark.mark import *
 from set_mark.mid_pas import *
 from set_mark.mid_pas import *
 from set_mark.macro import savemark
 from set_mark.macro import savemark
 from func import *
 from func import *
@@ -53,48 +52,7 @@ curs = conn.cursor()
 # 스킨 불러오기 부분
 # 스킨 불러오기 부분
 TEMPLATE_PATH.insert(0, skin_check(conn))
 TEMPLATE_PATH.insert(0, skin_check(conn))
 
 
-# 테이블 생성 부분
 try:
 try:
-    curs.execute("select title from data limit 1")
-
-    try:
-        curs.execute('select new from move limit 1')
-    except:
-        curs.execute("create table move(origin text, new text, date text, who text, send text)")
-        print('move 테이블 생성')
-
-    try:
-        curs.execute('select name from alarm limit 1')
-    except:
-        curs.execute("create table alarm(name text, data text, date text)")
-        print('alarm 테이블 생성')
-
-    try:
-        curs.execute('select name from ua_d limit 1')
-    except:
-        curs.execute("create table ua_d(name text, ip text, ua text, today text, sub text)")
-        print('ua_d 테이블 생성')
-
-    try:
-        curs.execute('select user, ip, today from login')
-        for m_lo in curs.fetchall():
-            curs.execute("insert into ua_d (name, ip, ua, today, sub) values (?, ?, '', ?, '')", [m_lo[0], m_lo[1], m_lo[2]])
-
-        curs.execute("drop table login")
-        print('login 테이블 삭제')
-    except:
-        pass
-
-    try:
-        curs.execute('select title, cat from cat')
-        for m_lo in curs.fetchall():
-            curs.execute("insert into back (title, link, type) values (?, ?, 'cat')", [m_lo[0], m_lo[1]])
-
-        curs.execute("drop table cat")
-        print('cat 테이블 삭제')
-    except:
-        pass
-
     try:
     try:
         plus_all_data = ''
         plus_all_data = ''
         start_replace = 0
         start_replace = 0
@@ -147,6 +105,12 @@ try:
     except:
     except:
         curs.execute("create table ok_login(ip text, sub text)")
         curs.execute("create table ok_login(ip text, sub text)")
         print('ok_login 테이블 생성')
         print('ok_login 테이블 생성')
+    
+    try:
+        curs.execute("drop table move")
+        print("move 테이블 삭제")
+    except:
+        pass
 
 
     conn.commit()
     conn.commit()
 except:
 except:
@@ -265,11 +229,6 @@ def setup():
         except:
         except:
             pass
             pass
 
 
-        try:
-            curs.execute("create table move(origin text, new text, date text, who text, send text)")
-        except:
-            pass
-
         try:
         try:
             curs.execute("create table alarm(name text, data text, date text)")
             curs.execute("create table alarm(name text, data text, date text)")
         except:
         except:
@@ -704,20 +663,16 @@ def admin_list():
     )))
     )))
         
         
 @route('/record/<name:path>')
 @route('/record/<name:path>')
-@route('/record/<name:path>/<num:int>')
+@route('/record/<name:path>/<num:int>/<what:path>')
 @route('/recent_changes')
 @route('/recent_changes')
-def recent_changes(name = None, num = 1):
+@route('/recent_changes/<what:path>')
+def recent_changes(name = None, num = 1, what = 'all'):
     ydmin = admin_check(conn, 1, None)
     ydmin = admin_check(conn, 1, None)
     zdmin = admin_check(conn, 6, None)
     zdmin = admin_check(conn, 6, None)
     ban = ''
     ban = ''
     send = '<br>'
     send = '<br>'
-    div =  '<table style="width: 100%; text-align: center;"> \
-                <tbody> \
-                    <tr> \
-                        <td style="width: 33.3%;">문서명</td> \
-                        <td style="width: 33.3%;">편집자</td> \
-                        <td style="width: 33.3%;">시간</td> \
-                    </tr>'
+    div = '<table style="width: 100%; text-align: center;"><tbody><tr>'
+    div += '<td style="width: 33.3%;">문서명</td><td style="width: 33.3%;">편집자</td><td style="width: 33.3%;">시간</td></tr>'
     
     
     if(name):
     if(name):
         if(num * 50 > 0):
         if(num * 50 > 0):
@@ -725,11 +680,42 @@ def recent_changes(name = None, num = 1):
         else:
         else:
             sql_num = 0            
             sql_num = 0            
 
 
-        div = '<a href="/topic_record/' + url_pas(name) + '">(토론 기록)</a><br><br>' + div
+        if(what == 'all'):
+            div = '<a href="/topic_record/' + url_pas(name) + '">(토론 기록)</a><br><br>' + 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
+        
+            curs.execute("select id, title, date, ip, send, leng from history where ip = ? order by date desc limit ?, '50'", [name, str(sql_num)])
+        else:
+            if(what == 'delete'):
+                sql = '%(삭제)'
+            elif(what == 'move'):
+                sql = '%이동)'
+            elif(what == 'revert'):
+                sql = '%판)'
+            else:
+                return(redirect('/'))
 
 
-        curs.execute("select id, title, date, ip, send, leng from history where ip = ? order by date desc limit ?, '50'", [name, str(sql_num)])
+            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:
     else:
-        curs.execute("select id, title, date, ip, send, leng from history where not date = 'Dump' order by date desc limit 50")
+        if(what == 'all'):
+            div = '<a href="/recent_changes/revert">(되돌리기)</a><br><br>' + div
+            div = '<a href="/recent_changes/move">(이동)</a> ' + div
+            div = '<a href="/recent_changes/delete">(삭제)</a> ' + div
+
+            curs.execute("select id, title, date, ip, send, leng from history order by date desc limit 50")
+        else:
+            if(what == 'delete'):
+                sql = '%(삭제)'
+            elif(what == 'move'):
+                sql = '%이동)'
+            elif(what == 'revert'):
+                sql = '%판)'
+            else:
+                return(redirect('/'))
+
+            curs.execute("select id, title, date, ip, send, leng from history where send like ? order by date desc limit 50", [sql])
 
 
     for data in curs.fetchall():         
     for data in curs.fetchall():         
         send = '<br>'
         send = '<br>'
@@ -779,18 +765,10 @@ def recent_changes(name = None, num = 1):
             else:
             else:
                 hidden = ''      
                 hidden = ''      
             
             
-        div += '<tr style="' + style + '"> \
-                    <td> \
-                        <a href="/w/' + url_pas(data[1]) + '">' + title + '</a> (<a href="/history/' + url_pas(data[1]) + '">' + data[0] + '판</a>) ' + revert + ' (' + leng + ') \
-                    </td> \
-                    <td>' + ip + ban + hidden + '</td> \
-                    <td>' + data[2] + '</td> \
-                </tr> \
-                <tr> \
-                    <td colspan="3">' + send + '</td> \
-                </tr>'
-    else:
-        div += '</tbody></table>'
+        div += '<tr style="' + style + '"><td><a href="/w/' + url_pas(data[1]) + '">' + title + '</a> (<a href="/history/' + url_pas(data[1]) + '">' + data[0] + '판</a>) ' + revert + ' (' + leng + ')</td>'
+        div += '<td>' + ip + ban + hidden + '</td><td>' + data[2] + '</td></tr><tr><td colspan="3">' + send + '</td></tr>'
+
+    div += '</tbody></table>'
 
 
     if(name):
     if(name):
         curs.execute("select end, why from ban where block = ?", [name])
         curs.execute("select end, why from ban where block = ?", [name])
@@ -803,10 +781,16 @@ def recent_changes(name = None, num = 1):
         title = '편집 기록'
         title = '편집 기록'
         menu = [['other', '기타'], ['user', '사용자'], ['count/' + url_pas(name), '횟수']]
         menu = [['other', '기타'], ['user', '사용자'], ['count/' + url_pas(name), '횟수']]
         div += '<br><a href="/record/' + url_pas(name) + '/' + str(num - 1) + '">(이전)</a> <a href="/record/' + url_pas(name) + '/' + str(num + 1) + '">(이후)</a>'
         div += '<br><a href="/record/' + url_pas(name) + '/' + str(num - 1) + '">(이전)</a> <a href="/record/' + url_pas(name) + '/' + str(num + 1) + '">(이후)</a>'
+
+        if(what != 'all'):
+            menu += [['record/' + url_pas(name), '일반']]
     else:
     else:
         sub = 0
         sub = 0
         menu = 0
         menu = 0
         title = '최근 변경내역'
         title = '최근 변경내역'
+
+        if(what != 'all'):
+            menu = [['recent_changes', '일반']]
             
             
     return(html_minify(template('index', 
     return(html_minify(template('index', 
         imp = [title, wiki_set(conn, 1), custom(conn), other2([sub, 0])],
         imp = [title, wiki_set(conn, 1), custom(conn), other2([sub, 0])],
@@ -1566,6 +1550,7 @@ def preview(name = None, num = None):
 
 
     ip = ip_check()
     ip = ip_check()
     can = acl_check(conn, name)
     can = acl_check(conn, name)
+    captcha = captcha_get(conn)
     
     
     if(can == 1):
     if(can == 1):
         return(re_error(conn, '/ban'))
         return(re_error(conn, '/ban'))
@@ -1585,6 +1570,7 @@ def preview(name = None, num = None):
                     <textarea rows="25" name="content">' + html.escape(request.forms.content) + '</textarea> \
                     <textarea rows="25" name="content">' + html.escape(request.forms.content) + '</textarea> \
                     <textarea style="display: none;" name="otent">' + html.escape(request.forms.otent) + '</textarea><br><br> \
                     <textarea style="display: none;" name="otent">' + html.escape(request.forms.otent) + '</textarea><br><br> \
                     <input placeholder="사유" name="send" type="text"><br><br> \
                     <input placeholder="사유" name="send" type="text"><br><br> \
+                    ' + captcha + ' \
                     <button id="preview" class="btn btn-primary" type="submit">저장</button> \
                     <button id="preview" class="btn btn-primary" type="submit">저장</button> \
                     <button id="preview" class="btn" type="submit" formaction="/preview/' + url_pas(name) + action + '">미리보기</button> \
                     <button id="preview" class="btn" type="submit" formaction="/preview/' + url_pas(name) + action + '">미리보기</button> \
                 </form><br><br>' + enddata,
                 </form><br><br>' + enddata,
@@ -1656,22 +1642,22 @@ def move_data(name = None, num = 1):
 
 
     data = '<ul>'
     data = '<ul>'
     
     
-    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)])
+    curs.execute("select send, date, ip from history where send like ? or send like ? order by date desc limit ?, '50'", ['%<a href="/w/' + url_pas(name) + '">' + name + '</a> 이동)%', '%(<a href="/w/' + url_pas(name) + '">' + name + '</a>%', str(sql_num)])
     for for_data in curs.fetchall():
     for for_data in curs.fetchall():
-        if(for_data[4] == ''):
-            side = '(없음)'
-        else:
-            side = for_data[4]
+        match = re.findall('<a href="\/w\/(?:(?:(?!">).)+)">((?:(?!<\/a>).)+)<\/a>', for_data[0])
+        send = re.sub('\([^\)]+\)$', '', for_data[0])
+        if(re.search('^( *)+$', send)):
+            send = '(없음)'
 
 
-        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 += '<li><a href="/move_data/' + url_pas(match[0]) + '">' + match[0] + '</a> - <a href="/move_data/' + url_pas(match[1]) + '">' + match[1] + '</a>'
+        data += ' / ' + for_data[2] + ' / ' + for_data[1] + ' / ' + send + '</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>'
+    data += '</ul><a href="/move_data/' + url_pas(name) + '/' + str(num - 1) + '">(이전)</a> <a href="/move_data/' + url_pas(name) + '/' + str(num + 1) + '">(이후)</a>'
     
     
     return(html_minify(template('index', 
     return(html_minify(template('index', 
-        imp = [name, wiki_set(conn, 1), custom(conn), other2([' (이동)', 0])],
+        imp = [name, wiki_set(conn, 1), custom(conn), other2([' (이동 기록)', 0])],
         data = data,
         data = data,
-        menu = [['w/' + url_pas(name), '문서']]
+        menu = [['history/' + url_pas(name), '역사']]
     )))        
     )))        
             
             
 @route('/move/<name:path>', method=['POST', 'GET'])
 @route('/move/<name:path>', method=['POST', 'GET'])
@@ -1712,7 +1698,6 @@ def move(name = None):
         for data in curs.fetchall():
         for data in curs.fetchall():
             curs.execute("insert into back (title, link, type) values (?, ?, 'no')", [data[0], data[1]])
             curs.execute("insert into back (title, link, type) values (?, ?, 'no')", [data[0], data[1]])
             
             
-        curs.execute('insert into move (origin, new, date, who, send) values (?, ?, ?, ?, ?)', [name, request.forms.title, today, ip, request.forms.send])
         curs.execute("update history set title = ? where title = ?", [request.forms.title, name])
         curs.execute("update history set title = ? where title = ?", [request.forms.title, name])
         conn.commit()
         conn.commit()
         
         
@@ -1747,6 +1732,7 @@ def other():
                             ' * [[wiki:user_log|가입 기록]]\r\n' + \
                             ' * [[wiki:user_log|가입 기록]]\r\n' + \
                             ' * [[wiki:admin_log|권한 기록]]\r\n' + \
                             ' * [[wiki:admin_log|권한 기록]]\r\n' + \
                             ' * [[wiki:manager/6|편집 기록]]\r\n' + \
                             ' * [[wiki:manager/6|편집 기록]]\r\n' + \
+                            ' * [[wiki:manager/7|토론 기록]]\r\n' + \
                             ' * [[wiki:not_close_topic|열린 토론 목록]]\r\n' + \
                             ' * [[wiki:not_close_topic|열린 토론 목록]]\r\n' + \
                             '== 기타 ==\r\n' + \
                             '== 기타 ==\r\n' + \
                             ' * [[wiki:title_index|모든 문서]]\r\n' + \
                             ' * [[wiki:title_index|모든 문서]]\r\n' + \
@@ -1765,7 +1751,7 @@ def other():
 @route('/manager', method=['POST', 'GET'])
 @route('/manager', method=['POST', 'GET'])
 @route('/manager/<num:int>', method=['POST', 'GET'])
 @route('/manager/<num:int>', method=['POST', 'GET'])
 def manager(num = 1):
 def manager(num = 1):
-    title_list = [['ACL 이동', '문서명', 'acl'], ['검사 이동', 0, 'check'], ['차단 이동', 0, 'ban'], ['권한 이동', 0, 'admin'], ['기록 이동', 0, 'record'], [], ['그룹 생성 이동', '그룹명', 'admin_plus']]
+    title_list = [['ACL', '문서명', 'acl'], ['검사', 0, 'check'], ['차단', 0, 'ban'], ['권한', 0, 'admin'], ['편집 기록', 0, 'record'], ['토론 기록', 0, 'topic_record'], ['그룹 생성', '그룹명', 'admin_plus']]
     if(num == 1):
     if(num == 1):
         return(html_minify(template('index', 
         return(html_minify(template('index', 
             imp = ['관리자 메뉴', wiki_set(conn, 1), custom(conn), other2([0, 0])],
             imp = ['관리자 메뉴', wiki_set(conn, 1), custom(conn), other2([0, 0])],
@@ -1785,12 +1771,12 @@ def manager(num = 1):
                                         ' * 이 메뉴에 없는 기능은 해당 문서의 역사나 토론에서 바로 사용 가능함', 0, 0, 0),
                                         ' * 이 메뉴에 없는 기능은 해당 문서의 역사나 토론에서 바로 사용 가능함', 0, 0, 0),
             menu = [['other', '기타']]
             menu = [['other', '기타']]
         )))
         )))
-    elif(num in range(2, 6) or num == 8):
+    elif(num in range(2, 8)):
         if(request.method == 'POST'):
         if(request.method == 'POST'):
             return(redirect('/' + title_list[(num - 2)][2] + '/' + url_pas(request.forms.name)))
             return(redirect('/' + title_list[(num - 2)][2] + '/' + url_pas(request.forms.name)))
         else:
         else:
             if(title_list[(num - 2)][1] == 0):
             if(title_list[(num - 2)][1] == 0):
-                placeholder = '문서명'
+                placeholder = '사용자명'
             else:
             else:
                 placeholder = title_list[(num - 2)][1]
                 placeholder = title_list[(num - 2)][1]
 
 
@@ -1807,7 +1793,7 @@ def manager(num = 1):
             return(redirect('/check/' + url_pas(request.forms.name) + '/' + url_pas(request.forms.name2)))
             return(redirect('/check/' + url_pas(request.forms.name) + '/' + url_pas(request.forms.name2)))
         else:
         else:
             return(html_minify(template('index', 
             return(html_minify(template('index', 
-                imp = ['검사 이동', wiki_set(conn, 1), custom(conn), other2([0, 0])],
+                imp = ['검사', wiki_set(conn, 1), custom(conn), other2([0, 0])],
                 data = '<form method="post"> \
                 data = '<form method="post"> \
                             <input placeholder="사용자명" name="name" type="text"><br><br> \
                             <input placeholder="사용자명" name="name" type="text"><br><br> \
                             <input placeholder="비교 대상" name="name2" type="text"><br><br> \
                             <input placeholder="비교 대상" name="name2" type="text"><br><br> \
@@ -2571,10 +2557,10 @@ def user_ban(name = None):
             else:
             else:
                 plus = ''
                 plus = ''
             
             
-            data = '<select name="year">' + year + '</select> 년'
-            data += '<select name="month">' + month + '</select> 월'
+            data = '<select name="year">' + year + '</select> 년 '
+            data += '<select name="month">' + month + '</select> 월 '
             data += '<select name="day">' + day + '</select> 일 <br><br>'
             data += '<select name="day">' + day + '</select> 일 <br><br>'
-            data += '<select name="hour">' + hour + '</select> 시'
+            data += '<select name="hour">' + hour + '</select> 시 '
             data += '<select name="minu">' + minu + '</select> 분 까지<br><br>'
             data += '<select name="minu">' + minu + '</select> 분 까지<br><br>'
             data += '<input placeholder="사유" class="form-control" name="why"><br>' + plus
             data += '<input placeholder="사유" class="form-control" name="why"><br>' + plus
 
 
@@ -3132,7 +3118,7 @@ def user_info():
                                                         ' * [[wiki:view_log|지나온 문서]]\r\n' + \
                                                         ' * [[wiki:view_log|지나온 문서]]\r\n' + \
                                                         ' * [[wiki:record/' + raw_ip + '|편집 기록]]\r\n' + \
                                                         ' * [[wiki:record/' + raw_ip + '|편집 기록]]\r\n' + \
                                                         ' * [[wiki:topic_record/' + raw_ip + '|토론 기록]]\r\n' + \
                                                         ' * [[wiki:topic_record/' + raw_ip + '|토론 기록]]\r\n' + \
-                                                        ' * [[wiki:count|편집 횟수]]\r\n', 0, 0, 0),
+                                                        ' * [[wiki:count|활동 횟수]]\r\n', 0, 0, 0),
         menu = 0
         menu = 0
     )))
     )))
 
 
@@ -3223,7 +3209,7 @@ def count_edit(name = None):
 
 
     return(html_minify(template('index', 
     return(html_minify(template('index', 
         imp = ['활동 횟수', wiki_set(conn, 1), custom(conn), other2([0, 0])],
         imp = ['활동 횟수', wiki_set(conn, 1), custom(conn), other2([0, 0])],
-        data = namumark(conn, "", "||<-2><:> " + that + " ||\r\n||<:> 편집 횟수 ||<:> " + str(data) + "||\r\n||<:> 토론 횟수 ||<:> " + str(t_data) + "||", 0, 0, 0),
+        data = namumark(conn, "", "[목차(없음)]\r\n== " + that + " ==\r\n||<:> 편집 횟수 ||<:> " + str(data) + "||\r\n||<:> 토론 횟수 ||<:> " + str(t_data) + "||", 0, 0, 0),
         menu = [['user', '사용자'], ['record/' + url_pas(that), '편집 기록'], ['topic_record/' + url_pas(that), '토론 기록']]
         menu = [['user', '사용자'], ['record/' + url_pas(that), '편집 기록'], ['topic_record/' + url_pas(that), '토론 기록']]
     )))
     )))
         
         

+ 27 - 34
func.py

@@ -12,6 +12,7 @@ import os
 
 
 from set_mark.macro import get_time
 from set_mark.macro import get_time
 from set_mark.macro import ip_check
 from set_mark.macro import ip_check
+from set_mark.mark import *
 from set_mark.link import url_pas
 from set_mark.link import url_pas
 from set_mark.link import sha224
 from set_mark.link import sha224
     
     
@@ -28,7 +29,7 @@ def captcha_get(conn):
     curs = conn.cursor()
     curs = conn.cursor()
 
 
     data = ''
     data = ''
-    if(re.search('\.|:', ip_check()) and session.get('Awaken') != 1):
+    if(re.search('\.|:', ip_check()) and session.get('Awaken') and session.get('Awaken') != 1):
         curs.execute('select data from other where name = "recaptcha"')
         curs.execute('select data from other where name = "recaptcha"')
         recaptcha = curs.fetchall()
         recaptcha = curs.fetchall()
         if(recaptcha and recaptcha[0][0] != ''):
         if(recaptcha and recaptcha[0][0] != ''):
@@ -39,7 +40,7 @@ def captcha_get(conn):
 def captcha_post(conn, num = 1):
 def captcha_post(conn, num = 1):
     session = request.environ.get('beaker.session')
     session = request.environ.get('beaker.session')
     if(num == 1):
     if(num == 1):
-        if(re.search('\.|:', ip_check()) and session.get('Awaken') != 1 and captcha_get(conn) != ''):
+        if(re.search('\.|:', ip_check()) and session.get('Awaken') and session.get('Awaken') != 1 and captcha_get(conn) != ''):
             return(1)
             return(1)
         else:
         else:
             return(0)
             return(0)
@@ -360,7 +361,7 @@ def re_error(conn, data):
     curs = conn.cursor()
     curs = conn.cursor()
     if(data == '/ban'):
     if(data == '/ban'):
         ip = ip_check()
         ip = ip_check()
-        end = '권한이 맞지 않는 상태 입니다.'
+        end = '|| 사유 || 권한이 맞지 않는 상태 입니다. ||'
         if(ban_check(conn) == 1):
         if(ban_check(conn) == 1):
             curs.execute("select end, why from ban where block = ?", [ip])
             curs.execute("select end, why from ban where block = ?", [ip])
             d = curs.fetchall()
             d = curs.fetchall()
@@ -369,17 +370,12 @@ def re_error(conn, data):
                 if(m):
                 if(m):
                     curs.execute("select end, why from ban where block = ? and band = 'O'", [m.groups()[0]])
                     curs.execute("select end, why from ban where block = ? and band = 'O'", [m.groups()[0]])
                     d = curs.fetchall()
                     d = curs.fetchall()
-
             if(d):
             if(d):
+                end = '|| 상태 ||'
                 if(d[0][0]):
                 if(d[0][0]):
-                    end = d[0][0] + ' 까지 차단 상태 입니다. / 사유 : ' + d[0][1]                
-
-                    now = re.sub(':', '', get_time())
-                    now = re.sub('\-', '', now)
-                    now = int(re.sub(' ', '', now))
-                    
-                    day = re.sub('\-', '', d[0][0])    
-                    
+                    now = int(re.sub('(:|-| )', '', get_time()))
+                    day = re.sub('\-', '', d[0][0])              
+                              
                     if(re.search(':', day)):
                     if(re.search(':', day)):
                         day = re.sub('( |:)', '', day)
                         day = re.sub('( |:)', '', day)
                     else:
                     else:
@@ -389,20 +385,22 @@ def re_error(conn, data):
                         curs.execute("delete from ban where block = ?", [ip])
                         curs.execute("delete from ban where block = ?", [ip])
                         conn.commit()
                         conn.commit()
                         
                         
-                        end = '차단이 풀렸습니다. 다시 시도 해 보세요.'
+                        end += '차단이 풀렸습니다. 다시 시도 해 보세요.'
+                    else:
+                        end += d[0][0] + ' 까지 차단 상태 입니다.'
                 else:
                 else:
-                    end = '영구 차단 상태 입니다. / 사유 : ' + d[0][1]
-            
+                    end += '영구 차단 상태 입니다.'
+                
+                end += '||'
+
+                if(d[0][1] != ''):
+                    end += '\r\n|| 사유 || ' + d[0][1] + ' ||'
 
 
-        return(
-            html_minify(
-                template('index', 
-                    imp = ['권한 오류', wiki_set(conn, 1), custom(conn), other2([0, 0])],
-                    data = end,
-                    menu = 0
-                )
-            )
-        )
+        return(html_minify(template('index', 
+            imp = ['권한 오류', wiki_set(conn, 1), custom(conn), other2([0, 0])],
+            data = namumark(conn, "", "[목차(없음)]\r\n== 권한 상태 ==\r\n" + end, 0, 0, 0),
+            menu = 0
+        )))
 
 
     d = re.search('\/error\/([0-9]+)', data)
     d = re.search('\/error\/([0-9]+)', data)
     if(d):
     if(d):
@@ -469,16 +467,11 @@ def re_error(conn, data):
             data = '재 확인이랑 비밀번호가 다릅니다.'
             data = '재 확인이랑 비밀번호가 다릅니다.'
 
 
         if(title):
         if(title):
-            return(
-                html_minify(
-                    template(
-                        'index', 
-                        imp = [title, wiki_set(conn, 1), custom(conn), other2([0, 0])],
-                        data = data,
-                        menu = 0
-                    )
-                )
-            )
+            return(html_minify(template('index', 
+                imp = [title, wiki_set(conn, 1), custom(conn), other2([0, 0])],
+                data = namumark(conn, "", "[목차(없음)]\r\n== 오류 발생 ==\r\n" + data, 0, 0, 0),
+                menu = 0
+            )))
         else:
         else:
             return(redirect('/'))
             return(redirect('/'))
     else:
     else:

+ 1 - 1
version.md

@@ -146,7 +146,7 @@
 
 
 ----
 ----
 ## 기타
 ## 기타
- * 현재 버전 - v2.4.6
+ * 현재 버전 - v2.4.7
 
 
 ----
 ----
 ## 개발 이념
 ## 개발 이념

+ 10 - 13
views/acme/css/bootstrap-reset.css

@@ -336,10 +336,6 @@ div.scroll-buttons a.scroll-button {
     box-sizing: border-box;
     box-sizing: border-box;
 }
 }
 
 
-blockquote {
-    margin: 10px 0 10px;
-}
-
 img {
 img {
     max-width: 100%;
     max-width: 100%;
     height: auto;
     height: auto;
@@ -557,16 +553,17 @@ iframe {
 }
 }
 
 
 blockquote {
 blockquote {
-    padding:1em calc(2em + 25px) 1em 1em;
-    margin:1em 0em 0em;
-    background:#eeeeee;
-    display:table;
-    border:2px dashed #ccc;
-    border-left:5px solid #2C3E50;
+    padding: 1em calc(2em + 25px) 1em 1em;
+    margin: 1em 0em 0em;
+    background: #eeeeee;
+    display: block;
+    border: 2px dashed #ccc;
+    border-left: 5px solid #2C3E50;
     background-image: url('/views/acme/img/quote.png');
     background-image: url('/views/acme/img/quote.png');
-    background-position:calc(100% - 10px) 10px;
-    background-repeat:no-repeat;
-    background-size:25px;
+    background-position: calc(100% - 10px) 10px;
+    background-repeat: no-repeat;
+    background-size: 25px;
+    font-size: 14px;
 }
 }
 
 
 img {
 img {

+ 8 - 8
views/acme/index.tpl

@@ -122,10 +122,10 @@
                                 % end
                                 % end
                             </h1>
                             </h1>
                         </div>
                         </div>
-                        % if(menu != 0):
-                            <div class="col-lg-8 col-sm-8">
-                                <ol class="breadcrumb pull-right">   
-                                    <li style="margin: 0;">
+                        <div class="col-lg-8 col-sm-8">
+                            <ol class="breadcrumb pull-right">   
+                                <li style="margin: 0;">
+                                    % if(menu != 0):
                                         % i = 1
                                         % i = 1
                                         % for sub_d in menu:
                                         % for sub_d in menu:
                                             % if(sub_d[1] == 1):
                                             % if(sub_d[1] == 1):
@@ -143,10 +143,10 @@
                                             % end
                                             % end
                                             % i += 1
                                             % i += 1
                                         % end
                                         % end
-                                    </li>
-                                </ol>
-                            </div>
-                        % end
+                                        % end
+                                </li>
+                            </ol>
+                        </div>
                     </div>
                     </div>
                 </div>
                 </div>
             </div>
             </div>